@aztec/stdlib 0.0.1-commit.5914bae → 0.0.1-commit.59a0419c6

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 (366) hide show
  1. package/dest/abi/abi.d.ts +191 -26
  2. package/dest/abi/abi.d.ts.map +1 -1
  3. package/dest/abi/abi.js +4 -45
  4. package/dest/abi/authorization_selector.d.ts +3 -6
  5. package/dest/abi/authorization_selector.d.ts.map +1 -1
  6. package/dest/abi/encoder.d.ts +1 -1
  7. package/dest/abi/encoder.d.ts.map +1 -1
  8. package/dest/abi/encoder.js +32 -6
  9. package/dest/abi/event_selector.d.ts +3 -6
  10. package/dest/abi/event_selector.d.ts.map +1 -1
  11. package/dest/abi/function_selector.d.ts +3 -6
  12. package/dest/abi/function_selector.d.ts.map +1 -1
  13. package/dest/abi/function_selector.js +1 -3
  14. package/dest/abi/note_selector.d.ts +3 -6
  15. package/dest/abi/note_selector.d.ts.map +1 -1
  16. package/dest/abi/note_selector.js +1 -3
  17. package/dest/avm/avm_accumulated_data.js +2 -2
  18. package/dest/avm/avm_circuit_public_inputs.js +2 -2
  19. package/dest/aztec-address/index.d.ts +3 -6
  20. package/dest/aztec-address/index.d.ts.map +1 -1
  21. package/dest/aztec-address/index.js +2 -4
  22. package/dest/block/block_data.d.ts +8 -8
  23. package/dest/block/block_data.d.ts.map +1 -1
  24. package/dest/block/block_data.js +2 -2
  25. package/dest/block/block_hash.d.ts +11 -10
  26. package/dest/block/block_hash.d.ts.map +1 -1
  27. package/dest/block/block_hash.js +10 -9
  28. package/dest/block/l2_block_info.d.ts +6 -5
  29. package/dest/block/l2_block_info.d.ts.map +1 -1
  30. package/dest/block/l2_block_info.js +6 -5
  31. package/dest/block/l2_block_source.d.ts +80 -3
  32. package/dest/block/l2_block_source.d.ts.map +1 -1
  33. package/dest/block/l2_block_source.js +1 -0
  34. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts +1 -1
  35. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts.map +1 -1
  36. package/dest/block/l2_block_stream/l2_tips_store_base.js +18 -5
  37. package/dest/block/test/l2_tips_store_test_suite.d.ts +1 -1
  38. package/dest/block/test/l2_tips_store_test_suite.d.ts.map +1 -1
  39. package/dest/block/test/l2_tips_store_test_suite.js +4 -3
  40. package/dest/checkpoint/checkpoint.d.ts +7 -1
  41. package/dest/checkpoint/checkpoint.d.ts.map +1 -1
  42. package/dest/checkpoint/checkpoint.js +9 -1
  43. package/dest/checkpoint/checkpoint_data.d.ts +71 -5
  44. package/dest/checkpoint/checkpoint_data.d.ts.map +1 -1
  45. package/dest/checkpoint/checkpoint_data.js +10 -0
  46. package/dest/config/chain-config.d.ts +1 -1
  47. package/dest/config/chain-config.d.ts.map +1 -1
  48. package/dest/config/chain-config.js +7 -1
  49. package/dest/config/index.d.ts +2 -1
  50. package/dest/config/index.d.ts.map +1 -1
  51. package/dest/config/index.js +1 -0
  52. package/dest/config/pipelining-config.d.ts +19 -0
  53. package/dest/config/pipelining-config.d.ts.map +1 -0
  54. package/dest/config/pipelining-config.js +18 -0
  55. package/dest/config/sequencer-config.d.ts +4 -2
  56. package/dest/config/sequencer-config.d.ts.map +1 -1
  57. package/dest/config/sequencer-config.js +11 -3
  58. package/dest/contract/contract_address.d.ts +3 -3
  59. package/dest/contract/contract_address.js +4 -4
  60. package/dest/contract/contract_class_id.d.ts +2 -2
  61. package/dest/contract/contract_class_id.js +2 -2
  62. package/dest/contract/index.d.ts +1 -3
  63. package/dest/contract/index.d.ts.map +1 -1
  64. package/dest/contract/index.js +0 -2
  65. package/dest/contract/interfaces/contract_class.d.ts +3 -156
  66. package/dest/contract/interfaces/contract_class.d.ts.map +1 -1
  67. package/dest/contract/interfaces/contract_class.js +1 -28
  68. package/dest/contract/private_function.d.ts +1 -1
  69. package/dest/contract/private_function.d.ts.map +1 -1
  70. package/dest/contract/private_function.js +2 -4
  71. package/dest/epoch-helpers/index.d.ts +3 -1
  72. package/dest/epoch-helpers/index.d.ts.map +1 -1
  73. package/dest/epoch-helpers/index.js +3 -0
  74. package/dest/file-store/factory.d.ts +4 -3
  75. package/dest/file-store/factory.d.ts.map +1 -1
  76. package/dest/file-store/factory.js +2 -2
  77. package/dest/file-store/http.d.ts +9 -2
  78. package/dest/file-store/http.d.ts.map +1 -1
  79. package/dest/file-store/http.js +20 -9
  80. package/dest/file-store/index.d.ts +2 -1
  81. package/dest/file-store/index.d.ts.map +1 -1
  82. package/dest/gas/fee_math.d.ts +49 -0
  83. package/dest/gas/fee_math.d.ts.map +1 -0
  84. package/dest/gas/fee_math.js +80 -0
  85. package/dest/gas/gas_fees.d.ts +5 -1
  86. package/dest/gas/gas_fees.d.ts.map +1 -1
  87. package/dest/gas/gas_fees.js +10 -1
  88. package/dest/gas/index.d.ts +2 -1
  89. package/dest/gas/index.d.ts.map +1 -1
  90. package/dest/gas/index.js +1 -0
  91. package/dest/ha-signing/config.d.ts +136 -0
  92. package/dest/ha-signing/config.d.ts.map +1 -0
  93. package/dest/ha-signing/config.js +98 -0
  94. package/dest/ha-signing/index.d.ts +4 -0
  95. package/dest/ha-signing/index.d.ts.map +1 -0
  96. package/dest/ha-signing/index.js +3 -0
  97. package/dest/ha-signing/local_config.d.ts +63 -0
  98. package/dest/ha-signing/local_config.d.ts.map +1 -0
  99. package/dest/ha-signing/local_config.js +24 -0
  100. package/dest/ha-signing/types.d.ts +90 -0
  101. package/dest/ha-signing/types.d.ts.map +1 -0
  102. package/dest/ha-signing/types.js +39 -0
  103. package/dest/hash/hash.d.ts +16 -1
  104. package/dest/hash/hash.d.ts.map +1 -1
  105. package/dest/hash/hash.js +32 -0
  106. package/dest/interfaces/archiver.d.ts +11 -1
  107. package/dest/interfaces/archiver.d.ts.map +1 -1
  108. package/dest/interfaces/archiver.js +6 -2
  109. package/dest/interfaces/aztec-node-admin.d.ts +21 -20
  110. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  111. package/dest/interfaces/aztec-node-admin.js +3 -3
  112. package/dest/interfaces/aztec-node.d.ts +10 -1
  113. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  114. package/dest/interfaces/aztec-node.js +2 -0
  115. package/dest/interfaces/l2_logs_source.d.ts +5 -3
  116. package/dest/interfaces/l2_logs_source.d.ts.map +1 -1
  117. package/dest/interfaces/merkle_tree_operations.d.ts +4 -3
  118. package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
  119. package/dest/interfaces/prover-client.d.ts +1 -1
  120. package/dest/interfaces/prover-client.d.ts.map +1 -1
  121. package/dest/interfaces/prover-client.js +0 -3
  122. package/dest/interfaces/proving-job.d.ts +200 -200
  123. package/dest/interfaces/slasher.d.ts +1 -10
  124. package/dest/interfaces/slasher.d.ts.map +1 -1
  125. package/dest/interfaces/slasher.js +0 -2
  126. package/dest/interfaces/validator.d.ts +49 -40
  127. package/dest/interfaces/validator.d.ts.map +1 -1
  128. package/dest/interfaces/validator.js +2 -3
  129. package/dest/kernel/claimed_length_array.js +1 -1
  130. package/dest/kernel/hints/private_kernel_reset_hints.d.ts +1 -1
  131. package/dest/kernel/hints/private_kernel_reset_hints.d.ts.map +1 -1
  132. package/dest/kernel/padded_side_effects.js +1 -1
  133. package/dest/kernel/private_to_avm_accumulated_data.js +2 -2
  134. package/dest/kernel/private_to_public_accumulated_data.js +2 -2
  135. package/dest/kernel/private_to_rollup_accumulated_data.js +1 -1
  136. package/dest/kv-store/config.d.ts +17 -0
  137. package/dest/kv-store/config.d.ts.map +1 -0
  138. package/dest/kv-store/config.js +26 -0
  139. package/dest/kv-store/index.d.ts +2 -0
  140. package/dest/kv-store/index.d.ts.map +1 -0
  141. package/dest/kv-store/index.js +1 -0
  142. package/dest/l1-contracts/index.d.ts +2 -2
  143. package/dest/l1-contracts/index.d.ts.map +1 -1
  144. package/dest/l1-contracts/index.js +1 -1
  145. package/dest/logs/log_id.d.ts +1 -1
  146. package/dest/logs/log_id.d.ts.map +1 -1
  147. package/dest/logs/log_id.js +1 -2
  148. package/dest/logs/private_log.js +1 -1
  149. package/dest/logs/public_log.d.ts +1 -1
  150. package/dest/logs/public_log.d.ts.map +1 -1
  151. package/dest/logs/public_log.js +1 -7
  152. package/dest/logs/siloed_tag.d.ts +5 -7
  153. package/dest/logs/siloed_tag.d.ts.map +1 -1
  154. package/dest/logs/siloed_tag.js +4 -0
  155. package/dest/logs/tag.d.ts +5 -6
  156. package/dest/logs/tag.d.ts.map +1 -1
  157. package/dest/logs/tag.js +4 -0
  158. package/dest/messaging/l1_to_l2_message_source.d.ts +4 -2
  159. package/dest/messaging/l1_to_l2_message_source.d.ts.map +1 -1
  160. package/dest/p2p/block_proposal.d.ts +7 -9
  161. package/dest/p2p/block_proposal.d.ts.map +1 -1
  162. package/dest/p2p/block_proposal.js +5 -10
  163. package/dest/p2p/checkpoint_attestation.d.ts +4 -6
  164. package/dest/p2p/checkpoint_attestation.d.ts.map +1 -1
  165. package/dest/p2p/checkpoint_attestation.js +2 -7
  166. package/dest/p2p/checkpoint_proposal.d.ts +9 -11
  167. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  168. package/dest/p2p/checkpoint_proposal.js +6 -25
  169. package/dest/p2p/gossipable.d.ts +4 -4
  170. package/dest/p2p/gossipable.d.ts.map +1 -1
  171. package/dest/parity/parity_base_private_inputs.d.ts +7 -3
  172. package/dest/parity/parity_base_private_inputs.d.ts.map +1 -1
  173. package/dest/parity/parity_base_private_inputs.js +7 -5
  174. package/dest/parity/parity_public_inputs.d.ts +7 -3
  175. package/dest/parity/parity_public_inputs.d.ts.map +1 -1
  176. package/dest/parity/parity_public_inputs.js +6 -3
  177. package/dest/proofs/chonk_proof.d.ts +46 -2
  178. package/dest/proofs/chonk_proof.d.ts.map +1 -1
  179. package/dest/proofs/chonk_proof.js +84 -15
  180. package/dest/rollup/base_rollup_hints.js +2 -2
  181. package/dest/rollup/block_headers_hash.d.ts +1 -1
  182. package/dest/rollup/block_headers_hash.d.ts.map +1 -1
  183. package/dest/rollup/block_headers_hash.js +8 -2
  184. package/dest/rollup/block_root_rollup_private_inputs.js +5 -5
  185. package/dest/rollup/checkpoint_rollup_public_inputs.js +1 -1
  186. package/dest/rollup/checkpoint_root_rollup_private_inputs.js +3 -3
  187. package/dest/rollup/root_rollup_public_inputs.js +1 -1
  188. package/dest/rollup/tree_snapshot_diff_hints.js +2 -2
  189. package/dest/slashing/index.d.ts +2 -3
  190. package/dest/slashing/index.d.ts.map +1 -1
  191. package/dest/slashing/index.js +1 -2
  192. package/dest/slashing/serialization.d.ts +2 -6
  193. package/dest/slashing/serialization.d.ts.map +1 -1
  194. package/dest/slashing/serialization.js +0 -60
  195. package/dest/slashing/types.d.ts +4 -90
  196. package/dest/slashing/types.d.ts.map +1 -1
  197. package/dest/slashing/types.js +0 -14
  198. package/dest/slashing/{tally.d.ts → votes.d.ts} +1 -1
  199. package/dest/slashing/{tally.d.ts.map → votes.d.ts.map} +1 -1
  200. package/dest/slashing/{tally.js → votes.js} +1 -1
  201. package/dest/tests/factories.d.ts +3 -10
  202. package/dest/tests/factories.d.ts.map +1 -1
  203. package/dest/tests/factories.js +18 -45
  204. package/dest/tests/mocks.d.ts +1 -1
  205. package/dest/tests/mocks.d.ts.map +1 -1
  206. package/dest/tests/mocks.js +12 -17
  207. package/dest/timetable/index.d.ts +51 -1
  208. package/dest/timetable/index.d.ts.map +1 -1
  209. package/dest/timetable/index.js +204 -14
  210. package/dest/trees/nullifier_leaf.d.ts +2 -1
  211. package/dest/trees/nullifier_leaf.d.ts.map +1 -1
  212. package/dest/trees/nullifier_leaf.js +3 -0
  213. package/dest/tx/block_header.d.ts +2 -2
  214. package/dest/tx/block_header.d.ts.map +1 -1
  215. package/dest/tx/block_header.js +1 -1
  216. package/dest/tx/fee_provider.d.ts +10 -0
  217. package/dest/tx/fee_provider.d.ts.map +1 -0
  218. package/dest/tx/fee_provider.js +1 -0
  219. package/dest/tx/global_variable_builder.d.ts +3 -4
  220. package/dest/tx/global_variable_builder.d.ts.map +1 -1
  221. package/dest/tx/index.d.ts +2 -1
  222. package/dest/tx/index.d.ts.map +1 -1
  223. package/dest/tx/index.js +1 -0
  224. package/dest/tx/indexed_tx_effect.d.ts +1 -1
  225. package/dest/tx/indexed_tx_effect.d.ts.map +1 -1
  226. package/dest/tx/indexed_tx_effect.js +1 -2
  227. package/dest/tx/protocol_contracts.js +2 -2
  228. package/dest/tx/simulated_tx.d.ts +151 -26
  229. package/dest/tx/simulated_tx.d.ts.map +1 -1
  230. package/dest/tx/tx.d.ts +3 -3
  231. package/dest/tx/tx.d.ts.map +1 -1
  232. package/dest/types/shared.d.ts +1 -10
  233. package/dest/types/shared.d.ts.map +1 -1
  234. package/dest/types/shared.js +0 -9
  235. package/dest/vks/verification_key.d.ts +2 -137
  236. package/dest/vks/verification_key.d.ts.map +1 -1
  237. package/dest/vks/verification_key.js +5 -126
  238. package/dest/vks/vk_data.js +1 -1
  239. package/dest/world-state/genesis_data.d.ts +11 -0
  240. package/dest/world-state/genesis_data.d.ts.map +1 -0
  241. package/dest/world-state/genesis_data.js +4 -0
  242. package/dest/world-state/index.d.ts +2 -1
  243. package/dest/world-state/index.d.ts.map +1 -1
  244. package/dest/world-state/index.js +1 -0
  245. package/dest/world-state/world_state_revision.d.ts +8 -1
  246. package/dest/world-state/world_state_revision.d.ts.map +1 -1
  247. package/dest/world-state/world_state_revision.js +7 -1
  248. package/package.json +11 -10
  249. package/src/abi/abi.ts +14 -67
  250. package/src/abi/authorization_selector.ts +2 -8
  251. package/src/abi/encoder.ts +42 -6
  252. package/src/abi/event_selector.ts +2 -8
  253. package/src/abi/function_selector.ts +3 -12
  254. package/src/abi/note_selector.ts +3 -12
  255. package/src/avm/avm_accumulated_data.ts +6 -6
  256. package/src/avm/avm_circuit_public_inputs.ts +4 -4
  257. package/src/aztec-address/index.ts +4 -10
  258. package/src/block/block_data.ts +3 -4
  259. package/src/block/block_hash.ts +21 -14
  260. package/src/block/l2_block_info.ts +8 -6
  261. package/src/block/l2_block_source.ts +10 -2
  262. package/src/block/l2_block_stream/l2_tips_store_base.ts +25 -13
  263. package/src/block/test/l2_tips_store_test_suite.ts +9 -2
  264. package/src/checkpoint/checkpoint.ts +11 -1
  265. package/src/checkpoint/checkpoint_data.ts +40 -4
  266. package/src/config/chain-config.ts +7 -1
  267. package/src/config/index.ts +1 -0
  268. package/src/config/pipelining-config.ts +31 -0
  269. package/src/config/sequencer-config.ts +17 -4
  270. package/src/contract/contract_address.ts +4 -4
  271. package/src/contract/contract_class_id.ts +2 -2
  272. package/src/contract/index.ts +0 -2
  273. package/src/contract/interfaces/contract_class.ts +2 -82
  274. package/src/contract/private_function.ts +3 -1
  275. package/src/epoch-helpers/index.ts +5 -0
  276. package/src/file-store/factory.ts +13 -4
  277. package/src/file-store/http.ts +29 -10
  278. package/src/file-store/index.ts +1 -0
  279. package/src/gas/README.md +31 -0
  280. package/src/gas/fee_math.ts +120 -0
  281. package/src/gas/gas_fees.ts +17 -4
  282. package/src/gas/index.ts +1 -0
  283. package/src/ha-signing/config.ts +159 -0
  284. package/src/ha-signing/index.ts +29 -0
  285. package/src/ha-signing/local_config.ts +46 -0
  286. package/src/ha-signing/types.ts +126 -0
  287. package/src/hash/hash.ts +27 -0
  288. package/src/interfaces/archiver.ts +11 -1
  289. package/src/interfaces/aztec-node-admin.ts +5 -7
  290. package/src/interfaces/aztec-node.ts +15 -0
  291. package/src/interfaces/l2_logs_source.ts +4 -1
  292. package/src/interfaces/merkle_tree_operations.ts +3 -2
  293. package/src/interfaces/prover-client.ts +2 -5
  294. package/src/interfaces/slasher.ts +0 -6
  295. package/src/interfaces/validator.ts +53 -44
  296. package/src/kernel/claimed_length_array.ts +2 -2
  297. package/src/kernel/hints/private_kernel_reset_hints.ts +2 -5
  298. package/src/kernel/hints/read_request_hints.ts +3 -3
  299. package/src/kernel/padded_side_effects.ts +3 -3
  300. package/src/kernel/private_to_avm_accumulated_data.ts +4 -4
  301. package/src/kernel/private_to_public_accumulated_data.ts +10 -10
  302. package/src/kernel/private_to_rollup_accumulated_data.ts +5 -5
  303. package/src/kv-store/config.ts +36 -0
  304. package/src/kv-store/index.ts +1 -0
  305. package/src/l1-contracts/index.ts +1 -1
  306. package/src/logs/log_id.ts +1 -2
  307. package/src/logs/private_log.ts +1 -1
  308. package/src/logs/public_log.ts +1 -11
  309. package/src/logs/siloed_tag.ts +8 -9
  310. package/src/logs/tag.ts +8 -8
  311. package/src/messaging/l1_to_l2_message_source.ts +3 -1
  312. package/src/p2p/block_proposal.ts +14 -10
  313. package/src/p2p/checkpoint_attestation.ts +5 -9
  314. package/src/p2p/checkpoint_proposal.ts +22 -37
  315. package/src/p2p/gossipable.ts +4 -4
  316. package/src/parity/parity_base_private_inputs.ts +10 -4
  317. package/src/parity/parity_public_inputs.ts +9 -2
  318. package/src/proofs/chonk_proof.ts +90 -12
  319. package/src/rollup/base_rollup_hints.ts +2 -2
  320. package/src/rollup/block_headers_hash.ts +11 -2
  321. package/src/rollup/block_root_rollup_private_inputs.ts +8 -8
  322. package/src/rollup/checkpoint_rollup_public_inputs.ts +2 -2
  323. package/src/rollup/checkpoint_root_rollup_private_inputs.ts +4 -4
  324. package/src/rollup/root_rollup_public_inputs.ts +2 -2
  325. package/src/rollup/tree_snapshot_diff_hints.ts +5 -5
  326. package/src/slashing/index.ts +1 -2
  327. package/src/slashing/serialization.ts +1 -81
  328. package/src/slashing/types.ts +3 -35
  329. package/src/slashing/{tally.ts → votes.ts} +1 -1
  330. package/src/tests/factories.ts +18 -53
  331. package/src/tests/mocks.ts +14 -10
  332. package/src/timetable/index.ts +293 -13
  333. package/src/trees/nullifier_leaf.ts +4 -0
  334. package/src/tx/block_header.ts +2 -2
  335. package/src/tx/fee_provider.ts +10 -0
  336. package/src/tx/global_variable_builder.ts +2 -3
  337. package/src/tx/index.ts +1 -0
  338. package/src/tx/indexed_tx_effect.ts +1 -2
  339. package/src/tx/protocol_contracts.ts +2 -2
  340. package/src/tx/tx.ts +2 -2
  341. package/src/types/shared.ts +0 -10
  342. package/src/vks/verification_key.ts +5 -184
  343. package/src/vks/vk_data.ts +1 -1
  344. package/src/world-state/genesis_data.ts +15 -0
  345. package/src/world-state/index.ts +1 -0
  346. package/src/world-state/world_state_revision.ts +9 -1
  347. package/dest/abi/mocked_keys.d.ts +0 -2
  348. package/dest/abi/mocked_keys.d.ts.map +0 -1
  349. package/dest/abi/mocked_keys.js +0 -1
  350. package/dest/contract/private_function_membership_proof.d.ts +0 -32
  351. package/dest/contract/private_function_membership_proof.d.ts.map +0 -1
  352. package/dest/contract/private_function_membership_proof.js +0 -124
  353. package/dest/contract/utility_function_membership_proof.d.ts +0 -27
  354. package/dest/contract/utility_function_membership_proof.d.ts.map +0 -1
  355. package/dest/contract/utility_function_membership_proof.js +0 -87
  356. package/dest/l1-contracts/slash_factory.d.ts +0 -45
  357. package/dest/l1-contracts/slash_factory.d.ts.map +0 -1
  358. package/dest/l1-contracts/slash_factory.js +0 -158
  359. package/dest/slashing/empire.d.ts +0 -31
  360. package/dest/slashing/empire.d.ts.map +0 -1
  361. package/dest/slashing/empire.js +0 -87
  362. package/src/abi/mocked_keys.ts +0 -2
  363. package/src/contract/private_function_membership_proof.ts +0 -167
  364. package/src/contract/utility_function_membership_proof.ts +0 -118
  365. package/src/l1-contracts/slash_factory.ts +0 -180
  366. package/src/slashing/empire.ts +0 -104
