@aztec/stdlib 0.0.1-commit.18ccd8f0 → 0.0.1-commit.1a421b1a1

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 (485) hide show
  1. package/dest/abi/decoder.d.ts +2 -2
  2. package/dest/abi/decoder.d.ts.map +1 -1
  3. package/dest/abi/decoder.js +7 -5
  4. package/dest/abi/encoder.d.ts +1 -1
  5. package/dest/abi/encoder.d.ts.map +1 -1
  6. package/dest/abi/encoder.js +37 -6
  7. package/dest/abi/event_metadata_definition.d.ts +3 -1
  8. package/dest/abi/event_metadata_definition.d.ts.map +1 -1
  9. package/dest/abi/event_metadata_definition.js +1 -1
  10. package/dest/abi/function_call.d.ts +39 -9
  11. package/dest/abi/function_call.d.ts.map +1 -1
  12. package/dest/abi/function_call.js +20 -3
  13. package/dest/abi/utils.d.ts +14 -1
  14. package/dest/abi/utils.d.ts.map +1 -1
  15. package/dest/abi/utils.js +15 -0
  16. package/dest/auth_witness/auth_witness.js +3 -3
  17. package/dest/avm/avm.d.ts +300 -300
  18. package/dest/avm/avm_proving_request.d.ts +166 -166
  19. package/dest/avm/revert_code.d.ts +16 -1
  20. package/dest/avm/revert_code.d.ts.map +1 -1
  21. package/dest/avm/revert_code.js +15 -5
  22. package/dest/block/block_data.d.ts +52 -0
  23. package/dest/block/block_data.d.ts.map +1 -0
  24. package/dest/block/block_data.js +12 -0
  25. package/dest/block/block_hash.d.ts +14 -17
  26. package/dest/block/block_hash.d.ts.map +1 -1
  27. package/dest/block/block_hash.js +21 -34
  28. package/dest/block/block_parameter.d.ts +2 -2
  29. package/dest/block/block_parameter.d.ts.map +1 -1
  30. package/dest/block/in_block.d.ts +5 -5
  31. package/dest/block/in_block.js +2 -2
  32. package/dest/block/index.d.ts +2 -1
  33. package/dest/block/index.d.ts.map +1 -1
  34. package/dest/block/index.js +1 -0
  35. package/dest/block/l2_block.d.ts +11 -2
  36. package/dest/block/l2_block.d.ts.map +1 -1
  37. package/dest/block/l2_block.js +14 -5
  38. package/dest/block/l2_block_source.d.ts +37 -11
  39. package/dest/block/l2_block_source.d.ts.map +1 -1
  40. package/dest/block/l2_block_stream/l2_block_stream.d.ts +1 -1
  41. package/dest/block/l2_block_stream/l2_block_stream.d.ts.map +1 -1
  42. package/dest/block/l2_block_stream/l2_block_stream.js +10 -0
  43. package/dest/checkpoint/checkpoint.d.ts +22 -7
  44. package/dest/checkpoint/checkpoint.d.ts.map +1 -1
  45. package/dest/checkpoint/checkpoint.js +32 -16
  46. package/dest/checkpoint/checkpoint_data.d.ts +120 -0
  47. package/dest/checkpoint/checkpoint_data.d.ts.map +1 -0
  48. package/dest/checkpoint/checkpoint_data.js +26 -0
  49. package/dest/checkpoint/index.d.ts +3 -1
  50. package/dest/checkpoint/index.d.ts.map +1 -1
  51. package/dest/checkpoint/index.js +2 -0
  52. package/dest/checkpoint/published_checkpoint.d.ts +17 -2
  53. package/dest/checkpoint/published_checkpoint.d.ts.map +1 -1
  54. package/dest/checkpoint/published_checkpoint.js +1 -2
  55. package/dest/checkpoint/validate.d.ts +36 -0
  56. package/dest/checkpoint/validate.d.ts.map +1 -0
  57. package/dest/checkpoint/validate.js +120 -0
  58. package/dest/config/index.d.ts +2 -1
  59. package/dest/config/index.d.ts.map +1 -1
  60. package/dest/config/index.js +1 -0
  61. package/dest/config/sequencer-config.d.ts +12 -0
  62. package/dest/config/sequencer-config.d.ts.map +1 -0
  63. package/dest/config/sequencer-config.js +24 -0
  64. package/dest/contract/contract_address.js +4 -4
  65. package/dest/contract/contract_class.d.ts +2 -3
  66. package/dest/contract/contract_class.d.ts.map +1 -1
  67. package/dest/contract/contract_class_id.d.ts +1 -1
  68. package/dest/contract/contract_class_id.d.ts.map +1 -1
  69. package/dest/contract/contract_class_id.js +5 -4
  70. package/dest/contract/interfaces/node-info.d.ts +3 -1
  71. package/dest/contract/interfaces/node-info.d.ts.map +1 -1
  72. package/dest/contract/interfaces/node-info.js +2 -1
  73. package/dest/contract/private_function.js +2 -2
  74. package/dest/database-version/database_version.d.ts +58 -0
  75. package/dest/database-version/database_version.d.ts.map +1 -0
  76. package/dest/database-version/database_version.js +69 -0
  77. package/dest/database-version/version_manager.d.ts +2 -50
  78. package/dest/database-version/version_manager.d.ts.map +1 -1
  79. package/dest/database-version/version_manager.js +1 -66
  80. package/dest/epoch-helpers/index.d.ts +9 -1
  81. package/dest/epoch-helpers/index.d.ts.map +1 -1
  82. package/dest/epoch-helpers/index.js +6 -2
  83. package/dest/file-store/local.d.ts +3 -3
  84. package/dest/file-store/local.d.ts.map +1 -1
  85. package/dest/file-store/local.js +13 -4
  86. package/dest/file-store/s3.d.ts +1 -1
  87. package/dest/file-store/s3.d.ts.map +1 -1
  88. package/dest/file-store/s3.js +11 -3
  89. package/dest/gas/gas_fees.d.ts +1 -1
  90. package/dest/gas/gas_fees.d.ts.map +1 -1
  91. package/dest/gas/gas_fees.js +4 -1
  92. package/dest/ha-signing/config.d.ts +136 -0
  93. package/dest/ha-signing/config.d.ts.map +1 -0
  94. package/dest/ha-signing/config.js +97 -0
  95. package/dest/ha-signing/index.d.ts +4 -0
  96. package/dest/ha-signing/index.d.ts.map +1 -0
  97. package/dest/ha-signing/index.js +3 -0
  98. package/dest/ha-signing/local_config.d.ts +63 -0
  99. package/dest/ha-signing/local_config.d.ts.map +1 -0
  100. package/dest/ha-signing/local_config.js +24 -0
  101. package/dest/ha-signing/types.d.ts +85 -0
  102. package/dest/ha-signing/types.d.ts.map +1 -0
  103. package/dest/ha-signing/types.js +32 -0
  104. package/dest/hash/hash.d.ts +2 -1
  105. package/dest/hash/hash.d.ts.map +1 -1
  106. package/dest/hash/hash.js +16 -10
  107. package/dest/hash/map_slot.js +2 -2
  108. package/dest/interfaces/allowed_element.d.ts +26 -20
  109. package/dest/interfaces/allowed_element.d.ts.map +1 -1
  110. package/dest/interfaces/allowed_element.js +8 -8
  111. package/dest/interfaces/archiver.d.ts +1 -1
  112. package/dest/interfaces/archiver.d.ts.map +1 -1
  113. package/dest/interfaces/archiver.js +12 -5
  114. package/dest/interfaces/aztec-node-admin.d.ts +118 -32
  115. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  116. package/dest/interfaces/aztec-node-admin.js +12 -4
  117. package/dest/interfaces/aztec-node.d.ts +40 -56
  118. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  119. package/dest/interfaces/aztec-node.js +6 -9
  120. package/dest/interfaces/block-builder.d.ts +16 -8
  121. package/dest/interfaces/block-builder.d.ts.map +1 -1
  122. package/dest/interfaces/block-builder.js +14 -2
  123. package/dest/interfaces/configs.d.ts +72 -32
  124. package/dest/interfaces/configs.d.ts.map +1 -1
  125. package/dest/interfaces/configs.js +9 -3
  126. package/dest/interfaces/get_logs_response.d.ts +14 -7
  127. package/dest/interfaces/get_logs_response.d.ts.map +1 -1
  128. package/dest/interfaces/merkle_tree_operations.d.ts +2 -2
  129. package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
  130. package/dest/interfaces/p2p.d.ts +4 -9
  131. package/dest/interfaces/p2p.d.ts.map +1 -1
  132. package/dest/interfaces/prover-broker.d.ts +16 -1
  133. package/dest/interfaces/prover-broker.d.ts.map +1 -1
  134. package/dest/interfaces/prover-broker.js +4 -1
  135. package/dest/interfaces/prover-client.d.ts +11 -1
  136. package/dest/interfaces/prover-client.d.ts.map +1 -1
  137. package/dest/interfaces/prover-client.js +12 -1
  138. package/dest/interfaces/proving-job.d.ts +202 -202
  139. package/dest/interfaces/slasher.d.ts +9 -1
  140. package/dest/interfaces/slasher.d.ts.map +1 -1
  141. package/dest/interfaces/slasher.js +2 -0
  142. package/dest/interfaces/validator.d.ts +148 -40
  143. package/dest/interfaces/validator.d.ts.map +1 -1
  144. package/dest/interfaces/validator.js +11 -4
  145. package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts +3 -3
  146. package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts.map +1 -1
  147. package/dest/kernel/hints/build_note_hash_read_request_hints.js +13 -10
  148. package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts +3 -3
  149. package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts.map +1 -1
  150. package/dest/kernel/hints/build_nullifier_read_request_hints.js +13 -10
  151. package/dest/kernel/hints/build_transient_data_hints.d.ts +5 -2
  152. package/dest/kernel/hints/build_transient_data_hints.d.ts.map +1 -1
  153. package/dest/kernel/hints/build_transient_data_hints.js +9 -3
  154. package/dest/kernel/hints/index.d.ts +2 -2
  155. package/dest/kernel/hints/index.js +2 -2
  156. package/dest/kernel/hints/key_validation_request_and_separator.d.ts +24 -0
  157. package/dest/kernel/hints/key_validation_request_and_separator.d.ts.map +1 -0
  158. package/dest/kernel/hints/{key_validation_request_and_generator.js → key_validation_request_and_separator.js} +12 -15
  159. package/dest/kernel/hints/{scoped_key_validation_request_and_generator.d.ts → scoped_key_validation_request_and_separator.d.ts} +8 -8
  160. package/dest/kernel/hints/{scoped_key_validation_request_and_generator.d.ts.map → scoped_key_validation_request_and_separator.d.ts.map} +1 -1
  161. package/dest/kernel/hints/{scoped_key_validation_request_and_generator.js → scoped_key_validation_request_and_separator.js} +6 -6
  162. package/dest/kernel/private_circuit_public_inputs.d.ts +9 -9
  163. package/dest/kernel/private_circuit_public_inputs.d.ts.map +1 -1
  164. package/dest/kernel/private_circuit_public_inputs.js +16 -16
  165. package/dest/kernel/private_kernel_circuit_public_inputs.d.ts +3 -3
  166. package/dest/kernel/private_kernel_circuit_public_inputs.d.ts.map +1 -1
  167. package/dest/kernel/private_kernel_circuit_public_inputs.js +4 -4
  168. package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts +3 -3
  169. package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts.map +1 -1
  170. package/dest/kernel/private_kernel_tail_circuit_private_inputs.js +4 -4
  171. package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts +4 -3
  172. package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts.map +1 -1
  173. package/dest/kernel/private_kernel_tail_circuit_public_inputs.js +11 -7
  174. package/dest/kernel/private_to_public_kernel_circuit_public_inputs.d.ts +3 -3
  175. package/dest/kernel/private_to_public_kernel_circuit_public_inputs.d.ts.map +1 -1
  176. package/dest/kernel/private_to_public_kernel_circuit_public_inputs.js +7 -7
  177. package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.d.ts +3 -3
  178. package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.d.ts.map +1 -1
  179. package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.js +7 -7
  180. package/dest/kernel/private_validation_requests.d.ts +3 -3
  181. package/dest/kernel/private_validation_requests.js +9 -9
  182. package/dest/keys/derivation.d.ts +3 -3
  183. package/dest/keys/derivation.js +15 -15
  184. package/dest/keys/key_types.d.ts +3 -3
  185. package/dest/keys/key_types.d.ts.map +1 -1
  186. package/dest/keys/public_keys.js +2 -2
  187. package/dest/keys/utils.d.ts +1 -1
  188. package/dest/keys/utils.d.ts.map +1 -1
  189. package/dest/keys/utils.js +8 -4
  190. package/dest/kv-store/config.d.ts +17 -0
  191. package/dest/kv-store/config.d.ts.map +1 -0
  192. package/dest/kv-store/config.js +26 -0
  193. package/dest/kv-store/index.d.ts +2 -0
  194. package/dest/kv-store/index.d.ts.map +1 -0
  195. package/dest/kv-store/index.js +1 -0
  196. package/dest/l1-contracts/slash_factory.d.ts +1 -1
  197. package/dest/l1-contracts/slash_factory.d.ts.map +1 -1
  198. package/dest/l1-contracts/slash_factory.js +1 -0
  199. package/dest/logs/debug_log_store.d.ts +30 -0
  200. package/dest/logs/debug_log_store.d.ts.map +1 -0
  201. package/dest/logs/debug_log_store.js +30 -0
  202. package/dest/logs/extended_directional_app_tagging_secret.d.ts +47 -0
  203. package/dest/logs/extended_directional_app_tagging_secret.d.ts.map +1 -0
  204. package/dest/logs/{directional_app_tagging_secret.js → extended_directional_app_tagging_secret.js} +23 -15
  205. package/dest/logs/extended_public_log.d.ts +12 -6
  206. package/dest/logs/extended_public_log.d.ts.map +1 -1
  207. package/dest/logs/index.d.ts +3 -2
  208. package/dest/logs/index.d.ts.map +1 -1
  209. package/dest/logs/index.js +2 -1
  210. package/dest/logs/log_id.d.ts +13 -10
  211. package/dest/logs/log_id.d.ts.map +1 -1
  212. package/dest/logs/log_id.js +17 -14
  213. package/dest/logs/pre_tag.d.ts +16 -11
  214. package/dest/logs/pre_tag.d.ts.map +1 -1
  215. package/dest/logs/pre_tag.js +2 -2
  216. package/dest/logs/private_log.d.ts +2 -2
  217. package/dest/logs/private_log.d.ts.map +1 -1
  218. package/dest/logs/public_log.d.ts +4 -3
  219. package/dest/logs/public_log.d.ts.map +1 -1
  220. package/dest/logs/public_log.js +2 -1
  221. package/dest/logs/siloed_tag.d.ts +5 -3
  222. package/dest/logs/siloed_tag.d.ts.map +1 -1
  223. package/dest/logs/siloed_tag.js +8 -7
  224. package/dest/logs/tag.js +1 -1
  225. package/dest/messaging/l2_to_l1_membership.d.ts +2 -2
  226. package/dest/messaging/l2_to_l1_membership.js +3 -3
  227. package/dest/note/index.d.ts +1 -2
  228. package/dest/note/index.d.ts.map +1 -1
  229. package/dest/note/index.js +0 -1
  230. package/dest/p2p/attestation_utils.d.ts +11 -1
  231. package/dest/p2p/attestation_utils.d.ts.map +1 -1
  232. package/dest/p2p/attestation_utils.js +45 -0
  233. package/dest/p2p/block_proposal.d.ts +2 -2
  234. package/dest/p2p/block_proposal.d.ts.map +1 -1
  235. package/dest/p2p/block_proposal.js +2 -4
  236. package/dest/p2p/checkpoint_attestation.d.ts +2 -1
  237. package/dest/p2p/checkpoint_attestation.d.ts.map +1 -1
  238. package/dest/p2p/checkpoint_attestation.js +1 -1
  239. package/dest/p2p/checkpoint_proposal.d.ts +18 -11
  240. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  241. package/dest/p2p/checkpoint_proposal.js +30 -28
  242. package/dest/p2p/client_type.d.ts +2 -5
  243. package/dest/p2p/client_type.d.ts.map +1 -1
  244. package/dest/p2p/client_type.js +0 -7
  245. package/dest/p2p/consensus_payload.d.ts +12 -3
  246. package/dest/p2p/consensus_payload.d.ts.map +1 -1
  247. package/dest/p2p/consensus_payload.js +22 -15
  248. package/dest/p2p/constants.d.ts +3 -1
  249. package/dest/p2p/constants.d.ts.map +1 -1
  250. package/dest/p2p/constants.js +1 -0
  251. package/dest/p2p/index.d.ts +1 -2
  252. package/dest/p2p/index.d.ts.map +1 -1
  253. package/dest/p2p/index.js +0 -1
  254. package/dest/p2p/peer_error.d.ts +3 -1
  255. package/dest/p2p/peer_error.d.ts.map +1 -1
  256. package/dest/p2p/peer_error.js +5 -0
  257. package/dest/p2p/topic_type.d.ts +3 -4
  258. package/dest/p2p/topic_type.d.ts.map +1 -1
  259. package/dest/p2p/topic_type.js +7 -24
  260. package/dest/rollup/checkpoint_header.d.ts +2 -2
  261. package/dest/rollup/checkpoint_header.js +2 -2
  262. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +6 -6
  263. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -1
  264. package/dest/rollup/checkpoint_rollup_public_inputs.js +2 -2
  265. package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts +2 -2
  266. package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts.map +1 -1
  267. package/dest/rollup/root_rollup_public_inputs.d.ts +6 -6
  268. package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -1
  269. package/dest/rollup/root_rollup_public_inputs.js +3 -3
  270. package/dest/slashing/empire.d.ts +1 -1
  271. package/dest/slashing/empire.d.ts.map +1 -1
  272. package/dest/slashing/empire.js +2 -0
  273. package/dest/slashing/helpers.d.ts +2 -2
  274. package/dest/slashing/helpers.d.ts.map +1 -1
  275. package/dest/slashing/helpers.js +6 -0
  276. package/dest/slashing/tally.d.ts +8 -2
  277. package/dest/slashing/tally.d.ts.map +1 -1
  278. package/dest/slashing/tally.js +35 -3
  279. package/dest/slashing/types.d.ts +7 -3
  280. package/dest/slashing/types.d.ts.map +1 -1
  281. package/dest/slashing/types.js +13 -1
  282. package/dest/stats/stats.d.ts +1 -3
  283. package/dest/stats/stats.d.ts.map +1 -1
  284. package/dest/tests/factories.d.ts +3 -1
  285. package/dest/tests/factories.d.ts.map +1 -1
  286. package/dest/tests/factories.js +21 -13
  287. package/dest/tests/mocks.d.ts +8 -3
  288. package/dest/tests/mocks.d.ts.map +1 -1
  289. package/dest/tests/mocks.js +31 -21
  290. package/dest/timetable/index.d.ts +37 -0
  291. package/dest/timetable/index.d.ts.map +1 -0
  292. package/dest/timetable/index.js +39 -0
  293. package/dest/trees/public_data_leaf.d.ts +2 -1
  294. package/dest/trees/public_data_leaf.d.ts.map +1 -1
  295. package/dest/trees/public_data_leaf.js +7 -6
  296. package/dest/tx/block_header.d.ts +3 -1
  297. package/dest/tx/block_header.d.ts.map +1 -1
  298. package/dest/tx/block_header.js +7 -3
  299. package/dest/tx/global_variables.d.ts +4 -4
  300. package/dest/tx/global_variables.d.ts.map +1 -1
  301. package/dest/tx/in_tx.d.ts +2 -2
  302. package/dest/tx/indexed_tx_effect.d.ts +3 -3
  303. package/dest/tx/indexed_tx_effect.d.ts.map +1 -1
  304. package/dest/tx/indexed_tx_effect.js +2 -1
  305. package/dest/tx/profiling.d.ts +4 -4
  306. package/dest/tx/profiling.d.ts.map +1 -1
  307. package/dest/tx/profiling.js +3 -3
  308. package/dest/tx/protocol_contracts.d.ts +1 -1
  309. package/dest/tx/protocol_contracts.d.ts.map +1 -1
  310. package/dest/tx/protocol_contracts.js +2 -2
  311. package/dest/tx/public_simulation_output.d.ts +4 -2
  312. package/dest/tx/public_simulation_output.d.ts.map +1 -1
  313. package/dest/tx/public_simulation_output.js +7 -3
  314. package/dest/tx/simulated_tx.d.ts +5 -2
  315. package/dest/tx/simulated_tx.d.ts.map +1 -1
  316. package/dest/tx/simulated_tx.js +4 -1
  317. package/dest/tx/tx.d.ts +6 -5
  318. package/dest/tx/tx.d.ts.map +1 -1
  319. package/dest/tx/tx.js +18 -6
  320. package/dest/tx/tx_receipt.d.ts +16 -2
  321. package/dest/tx/tx_receipt.d.ts.map +1 -1
  322. package/dest/tx/tx_receipt.js +11 -3
  323. package/dest/tx/tx_request.js +2 -2
  324. package/dest/tx/validator/empty_validator.d.ts +2 -2
  325. package/dest/tx/validator/empty_validator.d.ts.map +1 -1
  326. package/dest/tx/validator/error_texts.d.ts +6 -2
  327. package/dest/tx/validator/error_texts.d.ts.map +1 -1
  328. package/dest/tx/validator/error_texts.js +5 -1
  329. package/dest/tx/validator/tx_validator.d.ts +2 -2
  330. package/dest/tx/validator/tx_validator.d.ts.map +1 -1
  331. package/dest/update-checker/index.d.ts +3 -2
  332. package/dest/update-checker/index.d.ts.map +1 -1
  333. package/dest/update-checker/index.js +2 -1
  334. package/dest/update-checker/package_version.d.ts +3 -0
  335. package/dest/update-checker/package_version.d.ts.map +1 -0
  336. package/dest/update-checker/package_version.js +11 -0
  337. package/dest/update-checker/version_checker.d.ts +25 -0
  338. package/dest/update-checker/version_checker.d.ts.map +1 -0
  339. package/dest/update-checker/version_checker.js +50 -0
  340. package/dest/validators/errors.d.ts +6 -1
  341. package/dest/validators/errors.d.ts.map +1 -1
  342. package/dest/validators/errors.js +7 -0
  343. package/dest/validators/schemas.d.ts +30 -30
  344. package/dest/validators/schemas.d.ts.map +1 -1
  345. package/dest/validators/schemas.js +4 -3
  346. package/dest/validators/types.d.ts +3 -3
  347. package/dest/validators/types.d.ts.map +1 -1
  348. package/package.json +26 -13
  349. package/src/abi/decoder.ts +15 -6
  350. package/src/abi/encoder.ts +49 -6
  351. package/src/abi/event_metadata_definition.ts +2 -0
  352. package/src/abi/function_call.ts +25 -3
  353. package/src/abi/utils.ts +25 -0
  354. package/src/auth_witness/auth_witness.ts +3 -3
  355. package/src/avm/revert_code.ts +15 -0
  356. package/src/block/block_data.ts +26 -0
  357. package/src/block/block_hash.ts +25 -50
  358. package/src/block/in_block.ts +2 -2
  359. package/src/block/index.ts +1 -0
  360. package/src/block/l2_block.ts +16 -4
  361. package/src/block/l2_block_source.ts +40 -10
  362. package/src/block/l2_block_stream/l2_block_stream.ts +21 -0
  363. package/src/checkpoint/checkpoint.ts +43 -16
  364. package/src/checkpoint/checkpoint_data.ts +51 -0
  365. package/src/checkpoint/index.ts +2 -0
  366. package/src/checkpoint/published_checkpoint.ts +3 -1
  367. package/src/checkpoint/validate.ts +230 -0
  368. package/src/config/index.ts +1 -0
  369. package/src/config/sequencer-config.ts +37 -0
  370. package/src/contract/contract_address.ts +4 -4
  371. package/src/contract/contract_class.ts +3 -3
  372. package/src/contract/contract_class_id.ts +5 -4
  373. package/src/contract/interfaces/node-info.ts +3 -0
  374. package/src/contract/private_function.ts +2 -2
  375. package/src/database-version/database_version.ts +87 -0
  376. package/src/database-version/version_manager.ts +1 -77
  377. package/src/epoch-helpers/index.ts +6 -0
  378. package/src/file-store/local.ts +15 -5
  379. package/src/file-store/s3.ts +12 -3
  380. package/src/gas/gas_fees.ts +7 -1
  381. package/src/ha-signing/config.ts +156 -0
  382. package/src/ha-signing/index.ts +27 -0
  383. package/src/ha-signing/local_config.ts +46 -0
  384. package/src/ha-signing/types.ts +112 -0
  385. package/src/hash/hash.ts +14 -10
  386. package/src/hash/map_slot.ts +2 -2
  387. package/src/interfaces/allowed_element.ts +29 -9
  388. package/src/interfaces/archiver.ts +12 -5
  389. package/src/interfaces/aztec-node-admin.ts +26 -2
  390. package/src/interfaces/aztec-node.ts +52 -93
  391. package/src/interfaces/block-builder.ts +34 -8
  392. package/src/interfaces/configs.ts +33 -8
  393. package/src/interfaces/merkle_tree_operations.ts +1 -1
  394. package/src/interfaces/p2p.ts +3 -14
  395. package/src/interfaces/prover-broker.ts +22 -0
  396. package/src/interfaces/prover-client.ts +15 -0
  397. package/src/interfaces/slasher.ts +4 -0
  398. package/src/interfaces/validator.ts +59 -27
  399. package/src/kernel/hints/build_note_hash_read_request_hints.ts +14 -18
  400. package/src/kernel/hints/build_nullifier_read_request_hints.ts +15 -18
  401. package/src/kernel/hints/build_transient_data_hints.ts +17 -2
  402. package/src/kernel/hints/index.ts +2 -2
  403. package/src/kernel/hints/{key_validation_request_and_generator.ts → key_validation_request_and_separator.ts} +12 -15
  404. package/src/kernel/hints/{scoped_key_validation_request_and_generator.ts → scoped_key_validation_request_and_separator.ts} +10 -10
  405. package/src/kernel/private_circuit_public_inputs.ts +14 -14
  406. package/src/kernel/private_kernel_circuit_public_inputs.ts +2 -2
  407. package/src/kernel/private_kernel_tail_circuit_private_inputs.ts +2 -2
  408. package/src/kernel/private_kernel_tail_circuit_public_inputs.ts +14 -5
  409. package/src/kernel/private_to_public_kernel_circuit_public_inputs.ts +5 -5
  410. package/src/kernel/private_to_rollup_kernel_circuit_public_inputs.ts +5 -5
  411. package/src/kernel/private_validation_requests.ts +8 -8
  412. package/src/keys/derivation.ts +15 -15
  413. package/src/keys/key_types.ts +6 -2
  414. package/src/keys/public_keys.ts +2 -2
  415. package/src/keys/utils.ts +8 -4
  416. package/src/kv-store/config.ts +36 -0
  417. package/src/kv-store/index.ts +1 -0
  418. package/src/l1-contracts/slash_factory.ts +1 -0
  419. package/src/logs/debug_log_store.ts +54 -0
  420. package/src/logs/{directional_app_tagging_secret.ts → extended_directional_app_tagging_secret.ts} +24 -16
  421. package/src/logs/index.ts +2 -1
  422. package/src/logs/log_id.ts +17 -13
  423. package/src/logs/pre_tag.ts +5 -5
  424. package/src/logs/public_log.ts +4 -2
  425. package/src/logs/siloed_tag.ts +10 -5
  426. package/src/logs/tag.ts +1 -1
  427. package/src/messaging/l2_to_l1_membership.ts +3 -3
  428. package/src/note/index.ts +0 -1
  429. package/src/p2p/attestation_utils.ts +56 -0
  430. package/src/p2p/block_proposal.ts +1 -3
  431. package/src/p2p/checkpoint_attestation.ts +6 -1
  432. package/src/p2p/checkpoint_proposal.ts +46 -31
  433. package/src/p2p/client_type.ts +0 -6
  434. package/src/p2p/consensus_payload.ts +25 -12
  435. package/src/p2p/constants.ts +3 -0
  436. package/src/p2p/index.ts +0 -1
  437. package/src/p2p/peer_error.ts +7 -0
  438. package/src/p2p/topic_type.ts +8 -15
  439. package/src/rollup/checkpoint_header.ts +2 -2
  440. package/src/rollup/checkpoint_rollup_public_inputs.ts +5 -5
  441. package/src/rollup/root_rollup_public_inputs.ts +7 -7
  442. package/src/slashing/empire.ts +3 -1
  443. package/src/slashing/helpers.ts +8 -0
  444. package/src/slashing/tally.ts +41 -2
  445. package/src/slashing/types.ts +14 -0
  446. package/src/stats/stats.ts +0 -2
  447. package/src/tests/factories.ts +26 -17
  448. package/src/tests/mocks.ts +46 -20
  449. package/src/timetable/index.ts +66 -0
  450. package/src/trees/public_data_leaf.ts +11 -5
  451. package/src/tx/block_header.ts +10 -4
  452. package/src/tx/global_variables.ts +3 -3
  453. package/src/tx/indexed_tx_effect.ts +2 -1
  454. package/src/tx/profiling.ts +5 -5
  455. package/src/tx/protocol_contracts.ts +2 -2
  456. package/src/tx/public_simulation_output.ts +4 -0
  457. package/src/tx/simulated_tx.ts +8 -1
  458. package/src/tx/tx.ts +20 -11
  459. package/src/tx/tx_receipt.ts +11 -1
  460. package/src/tx/tx_request.ts +2 -2
  461. package/src/tx/validator/empty_validator.ts +1 -1
  462. package/src/tx/validator/error_texts.ts +5 -1
  463. package/src/tx/validator/tx_validator.ts +1 -1
  464. package/src/update-checker/index.ts +2 -1
  465. package/src/update-checker/package_version.ts +17 -0
  466. package/src/update-checker/version_checker.ts +65 -0
  467. package/src/validators/errors.ts +9 -0
  468. package/src/validators/schemas.ts +8 -1
  469. package/src/validators/types.ts +5 -4
  470. package/dest/database-version/index.d.ts +0 -2
  471. package/dest/database-version/index.d.ts.map +0 -1
  472. package/dest/database-version/index.js +0 -1
  473. package/dest/kernel/hints/key_validation_request_and_generator.d.ts +0 -30
  474. package/dest/kernel/hints/key_validation_request_and_generator.d.ts.map +0 -1
  475. package/dest/logs/directional_app_tagging_secret.d.ts +0 -40
  476. package/dest/logs/directional_app_tagging_secret.d.ts.map +0 -1
  477. package/dest/note/notes_filter.d.ts +0 -27
  478. package/dest/note/notes_filter.d.ts.map +0 -1
  479. package/dest/note/notes_filter.js +0 -11
  480. package/dest/update-checker/update-checker.d.ts +0 -49
  481. package/dest/update-checker/update-checker.d.ts.map +0 -1
  482. package/dest/update-checker/update-checker.js +0 -130
  483. package/src/database-version/index.ts +0 -1
  484. package/src/note/notes_filter.ts +0 -38
  485. package/src/update-checker/update-checker.ts +0 -166
