@aztec/stdlib 0.0.1-commit.936cb2cae → 0.0.1-commit.949a33fd8

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 (353) hide show
  1. package/dest/abi/authorization_selector.d.ts +3 -6
  2. package/dest/abi/authorization_selector.d.ts.map +1 -1
  3. package/dest/abi/encoder.d.ts +1 -1
  4. package/dest/abi/encoder.d.ts.map +1 -1
  5. package/dest/abi/encoder.js +32 -6
  6. package/dest/abi/event_selector.d.ts +3 -6
  7. package/dest/abi/event_selector.d.ts.map +1 -1
  8. package/dest/abi/function_selector.d.ts +3 -6
  9. package/dest/abi/function_selector.d.ts.map +1 -1
  10. package/dest/abi/function_selector.js +1 -3
  11. package/dest/abi/note_selector.d.ts +3 -6
  12. package/dest/abi/note_selector.d.ts.map +1 -1
  13. package/dest/abi/note_selector.js +1 -3
  14. package/dest/abi/selector.d.ts +2 -2
  15. package/dest/abi/selector.d.ts.map +1 -1
  16. package/dest/abi/selector.js +1 -1
  17. package/dest/avm/revert_code.d.ts +8 -18
  18. package/dest/avm/revert_code.d.ts.map +1 -1
  19. package/dest/avm/revert_code.js +15 -30
  20. package/dest/aztec-address/index.d.ts +3 -6
  21. package/dest/aztec-address/index.d.ts.map +1 -1
  22. package/dest/aztec-address/index.js +2 -4
  23. package/dest/block/attestation_info.d.ts +3 -2
  24. package/dest/block/attestation_info.d.ts.map +1 -1
  25. package/dest/block/attestation_info.js +7 -5
  26. package/dest/block/block_data.d.ts +297 -8
  27. package/dest/block/block_data.d.ts.map +1 -1
  28. package/dest/block/block_data.js +16 -2
  29. package/dest/block/block_hash.d.ts +11 -10
  30. package/dest/block/block_hash.d.ts.map +1 -1
  31. package/dest/block/block_hash.js +10 -9
  32. package/dest/block/block_parameter.d.ts +30 -3
  33. package/dest/block/block_parameter.d.ts.map +1 -1
  34. package/dest/block/block_parameter.js +36 -2
  35. package/dest/block/l2_block_info.d.ts +6 -5
  36. package/dest/block/l2_block_info.d.ts.map +1 -1
  37. package/dest/block/l2_block_info.js +6 -5
  38. package/dest/block/l2_block_source.d.ts +116 -4
  39. package/dest/block/l2_block_source.d.ts.map +1 -1
  40. package/dest/block/l2_block_source.js +1 -0
  41. package/dest/block/l2_block_stream/interfaces.d.ts +6 -3
  42. package/dest/block/l2_block_stream/interfaces.d.ts.map +1 -1
  43. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts +1 -1
  44. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts.map +1 -1
  45. package/dest/block/l2_block_stream/l2_tips_store_base.js +18 -5
  46. package/dest/block/proposal/attestations_and_signers.d.ts +13 -6
  47. package/dest/block/proposal/attestations_and_signers.d.ts.map +1 -1
  48. package/dest/block/proposal/attestations_and_signers.js +26 -18
  49. package/dest/block/test/l2_tips_store_test_suite.d.ts +1 -1
  50. package/dest/block/test/l2_tips_store_test_suite.d.ts.map +1 -1
  51. package/dest/block/test/l2_tips_store_test_suite.js +4 -3
  52. package/dest/checkpoint/checkpoint.d.ts +7 -1
  53. package/dest/checkpoint/checkpoint.d.ts.map +1 -1
  54. package/dest/checkpoint/checkpoint.js +9 -1
  55. package/dest/checkpoint/checkpoint_data.d.ts +77 -5
  56. package/dest/checkpoint/checkpoint_data.d.ts.map +1 -1
  57. package/dest/checkpoint/checkpoint_data.js +12 -0
  58. package/dest/config/chain-config.d.ts +2 -2
  59. package/dest/config/chain-config.d.ts.map +1 -1
  60. package/dest/config/chain-config.js +9 -3
  61. package/dest/config/sequencer-config.d.ts +3 -3
  62. package/dest/config/sequencer-config.d.ts.map +1 -1
  63. package/dest/config/sequencer-config.js +11 -4
  64. package/dest/contract/contract_address.d.ts +1 -1
  65. package/dest/contract/contract_address.js +2 -2
  66. package/dest/contract/private_function.d.ts +1 -1
  67. package/dest/contract/private_function.d.ts.map +1 -1
  68. package/dest/contract/private_function.js +2 -4
  69. package/dest/epoch-helpers/index.d.ts +3 -1
  70. package/dest/epoch-helpers/index.d.ts.map +1 -1
  71. package/dest/epoch-helpers/index.js +3 -0
  72. package/dest/gas/fee_math.d.ts +49 -0
  73. package/dest/gas/fee_math.d.ts.map +1 -0
  74. package/dest/gas/fee_math.js +80 -0
  75. package/dest/gas/gas_fees.d.ts +5 -1
  76. package/dest/gas/gas_fees.d.ts.map +1 -1
  77. package/dest/gas/gas_fees.js +10 -1
  78. package/dest/gas/gas_settings.d.ts +40 -3
  79. package/dest/gas/gas_settings.d.ts.map +1 -1
  80. package/dest/gas/gas_settings.js +50 -6
  81. package/dest/gas/index.d.ts +2 -1
  82. package/dest/gas/index.d.ts.map +1 -1
  83. package/dest/gas/index.js +1 -0
  84. package/dest/ha-signing/config.d.ts +6 -6
  85. package/dest/ha-signing/config.d.ts.map +1 -1
  86. package/dest/ha-signing/config.js +4 -3
  87. package/dest/ha-signing/index.d.ts +2 -2
  88. package/dest/ha-signing/index.d.ts.map +1 -1
  89. package/dest/ha-signing/index.js +1 -1
  90. package/dest/ha-signing/local_config.d.ts +1 -1
  91. package/dest/ha-signing/local_config.d.ts.map +1 -1
  92. package/dest/ha-signing/local_config.js +2 -2
  93. package/dest/ha-signing/types.d.ts +37 -32
  94. package/dest/ha-signing/types.d.ts.map +1 -1
  95. package/dest/ha-signing/types.js +13 -6
  96. package/dest/hash/hash.d.ts +16 -1
  97. package/dest/hash/hash.d.ts.map +1 -1
  98. package/dest/hash/hash.js +32 -0
  99. package/dest/interfaces/archiver.d.ts +11 -1
  100. package/dest/interfaces/archiver.d.ts.map +1 -1
  101. package/dest/interfaces/archiver.js +11 -3
  102. package/dest/interfaces/aztec-node-admin.d.ts +19 -14
  103. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  104. package/dest/interfaces/aztec-node-admin.js +5 -4
  105. package/dest/interfaces/aztec-node-debug.d.ts +21 -0
  106. package/dest/interfaces/aztec-node-debug.d.ts.map +1 -0
  107. package/dest/interfaces/aztec-node-debug.js +18 -0
  108. package/dest/interfaces/aztec-node.d.ts +54 -55
  109. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  110. package/dest/interfaces/aztec-node.js +20 -16
  111. package/dest/interfaces/block_response.d.ts +156 -0
  112. package/dest/interfaces/block_response.d.ts.map +1 -0
  113. package/dest/interfaces/block_response.js +24 -0
  114. package/dest/interfaces/chain_tips.d.ts +304 -0
  115. package/dest/interfaces/chain_tips.d.ts.map +1 -0
  116. package/dest/interfaces/chain_tips.js +11 -0
  117. package/dest/interfaces/checkpoint_parameter.d.ts +27 -0
  118. package/dest/interfaces/checkpoint_parameter.d.ts.map +1 -0
  119. package/dest/interfaces/checkpoint_parameter.js +20 -0
  120. package/dest/interfaces/checkpoint_response.d.ts +312 -0
  121. package/dest/interfaces/checkpoint_response.d.ts.map +1 -0
  122. package/dest/interfaces/checkpoint_response.js +26 -0
  123. package/dest/interfaces/client.d.ts +7 -1
  124. package/dest/interfaces/client.d.ts.map +1 -1
  125. package/dest/interfaces/client.js +6 -0
  126. package/dest/interfaces/configs.d.ts +7 -2
  127. package/dest/interfaces/configs.d.ts.map +1 -1
  128. package/dest/interfaces/configs.js +2 -1
  129. package/dest/interfaces/l1_publish_info.d.ts +43 -0
  130. package/dest/interfaces/l1_publish_info.d.ts.map +1 -0
  131. package/dest/interfaces/l1_publish_info.js +26 -0
  132. package/dest/interfaces/merkle_tree_operations.d.ts +4 -3
  133. package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
  134. package/dest/interfaces/prover-client.d.ts +1 -1
  135. package/dest/interfaces/prover-client.d.ts.map +1 -1
  136. package/dest/interfaces/prover-client.js +0 -3
  137. package/dest/interfaces/proving-job.d.ts +166 -166
  138. package/dest/interfaces/server.d.ts +6 -1
  139. package/dest/interfaces/server.d.ts.map +1 -1
  140. package/dest/interfaces/server.js +5 -0
  141. package/dest/interfaces/slasher.d.ts +1 -10
  142. package/dest/interfaces/slasher.d.ts.map +1 -1
  143. package/dest/interfaces/slasher.js +0 -2
  144. package/dest/interfaces/validator.d.ts +23 -17
  145. package/dest/interfaces/validator.d.ts.map +1 -1
  146. package/dest/interfaces/validator.js +1 -0
  147. package/dest/l1-contracts/index.d.ts +2 -2
  148. package/dest/l1-contracts/index.d.ts.map +1 -1
  149. package/dest/l1-contracts/index.js +1 -1
  150. package/dest/logs/extended_directional_app_tagging_secret.d.ts +4 -4
  151. package/dest/logs/extended_directional_app_tagging_secret.d.ts.map +1 -1
  152. package/dest/logs/extended_directional_app_tagging_secret.js +12 -5
  153. package/dest/logs/log_id.d.ts +1 -1
  154. package/dest/logs/log_id.d.ts.map +1 -1
  155. package/dest/logs/log_id.js +1 -2
  156. package/dest/logs/siloed_tag.d.ts +5 -7
  157. package/dest/logs/siloed_tag.d.ts.map +1 -1
  158. package/dest/logs/siloed_tag.js +4 -0
  159. package/dest/logs/tag.d.ts +5 -6
  160. package/dest/logs/tag.d.ts.map +1 -1
  161. package/dest/logs/tag.js +4 -0
  162. package/dest/p2p/block_proposal.d.ts +22 -14
  163. package/dest/p2p/block_proposal.d.ts.map +1 -1
  164. package/dest/p2p/block_proposal.js +45 -40
  165. package/dest/p2p/checkpoint_attestation.d.ts +10 -8
  166. package/dest/p2p/checkpoint_attestation.d.ts.map +1 -1
  167. package/dest/p2p/checkpoint_attestation.js +17 -24
  168. package/dest/p2p/checkpoint_proposal.d.ts +20 -14
  169. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  170. package/dest/p2p/checkpoint_proposal.js +34 -51
  171. package/dest/p2p/consensus_payload.d.ts +18 -7
  172. package/dest/p2p/consensus_payload.d.ts.map +1 -1
  173. package/dest/p2p/consensus_payload.js +31 -19
  174. package/dest/p2p/gossipable.d.ts +4 -4
  175. package/dest/p2p/gossipable.d.ts.map +1 -1
  176. package/dest/p2p/signature_utils.d.ts +28 -19
  177. package/dest/p2p/signature_utils.d.ts.map +1 -1
  178. package/dest/p2p/signature_utils.js +118 -21
  179. package/dest/p2p/signed_txs.d.ts +15 -13
  180. package/dest/p2p/signed_txs.d.ts.map +1 -1
  181. package/dest/p2p/signed_txs.js +26 -24
  182. package/dest/parity/parity_base_private_inputs.d.ts +7 -3
  183. package/dest/parity/parity_base_private_inputs.d.ts.map +1 -1
  184. package/dest/parity/parity_base_private_inputs.js +7 -5
  185. package/dest/parity/parity_public_inputs.d.ts +7 -3
  186. package/dest/parity/parity_public_inputs.d.ts.map +1 -1
  187. package/dest/parity/parity_public_inputs.js +6 -3
  188. package/dest/rollup/block_headers_hash.d.ts +1 -1
  189. package/dest/rollup/block_headers_hash.d.ts.map +1 -1
  190. package/dest/rollup/block_headers_hash.js +8 -2
  191. package/dest/slashing/index.d.ts +2 -3
  192. package/dest/slashing/index.d.ts.map +1 -1
  193. package/dest/slashing/index.js +1 -2
  194. package/dest/slashing/serialization.d.ts +2 -6
  195. package/dest/slashing/serialization.d.ts.map +1 -1
  196. package/dest/slashing/serialization.js +0 -60
  197. package/dest/slashing/types.d.ts +4 -90
  198. package/dest/slashing/types.d.ts.map +1 -1
  199. package/dest/slashing/types.js +0 -14
  200. package/dest/slashing/{tally.d.ts → votes.d.ts} +1 -1
  201. package/dest/slashing/{tally.d.ts.map → votes.d.ts.map} +1 -1
  202. package/dest/slashing/{tally.js → votes.js} +1 -1
  203. package/dest/tests/factories.d.ts +2 -7
  204. package/dest/tests/factories.d.ts.map +1 -1
  205. package/dest/tests/factories.js +19 -19
  206. package/dest/tests/mocks.d.ts +7 -1
  207. package/dest/tests/mocks.d.ts.map +1 -1
  208. package/dest/tests/mocks.js +39 -30
  209. package/dest/timetable/index.d.ts +51 -1
  210. package/dest/timetable/index.d.ts.map +1 -1
  211. package/dest/timetable/index.js +218 -14
  212. package/dest/trees/nullifier_leaf.d.ts +2 -1
  213. package/dest/trees/nullifier_leaf.d.ts.map +1 -1
  214. package/dest/trees/nullifier_leaf.js +3 -0
  215. package/dest/tx/block_header.d.ts +2 -2
  216. package/dest/tx/block_header.d.ts.map +1 -1
  217. package/dest/tx/block_header.js +1 -1
  218. package/dest/tx/fee_provider.d.ts +10 -0
  219. package/dest/tx/fee_provider.d.ts.map +1 -0
  220. package/dest/tx/fee_provider.js +1 -0
  221. package/dest/tx/global_variable_builder.d.ts +3 -4
  222. package/dest/tx/global_variable_builder.d.ts.map +1 -1
  223. package/dest/tx/index.d.ts +2 -1
  224. package/dest/tx/index.d.ts.map +1 -1
  225. package/dest/tx/index.js +1 -0
  226. package/dest/tx/indexed_tx_effect.d.ts +1 -1
  227. package/dest/tx/indexed_tx_effect.d.ts.map +1 -1
  228. package/dest/tx/indexed_tx_effect.js +1 -2
  229. package/dest/tx/profiling.js +4 -4
  230. package/dest/tx/simulated_tx.d.ts +4 -4
  231. package/dest/tx/simulated_tx.d.ts.map +1 -1
  232. package/dest/tx/simulated_tx.js +3 -3
  233. package/dest/tx/tx.d.ts +3 -3
  234. package/dest/tx/tx.d.ts.map +1 -1
  235. package/dest/tx/tx_receipt.d.ts +8 -4
  236. package/dest/tx/tx_receipt.d.ts.map +1 -1
  237. package/dest/tx/tx_receipt.js +8 -15
  238. package/dest/types/shared.d.ts +1 -10
  239. package/dest/types/shared.d.ts.map +1 -1
  240. package/dest/types/shared.js +0 -9
  241. package/dest/vks/verification_key.d.ts +2 -137
  242. package/dest/vks/verification_key.d.ts.map +1 -1
  243. package/dest/vks/verification_key.js +5 -126
  244. package/dest/world-state/genesis_data.d.ts +11 -0
  245. package/dest/world-state/genesis_data.d.ts.map +1 -0
  246. package/dest/world-state/genesis_data.js +4 -0
  247. package/dest/world-state/index.d.ts +2 -1
  248. package/dest/world-state/index.d.ts.map +1 -1
  249. package/dest/world-state/index.js +1 -0
  250. package/dest/world-state/world_state_revision.d.ts +8 -1
  251. package/dest/world-state/world_state_revision.d.ts.map +1 -1
  252. package/dest/world-state/world_state_revision.js +7 -1
  253. package/package.json +8 -8
  254. package/src/abi/authorization_selector.ts +2 -8
  255. package/src/abi/encoder.ts +42 -6
  256. package/src/abi/event_selector.ts +2 -8
  257. package/src/abi/function_selector.ts +3 -12
  258. package/src/abi/note_selector.ts +3 -12
  259. package/src/abi/selector.ts +1 -1
  260. package/src/avm/revert_code.ts +25 -39
  261. package/src/aztec-address/index.ts +4 -10
  262. package/src/block/attestation_info.ts +11 -11
  263. package/src/block/block_data.ts +20 -4
  264. package/src/block/block_hash.ts +21 -14
  265. package/src/block/block_parameter.ts +35 -2
  266. package/src/block/l2_block_info.ts +8 -6
  267. package/src/block/l2_block_source.ts +51 -3
  268. package/src/block/l2_block_stream/interfaces.ts +6 -2
  269. package/src/block/l2_block_stream/l2_tips_store_base.ts +25 -13
  270. package/src/block/proposal/attestations_and_signers.ts +32 -17
  271. package/src/block/test/l2_tips_store_test_suite.ts +9 -2
  272. package/src/checkpoint/checkpoint.ts +11 -1
  273. package/src/checkpoint/checkpoint_data.ts +44 -4
  274. package/src/config/chain-config.ts +9 -4
  275. package/src/config/sequencer-config.ts +20 -6
  276. package/src/contract/contract_address.ts +2 -2
  277. package/src/contract/private_function.ts +3 -1
  278. package/src/epoch-helpers/index.ts +5 -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/gas_settings.ts +65 -12
  283. package/src/gas/index.ts +1 -0
  284. package/src/ha-signing/config.ts +5 -2
  285. package/src/ha-signing/index.ts +3 -1
  286. package/src/ha-signing/local_config.ts +2 -2
  287. package/src/ha-signing/types.ts +48 -34
  288. package/src/hash/hash.ts +27 -0
  289. package/src/interfaces/archiver.ts +22 -2
  290. package/src/interfaces/aztec-node-admin.ts +8 -8
  291. package/src/interfaces/aztec-node-debug.ts +40 -0
  292. package/src/interfaces/aztec-node.ts +120 -95
  293. package/src/interfaces/block_response.ts +79 -0
  294. package/src/interfaces/chain_tips.ts +24 -0
  295. package/src/interfaces/checkpoint_parameter.ts +22 -0
  296. package/src/interfaces/checkpoint_response.ts +84 -0
  297. package/src/interfaces/client.ts +6 -0
  298. package/src/interfaces/configs.ts +5 -1
  299. package/src/interfaces/l1_publish_info.ts +40 -0
  300. package/src/interfaces/merkle_tree_operations.ts +3 -2
  301. package/src/interfaces/prover-client.ts +2 -5
  302. package/src/interfaces/server.ts +5 -0
  303. package/src/interfaces/slasher.ts +0 -6
  304. package/src/interfaces/validator.ts +20 -8
  305. package/src/l1-contracts/index.ts +1 -1
  306. package/src/logs/extended_directional_app_tagging_secret.ts +19 -8
  307. package/src/logs/log_id.ts +1 -2
  308. package/src/logs/siloed_tag.ts +8 -9
  309. package/src/logs/tag.ts +8 -8
  310. package/src/p2p/block_proposal.ts +96 -36
  311. package/src/p2p/checkpoint_attestation.ts +20 -29
  312. package/src/p2p/checkpoint_proposal.ts +88 -71
  313. package/src/p2p/consensus_payload.ts +50 -28
  314. package/src/p2p/gossipable.ts +4 -4
  315. package/src/p2p/signature_utils.ts +110 -25
  316. package/src/p2p/signed_txs.ts +46 -28
  317. package/src/parity/parity_base_private_inputs.ts +10 -4
  318. package/src/parity/parity_public_inputs.ts +9 -2
  319. package/src/rollup/block_headers_hash.ts +11 -2
  320. package/src/slashing/index.ts +1 -2
  321. package/src/slashing/serialization.ts +1 -81
  322. package/src/slashing/types.ts +3 -35
  323. package/src/slashing/{tally.ts → votes.ts} +1 -1
  324. package/src/tests/factories.ts +19 -21
  325. package/src/tests/mocks.ts +63 -39
  326. package/src/timetable/index.ts +308 -13
  327. package/src/trees/nullifier_leaf.ts +4 -0
  328. package/src/tx/block_header.ts +2 -2
  329. package/src/tx/fee_provider.ts +10 -0
  330. package/src/tx/global_variable_builder.ts +2 -3
  331. package/src/tx/index.ts +1 -0
  332. package/src/tx/indexed_tx_effect.ts +1 -2
  333. package/src/tx/profiling.ts +4 -4
  334. package/src/tx/simulated_tx.ts +6 -2
  335. package/src/tx/tx.ts +2 -2
  336. package/src/tx/tx_receipt.ts +11 -14
  337. package/src/types/shared.ts +0 -10
  338. package/src/vks/verification_key.ts +5 -184
  339. package/src/world-state/genesis_data.ts +15 -0
  340. package/src/world-state/index.ts +1 -0
  341. package/src/world-state/world_state_revision.ts +9 -1
  342. package/dest/abi/mocked_keys.d.ts +0 -2
  343. package/dest/abi/mocked_keys.d.ts.map +0 -1
  344. package/dest/abi/mocked_keys.js +0 -1
  345. package/dest/l1-contracts/slash_factory.d.ts +0 -45
  346. package/dest/l1-contracts/slash_factory.d.ts.map +0 -1
  347. package/dest/l1-contracts/slash_factory.js +0 -158
  348. package/dest/slashing/empire.d.ts +0 -31
  349. package/dest/slashing/empire.d.ts.map +0 -1
  350. package/dest/slashing/empire.js +0 -87
  351. package/src/abi/mocked_keys.ts +0 -2
  352. package/src/l1-contracts/slash_factory.ts +0 -180
  353. package/src/slashing/empire.ts +0 -104