@@ -0,0 +1,126 @@
1
+ import {
2
+ BlockNumber,
3
+ CheckpointNumber,
4
+ type IndexWithinCheckpoint,
5
+ type SlotNumber,
6
+ } from '@aztec/foundation/branded-types';
7
+
8
+ /**
9
+ * Type of validator duty being performed
10
+ */
11
+ export enum DutyType {
12
+ BLOCK_PROPOSAL = 'BLOCK_PROPOSAL',
13
+ CHECKPOINT_PROPOSAL = 'CHECKPOINT_PROPOSAL',
14
+ ATTESTATION = 'ATTESTATION',
15
+ ATTESTATIONS_AND_SIGNERS = 'ATTESTATIONS_AND_SIGNERS',
16
+ GOVERNANCE_VOTE = 'GOVERNANCE_VOTE',
17
+ SLASHING_VOTE = 'SLASHING_VOTE',
18
+ AUTH_REQUEST = 'AUTH_REQUEST',
19
+ TXS = 'TXS',
20
+ }
21
+
22
+ /**
23
+ * Signing context for block proposals.
24
+ * Includes both the block number and the checkpoint number the block belongs to.
25
+ */
26
+ export interface BlockProposalSigningContext {
27
+ slot: SlotNumber;
28
+ blockNumber: BlockNumber;
29
+ checkpointNumber: CheckpointNumber;
30
+ /** Block index within checkpoint (0, 1, 2...). Required for block proposals. */
31
+ blockIndexWithinCheckpoint: IndexWithinCheckpoint;
32
+ dutyType: DutyType.BLOCK_PROPOSAL;
33
+ }
34
+
35
+ /**
36
+ * Signing context for checkpoint proposals.
37
+ * Includes the checkpoint number being proposed, but not a block number.
38
+ */
39
+ export interface CheckpointProposalSigningContext {
40
+ slot: SlotNumber;
41
+ checkpointNumber: CheckpointNumber;
42
+ dutyType: DutyType.CHECKPOINT_PROPOSAL;
43
+ }
44
+
45
+ /**
46
+ * Signing context for attestation duties (checkpoint attestations).
47
+ * Includes the checkpoint number when available (from proposal validation).
48
+ */
49
+ export interface AttestationSigningContext {
50
+ slot: SlotNumber;
51
+ checkpointNumber: CheckpointNumber;
52
+ dutyType: DutyType.ATTESTATION | DutyType.ATTESTATIONS_AND_SIGNERS;
53
+ }
54
+
55
+ /**
56
+ * Signing context for governance/slashing votes which only need slot for HA protection.
57
+ */
58
+ export interface VoteSigningContext {
59
+ slot: SlotNumber;
60
+ dutyType: DutyType.GOVERNANCE_VOTE | DutyType.SLASHING_VOTE;
61
+ }
62
+
63
+ /**
64
+ * Signing context for duties which don't require slot/blockNumber
65
+ * as they don't need HA protection (AUTH_REQUEST, TXS).
66
+ */
67
+ export interface NoHAProtectionSigningContext {
68
+ dutyType: DutyType.AUTH_REQUEST | DutyType.TXS;
69
+ }
70
+
71
+ /**
72
+ * Signing contexts that require HA protection (excludes AUTH_REQUEST and TXS).
73
+ * Used by the HA signer's signWithProtection method.
74
+ */
75
+ export type HAProtectedSigningContext =
76
+ | BlockProposalSigningContext
77
+ | CheckpointProposalSigningContext
78
+ | AttestationSigningContext
79
+ | VoteSigningContext;
80
+
81
+ /**
82
+ * Context required for slashing protection during signing operations.
83
+ * Uses discriminated union to enforce type safety:
84
+ * - BLOCK_PROPOSAL duties have blockNumber, checkpointNumber, and blockIndexWithinCheckpoint
85
+ * - CHECKPOINT_PROPOSAL duties have checkpointNumber
86
+ * - ATTESTATION/ATTESTATIONS_AND_SIGNERS duties have only slot
87
+ * - Vote duties have only slot
88
+ * - AUTH_REQUEST and TXS duties don't need HA protection
89
+ */
90
+ export type SigningContext = HAProtectedSigningContext | NoHAProtectionSigningContext;
91
+
92
+ /**
93
+ * Type guard to check if a SigningContext requires HA protection.
94
+ * Returns true for contexts that need HA protection, false for AUTH_REQUEST and TXS.
95
+ */
96
+ export function isHAProtectedContext(context: SigningContext): context is HAProtectedSigningContext {
97
+ return context.dutyType !== DutyType.AUTH_REQUEST && context.dutyType !== DutyType.TXS;
98
+ }
99
+
100
+ /**
101
+ * Gets the block number from a signing context.
102
+ * Only BLOCK_PROPOSAL duties carry a block number; all others return BlockNumber(0).
103
+ */
104
+ export function getBlockNumberFromSigningContext(context: HAProtectedSigningContext): BlockNumber {
105
+ if (context.dutyType === DutyType.BLOCK_PROPOSAL) {
106
+ return context.blockNumber;
107
+ }
108
+ return BlockNumber(0);
109
+ }
110
+
111
+ /**
112
+ * Gets the checkpoint number from a signing context.
113
+ * BLOCK_PROPOSAL, CHECKPOINT_PROPOSAL, ATTESTATION, and ATTESTATIONS_AND_SIGNERS duties carry a checkpoint number;
114
+ * vote duties return CheckpointNumber(0).
115
+ */
116
+ export function getCheckpointNumberFromSigningContext(context: HAProtectedSigningContext): CheckpointNumber {
117
+ if (
118
+ context.dutyType === DutyType.BLOCK_PROPOSAL ||
119
+ context.dutyType === DutyType.CHECKPOINT_PROPOSAL ||
120
+ context.dutyType === DutyType.ATTESTATION ||
121
+ context.dutyType === DutyType.ATTESTATIONS_AND_SIGNERS
122
+ ) {
123
+ return context.checkpointNumber;
124
+ }
125
+ return CheckpointNumber(0);
126
+ }
package/src/hash/hash.ts CHANGED
@@ -6,6 +6,21 @@ import type { EthAddress } from '@aztec/foundation/eth-address';
6
6
 