@@ -0,0 +1,26 @@
1
+ import { CheckpointNumberSchema, IndexWithinCheckpointSchema } from '@aztec/foundation/branded-types';
2
+ import type { CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
3
+ import type { Fr } from '@aztec/foundation/curves/bn254';
4
+ import { schemas } from '@aztec/foundation/schemas';
5
+
6
+ import { z } from 'zod';
7
+
8
+ import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js';
9
+ import { BlockHeader } from '../tx/block_header.js';
10
+
11
+ /** L2Block metadata. Equivalent to L2Block but without block body containing tx data. */
12
+ export type BlockData = {
13
+ header: BlockHeader;
14
+ archive: AppendOnlyTreeSnapshot;
15
+ blockHash: Fr;
16
+ checkpointNumber: CheckpointNumber;
17
+ indexWithinCheckpoint: IndexWithinCheckpoint;
18
+ };
19
+
20
+ export const BlockDataSchema = z.object({
21
+ header: BlockHeader.schema,
22
+ archive: AppendOnlyTreeSnapshot.schema,
23
+ blockHash: schemas.Fr,
24
+ checkpointNumber: CheckpointNumberSchema,
25
+ indexWithinCheckpoint: IndexWithinCheckpointSchema,
26
+ });
@@ -1,70 +1,45 @@
1
- import { Buffer32 } from '@aztec/foundation/buffer';
2
1
  import { Fr } from '@aztec/foundation/curves/bn254';
3
- import { BufferReader } from '@aztec/foundation/serialize';
2
+ import type { ZodFor } from '@aztec/foundation/schemas';
4
3
 
5
- import { schemas } from '../schemas/schemas.js';
4
+ import { inspect } from 'util';
6
5
 
7
- /** Hash of an L2 block. */
8
- export class BlockHash extends Buffer32 {
9
- constructor(
10
- /** The buffer containing the hash. */
11
- hash: Buffer,
12
- ) {
13
- super(hash);
14
- }
6
+ import { hexSchemaFor } from '../schemas/schemas.js';
15
7
 
16
- /**
17
- * Type guard that checks if a value is an BlockHash instance.
18
- * Uses duck typing to handle cases where instanceof fails due to module duplication.
19
- * Checks for Buffer32-like structure with a 32-byte buffer.
20
- */
21
- static isL2BlockHash(value: unknown): value is BlockHash {
22
- if (value instanceof BlockHash) {
23
- return true;
24
- }
25
- // Duck typing fallback: check if it looks like a Buffer32 with a 32-byte buffer
26
- // This helps when instanceof fails due to module duplication
27
- return (
28
- typeof value === 'object' &&
29
- value !== null &&
30
- 'buffer' in value &&
31
- Buffer.isBuffer((value as Buffer32).buffer) &&
32
- (value as Buffer32).buffer.length === 32 &&
33
- 'toBuffer' in value &&
34
- typeof (value as Buffer32).toBuffer === 'function'
35
- );
36
- }
8
+ const BLOCK_HASH_BRAND = Symbol.for('aztec.BlockHash');
37
9
 
38
- static override random() {
39
- return new BlockHash(Fr.random().toBuffer());
40
- }
10
+ /** Hash of an L2 block. */
11
+ export class BlockHash extends Fr {
12
+ readonly [BLOCK_HASH_BRAND] = true as const;
41
13
 
42
- static override fromNumber(num: number): BlockHash {
43
- return new BlockHash(super.fromNumber(num).toBuffer());
14
+ constructor(hash: Fr) {
15
+ super(hash);
44
16
  }
45
17
 
46
- static override fromBuffer(buffer: Buffer | BufferReader) {
47
- const reader = BufferReader.asReader(buffer);
48
- return new BlockHash(reader.readBytes(BlockHash.SIZE));
18
+ override [inspect.custom]() {
19
+ return `BlockHash<${this.toString()}>`;
49
20
  }
50
21
 
51
- static override fromString(str: string): BlockHash {
52
- return new BlockHash(super.fromString(str).toBuffer());
22
+ toFr(): Fr {
23
+ return new Fr(this.toBigInt());
53
24
  }
54
25
 
55
- static get schema() {
56
- return schemas.BufferHex.transform(value => new BlockHash(value));
26
+ /**
27
+ * Type guard that checks if a value is a BlockHash instance.
28
+ * Uses Symbol.for to ensure cross-module compatibility.
29
+ */
30
+ static isBlockHash(value: unknown): value is BlockHash {
31
+ return typeof value === 'object' && value !== null && BLOCK_HASH_BRAND in value;
57
32
  }
58
33
 
59
- static zero() {
60
- return new BlockHash(Buffer32.ZERO.toBuffer());
34
+ static override random() {
35
+ return new BlockHash(Fr.random());
61
36
  }
62
37
 
63
- static override fromField(hash: Fr) {
64
- return new BlockHash(hash.toBuffer());
38
+ static override fromString(str: string): BlockHash {
39
+ return new BlockHash(Fr.fromString(str));
65
40
  }
66
41
 
67
- toField(): Fr {
68
- return Fr.fromBuffer(this.toBuffer());
42
+ static override get schema() {
43
+ return hexSchemaFor(BlockHash) as ZodFor<BlockHash>;
69
44
  }
70
45
  }
@@ -17,7 +17,7 @@ export type DataInBlock<T> = {
17
17
 
18
18
  export function randomInBlock(): InBlock {
19
19
  return {
20
- l2BlockNumber: BlockNumber(Math.floor(Math.random() * 1000)),
20
+ l2BlockNumber: BlockNumber(Math.floor(Math.random() * 1000) + 1),
21
21
  l2BlockHash: BlockHash.random(),
22
22
  };
23
23
  }
@@ -33,7 +33,7 @@ export async function wrapDataInBlock<T>(data: T, block: L2Block): Promise<DataI
33
33
  return {
34
34
  data,
35
35
  l2BlockNumber: block.number,
36
- l2BlockHash: BlockHash.fromField(await block.hash()),
36
+ l2BlockHash: await block.hash(),
37
37
  };
38
38
  }
39
39
 
@@ -1,3 +1,4 @@
1
+ export * from './block_data.js';
1
2
  export * from './l2_block.js';
2
3
  export * from './l2_block_stream/index.js';
3
4
  export * from './in_block.js';
@@ -1,4 +1,5 @@
1
1
  import { type BlockBlobData, encodeBlockBlobData } from '@aztec/blob-lib/encoding';
2
+ import { DA_GAS_PER_FIELD } from '@aztec/constants';
2
3
  import {
3
4
  BlockNumber,
4
5
  CheckpointNumber,
@@ -15,6 +16,7 @@ import { z } from 'zod';
15
16
  import type { PrivateLog } from '../logs/private_log.js';
16
17
  import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js';
17
18
  import { BlockHeader } from '../tx/block_header.js';
19
+ import type { BlockHash } from './block_hash.js';
18
20
  import { Body } from './body.js';
19
21
  import type { L2BlockInfo } from './l2_block_info.js';
20
22
 
@@ -89,9 +91,8 @@ export class L2Block {
89
91
  * Returns the block's hash (hash of block header).
90
92
  * @returns The block's hash.
91
93
  */
92
- public async hash(): Promise<Fr> {
93
- const blockHash = await this.header.hash();
94
- return blockHash.toField();
94
+ public hash(): Promise<BlockHash> {
95
+ return this.header.hash();
95
96
  }
96
97
 
97
98
  /**
@@ -175,7 +176,7 @@ export class L2Block {
175
176
  } & Partial<Parameters<typeof BlockHeader.random>[0]> = {},
176
177
  ): Promise<L2Block> {
177
178
  const archive = new AppendOnlyTreeSnapshot(Fr.random(), blockNumber + 1);
178
- const header = BlockHeader.random({ blockNumber, ...blockHeaderOverrides });
179
+ const header = BlockHeader.random({ ...blockHeaderOverrides, blockNumber });
179
180
  const body = await Body.random({ txsPerBlock, makeTxOptions, ...txOptions });
180
181
  return new L2Block(archive, header, body, checkpointNumber, indexWithinCheckpoint);
181
182
  }
@@ -221,4 +222,15 @@ export class L2Block {
221
222
  timestamp: this.header.globalVariables.timestamp,
222
223
  };
223
224
  }
225
+
226
+ /**
227
+ * Compute how much DA gas this block uses.
228
+ *
229
+ * @remarks This assumes DA gas is computed solely based on the number of blob fields in transactions.
230
+ * This may change in the future, but we cannot access the actual DA gas used in a block since it's not exposed
231
+ * in the L2BlockHeader, so we have to rely on recomputing it.
232
+ */
233
+ computeDAGasUsed(): number {
234
+ return this.body.txEffects.reduce((total, txEffect) => total + txEffect.getNumBlobFields(), 0) * DA_GAS_PER_FIELD;
235
+ }
224
236
  }
@@ -13,6 +13,7 @@ import type { TypedEventEmitter } from '@aztec/foundation/types';
13
13
  import { z } from 'zod';
14
14
 
15
15
  import type { Checkpoint } from '../checkpoint/checkpoint.js';
16
+ import type { CheckpointData } from '../checkpoint/checkpoint_data.js';
16
17
  import type { PublishedCheckpoint } from '../checkpoint/published_checkpoint.js';
17
18
  import type { L1RollupConstants } from '../epoch-helpers/index.js';
18
19
  import { CheckpointHeader } from '../rollup/checkpoint_header.js';
@@ -20,6 +21,8 @@ import type { BlockHeader } from '../tx/block_header.js';
20
21
  import type { IndexedTxEffect } from '../tx/indexed_tx_effect.js';
21
22
  import type { TxHash } from '../tx/tx_hash.js';
22
23
  import type { TxReceipt } from '../tx/tx_receipt.js';
24
+ import type { BlockData } from './block_data.js';
25
+ import type { BlockHash } from './block_hash.js';
23
26
  import type { CheckpointedL2Block } from './checkpointed_l2_block.js';
24
27
  import type { L2Block } from './l2_block.js';
25
28
  import type { ValidateCheckpointNegativeResult, ValidateCheckpointResult } from './validate_block_result.js';
@@ -46,6 +49,12 @@ export interface L2BlockSource {
46
49
  */
47
50
  getBlockNumber(): Promise<BlockNumber>;
48
51
 
52
+ /**
53
+ * Gets the number of the latest L2 checkpoint processed by the block source implementation.
54
+ * @returns The number of the latest L2 checkpoint processed by the block source implementation.
55
+ */
56
+ getCheckpointNumber(): Promise<CheckpointNumber>;
57
+
49
58
  /**
50
59
  * Gets the number of the latest L2 block proven seen by the block source implementation.
51
60
  * @returns The number of the latest L2 block proven seen by the block source implementation.
@@ -59,9 +68,8 @@ export interface L2BlockSource {
59
68
  getCheckpointedL2BlockNumber(): Promise<BlockNumber>;
60
69
 
61
70
  /**
62
- * Computes the finalized block number based on the proven block number.
63
- * A block is considered finalized when it's 2 epochs behind the proven block.
64
- * TODO(#13569): Compute proper finalized block number based on L1 finalized block.
71
+ * Returns the finalized L2 block number. A block is finalized when it was proven
72
+ * in an L1 block that has itself been finalized on Ethereum.
65
73
  * @returns The finalized block number.
66
74
  */
67
75
  getFinalizedL2BlockNumber(): Promise<BlockNumber>;
@@ -97,12 +105,18 @@ export interface L2BlockSource {
97
105
  */
98
106
  getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]>;
99
107
 
108
+ /**
109
+ * Gets lightweight checkpoint metadata for a given epoch, without fetching full block data.
110
+ * @param epochNumber - Epoch for which we want checkpoint data
111
+ */
112
+ getCheckpointsDataForEpoch(epochNumber: EpochNumber): Promise<CheckpointData[]>;
113
+
100
114
  /**
101
115
  * Gets a block header by its hash.
102
116
  * @param blockHash - The block hash to retrieve.
103
117
  * @returns The requested block header (or undefined if not found).
104
118
  */
105
- getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
119
+ getBlockHeaderByHash(blockHash: BlockHash): Promise<BlockHeader | undefined>;
106
120
 
107
121
  /**
108
122
  * Gets a block header by its archive root.
@@ -111,6 +125,20 @@ export interface L2BlockSource {
111
125
  */
112
126
  getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
113
127
 
128
+ /**
129
+ * Gets block metadata (without tx data) by block number.
130
+ * @param number - The block number to retrieve.
131
+ * @returns The requested block data (or undefined if not found).
132
+ */
133
+ getBlockData(number: BlockNumber): Promise<BlockData | undefined>;
134
+
135
+ /**
136
+ * Gets block metadata (without tx data) by archive root.
137
+ * @param archive - The archive root to retrieve.
138
+ * @returns The requested block data (or undefined if not found).
139
+ */
140
+ getBlockDataByArchive(archive: Fr): Promise<BlockData | undefined>;
141
+
114
142
  /**
115
143
  * Gets an L2 block by block number.
116
144
  * @param number - The block number to return.
@@ -123,7 +151,7 @@ export interface L2BlockSource {
123
151
  * @param blockHash - The block hash to retrieve.
124
152
  * @returns The requested L2 block (or undefined if not found).
125
153
  */
126
- getL2BlockByHash(blockHash: Fr): Promise<L2Block | undefined>;
154
+ getL2BlockByHash(blockHash: BlockHash): Promise<L2Block | undefined>;
127
155
 
128
156
  /**
129
157
  * Gets an L2 block by its archive root.
@@ -147,14 +175,16 @@ export interface L2BlockSource {
147
175
  getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
148
176
 
149
177
  /**
150
- * Returns the current L2 slot number based on the currently synced L1 timestamp.
178
+ * Returns the last L2 slot number that has been fully synchronized from L1.
179
+ * An L2 slot is fully synced when all L1 blocks that fall within its time range have been processed.
151
180
  */
152
- getL2SlotNumber(): Promise<SlotNumber | undefined>;
181
+ getSyncedL2SlotNumber(): Promise<SlotNumber | undefined>;
153
182
 
154
183
  /**
155
- * Returns the current L2 epoch number based on the currently synced L1 timestamp.
184
+ * Returns the last L2 epoch number that has been fully synchronized from L1.
185
+ * An epoch is fully synced when all its L2 slots have been fully synced.
156
186
  */
157
- getL2EpochNumber(): Promise<EpochNumber | undefined>;
187
+ getSyncedL2EpochNumber(): Promise<EpochNumber | undefined>;
158
188
 
159
189
  /**
160
190
  * Returns all checkpointed block headers for a given epoch.
@@ -228,7 +258,7 @@ export interface L2BlockSource {
228
258
  * @param blockHash - The block hash to retrieve.
229
259
  * @returns The requested block (or undefined if not found).
230
260
  */
231
- getCheckpointedBlockByHash(blockHash: Fr): Promise<CheckpointedL2Block | undefined>;
261
+ getCheckpointedBlockByHash(blockHash: BlockHash): Promise<CheckpointedL2Block | undefined>;
232
262
 
233
263
  /**
234
264
  * Gets a checkpointed block by its archive root.
@@ -109,6 +109,27 @@ export class L2BlockStream {
109
109
 
110
110
  let nextBlockNumber = latestBlockNumber + 1;
111
111
  let nextCheckpointToEmit = CheckpointNumber(localTips.checkpointed.checkpoint.number + 1);
112
+
113
+ // When startingBlock is set, also skip ahead for checkpoints.
114
+ if (
115
+ this.opts.startingBlock !== undefined &&
116
+ this.opts.startingBlock >= 1 &&
117
+ nextCheckpointToEmit <= sourceTips.checkpointed.checkpoint.number
118
+ ) {
119
+ const startingBlockCheckpoints = await this.l2BlockSource.getCheckpointedBlocks(
120
+ BlockNumber(this.opts.startingBlock),
121
+ 1,
122
+ );
123
+ if (startingBlockCheckpoints.length > 0) {
124
+ nextCheckpointToEmit = CheckpointNumber(
125
+ Math.max(nextCheckpointToEmit, startingBlockCheckpoints[0].checkpointNumber),
126
+ );
127
+ } else {
128
+ // startingBlock is past all checkpointed blocks; skip Loop 1 entirely.
129
+ nextCheckpointToEmit = CheckpointNumber(sourceTips.checkpointed.checkpoint.number + 1);
130
+ }
131
+ }
132
+
112
133
  if (this.opts.skipFinalized) {
113
134
  // When skipping finalized blocks we need to provide reliable reorg detection while fetching as few blocks as
114
135
  // possible. Finalized blocks cannot be reorged by definition, so we can skip most of them. We do need the very
@@ -6,9 +6,9 @@ import {
6
6
  IndexWithinCheckpoint,
7
7
  SlotNumber,
8
8
  } from '@aztec/foundation/branded-types';
9
- import { sum } from '@aztec/foundation/collection';
9
+ import { pick, sum } from '@aztec/foundation/collection';
10
10
  import { Fr } from '@aztec/foundation/curves/bn254';
11
- import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
11
+ import { BufferReader, serializeSignedBigInt, serializeToBuffer } from '@aztec/foundation/serialize';
12
12
  import type { FieldsOf } from '@aztec/foundation/types';
13
13
 
14
14
  import { z } from 'zod';
@@ -17,6 +17,7 @@ import { L2Block } from '../block/l2_block.js';
17
17
  import { MAX_BLOCKS_PER_CHECKPOINT } from '../deserialization/index.js';
18
18
  import { computeCheckpointOutHash } from '../messaging/out_hash.js';
19
19
  import { CheckpointHeader } from '../rollup/checkpoint_header.js';
20
+ import { schemas } from '../schemas/schemas.js';
20
21
  import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js';
21
22
  import type { CheckpointInfo } from './checkpoint_info.js';
22
23
 
@@ -32,6 +33,8 @@ export class Checkpoint {
32
33
  public blocks: L2Block[],
33
34
  /** Number of the checkpoint. */
34
35
  public number: CheckpointNumber,
36
+ /** Fee asset price modifier in basis points (from oracle). Defaults to 0 (no change). */
37
+ public feeAssetPriceModifier: bigint = 0n,
35
38
  ) {}
36
39
 
37
40
  get slot(): SlotNumber {
@@ -45,8 +48,12 @@ export class Checkpoint {
45
48
  header: CheckpointHeader.schema,
46
49
  blocks: z.array(L2Block.schema),
47
50
  number: CheckpointNumberSchema,
51
+ feeAssetPriceModifier: schemas.BigInt,
48
52
  })
49
- .transform(({ archive, header, blocks, number }) => new Checkpoint(archive, header, blocks, number));
53
+ .transform(
54
+ ({ archive, header, blocks, number, feeAssetPriceModifier }) =>
55
+ new Checkpoint(archive, header, blocks, number, feeAssetPriceModifier),
56
+ );
50
57
  }
51
58
 
52
59
  static from(fields: FieldsOfCheckpoint) {
@@ -54,21 +61,28 @@ export class Checkpoint {
54
61
  }
55
62
 
56
63
  static getFields(fields: FieldsOfCheckpoint) {
57
- return [fields.archive, fields.header, fields.blocks, fields.number] as const;
64
+ return [fields.archive, fields.header, fields.blocks, fields.number, fields.feeAssetPriceModifier] as const;
58
65
  }
59
66
 
60
67
  static fromBuffer(buf: Buffer | BufferReader) {
61
68
  const reader = BufferReader.asReader(buf);
62
- return new Checkpoint(
63
- reader.readObject(AppendOnlyTreeSnapshot),
64
- reader.readObject(CheckpointHeader),
65
- reader.readVector(L2Block, MAX_BLOCKS_PER_CHECKPOINT),
66
- CheckpointNumber(reader.readNumber()),
67
- );
69
+ const archive = reader.readObject(AppendOnlyTreeSnapshot);
70
+ const header = reader.readObject(CheckpointHeader);
71
+ const blocks = reader.readVector(L2Block, MAX_BLOCKS_PER_CHECKPOINT);
72
+ const number = CheckpointNumber(reader.readNumber());
73
+ const feeAssetPriceModifier = reader.readInt256();
74
+ return new Checkpoint(archive, header, blocks, number, feeAssetPriceModifier);
68
75
  }
69
76
 
70
77
  public toBuffer() {
71
- return serializeToBuffer(this.archive, this.header, this.blocks.length, this.blocks, this.number);
78
+ return serializeToBuffer(
79
+ this.archive,
80
+ this.header,
81
+ this.blocks.length,
82
+ this.blocks,
83
+ this.number,
84
+ serializeSignedBigInt(this.feeAssetPriceModifier),
85
+ );
72
86
  }
73
87
 
74
88
  public toBlobFields(): Fr[] {
@@ -80,9 +94,11 @@ export class Checkpoint {
80
94
  return this.header.hash();
81
95
  }
82
96
 
83
- // Returns the out hash computed from all l2-to-l1 messages in this checkpoint.
84
- // Note: This value is different from the out hash in the header, which is the **accumulated** out hash over all
85
- // checkpoints up to and including this one in the epoch.
97
+ /**
98
+ * Returns the out hash computed from all l2-to-l1 messages in this checkpoint.
99
+ * Note: This value is different from the out hash in the header, which is the **accumulated** out hash over all
100
+ * checkpoints up to and including this one in the epoch.
101
+ */
86
102
  public getCheckpointOutHash(): Fr {
87
103
  const msgs = this.blocks.map(block => block.body.txEffects.map(txEffect => txEffect.l2ToL1Msgs));
88
104
  return computeCheckpointOutHash(msgs);
@@ -129,15 +145,19 @@ export class Checkpoint {
129
145
  numBlocks = 1,
130
146
  startBlockNumber = 1,
131
147
  previousArchive,
148
+ feeAssetPriceModifier = 0n,
132
149
  ...options
133
150
  }: {
134
151
  numBlocks?: number;
135
152
  startBlockNumber?: number;
136
153
  previousArchive?: AppendOnlyTreeSnapshot;
154
+ feeAssetPriceModifier?: bigint;
155
+ archive?: AppendOnlyTreeSnapshot;
137
156
  } & Partial<Parameters<typeof CheckpointHeader.random>[0]> &
138
157
  Partial<Parameters<typeof L2Block.random>[1]> = {},
139
158
  ) {
140
- const header = CheckpointHeader.random(options);
159
+ const headerOptions = previousArchive ? { lastArchiveRoot: previousArchive.root, ...options } : options;
160
+ const header = CheckpointHeader.random(headerOptions);
141
161
 
142
162
  // Create blocks sequentially to chain archive roots properly.
143
163
  // Each block's header.lastArchive must equal the previous block's archive.
@@ -148,11 +168,18 @@ export class Checkpoint {
148
168
  indexWithinCheckpoint: IndexWithinCheckpoint(i),
149
169
  ...options,
150
170
  ...(lastArchive ? { lastArchive } : {}),
171
+ ...pick(header, 'slotNumber', 'timestamp', 'coinbase', 'feeRecipient', 'gasFees'),
151
172
  });
152
173
  lastArchive = block.archive;
153
174
  blocks.push(block);
154
175
  }
155
176
 
156
- return new Checkpoint(AppendOnlyTreeSnapshot.random(), header, blocks, checkpointNumber);
177
+ return new Checkpoint(
178
+ options.archive ?? AppendOnlyTreeSnapshot.random(),
179
+ header,
180
+ blocks,
181
+ checkpointNumber,
182
+ feeAssetPriceModifier,
183
+ );
157
184
  }
158
185
  }
@@ -0,0 +1,51 @@
1
+ import {
2
+ BlockNumber,
3
+ BlockNumberSchema,
4
+ CheckpointNumber,
5
+ CheckpointNumberSchema,
6
+ } from '@aztec/foundation/branded-types';
7
+ import { Fr } from '@aztec/foundation/curves/bn254';
8
+ import { schemas } from '@aztec/foundation/schemas';
9
+
10
+ import { z } from 'zod';
11
+
12
+ import { CommitteeAttestation } from '../block/proposal/committee_attestation.js';
13
+ import { CheckpointHeader } from '../rollup/checkpoint_header.js';
14
+ import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js';
15
+ import { L1PublishedData } from './published_checkpoint.js';
16
+
17
+ /** Lightweight checkpoint metadata without full block data. */
18
+ export type CheckpointData = {
19
+ checkpointNumber: CheckpointNumber;
20
+ header: CheckpointHeader;
21
+ archive: AppendOnlyTreeSnapshot;
22
+ checkpointOutHash: Fr;
23
+ startBlock: BlockNumber;
24
+ blockCount: number;
25
+ attestations: CommitteeAttestation[];
26
+ l1: L1PublishedData;
27
+ };
28
+
29
+ export const CheckpointDataSchema = z
30
+ .object({
31
+ checkpointNumber: CheckpointNumberSchema,
32
+ header: CheckpointHeader.schema,
33
+ archive: AppendOnlyTreeSnapshot.schema,
34
+ checkpointOutHash: schemas.Fr,
35
+ startBlock: BlockNumberSchema,
36
+ blockCount: schemas.Integer,
37
+ attestations: z.array(CommitteeAttestation.schema),
38
+ l1: L1PublishedData.schema,
39
+ })
40
+ .transform(
41
+ (obj): CheckpointData => ({
42
+ checkpointNumber: obj.checkpointNumber,
43
+ header: obj.header,
44
+ archive: obj.archive,
45
+ checkpointOutHash: obj.checkpointOutHash,
46
+ startBlock: obj.startBlock,
47
+ blockCount: obj.blockCount,
48
+ attestations: obj.attestations,
49
+ l1: obj.l1,
50
+ }),
51
+ );
@@ -1,3 +1,5 @@
1
1
  export * from './checkpoint.js';
2
+ export * from './checkpoint_data.js';
2
3
  export * from './checkpoint_info.js';
3
4
  export * from './published_checkpoint.js';
5
+ export * from './validate.js';
@@ -55,9 +55,11 @@ export class L1PublishedData {
55
55
 
56
56
  export class PublishedCheckpoint {
57
57
  constructor(
58
+ /** The checkpoint itself. */
58
59
  public checkpoint: Checkpoint,
60
+ /** Info on when this checkpoint was published on L1. */
59
61
  public l1: L1PublishedData,
60
- // The attestations for the last block in the checkpoint.
62
+ /** The attestations for the last block in the checkpoint. */
61
63
  public attestations: CommitteeAttestation[],
62
64
  ) {}
63
65