@@ -14,18 +14,56 @@ import { CheckpointHeader } from '../rollup/checkpoint_header.js';
14
14
  import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js';
15
15
  import { L1PublishedData } from './published_checkpoint.js';
16
16
 
17
- /** Lightweight checkpoint metadata without full block data. */
18
- export type CheckpointData = {
17
+ /** Base type for checkpoint data */
18
+ export type CommonCheckpointData = {
19
19
  checkpointNumber: CheckpointNumber;
20
20
  header: CheckpointHeader;
21
- archive: AppendOnlyTreeSnapshot;
22
- checkpointOutHash: Fr;
23
21
  startBlock: BlockNumber;
24
22
  blockCount: number;
23
+ };
24
+
25
+ /** Data stored with checkpoint data after publishing on l1 */
26
+ export type L1EnrichedCheckpointData = {
25
27
  attestations: CommitteeAttestation[];
26
28
  l1: L1PublishedData;
27
29
  };
28
30
 
31
+ /** Data stored alongside checkpoint data in storage */
32
+ export type StorageEnrichedCheckpointData = {
33
+ archive: AppendOnlyTreeSnapshot;
34
+ checkpointOutHash: Fr;
35
+ /** Fee asset price modifier in basis points. Defaults to 0 (no change) when not explicitly set. */
36
+ feeAssetPriceModifier: bigint;
37
+ };
38
+
39
+ /** Data stored only with proposed checkpoint data */
40
+ export type ProposedOnlyCheckpointData = {
41
+ totalManaUsed: bigint;
42
+ feeAssetPriceModifier: bigint;
43
+ };
44
+
45
+ /** Lightweight checkpoint metadata without full block data. */
46
+ export type CheckpointData = CommonCheckpointData & StorageEnrichedCheckpointData & L1EnrichedCheckpointData;
47
+
48
+ /** Input for setting a proposed checkpoint. The archive and checkpointOutHash are computed
49
+ * internally by the block store from the stored blocks. */
50
+ export type ProposedCheckpointInput = CommonCheckpointData & ProposedOnlyCheckpointData;
51
+
52
+ /** Full data for a proposed checkpoint (proposed but not yet L1-confirmed).
53
+ * Includes fee-relevant fields used during pipelining to compute the fee header override. */
54
+ export type ProposedCheckpointData = ProposedCheckpointInput & StorageEnrichedCheckpointData;
55
+
56
+ export const ProposedCheckpointDataSchema = z.object({
57
+ checkpointNumber: CheckpointNumberSchema,
58
+ header: CheckpointHeader.schema,
59
+ archive: AppendOnlyTreeSnapshot.schema,
60
+ checkpointOutHash: schemas.Fr,
61
+ startBlock: BlockNumberSchema,
62
+ blockCount: z.number(),
63
+ totalManaUsed: schemas.BigInt,
64
+ feeAssetPriceModifier: schemas.BigInt,
65
+ });
66
+
29
67
  export const CheckpointDataSchema = z
30
68
  .object({
31
69
  checkpointNumber: CheckpointNumberSchema,
@@ -34,6 +72,7 @@ export const CheckpointDataSchema = z
34
72
  checkpointOutHash: schemas.Fr,
35
73
  startBlock: BlockNumberSchema,
36
74
  blockCount: schemas.Integer,
75
+ feeAssetPriceModifier: schemas.BigInt,
37
76
  attestations: z.array(CommitteeAttestation.schema),
38
77
  l1: L1PublishedData.schema,
39
78
  })
@@ -45,6 +84,7 @@ export const CheckpointDataSchema = z
45
84
  checkpointOutHash: obj.checkpointOutHash,
46
85
  startBlock: obj.startBlock,
47
86
  blockCount: obj.blockCount,
87
+ feeAssetPriceModifier: obj.feeAssetPriceModifier,
48
88
  attestations: obj.attestations,
49
89
  l1: obj.l1,
50
90
  }),