7
7
  import { AztecAddress } from '../aztec-address/index.js';
8
8
 
9
+ /** Computes a Poseidon2 merkle tree internal node hash for append-only trees (note-hash, L1->L2, archive). */
10
+ export function computeMerkleHash(left: Fr, right: Fr): Promise<Fr> {
11
+ return poseidon2HashWithSeparator([left, right], DomainSeparator.MERKLE_HASH);
12
+ }
13
+
14
+ /** Merkle-node hasher for the nullifier tree's sibling paths. */
15
+ export function computeNullifierMerkleHash(left: Fr, right: Fr): Promise<Fr> {
16
+ return poseidon2HashWithSeparator([left, right], DomainSeparator.NULLIFIER_MERKLE);
17
+ }
18
+
19
+ /** Merkle-node hasher for the public-data tree's sibling paths. */
20
+ export function computePublicDataMerkleHash(left: Fr, right: Fr): Promise<Fr> {
21
+ return poseidon2HashWithSeparator([left, right], DomainSeparator.PUBLIC_DATA_MERKLE);
22
+ }
23
+
9
24
  /**
10
25
  * Computes a hash of a given verification key.
11
26
  * @param keyAsFields - The verification key as fields.
@@ -103,6 +118,18 @@ export function computeLogTag(rawTag: number | bigint | boolean | Fr | Buffer, d
103
118
  return poseidon2HashWithSeparator([new Fr(rawTag)], domSep);
104
119
  }
105
120
 
121
+ /**
122
+ * Computes the commitment of a private event from its preimage.
123
+ * @param randomness - Random value emitted alongside the event to prevent preimage brute-forcing.
124
+ * @param eventSelector - Event selector as an Fr.
125
+ * @param content - Serialized event content.
126
+ *
127
+ * @dev Must match the implementation in aztec-nr/aztec/src/event/event_interface.nr > compute_private_serialized_event_commitment
128
+ */
129
+ export function computePrivateEventCommitment(randomness: Fr, eventSelector: Fr, content: Fr[]): Promise<Fr> {
130
+ return poseidon2HashWithSeparator([randomness, eventSelector, ...content], DomainSeparator.EVENT_COMMITMENT);
131
+ }
132
+
106
133
  export function computeSiloedPrivateLogFirstField(contract: AztecAddress, field: Fr): Promise<Fr> {
107
134
  return poseidon2HashWithSeparator([contract, field], DomainSeparator.PRIVATE_LOG_FIRST_FIELD);
108
135
  }