@@ -1,5 +1,5 @@
1
1
  import { l1ContractAddressesMapping } from '@aztec/ethereum/l1-contract-addresses';
2
- import type { ConfigMappingsType } from '@aztec/foundation/config';
2
+ import { type ConfigMappingsType, numberConfigHelper } from '@aztec/foundation/config';
3
3
  import { EthAddress } from '@aztec/foundation/eth-address';
4
4
 
5
5
  export { type SequencerConfig, SequencerConfigSchema } from '../interfaces/configs.js';
@@ -14,14 +14,19 @@ export const emptyChainConfig: ChainConfig = {
14
14
  export const chainConfigMappings: ConfigMappingsType<ChainConfig> = {
15
15
  l1ChainId: {
16
16
  env: 'L1_CHAIN_ID',
17
- parseEnv: (val: string) => +val,
18
- defaultValue: 31337,
17
+ ...numberConfigHelper(31337),
19
18
  description: 'The chain ID of the ethereum host.',
20
19
  },
21
20
  rollupVersion: {
22
21
  env: 'ROLLUP_VERSION',
23
22
  description: 'The version of the rollup.',
24
- parseEnv: (val: string) => (Number.isSafeInteger(parseInt(val, 10)) ? parseInt(val, 10) : undefined),
23
+ parseEnv: (val: string) => {
24
+ const parsed = parseInt(val, 10);
25
+ if (!Number.isSafeInteger(parsed)) {
26
+ throw new Error(`Invalid rollup version: ${val}`);
27
+ }
28
+ return parsed;
29
+ },
25
30
  },
26
31
  l1Contracts: {
27
32
  description: 'The deployed L1 contract addresses',
@@ -1,6 +1,12 @@
1
- import type { ConfigMappingsType } from '@aztec/foundation/config';
1
+ import {
2
+ type ConfigMappingsType,
3
+ floatConfigHelper,
4
+ numberConfigHelper,
5
+ optionalNumberConfigHelper,
6
+ } from '@aztec/foundation/config';
2
7
 
3
8
  import type { SequencerConfig } from '../interfaces/configs.js';
9
+ import { DEFAULT_P2P_PROPAGATION_TIME } from '../timetable/index.js';
4
10
 
5
11
  /** Default maximum number of transactions per block. */
6
12
  export const DEFAULT_MAX_TXS_PER_BLOCK = 32;
@@ -12,26 +18,34 @@ export const DEFAULT_MAX_TXS_PER_BLOCK = 32;
12
18
  * to avoid duplication.
13
19
  */
14
20
  export const sharedSequencerConfigMappings: ConfigMappingsType<
15
- Pick<SequencerConfig, 'blockDurationMs' | 'expectedBlockProposalsPerSlot' | 'maxTxsPerBlock'>
21
+ Pick<
22
+ SequencerConfig,
23
+ 'blockDurationMs' | 'expectedBlockProposalsPerSlot' | 'maxTxsPerBlock' | 'attestationPropagationTime'
24
+ >
16
25
  > = {
17
26
  blockDurationMs: {
18
27
  env: 'SEQ_BLOCK_DURATION_MS',
19
28
  description:
20
29
  'Duration per block in milliseconds when building multiple blocks per slot. ' +
21
30
  'If undefined (default), builds a single block per slot using the full slot duration.',
22
- parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
31
+ ...optionalNumberConfigHelper(),
23
32
  },
24
33
  expectedBlockProposalsPerSlot: {
25
34
  env: 'SEQ_EXPECTED_BLOCK_PROPOSALS_PER_SLOT',
26
35
  description:
27
36
  'Expected number of block proposals per slot for P2P peer scoring. ' +
28
37
  '0 (default) disables block proposal scoring. Set to a positive value to enable.',
29
- parseEnv: (val: string) => (val ? parseInt(val, 10) : 0),
30
- defaultValue: 0,
38
+ ...numberConfigHelper(0),
31
39
  },
32
40
  maxTxsPerBlock: {
33
41
  env: 'SEQ_MAX_TX_PER_BLOCK',
34
42
  description: 'The maximum number of txs to include in a block.',
35
- parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
43
+ ...optionalNumberConfigHelper(),
44
+ },
45
+ attestationPropagationTime: {
46
+ env: 'SEQ_ATTESTATION_PROPAGATION_TIME',
47
+ description: 'How many seconds it takes for proposals and attestations to travel across the p2p layer (one-way).',
48
+ defaultValue: DEFAULT_P2P_PROPAGATION_TIME,
49
+ ...floatConfigHelper(DEFAULT_P2P_PROPAGATION_TIME),
36
50
  },
37
51
  };
@@ -13,7 +13,7 @@ import type { ContractInstance } from './interfaces/contract_instance.js';
13
13
  /**
14
14
  * Returns the deployment address for a given contract instance.
15
15
  * ```
16
- * salted_initialization_hash = poseidon2(DOM_SEP__PARTIAL_ADDRESS, [salt, initialization_hash, deployer])
16
+ * salted_initialization_hash = poseidon2(DOM_SEP__SALTED_INITIALIZATION_HASH, [salt, initialization_hash, deployer])
17
17
  * partial_address = poseidon2(DOM_SEP__PARTIAL_ADDRESS, [contract_class_id, salted_initialization_hash])
18
18
  * address = ((poseidon2(DOM_SEP__CONTRACT_ADDRESS_V1, [public_keys_hash, partial_address]) * G) + ivpk_m).x <- the x-coordinate of the address point
19
19
  * ```
@@ -57,7 +57,7 @@ export function computeSaltedInitializationHash(
57
57
  ): Promise<Fr> {
58
58
  return poseidon2HashWithSeparator(
59
59
  [instance.salt, instance.initializationHash, instance.deployer],
60
- DomainSeparator.PARTIAL_ADDRESS,
60
+ DomainSeparator.SALTED_INITIALIZATION_HASH,
61
61
  );
62
62
  }
63
63
 
@@ -3,6 +3,7 @@ import { poseidon2Hash, poseidon2HashWithSeparator } from '@aztec/foundation/cry
3
3
  import { Fr } from '@aztec/foundation/curves/bn254';
4
4
  import { type MerkleTree, MerkleTreeCalculator } from '@aztec/foundation/trees';
5
5
 
6
+ import { computeMerkleHash } from '../hash/hash.js';
6
7
  import type { PrivateFunction } from './interfaces/contract_class.js';
7
8
 
8
9
  // Memoize the merkle tree calculators to avoid re-computing the zero-hash for each level in each call
@@ -42,7 +43,8 @@ async function getPrivateFunctionTreeCalculator(): Promise<MerkleTreeCalculator>
42
43
  privateFunctionTreeCalculator = await MerkleTreeCalculator.create(
43
44
  FUNCTION_TREE_HEIGHT,
44
45
  functionTreeZeroLeaf,
45
- async (left, right) => (await poseidon2Hash([left, right])).toBuffer() as Buffer<ArrayBuffer>,
46
+ async (left, right) =>
47
+ (await computeMerkleHash(Fr.fromBuffer(left), Fr.fromBuffer(right))).toBuffer() as Buffer<ArrayBuffer>,
46
48
  );
47
49
  }
48
50
  return privateFunctionTreeCalculator;
@@ -162,6 +162,11 @@ export function getProofSubmissionDeadlineTimestamp(
162
162
  return getTimestampForSlot(deadlineSlot, constants);
163
163
  }
164
164
 
165
+ /** Computes the quorum size required for a committee (⌊2n/3⌋ + 1). */
166
+ export function computeQuorum(committeeSize: number): number {
167
+ return Math.floor((committeeSize * 2) / 3) + 1;
168
+ }
169
+
165
170
  /** Returns the timestamp to start building a block for a given L2 slot. Computed as the start timestamp of the slot minus one L1 slot duration. */
166
171
  export function getSlotStartBuildTimestamp(
167
172
  slotNumber: SlotNumber,
package/src/gas/README.md CHANGED
@@ -84,6 +84,37 @@ else → use post (new fees)
84
84
  **Net effect**: L1 fee changes reach L2 with a 2-slot delay and can update at most once
85
85
  every 5 slots.
86
86
 
87
+ ### Worked Example
88
+
89
+ Suppose the oracle is updated at slot 10 with new L1 fees. Here is the timeline:
90
+
91
+ ```
92
+ Slot Oracle state Active fees Notes
93
+ ──── ──────────────────── ──────────── ──────────────────────────────────
94
+ 10 pre=A, post=B, soc=12 A Update queued. slotOfChange = 10 + LAG = 12.
95
+ 11 (same) A Still before slotOfChange → pre (A).
96
+ 12 (same) B slot >= slotOfChange → post (B) activates.
97
+ 13 (same) B B remains active.
98
+ 14 (same) B B remains active.
99
+ 15 Update allowed again B Earliest next update: soc + (LIFETIME - LAG)
100
+ = 12 + 3 = 15.
101
+ ```
102
+
103
+ Key observations:
104
+
105
+ 1. **Slots 10-11**: The old fees (A) are still in effect. Transactions submitted during
106
+ these slots see the old L1 cost. This is the **LAG** window — it gives pending
107
+ transactions 2 slots to land before fees change.
108
+
109
+ 2. **Slot 12**: The new fees (B) activate. Any checkpoint proposed at slot >= 12 uses B
110
+ for its sequencer/prover cost calculation.
111
+
112
+ 3. **Slots 12-14**: No new oracle update is accepted. The system is in a **cooldown**
113
+ period of `LIFETIME - LAG = 3` slots after the transition.
114
+
115
+ 4. **Slot 15**: A new oracle update can be queued (earliest `acceptableSlot`). If
116
+ triggered, the new values would activate at slot 15 + LAG = 17.
117
+
87
118
  ## Fee Asset Price
88
119
 
89
120
  Fees are computed in ETH internally but converted to the fee asset (Fee Juice) via
@@ -0,0 +1,120 @@
1
+ /**
2
+ * TypeScript port of fee computation logic from FeeLib.sol.
3
+ * Used to predict worst-case min fees over a future window of L2 slots.
4
+ */
5
+
6
+ // Constants matching FeeLib.sol
7
+ export const MINIMUM_CONGESTION_MULTIPLIER = 1_000_000_000n;
8
+ export const L1_GAS_PER_CHECKPOINT_PROPOSED = 300_000n;
9
+ export const L1_GAS_PER_EPOCH_VERIFIED = 3_600_000n;
10
+ export const BLOBS_PER_CHECKPOINT = 3n;
11
+ export const BLOB_GAS_PER_BLOB = 2n ** 17n;
12
+ export const MAGIC_CONGESTION_VALUE_MULTIPLIER = 854_700_854n;
13
+ export const MAGIC_CONGESTION_VALUE_DIVISOR = 100_000_000n;
14
+ export const ETH_PER_FEE_ASSET_PRECISION = 1_000_000_000_000n;
15
+ export const MIN_ETH_PER_FEE_ASSET = 100n;
16
+
17
+ /** Number of L2 slots of lag before new oracle values activate. Defines the prediction window. */
18
+ export const FEE_ORACLE_LAG = 2;
19
+
20
+ /** Expected mana usage per checkpoint for fee prediction. */
21
+ export enum ManaUsageEstimate {
22
+ /** No usage — fees decrease as congestion drains. */
23
+ None = 'none',
24
+ /** Target usage — congestion stays roughly flat (steady state). */
25
+ Target = 'target',
26
+ /** Limit usage (2x target) — worst case, congestion grows maximally. */
27
+ Limit = 'limit',
28
+ }
29
+
30
+ /** Parameters for computing the mana min fee at a given point in time. */
31
+ export type ManaMinFeeParams = {
32
+ l1BaseFee: bigint;
33
+ l1BlobFee: bigint;
34
+ manaTarget: bigint;
35
+ epochDuration: bigint;
36
+ provingCostPerManaEth: bigint;
37
+ excessMana: bigint;
38
+ ethPerFeeAsset: bigint;
39
+ };
40
+
41
+ /**
42
+ * Taylor series approximation of `factor * e^(numerator/denominator)`.
43
+ * Direct port of FeeLib.sol fakeExponential (EIP-4844 style).
44
+ */
45
+ export function fakeExponential(factor: bigint, numerator: bigint, denominator: bigint): bigint {
46
+ let i = 1n;
47
+ let output = 0n;
48
+ let numeratorAccumulator = factor * denominator;
49
+ while (numeratorAccumulator > 0n) {
50
+ output += numeratorAccumulator;
51
+ numeratorAccumulator = (numeratorAccumulator * numerator) / (denominator * i);
52
+ i += 1n;
53
+ }
54
+ return output / denominator;
55
+ }
56
+
57
+ /** Computes excess mana for the next checkpoint, clamped to zero. */
58
+ export function computeExcessMana(prevExcessMana: bigint, prevManaUsed: bigint, manaTarget: bigint): bigint {
59
+ const sum = prevExcessMana + prevManaUsed;
60
+ return sum > manaTarget ? sum - manaTarget : 0n;
61
+ }
62
+
63
+ /** Computes the congestion multiplier from excess mana (1e9 = no congestion). */
64
+ export function computeCongestionMultiplier(excessMana: bigint, manaTarget: bigint): bigint {
65
+ const denominator = (manaTarget * MAGIC_CONGESTION_VALUE_MULTIPLIER) / MAGIC_CONGESTION_VALUE_DIVISOR;
66
+ const cappedNumerator = excessMana < denominator * 100n ? excessMana : denominator * 100n;
67
+ return fakeExponential(MINIMUM_CONGESTION_MULTIPLIER, cappedNumerator, denominator);
68
+ }
69
+
70
+ /** Ceiling division for positive bigints. */
71
+ function ceilDiv(a: bigint, b: bigint): bigint {
72
+ return (a + b - 1n) / b;
73
+ }
74
+
75
+ /** Converts an ETH value to fee asset value using ethPerFeeAsset (1e12 precision). */
76
+ function toFeeAsset(ethValue: bigint, ethPerFeeAsset: bigint): bigint {
77
+ if (ethPerFeeAsset === 0n) {
78
+ return 0n;
79
+ }
80
+ return ceilDiv(ethValue * ETH_PER_FEE_ASSET_PRECISION, ethPerFeeAsset);
81
+ }
82
+
83
+ /**
84
+ * Computes the full mana min fee (sequencer + prover + congestion) in fee asset terms.
85
+ * Mirrors FeeLib.getManaMinFeeComponentsAt + summedMinFee.
86
+ */
87
+ export function computeManaMinFee(params: ManaMinFeeParams): bigint {
88
+ const { l1BaseFee, l1BlobFee, manaTarget, epochDuration, provingCostPerManaEth, excessMana, ethPerFeeAsset } = params;
89
+
90
+ if (manaTarget === 0n) {
91
+ return 0n;
92
+ }
93
+
94
+ // Sequencer cost per mana (in ETH)
95
+ const ethUsed = L1_GAS_PER_CHECKPOINT_PROPOSED * l1BaseFee + BLOBS_PER_CHECKPOINT * BLOB_GAS_PER_BLOB * l1BlobFee;
96
+ const sequencerCostEth = ceilDiv(ethUsed, manaTarget);
97
+
98
+ // Prover cost per mana (in ETH): L1 verification gas + governance-set proving cost
99
+ const proverCostEth =
100
+ ceilDiv(ceilDiv(L1_GAS_PER_EPOCH_VERIFIED * l1BaseFee, epochDuration), manaTarget) + provingCostPerManaEth;
101
+
102
+ // Total base cost in ETH (congestion is computed on this)
103
+ const totalEth = sequencerCostEth + proverCostEth;
104
+
105
+ // Congestion multiplier and cost (in ETH)
106
+ const congestionMul = computeCongestionMultiplier(excessMana, manaTarget);
107
+ const congestionCostEth = (totalEth * congestionMul) / MINIMUM_CONGESTION_MULTIPLIER - totalEth;
108
+
109
+ // Convert all components to fee asset
110
+ const clampedEthPerFeeAsset = ethPerFeeAsset < MIN_ETH_PER_FEE_ASSET ? MIN_ETH_PER_FEE_ASSET : ethPerFeeAsset;
111
+ const sequencerCost = toFeeAsset(sequencerCostEth, clampedEthPerFeeAsset);
112
+ const proverCost = toFeeAsset(proverCostEth, clampedEthPerFeeAsset);
113
+ const congestionCost = toFeeAsset(congestionCostEth, clampedEthPerFeeAsset);
114
+
115
+ const total = sequencerCost + proverCost + congestionCost;
116
+
117
+ // Cap at uint128 max (matching FeeLib.summedMinFee)
118
+ const UINT128_MAX = (1n << 128n) - 1n;
119
+ return total < UINT128_MAX ? total : UINT128_MAX;
120
+ }
@@ -15,6 +15,17 @@ import { z } from 'zod';
15
15
  import type { UInt128 } from '../types/shared.js';
16
16
  import type { GasDimensions } from './gas.js';
17
17
 
18
+ /**
19
+ * Multiplies a bigint by a non-integer scalar and returns the ceiling of the result.
20
+ * Avoids converting the bigint to Number (which loses precision above 2^53) by instead
21
+ * scaling the scalar into a bigint rational and performing ceiling division.
22
+ */
23
+ function bigintMulCeil(value: bigint, scalar: number): bigint {
24
+ const SCALE = 1_000_000_000_000n; // 1e12
25
+ const scaledScalar = BigInt(Math.round(scalar * 1e12));
26
+ return (value * scaledScalar + SCALE - 1n) / SCALE;
27
+ }
28
+
18
29
  /** Gas prices for each dimension. */
19
30
  export class GasFees {
20
31
  public readonly feePerDaGas: UInt128;
@@ -60,10 +71,7 @@ export class GasFees {
60
71
  const s = BigInt(scalar);
61
72
  return new GasFees(this.feePerDaGas * s, this.feePerL2Gas * s);
62
73
  } else {
63
- return new GasFees(
64
- BigInt(Math.ceil(Number(this.feePerDaGas) * scalar)),
65
- BigInt(Math.ceil(Number(this.feePerL2Gas) * scalar)),
66
- );
74
+ return new GasFees(bigintMulCeil(this.feePerDaGas, scalar), bigintMulCeil(this.feePerL2Gas, scalar));
67
75
  }
68
76
  }
69
77
 
@@ -126,3 +134,8 @@ export class GasFees {
126
134
  return `GasFees { feePerDaGas=${this.feePerDaGas} feePerL2Gas=${this.feePerL2Gas} }`;
127
135
  }
128
136
  }
137
+
138
+ /** Provides projected minimum gas fees for the next block. */
139
+ export interface BlockMinFeesProvider {
140
+ getCurrentMinFees(): Promise<GasFees>;
141
+ }
@@ -1,10 +1,4 @@
1
- import {
2
- DEFAULT_DA_GAS_LIMIT,
3
- DEFAULT_L2_GAS_LIMIT,
4
- DEFAULT_TEARDOWN_DA_GAS_LIMIT,
5
- DEFAULT_TEARDOWN_L2_GAS_LIMIT,
6
- GAS_SETTINGS_LENGTH,
7
- } from '@aztec/constants';
1
+ import { GAS_SETTINGS_LENGTH, MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS } from '@aztec/constants';
8
2
  import { Fr } from '@aztec/foundation/curves/bn254';
9
3
  import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize';
10
4
  import type { FieldsOf } from '@aztec/foundation/types';
@@ -14,6 +8,21 @@ import { z } from 'zod';
14
8
  import { Gas, GasDimensions } from './gas.js';
15
9
  import { GasFees } from './gas_fees.js';
16
10
 
11
+ /** Approximate max DA gas limit. Arbitrary, assuming 4 blocks per checkpoint — users should use gas estimation. */
12
+ export const APPROXIMATE_MAX_DA_GAS_PER_BLOCK = Math.floor(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT / 4);
13
+ /** Fallback teardown L2 gas limit. Arbitrary — users should use gas estimation. */
14
+ export const FALLBACK_TEARDOWN_L2_GAS_LIMIT = Math.floor(MAX_PROCESSABLE_L2_GAS / 8);
15
+ /** Fallback teardown DA gas limit. Arbitrary — users should use gas estimation. */
16
+ export const FALLBACK_TEARDOWN_DA_GAS_LIMIT = Math.floor(APPROXIMATE_MAX_DA_GAS_PER_BLOCK / 2);
17
+
18
+ // For gas estimation, we use intentionally high limits above what the network can process,
19
+ // so the simulation runs without hitting gas caps. Since teardown gas is counted towards total,
20
+ // the total estimation limit is teardown + max processable.
21
+ export const GAS_ESTIMATION_TEARDOWN_L2_GAS_LIMIT = MAX_PROCESSABLE_L2_GAS;
22
+ export const GAS_ESTIMATION_L2_GAS_LIMIT = GAS_ESTIMATION_TEARDOWN_L2_GAS_LIMIT + MAX_PROCESSABLE_L2_GAS;
23
+ export const GAS_ESTIMATION_TEARDOWN_DA_GAS_LIMIT = MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT;
24
+ export const GAS_ESTIMATION_DA_GAS_LIMIT = GAS_ESTIMATION_TEARDOWN_DA_GAS_LIMIT + MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT;
25
+
17
26
  // docs:start:gas_settings_vars
18
27
  /** Gas usage and fees limits set by the transaction sender for different dimensions and phases. */
19
28
  export class GasSettings {
@@ -95,18 +104,62 @@ export class GasSettings {
95
104
  return new GasSettings(Gas.empty(), Gas.empty(), GasFees.empty(), GasFees.empty());
96
105
  }
97
106
 
98
- /** Default gas settings to use when user has not provided them. Requires explicit max fees per gas. */
99
- static default(overrides: {
107
+ /**
108
+ * Fills in gas limits high enough for transactions to be included in most cases.
109
+ * gasLimits is set to the maximum the protocol allows; since teardown gas is reserved
110
+ * from gasLimits during private execution (see gas_meter.nr), the effective gas available
111
+ * for app logic will be gasLimits - teardownGasLimits - privateOverhead.
112
+ * The DA gas limit is set to an approximate max per block assuming 4 blocks per checkpoint,
113
+ * since using the maximum per checkpoint would cause nodes to reject transactions.
114
+ * These values won't work if:
115
+ * - Teardown consumes more than the arbitrarily assigned fallback limits
116
+ * - The rest of the transaction consumes more than the remaining gas after teardown
117
+ * - The DA gas limit is too low for the transaction, while still within the checkpoint limit
118
+ */
119
+ static fallback(overrides: {
120
+ gasLimits?: Gas;
121
+ teardownGasLimits?: Gas;
122
+ maxFeesPerGas: GasFees;
123
+ maxPriorityFeesPerGas?: GasFees;
124
+ }) {
125
+ return GasSettings.from({
126
+ gasLimits: overrides.gasLimits ?? {
127
+ l2Gas: MAX_PROCESSABLE_L2_GAS,
128
+ daGas: APPROXIMATE_MAX_DA_GAS_PER_BLOCK,
129
+ },
130
+ teardownGasLimits: overrides.teardownGasLimits ?? {
131
+ l2Gas: FALLBACK_TEARDOWN_L2_GAS_LIMIT,
132
+ daGas: FALLBACK_TEARDOWN_DA_GAS_LIMIT,
133
+ },
134
+ maxFeesPerGas: overrides.maxFeesPerGas,
135
+ maxPriorityFeesPerGas: overrides.maxPriorityFeesPerGas ?? GasFees.empty(),
136
+ });
137
+ }
138
+
139
+ /**
140
+ * Gas settings for simulation/estimation only.
141
+ * Since teardown gas is reserved upfront from gasLimits during private execution (see gas_meter.nr),
142
+ * the effective gas available for app logic is gasLimits - teardownGasLimits - privateOverhead.
143
+ * To ensure estimation never hits gas caps, we set both limits above what the protocol allows:
144
+ * teardown gets MAX_PROCESSABLE and gasLimits gets teardown + MAX_PROCESSABLE, so the full
145
+ * processable amount remains available for each phase independently. To be used in conjunction
146
+ * with skipTxValidation: true during public simulation, or the node would reject the transaction
147
+ * outright due to gas limits being above protocol max.
148
+ */
149
+ static forEstimation(overrides: {
100
150
  gasLimits?: Gas;
101
151
  teardownGasLimits?: Gas;
102
152
  maxFeesPerGas: GasFees;
103
153
  maxPriorityFeesPerGas?: GasFees;
104
154
  }) {
105
155
  return GasSettings.from({
106
- gasLimits: overrides.gasLimits ?? { l2Gas: DEFAULT_L2_GAS_LIMIT, daGas: DEFAULT_DA_GAS_LIMIT },
156
+ gasLimits: overrides.gasLimits ?? {
157
+ l2Gas: GAS_ESTIMATION_L2_GAS_LIMIT,
158
+ daGas: GAS_ESTIMATION_DA_GAS_LIMIT,
159
+ },
107
160
  teardownGasLimits: overrides.teardownGasLimits ?? {
108
- l2Gas: DEFAULT_TEARDOWN_L2_GAS_LIMIT,
109
- daGas: DEFAULT_TEARDOWN_DA_GAS_LIMIT,
161
+ l2Gas: GAS_ESTIMATION_TEARDOWN_L2_GAS_LIMIT,
162
+ daGas: GAS_ESTIMATION_TEARDOWN_DA_GAS_LIMIT,
110
163
  },
111
164
  maxFeesPerGas: overrides.maxFeesPerGas,
112
165
  maxPriorityFeesPerGas: overrides.maxPriorityFeesPerGas ?? GasFees.empty(),
package/src/gas/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './fee_math.js';
1
2
  export * from './gas.js';
2
3
  export * from './gas_fees.js';
3
4
  export * from './gas_settings.js';
@@ -1,11 +1,13 @@
1
1
  import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
2
2
  import {
3
3
  type ConfigMappingsType,
4
+ SecretValue,
4
5
  booleanConfigHelper,
5
6
  getConfigFromMappings,
6
7
  getDefaultConfig,
7
8
  numberConfigHelper,
8
9
  optionalNumberConfigHelper,
10
+ secretStringConfigHelper,
9
11
  } from '@aztec/foundation/config';
10
12
  import { EthAddress } from '@aztec/foundation/eth-address';
11
13
  import type { ZodFor } from '@aztec/foundation/schemas';
@@ -88,7 +90,7 @@ export interface ValidatorHASignerConfig extends BaseSignerConfig {
88
90
  * PostgreSQL connection string
89
91
  * Format: postgresql://user:password@host:port/database
90
92
  */
91
- databaseUrl?: string;
93
+ databaseUrl?: SecretValue<string>;
92
94
  /** Maximum number of clients in the pool (default: 10) */
93
95
  poolMaxCount?: number;
94
96
  /** Minimum number of clients in the pool (default: 0) */
@@ -110,6 +112,7 @@ export const validatorHASignerConfigMappings: ConfigMappingsType<ValidatorHASign
110
112
  env: 'VALIDATOR_HA_DATABASE_URL',
111
113
  description:
112
114
  'PostgreSQL connection string for validator HA signer (format: postgresql://user:password@host:port/database)',
115
+ ...secretStringConfigHelper(),
113
116
  },
114
117
  poolMaxCount: {
115
118
  env: 'VALIDATOR_HA_POOL_MAX',
@@ -148,7 +151,7 @@ export function getConfigEnvVars(): ValidatorHASignerConfig {
148
151
 
149
152
  export const ValidatorHASignerConfigSchema = BaseSignerConfigSchema.extend({
150
153
  haSigningEnabled: z.boolean(),
151
- databaseUrl: z.string().optional(),
154
+ databaseUrl: SecretValue.schema(z.string()).optional(),
152
155
  poolMaxCount: z.number().min(0).optional(),
153
156
  poolMinCount: z.number().min(0).optional(),
154
157
  poolIdleTimeoutMs: z.number().min(0).optional(),
@@ -16,12 +16,14 @@ export {
16
16
  } from './local_config.js';
17
17
  export {
18
18
  DutyType,
19
+ type AttestationSigningContext,
19
20
  type BlockProposalSigningContext,
21
+ type CheckpointProposalSigningContext,
20
22
  type HAProtectedSigningContext,
21
23
  type NoHAProtectionSigningContext,
22
- type OtherSigningContext,
23
24
  type SigningContext,
24
25
  type VoteSigningContext,
25
26
  getBlockNumberFromSigningContext,
27
+ getCheckpointNumberFromSigningContext,
26
28
  isHAProtectedContext,
27
29
  } from './types.js';
@@ -1,4 +1,4 @@
1
- import { type ConfigMappingsType, getConfigFromMappings } from '@aztec/foundation/config';
1
+ import { type ConfigMappingsType, getConfigFromMappings, optionalNumberConfigHelper } from '@aztec/foundation/config';
2
2
  import { zodFor } from '@aztec/foundation/schemas';
3
3
  import { type DataStoreConfig, dataConfigMappings } from '@aztec/stdlib/kv-store';
4
4
 
@@ -26,7 +26,7 @@ export const localSignerConfigMappings: ConfigMappingsType<LocalSignerConfig> =
26
26
  env: 'SIGNING_PROTECTION_MAP_SIZE_KB',
27
27
  description:
28
28
  'Maximum size of the local signing-protection LMDB store in KB. Overwrites the general dataStoreMapSizeKb.',
29
- parseEnv: (val: string | undefined) => (val ? +val : undefined),
29
+ ...optionalNumberConfigHelper(),
30
30
  },
31
31
  };
32
32