@@ -11,7 +11,7 @@ import { L2Block } from '../block/l2_block.js';
11
11
  import { type L2BlockSource, L2TipsSchema } from '../block/l2_block_source.js';
12
12
  import { ValidateCheckpointResultSchema } from '../block/validate_block_result.js';
13
13
  import { Checkpoint } from '../checkpoint/checkpoint.js';
14
- import { CheckpointDataSchema } from '../checkpoint/checkpoint_data.js';
14
+ import { CheckpointDataSchema, ProposedCheckpointDataSchema } from '../checkpoint/checkpoint_data.js';
15
15
  import { PublishedCheckpoint } from '../checkpoint/published_checkpoint.js';
16
16
  import {
17
17
  ContractClassPublicSchema,
@@ -60,8 +60,14 @@ export type ArchiverSpecificConfig = {
60
60
  /** Whether to allow starting the archiver without debug/trace method support on Ethereum hosts */
61
61
  ethereumAllowNoDebugHosts?: boolean;
62
62
 
63
+ /** Skip the startup check that probes the L1 RPC for historical logs on the Rollup contract. */
64
+ archiverSkipHistoricalLogsCheck?: boolean;
65
+
63
66
  /** Skip validating checkpoint attestations (for testing purposes only) */
64
67
  skipValidateCheckpointAttestations?: boolean;
68
+
69
+ /** Skip promoting proposed checkpoints during L1 sync (for testing purposes only) */
70
+ skipPromoteProposedCheckpointDuringL1Sync?: boolean;
65
71
  };
66
72
 
67
73
  export const ArchiverSpecificConfigSchema = z.object({
@@ -72,7 +78,9 @@ export const ArchiverSpecificConfigSchema = z.object({
72
78
  archiverStoreMapSizeKb: schemas.Integer.optional(),
73
79
  maxAllowedEthClientDriftSeconds: schemas.Integer.optional(),
74
80
  ethereumAllowNoDebugHosts: z.boolean().optional(),
81
+ archiverSkipHistoricalLogsCheck: z.boolean().optional(),
75
82
  skipValidateCheckpointAttestations: z.boolean().optional(),
83
+ skipPromoteProposedCheckpointDuringL1Sync: z.boolean().optional(),
76
84
  });
77
85
 
78
86
  export type ArchiverApi = Omit<
@@ -150,6 +158,8 @@ export const ArchiverApiSchema: ApiSchemaFor<ArchiverApi> = {
150
158
  .args()
151
159
  .returns(z.object({ genesisArchiveRoot: schemas.Fr })),
152
160
  getL1Timestamp: z.function().args().returns(schemas.BigInt.optional()),
161
+ getProposedCheckpoint: z.function().args().returns(ProposedCheckpointDataSchema.optional()),
162
+ getProposedCheckpointOnly: z.function().args().returns(ProposedCheckpointDataSchema.optional()),
153
163
  syncImmediate: z.function().args().returns(z.void()),
154
164
  isPendingChainInvalid: z.function().args().returns(z.boolean()),
155
165
  getPendingChainValidationStatus: z.function().args().returns(ValidateCheckpointResultSchema),
@@ -3,7 +3,8 @@ import { createSafeJsonRpcClient, defaultFetch } from '@aztec/foundation/json-rp
3
3
  import { z } from 'zod';
4
4
 
5
5
  import type { ApiSchemaFor } from '../schemas/schemas.js';
6
- import { type Offense, OffenseSchema, type SlashPayloadRound, SlashPayloadRoundSchema } from '../slashing/index.js';
6
+ import { optional } from '../schemas/schemas.js';
7
+ import { type Offense, OffenseSchema } from '../slashing/index.js';
7
8
  import { type ComponentsVersions, getVersioningResponseHandler } from '../versioning/index.js';
8
9
  import { type ArchiverSpecificConfig, ArchiverSpecificConfigSchema } from './archiver.js';
9
10
  import { type SequencerConfig, SequencerConfigSchema } from './configs.js';
@@ -36,8 +37,9 @@ export interface AztecNodeAdmin {
36
37
  * Pauses syncing and rolls back the database to the target L2 block number.
37
38
  * @param targetBlockNumber - The block number to roll back to.
38
39
  * @param force - If true, clears the world state db and p2p dbs if rolling back to behind the finalized block.
40
+ * @param resumeSync - If true (default), resumes archiver and world state sync after rollback.
39
41
  */
40
- rollbackTo(targetBlockNumber: number, force?: boolean): Promise<void>;
42
+ rollbackTo(targetBlockNumber: number, force?: boolean, resumeSync?: boolean): Promise<void>;
41
43
 
42
44
  /** Pauses archiver and world state syncing. */
43
45
  pauseSync(): Promise<void>;
@@ -45,9 +47,6 @@ export interface AztecNodeAdmin {
45
47
  /** Resumes archiver and world state syncing. */
46
48
  resumeSync(): Promise<void>;
47
49
 
48
- /** Returns all monitored payloads by the slasher for the current round. */
49
- getSlashPayloads(): Promise<SlashPayloadRound[]>;
50
-
51
50
  /** Returns all offenses applicable for the given round. */
52
51
  getSlashOffenses(round: bigint | 'all' | 'current'): Promise<Offense[]>;
53
52
 
@@ -100,10 +99,9 @@ export const AztecNodeAdminApiSchema: ApiSchemaFor<AztecNodeAdmin> = {
100
99
  getConfig: z.function().returns(AztecNodeAdminConfigSchema),
101
100
  setConfig: z.function().args(AztecNodeAdminConfigSchema.partial()).returns(z.void()),
102
101
  startSnapshotUpload: z.function().args(z.string()).returns(z.void()),
103
- rollbackTo: z.function().args(z.number()).returns(z.void()),
102
+ rollbackTo: z.function().args(z.number(), optional(z.boolean()), optional(z.boolean())).returns(z.void()),
104
103
  pauseSync: z.function().returns(z.void()),
105
104
  resumeSync: z.function().returns(z.void()),
106
- getSlashPayloads: z.function().returns(z.array(SlashPayloadRoundSchema)),
107
105
  getSlashOffenses: z
108
106
  .function()
109
107
  .args(z.union([z.bigint(), z.literal('all'), z.literal('current')]))
@@ -37,6 +37,7 @@ import {
37
37
  type ProtocolContractAddresses,
38
38
  ProtocolContractAddressesSchema,
39
39
  } from '../contract/index.js';
40
+ import { ManaUsageEstimate } from '../gas/fee_math.js';
40
41
  import { GasFees } from '../gas/gas_fees.js';
41
42
  import { SiloedTag, Tag, TxScopedL2Log } from '../logs/index.js';
42
43
  import { type LogFilter, LogFilterSchema } from '../logs/log_filter.js';
@@ -272,6 +273,15 @@ export interface AztecNode
272
273
  */
273
274
  getCurrentMinFees(): Promise<GasFees>;
274
275
 
276
+ /**
277
+ * Returns predicted min fees for the current slot and next N slots.
278
+ * Each entry accounts for the L1 gas oracle transition and congestion growth based on the
279
+ * given mana usage estimate. Defaults to target usage (steady state).
280
+ * @param manaUsage - Expected mana usage per checkpoint (none, target, or limit).
281
+ * @returns An array of GasFees, one per slot in the prediction window.
282
+ */
283
+ getPredictedMinFees(manaUsage?: ManaUsageEstimate): Promise<GasFees[]>;
284
+
275
285
  /**
276
286
  * Method to fetch the current max priority fee of txs in the mempool.
277
287
  * @returns The current max priority fees.
@@ -578,6 +588,11 @@ export const AztecNodeApiSchema: ApiSchemaFor<AztecNode> = {
578
588
 
579
589
  getCurrentMinFees: z.function().returns(GasFees.schema),
580
590
 
591
+ getPredictedMinFees: z
592
+ .function()
593
+ .args(optional(z.nativeEnum(ManaUsageEstimate)))
594
+ .returns(z.array(GasFees.schema)),
595
+
581
596
  getMaxPriorityFees: z.function().returns(GasFees.schema),
582
597
 
583
598
  getNodeVersion: z.function().returns(z.string()),
@@ -16,10 +16,11 @@ export interface L2LogsSource {
16
16
  * array implies no logs match that tag.
17
17
  * @param tags - The tags to search for.
18
18
  * @param page - The page number (0-indexed) for pagination.
19
+ * @param upToBlockNumber - If set, only return logs from blocks up to and including this block number.
19
20
  * @returns An array of log arrays, one per tag. Returns at most 10 logs per tag per page. If 10 logs are returned
20
21
  * for a tag, the caller should fetch the next page to check for more logs.
21
22
  */
22
- getPrivateLogsByTags(tags: SiloedTag[], page?: number): Promise<TxScopedL2Log[][]>;
23
+ getPrivateLogsByTags(tags: SiloedTag[], page?: number, upToBlockNumber?: BlockNumber): Promise<TxScopedL2Log[][]>;
23
24
 
24
25
  /**
25
26
  * Gets public logs that match any of the `tags` from the specified contract. For each tag, an array of matching
@@ -27,6 +28,7 @@ export interface L2LogsSource {
27
28
  * @param contractAddress - The contract address to search logs for.
28
29
  * @param tags - The tags to search for.
29
30
  * @param page - The page number (0-indexed) for pagination.
31
+ * @param upToBlockNumber - If set, only return logs from blocks up to and including this block number.
30
32
  * @returns An array of log arrays, one per tag. Returns at most 10 logs per tag per page. If 10 logs are returned
31
33
  * for a tag, the caller should fetch the next page to check for more logs.
32
34
  */
@@ -34,6 +36,7 @@ export interface L2LogsSource {
34
36
  contractAddress: AztecAddress,
35
37
  tags: Tag[],
36
38
  page?: number,
39
+ upToBlockNumber?: BlockNumber,
37
40
  ): Promise<TxScopedL2Log[][]>;
38
41
 
39
42
  /**
@@ -3,6 +3,7 @@ import type { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
4
  import { type IndexedTreeLeafPreimage, SiblingPath } from '@aztec/foundation/trees';
5
5
 
6
+ import type { BlockHash } from '../block/block_hash.js';
6
7
  import type { MerkleTreeId, TreeHeights } from '../trees/merkle_tree_id.js';
7
8
  import type { NullifierLeaf } from '../trees/nullifier_leaf.js';
8
9
  import type { PublicDataTreeLeaf } from '../trees/public_data_leaf.js';
@@ -99,7 +100,7 @@ type LeafTypes = {
99
100
  [MerkleTreeId.NOTE_HASH_TREE]: Fr;
100
101
  [MerkleTreeId.PUBLIC_DATA_TREE]: Buffer;
101
102
  [MerkleTreeId.L1_TO_L2_MESSAGE_TREE]: Fr;
102
- [MerkleTreeId.ARCHIVE]: Fr;
103
+ [MerkleTreeId.ARCHIVE]: BlockHash;
103
104
  };
104
105
 
105
106
  type LeafValueTypes = {
@@ -107,7 +108,7 @@ type LeafValueTypes = {
107
108
  [MerkleTreeId.NOTE_HASH_TREE]: Fr;
108
109
  [MerkleTreeId.PUBLIC_DATA_TREE]: PublicDataTreeLeaf;
109
110
  [MerkleTreeId.L1_TO_L2_MESSAGE_TREE]: Fr;
110
- [MerkleTreeId.ARCHIVE]: Fr;
111
+ [MerkleTreeId.ARCHIVE]: BlockHash;
111
112
  };
112
113
 
113
114
  export type MerkleTreeLeafType<ID extends MerkleTreeId> = LeafTypes[ID];
@@ -71,7 +71,7 @@ export const proverConfigMappings: ConfigMappingsType<ProverConfig> = {
71
71
  },
72
72
  proverId: {
73
73
  env: 'PROVER_ID',
74
- parseEnv: (val?: string) => parseProverId(val),
74
+ parseEnv: (val: string) => parseProverId(val),
75
75
  description: 'Hex value that identifies the prover. Defaults to the address used for submitting proofs if not set.',
76
76
  },
77
77
  proverTestDelayType: {
@@ -117,10 +117,7 @@ export const proverConfigMappings: ConfigMappingsType<ProverConfig> = {
117
117
  },
118
118
  };
119
119
 
120
- function parseProverId(str?: string) {
121
- if (!str) {
122
- return undefined;
123
- }
120
+ function parseProverId(str: string) {
124
121
  return EthAddress.fromString(str);
125
122
  }
126
123
 
@@ -3,12 +3,8 @@ import { schemas, zodFor } from '@aztec/foundation/schemas';
3
3
 
4
4
  import { z } from 'zod';
5
5
 
6
- export type SlasherClientType = 'empire' | 'tally';
7
-
8
6
  export interface SlasherConfig {
9
7
  slashOverridePayload?: EthAddress;
10
- slashMinPenaltyPercentage: number;
11
- slashMaxPenaltyPercentage: number;
12
8
  slashSelfAllowed?: boolean; // Whether to allow slashes to own validators
13
9
  slashValidatorsAlways: EthAddress[]; // Array of validator addresses
14
10
  slashValidatorsNever: EthAddress[]; // Array of validator addresses
@@ -32,8 +28,6 @@ export interface SlasherConfig {
32
28
  export const SlasherConfigSchema = zodFor<SlasherConfig>()(
33
29
  z.object({
34
30
  slashOverridePayload: schemas.EthAddress.optional(),
35
- slashMinPenaltyPercentage: z.number(),
36
- slashMaxPenaltyPercentage: z.number(),
37
31
  slashValidatorsAlways: z.array(schemas.EthAddress),
38
32
  slashValidatorsNever: z.array(schemas.EthAddress),
39
33
  slashPrunePenalty: schemas.BigInt,
@@ -1,4 +1,4 @@
1
- import type { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
1
+ import type { CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
2
  import type { SecretValue } from '@aztec/foundation/config';
3
3
  import { Fr } from '@aztec/foundation/curves/bn254';
4
4
  import type { EthAddress } from '@aztec/foundation/eth-address';
@@ -9,69 +9,71 @@ import type {
9
9
  BlockProposal,
10
10
  BlockProposalOptions,
11
11
  CheckpointAttestation,
12
- CheckpointLastBlockData,
13
12
  CheckpointProposal,
14
13
  CheckpointProposalOptions,
15
14
  } from '@aztec/stdlib/p2p';
16
15
  import type { CheckpointHeader } from '@aztec/stdlib/rollup';
17
16
  import type { BlockHeader, Tx } from '@aztec/stdlib/tx';
18
- import { type ValidatorHASignerConfig, ValidatorHASignerConfigSchema } from '@aztec/validator-ha-signer/config';
19
17
 
20
18
  import type { PeerId } from '@libp2p/interface';
21
19
  import { z } from 'zod';
22
20
 
23
21
  import type { CommitteeAttestationsAndSigners } from '../block/index.js';
22
+ import {
23
+ type LocalSignerConfig,
24
+ LocalSignerConfigSchema,
25
+ type ValidatorHASignerConfig,
26
+ ValidatorHASignerConfigSchema,
27
+ } from '../ha-signing/index.js';
24
28
  import { AllowedElementSchema } from './allowed_element.js';
25
29
 
26
30
  /**
27
31
  * Validator client configuration
28
32
  */
29
- export type ValidatorClientConfig = ValidatorHASignerConfig & {
30
- /** The private keys of the validators participating in attestation duties */
31
- validatorPrivateKeys?: SecretValue<`0x${string}`[]>;
33
+ export type ValidatorClientConfig = ValidatorHASignerConfig &
34
+ LocalSignerConfig & {
35
+ /** The private keys of the validators participating in attestation duties */
36
+ validatorPrivateKeys?: SecretValue<`0x${string}`[]>;
32
37
 
33
- /** The addresses of the validators to use with remote signers */
34
- validatorAddresses?: EthAddress[];
38
+ /** The addresses of the validators to use with remote signers */
39
+ validatorAddresses?: EthAddress[];
35
40
 
36
- /** Do not run the validator */
37
- disableValidator: boolean;
41
+ /** Do not run the validator */
42
+ disableValidator: boolean;
38
43
 
39
- /** Temporarily disable these specific validator addresses */
40
- disabledValidators: EthAddress[];
44
+ /** Temporarily disable these specific validator addresses */
45
+ disabledValidators: EthAddress[];
41
46
 
42
- /** Interval between polling for new attestations from peers */
43
- attestationPollingIntervalMs: number;
47
+ /** Interval between polling for new attestations from peers */
48
+ attestationPollingIntervalMs: number;
44
49
 
45
- /** Whether to re-execute transactions in a block proposal before attesting */
46
- validatorReexecute: boolean;
50
+ /** Whether to always reexecute block proposals, even for non-validator nodes or when out of the current committee */
51
+ alwaysReexecuteBlockProposals?: boolean;
47
52
 
48
- /** Whether to always reexecute block proposals, even for non-validator nodes or when out of the currnet committee */
49
- alwaysReexecuteBlockProposals?: boolean;
53
+ /** Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus */
54
+ fishermanMode?: boolean;
50
55
 
51
- /** Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus */
52
- fishermanMode?: boolean;
56
+ /** Skip checkpoint proposal validation and always attest (default: false) */
57
+ skipCheckpointProposalValidation?: boolean;
53
58
 
54
- /** Skip checkpoint proposal validation and always attest (default: false) */
55
- skipCheckpointProposalValidation?: boolean;
59
+ /** Skip pushing re-executed blocks to archiver (default: false) */
60
+ skipPushProposedBlocksToArchiver?: boolean;
56
61
 
57
- /** Skip pushing re-executed blocks to archiver (default: false) */
58
- skipPushProposedBlocksToArchiver?: boolean;
62
+ /** Agree to attest to equivocated checkpoint proposals (for testing purposes only) */
63
+ attestToEquivocatedProposals?: boolean;
59
64
 
60
- /** Agree to attest to equivocated checkpoint proposals (for testing purposes only) */
61
- attestToEquivocatedProposals?: boolean;
65
+ /** Maximum L2 gas per block for validation. Proposals exceeding this limit are rejected. */
66
+ validateMaxL2BlockGas?: number;
62
67
 
63
- /** Maximum L2 gas per block for validation. Proposals exceeding this limit are rejected. */
64
- validateMaxL2BlockGas?: number;
68
+ /** Maximum DA gas per block for validation. Proposals exceeding this limit are rejected. */
69
+ validateMaxDABlockGas?: number;
65
70
 
66
- /** Maximum DA gas per block for validation. Proposals exceeding this limit are rejected. */
67
- validateMaxDABlockGas?: number;
71
+ /** Maximum transactions per block for validation. Proposals exceeding this limit are rejected. */
72
+ validateMaxTxsPerBlock?: number;
68
73
 
69
- /** Maximum transactions per block for validation. Proposals exceeding this limit are rejected. */
70
- validateMaxTxsPerBlock?: number;
71
-
72
- /** Maximum transactions per checkpoint for validation. Proposals exceeding this limit are rejected. */
73
- validateMaxTxsPerCheckpoint?: number;
74
- };
74
+ /** Maximum transactions per checkpoint for validation. Proposals exceeding this limit are rejected. */
75
+ validateMaxTxsPerCheckpoint?: number;
76
+ };
75
77
 
76
78
  export type ValidatorClientFullConfig = ValidatorClientConfig &
77
79
  Pick<SequencerConfig, 'txPublicSetupAllowListExtend' | 'broadcastInvalidBlockProposal'> &
@@ -87,12 +89,11 @@ export type ValidatorClientFullConfig = ValidatorClientConfig &
87
89
  };
88
90
 
89
91
  export const ValidatorClientConfigSchema = zodFor<Omit<ValidatorClientConfig, 'validatorPrivateKeys'>>()(
90
- ValidatorHASignerConfigSchema.extend({
92
+ ValidatorHASignerConfigSchema.merge(LocalSignerConfigSchema).extend({
91
93
  validatorAddresses: z.array(schemas.EthAddress).optional(),
92
94
  disableValidator: z.boolean(),
93
95
  disabledValidators: z.array(schemas.EthAddress),
94
96
  attestationPollingIntervalMs: z.number().min(0),
95
- validatorReexecute: z.boolean(),
96
97
  alwaysReexecuteBlockProposals: z.boolean().optional(),
97
98
  fishermanMode: z.boolean().optional(),
98
99
  skipCheckpointProposalValidation: z.boolean().optional(),
@@ -116,8 +117,6 @@ export const ValidatorClientFullConfigSchema = zodFor<Omit<ValidatorClientFullCo
116
117
  }),
117
118
  );
118
119
 
119
- export type CreateCheckpointProposalLastBlockData = Omit<CheckpointLastBlockData, 'txHashes'> & { txs: Tx[] };
120
-
121
120
  export interface Validator {
122
121
  start(): Promise<void>;
123
122
  updateConfig(config: Partial<ValidatorClientFullConfig>): void;
@@ -125,6 +124,7 @@ export interface Validator {
125
124
  // Block validation responsibilities
126
125
  createBlockProposal(
127
126
  blockHeader: BlockHeader,
127
+ checkpointNumber: CheckpointNumber,
128
128
  indexWithinCheckpoint: number,
129
129
  inHash: Fr,
130
130
  archive: Fr,
@@ -137,8 +137,9 @@ export interface Validator {
137
137
  createCheckpointProposal(
138
138
  checkpointHeader: CheckpointHeader,
139
139
  archive: Fr,
140
+ checkpointNumber: CheckpointNumber,
140
141
  feeAssetPriceModifier: bigint,
141
- lastBlockInfo: CreateCheckpointProposalLastBlockData | undefined,
142
+ lastBlockProposal: BlockProposal | undefined,
142
143
  proposerAddress: EthAddress | undefined,
143
144
  options: CheckpointProposalOptions,
144
145
  ): Promise<CheckpointProposal>;
@@ -162,15 +163,23 @@ export interface Validator {
162
163
  broadcastBlockProposal(proposal: BlockProposal): Promise<void>;
163
164
 
164
165
  /** Collect own attestations for a checkpoint proposal (used when skipping p2p attestation collection) */
165
- collectOwnAttestations(proposal: CheckpointProposal): Promise<CheckpointAttestation[]>;
166
+ collectOwnAttestations(
167
+ proposal: CheckpointProposal,
168
+ checkpointNumber: CheckpointNumber,
169
+ ): Promise<CheckpointAttestation[]>;
166
170
 
167
171
  /** Collect attestations from the p2p network for a checkpoint proposal */
168
- collectAttestations(proposal: CheckpointProposal, required: number, deadline: Date): Promise<CheckpointAttestation[]>;
172
+ collectAttestations(
173
+ proposal: CheckpointProposal,
174
+ required: number,
175
+ deadline: Date,
176
+ checkpointNumber: CheckpointNumber,
177
+ ): Promise<CheckpointAttestation[]>;
169
178
 
170
179
  signAttestationsAndSigners(
171
180
  attestationsAndSigners: CommitteeAttestationsAndSigners,
172
181
  proposer: EthAddress,
173
182
  slot: SlotNumber,
174
- blockNumber: BlockNumber | CheckpointNumber,
183
+ checkpointNumber: CheckpointNumber,
175
184
  ): Promise<Signature>;
176
185
  }
@@ -25,7 +25,7 @@ export class ClaimedLengthArray<T extends Serializable, N extends number> {
25
25
  arrayLength: N,
26
26
  ): ClaimedLengthArray<T, N> {
27
27
  const reader = BufferReader.asReader(buffer);
28
- const array = reader.readArray(arrayLength, deserializer) as Tuple<T, N>;
28
+ const array = reader.readArray(arrayLength, deserializer);
29
29
  const claimedLength = reader.readNumber();
30
30
  return new ClaimedLengthArray(array, claimedLength);
31
31
  }
@@ -42,7 +42,7 @@ export class ClaimedLengthArray<T extends Serializable, N extends number> {
42
42
  arrayLength: N,
43
43
  ): ClaimedLengthArray<T, N> {
44
44
  const reader = FieldReader.asReader(fields);
45
- const array = reader.readTuple(arrayLength, deserializer);
45
+ const array = reader.readArray(arrayLength, deserializer);
46
46
  const claimedLength = reader.readU32();
47
47
  return new ClaimedLengthArray(array, claimedLength);
48
48
  }
@@ -105,11 +105,8 @@ export class PrivateKernelResetHints<
105
105
  fromBuffer: buf =>
106
106
  nullifierReadRequestHintsFromBuffer(buf, numNullifierReadRequestPending, numNullifierReadRequestSettled),
107
107
  }),
108
- reader.readArray(numKeyValidationHints, KeyValidationHint) as Tuple<KeyValidationHint, KEY_VALIDATION_HINTS_LEN>,
109
- reader.readArray(numTransientDataSquashingHints, TransientDataSquashingHint) as Tuple<
110
- TransientDataSquashingHint,
111
- TRANSIENT_DATA_HINTS_LEN
112
- >,
108
+ reader.readArray(numKeyValidationHints, KeyValidationHint),
109
+ reader.readArray(numTransientDataSquashingHints, TransientDataSquashingHint),
113
110
  );
114
111
  }
115
112
  }
@@ -158,11 +158,11 @@ export class ReadRequestResetHints<
158
158
  > {
159
159
  const reader = BufferReader.asReader(buffer);
160
160
  return new ReadRequestResetHints(
161
- reader.readArray(readRequestLen, ReadRequestAction) as Tuple<ReadRequestAction, READ_REQUEST_LEN>,
162
- reader.readArray(numPendingReads, PendingReadHint) as Tuple<PendingReadHint, PENDING_READ_HINTS_LEN>,
161
+ reader.readArray(readRequestLen, ReadRequestAction),
162
+ reader.readArray(numPendingReads, PendingReadHint),
163
163
  reader.readArray(numSettledReads, {
164
164
  fromBuffer: r => SettledReadHint.fromBuffer(r, treeHeight, leafPreimageFromBuffer),
165
- }) as Tuple<SettledReadHint<TREE_HEIGHT, LEAF_PREIMAGE>, SETTLED_READ_HINTS_LEN>,
165
+ }),
166
166
  );
167
167
  }
168
168
 
@@ -19,9 +19,9 @@ export class PaddedSideEffects {
19
19
  static fromBuffer(buffer: Buffer | BufferReader) {
20
20
  const reader = BufferReader.asReader(buffer);
21
21
  return new PaddedSideEffects(
22
- reader.readTuple(MAX_NOTE_HASHES_PER_TX, Fr),
23
- reader.readTuple(MAX_NULLIFIERS_PER_TX, Fr),
24
- reader.readTuple(MAX_PRIVATE_LOGS_PER_TX, PrivateLog),
22
+ reader.readArray(MAX_NOTE_HASHES_PER_TX, Fr),
23
+ reader.readArray(MAX_NULLIFIERS_PER_TX, Fr),
24
+ reader.readArray(MAX_PRIVATE_LOGS_PER_TX, PrivateLog),
25
25
  );
26
26
  }
27
27
 
@@ -73,7 +73,7 @@ export class PrivateToAvmAccumulatedData {
73
73
  return new this(
74
74
  reader.readFieldArray(MAX_NOTE_HASHES_PER_TX),
75
75
  reader.readFieldArray(MAX_NULLIFIERS_PER_TX),
76
- reader.readTuple(MAX_L2_TO_L1_MSGS_PER_TX, ScopedL2ToL1Message),
76
+ reader.readArray(MAX_L2_TO_L1_MSGS_PER_TX, ScopedL2ToL1Message),
77
77
  );
78
78
  }
79
79
 
@@ -94,9 +94,9 @@ export class PrivateToAvmAccumulatedData {
94
94
  static fromBuffer(buffer: Buffer | BufferReader) {
95
95
  const reader = BufferReader.asReader(buffer);
96
96
  return new PrivateToAvmAccumulatedData(
97
- reader.readTuple(MAX_NOTE_HASHES_PER_TX, Fr),
98
- reader.readTuple(MAX_NULLIFIERS_PER_TX, Fr),
99
- reader.readTuple(MAX_L2_TO_L1_MSGS_PER_TX, ScopedL2ToL1Message),
97
+ reader.readArray(MAX_NOTE_HASHES_PER_TX, Fr),
98
+ reader.readArray(MAX_NULLIFIERS_PER_TX, Fr),
99
+ reader.readArray(MAX_L2_TO_L1_MSGS_PER_TX, ScopedL2ToL1Message),
100
100
  );
101
101
  }
102
102