@aztec/stdlib 0.0.1-commit.86469d5 → 0.0.1-commit.88c5703d4

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 (474) hide show
  1. package/dest/abi/decoder.d.ts +2 -2
  2. package/dest/abi/decoder.d.ts.map +1 -1
  3. package/dest/abi/decoder.js +7 -5
  4. package/dest/abi/encoder.d.ts +1 -1
  5. package/dest/abi/encoder.d.ts.map +1 -1
  6. package/dest/abi/encoder.js +37 -6
  7. package/dest/abi/event_metadata_definition.d.ts +3 -1
  8. package/dest/abi/event_metadata_definition.d.ts.map +1 -1
  9. package/dest/abi/event_metadata_definition.js +1 -1
  10. package/dest/abi/function_call.d.ts +39 -9
  11. package/dest/abi/function_call.d.ts.map +1 -1
  12. package/dest/abi/function_call.js +20 -3
  13. package/dest/abi/utils.d.ts +14 -1
  14. package/dest/abi/utils.d.ts.map +1 -1
  15. package/dest/abi/utils.js +15 -0
  16. package/dest/auth_witness/auth_witness.js +3 -3
  17. package/dest/avm/avm.d.ts +300 -300
  18. package/dest/avm/avm_proving_request.d.ts +166 -166
  19. package/dest/avm/revert_code.d.ts +16 -1
  20. package/dest/avm/revert_code.d.ts.map +1 -1
  21. package/dest/avm/revert_code.js +15 -5
  22. package/dest/block/block_data.d.ts +52 -0
  23. package/dest/block/block_data.d.ts.map +1 -0
  24. package/dest/block/block_data.js +12 -0
  25. package/dest/block/in_block.js +1 -1
  26. package/dest/block/index.d.ts +2 -1
  27. package/dest/block/index.d.ts.map +1 -1
  28. package/dest/block/index.js +1 -0
  29. package/dest/block/l2_block.d.ts +9 -1
  30. package/dest/block/l2_block.d.ts.map +1 -1
  31. package/dest/block/l2_block.js +12 -2
  32. package/dest/block/l2_block_source.d.ts +33 -8
  33. package/dest/block/l2_block_source.d.ts.map +1 -1
  34. package/dest/block/l2_block_stream/l2_block_stream.d.ts +1 -1
  35. package/dest/block/l2_block_stream/l2_block_stream.d.ts.map +1 -1
  36. package/dest/block/l2_block_stream/l2_block_stream.js +10 -0
  37. package/dest/checkpoint/checkpoint.d.ts +22 -7
  38. package/dest/checkpoint/checkpoint.d.ts.map +1 -1
  39. package/dest/checkpoint/checkpoint.js +32 -16
  40. package/dest/checkpoint/checkpoint_data.d.ts +120 -0
  41. package/dest/checkpoint/checkpoint_data.d.ts.map +1 -0
  42. package/dest/checkpoint/checkpoint_data.js +26 -0
  43. package/dest/checkpoint/index.d.ts +3 -1
  44. package/dest/checkpoint/index.d.ts.map +1 -1
  45. package/dest/checkpoint/index.js +2 -0
  46. package/dest/checkpoint/published_checkpoint.d.ts +17 -2
  47. package/dest/checkpoint/published_checkpoint.d.ts.map +1 -1
  48. package/dest/checkpoint/published_checkpoint.js +1 -2
  49. package/dest/checkpoint/validate.d.ts +36 -0
  50. package/dest/checkpoint/validate.d.ts.map +1 -0
  51. package/dest/checkpoint/validate.js +120 -0
  52. package/dest/config/index.d.ts +2 -1
  53. package/dest/config/index.d.ts.map +1 -1
  54. package/dest/config/index.js +1 -0
  55. package/dest/config/sequencer-config.d.ts +12 -0
  56. package/dest/config/sequencer-config.d.ts.map +1 -0
  57. package/dest/config/sequencer-config.js +24 -0
  58. package/dest/contract/contract_address.js +4 -4
  59. package/dest/contract/contract_class.d.ts +2 -3
  60. package/dest/contract/contract_class.d.ts.map +1 -1
  61. package/dest/contract/contract_class_id.d.ts +1 -1
  62. package/dest/contract/contract_class_id.d.ts.map +1 -1
  63. package/dest/contract/contract_class_id.js +5 -4
  64. package/dest/contract/interfaces/node-info.d.ts +3 -1
  65. package/dest/contract/interfaces/node-info.d.ts.map +1 -1
  66. package/dest/contract/interfaces/node-info.js +2 -1
  67. package/dest/contract/private_function.js +2 -2
  68. package/dest/epoch-helpers/index.d.ts +9 -1
  69. package/dest/epoch-helpers/index.d.ts.map +1 -1
  70. package/dest/epoch-helpers/index.js +6 -2
  71. package/dest/file-store/local.d.ts +3 -3
  72. package/dest/file-store/local.d.ts.map +1 -1
  73. package/dest/file-store/local.js +13 -4
  74. package/dest/file-store/s3.d.ts +1 -1
  75. package/dest/file-store/s3.d.ts.map +1 -1
  76. package/dest/file-store/s3.js +11 -3
  77. package/dest/gas/gas_fees.d.ts +1 -1
  78. package/dest/gas/gas_fees.d.ts.map +1 -1
  79. package/dest/gas/gas_fees.js +4 -1
  80. package/dest/ha-signing/config.d.ts +136 -0
  81. package/dest/ha-signing/config.d.ts.map +1 -0
  82. package/dest/ha-signing/config.js +97 -0
  83. package/dest/ha-signing/index.d.ts +4 -0
  84. package/dest/ha-signing/index.d.ts.map +1 -0
  85. package/dest/ha-signing/index.js +3 -0
  86. package/dest/ha-signing/local_config.d.ts +63 -0
  87. package/dest/ha-signing/local_config.d.ts.map +1 -0
  88. package/dest/ha-signing/local_config.js +24 -0
  89. package/dest/ha-signing/types.d.ts +85 -0
  90. package/dest/ha-signing/types.d.ts.map +1 -0
  91. package/dest/ha-signing/types.js +32 -0
  92. package/dest/hash/hash.d.ts +2 -1
  93. package/dest/hash/hash.d.ts.map +1 -1
  94. package/dest/hash/hash.js +16 -10
  95. package/dest/hash/map_slot.js +2 -2
  96. package/dest/interfaces/allowed_element.d.ts +26 -20
  97. package/dest/interfaces/allowed_element.d.ts.map +1 -1
  98. package/dest/interfaces/allowed_element.js +8 -8
  99. package/dest/interfaces/archiver.d.ts +1 -1
  100. package/dest/interfaces/archiver.d.ts.map +1 -1
  101. package/dest/interfaces/archiver.js +8 -2
  102. package/dest/interfaces/aztec-node-admin.d.ts +123 -31
  103. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  104. package/dest/interfaces/aztec-node-admin.js +9 -3
  105. package/dest/interfaces/aztec-node.d.ts +12 -7
  106. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  107. package/dest/interfaces/aztec-node.js +5 -2
  108. package/dest/interfaces/block-builder.d.ts +18 -10
  109. package/dest/interfaces/block-builder.d.ts.map +1 -1
  110. package/dest/interfaces/block-builder.js +16 -6
  111. package/dest/interfaces/configs.d.ts +82 -32
  112. package/dest/interfaces/configs.d.ts.map +1 -1
  113. package/dest/interfaces/configs.js +11 -3
  114. package/dest/interfaces/get_logs_response.d.ts +8 -1
  115. package/dest/interfaces/get_logs_response.d.ts.map +1 -1
  116. package/dest/interfaces/l2_logs_source.d.ts +5 -3
  117. package/dest/interfaces/l2_logs_source.d.ts.map +1 -1
  118. package/dest/interfaces/merkle_tree_operations.d.ts +10 -20
  119. package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
  120. package/dest/interfaces/p2p.d.ts +4 -9
  121. package/dest/interfaces/p2p.d.ts.map +1 -1
  122. package/dest/interfaces/prover-broker.d.ts +16 -1
  123. package/dest/interfaces/prover-broker.d.ts.map +1 -1
  124. package/dest/interfaces/prover-broker.js +4 -1
  125. package/dest/interfaces/prover-client.d.ts +11 -1
  126. package/dest/interfaces/prover-client.d.ts.map +1 -1
  127. package/dest/interfaces/prover-client.js +12 -1
  128. package/dest/interfaces/proving-job.d.ts +202 -202
  129. package/dest/interfaces/slasher.d.ts +9 -1
  130. package/dest/interfaces/slasher.d.ts.map +1 -1
  131. package/dest/interfaces/slasher.js +2 -0
  132. package/dest/interfaces/validator.d.ts +124 -42
  133. package/dest/interfaces/validator.d.ts.map +1 -1
  134. package/dest/interfaces/validator.js +11 -4
  135. package/dest/interfaces/world_state.d.ts +5 -4
  136. package/dest/interfaces/world_state.d.ts.map +1 -1
  137. package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts +3 -3
  138. package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts.map +1 -1
  139. package/dest/kernel/hints/build_note_hash_read_request_hints.js +13 -10
  140. package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts +3 -3
  141. package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts.map +1 -1
  142. package/dest/kernel/hints/build_nullifier_read_request_hints.js +13 -10
  143. package/dest/kernel/hints/build_transient_data_hints.d.ts +5 -2
  144. package/dest/kernel/hints/build_transient_data_hints.d.ts.map +1 -1
  145. package/dest/kernel/hints/build_transient_data_hints.js +9 -3
  146. package/dest/kernel/hints/index.d.ts +2 -2
  147. package/dest/kernel/hints/index.js +2 -2
  148. package/dest/kernel/hints/key_validation_request_and_separator.d.ts +24 -0
  149. package/dest/kernel/hints/key_validation_request_and_separator.d.ts.map +1 -0
  150. package/dest/kernel/hints/{key_validation_request_and_generator.js → key_validation_request_and_separator.js} +12 -15
  151. package/dest/kernel/hints/{scoped_key_validation_request_and_generator.d.ts → scoped_key_validation_request_and_separator.d.ts} +8 -8
  152. package/dest/kernel/hints/{scoped_key_validation_request_and_generator.d.ts.map → scoped_key_validation_request_and_separator.d.ts.map} +1 -1
  153. package/dest/kernel/hints/{scoped_key_validation_request_and_generator.js → scoped_key_validation_request_and_separator.js} +6 -6
  154. package/dest/kernel/private_circuit_public_inputs.d.ts +9 -9
  155. package/dest/kernel/private_circuit_public_inputs.d.ts.map +1 -1
  156. package/dest/kernel/private_circuit_public_inputs.js +16 -16
  157. package/dest/kernel/private_kernel_circuit_public_inputs.d.ts +3 -3
  158. package/dest/kernel/private_kernel_circuit_public_inputs.d.ts.map +1 -1
  159. package/dest/kernel/private_kernel_circuit_public_inputs.js +4 -4
  160. package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts +3 -3
  161. package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts.map +1 -1
  162. package/dest/kernel/private_kernel_tail_circuit_private_inputs.js +4 -4
  163. package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts +4 -3
  164. package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts.map +1 -1
  165. package/dest/kernel/private_kernel_tail_circuit_public_inputs.js +11 -7
  166. package/dest/kernel/private_to_public_kernel_circuit_public_inputs.d.ts +3 -3
  167. package/dest/kernel/private_to_public_kernel_circuit_public_inputs.d.ts.map +1 -1
  168. package/dest/kernel/private_to_public_kernel_circuit_public_inputs.js +7 -7
  169. package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.d.ts +3 -3
  170. package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.d.ts.map +1 -1
  171. package/dest/kernel/private_to_rollup_kernel_circuit_public_inputs.js +7 -7
  172. package/dest/kernel/private_validation_requests.d.ts +3 -3
  173. package/dest/kernel/private_validation_requests.js +9 -9
  174. package/dest/keys/derivation.js +8 -8
  175. package/dest/keys/key_types.d.ts +3 -3
  176. package/dest/keys/key_types.d.ts.map +1 -1
  177. package/dest/keys/public_keys.js +2 -2
  178. package/dest/keys/utils.js +5 -5
  179. package/dest/kv-store/config.d.ts +17 -0
  180. package/dest/kv-store/config.d.ts.map +1 -0
  181. package/dest/kv-store/config.js +26 -0
  182. package/dest/kv-store/index.d.ts +2 -0
  183. package/dest/kv-store/index.d.ts.map +1 -0
  184. package/dest/kv-store/index.js +1 -0
  185. package/dest/logs/debug_log_store.d.ts +30 -0
  186. package/dest/logs/debug_log_store.d.ts.map +1 -0
  187. package/dest/logs/debug_log_store.js +30 -0
  188. package/dest/logs/extended_directional_app_tagging_secret.d.ts +47 -0
  189. package/dest/logs/extended_directional_app_tagging_secret.d.ts.map +1 -0
  190. package/dest/logs/{directional_app_tagging_secret.js → extended_directional_app_tagging_secret.js} +23 -15
  191. package/dest/logs/extended_public_log.d.ts +7 -1
  192. package/dest/logs/extended_public_log.d.ts.map +1 -1
  193. package/dest/logs/index.d.ts +4 -2
  194. package/dest/logs/index.d.ts.map +1 -1
  195. package/dest/logs/index.js +3 -1
  196. package/dest/logs/log_id.d.ts +10 -7
  197. package/dest/logs/log_id.d.ts.map +1 -1
  198. package/dest/logs/log_id.js +15 -13
  199. package/dest/logs/pre_tag.d.ts +16 -11
  200. package/dest/logs/pre_tag.d.ts.map +1 -1
  201. package/dest/logs/pre_tag.js +2 -2
  202. package/dest/logs/private_log.d.ts +2 -2
  203. package/dest/logs/private_log.d.ts.map +1 -1
  204. package/dest/logs/public_log.d.ts +4 -3
  205. package/dest/logs/public_log.d.ts.map +1 -1
  206. package/dest/logs/public_log.js +2 -1
  207. package/dest/logs/siloed_tag.d.ts +5 -3
  208. package/dest/logs/siloed_tag.d.ts.map +1 -1
  209. package/dest/logs/siloed_tag.js +8 -7
  210. package/dest/logs/tag.js +1 -1
  211. package/dest/logs/tagging_index_range.d.ts +40 -0
  212. package/dest/logs/tagging_index_range.d.ts.map +1 -0
  213. package/dest/logs/tagging_index_range.js +8 -0
  214. package/dest/messaging/l1_to_l2_message_source.d.ts +4 -2
  215. package/dest/messaging/l1_to_l2_message_source.d.ts.map +1 -1
  216. package/dest/messaging/l2_to_l1_membership.d.ts +34 -8
  217. package/dest/messaging/l2_to_l1_membership.d.ts.map +1 -1
  218. package/dest/messaging/l2_to_l1_membership.js +72 -29
  219. package/dest/note/index.d.ts +1 -2
  220. package/dest/note/index.d.ts.map +1 -1
  221. package/dest/note/index.js +0 -1
  222. package/dest/p2p/attestation_utils.d.ts +11 -1
  223. package/dest/p2p/attestation_utils.d.ts.map +1 -1
  224. package/dest/p2p/attestation_utils.js +45 -0
  225. package/dest/p2p/block_proposal.d.ts +2 -2
  226. package/dest/p2p/block_proposal.d.ts.map +1 -1
  227. package/dest/p2p/block_proposal.js +2 -4
  228. package/dest/p2p/checkpoint_attestation.d.ts +2 -1
  229. package/dest/p2p/checkpoint_attestation.d.ts.map +1 -1
  230. package/dest/p2p/checkpoint_attestation.js +1 -1
  231. package/dest/p2p/checkpoint_proposal.d.ts +18 -11
  232. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  233. package/dest/p2p/checkpoint_proposal.js +30 -28
  234. package/dest/p2p/client_type.d.ts +2 -5
  235. package/dest/p2p/client_type.d.ts.map +1 -1
  236. package/dest/p2p/client_type.js +0 -7
  237. package/dest/p2p/consensus_payload.d.ts +12 -3
  238. package/dest/p2p/consensus_payload.d.ts.map +1 -1
  239. package/dest/p2p/consensus_payload.js +22 -15
  240. package/dest/p2p/constants.d.ts +3 -1
  241. package/dest/p2p/constants.d.ts.map +1 -1
  242. package/dest/p2p/constants.js +1 -0
  243. package/dest/p2p/index.d.ts +1 -2
  244. package/dest/p2p/index.d.ts.map +1 -1
  245. package/dest/p2p/index.js +0 -1
  246. package/dest/p2p/peer_error.d.ts +3 -1
  247. package/dest/p2p/peer_error.d.ts.map +1 -1
  248. package/dest/p2p/peer_error.js +5 -0
  249. package/dest/p2p/topic_type.d.ts +3 -4
  250. package/dest/p2p/topic_type.d.ts.map +1 -1
  251. package/dest/p2p/topic_type.js +7 -24
  252. package/dest/rollup/checkpoint_header.d.ts +2 -2
  253. package/dest/rollup/checkpoint_header.js +2 -2
  254. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +6 -6
  255. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -1
  256. package/dest/rollup/checkpoint_rollup_public_inputs.js +2 -2
  257. package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts +2 -2
  258. package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts.map +1 -1
  259. package/dest/rollup/root_rollup_public_inputs.d.ts +6 -6
  260. package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -1
  261. package/dest/rollup/root_rollup_public_inputs.js +3 -3
  262. package/dest/slashing/empire.d.ts +1 -1
  263. package/dest/slashing/empire.d.ts.map +1 -1
  264. package/dest/slashing/empire.js +2 -0
  265. package/dest/slashing/helpers.d.ts +2 -2
  266. package/dest/slashing/helpers.d.ts.map +1 -1
  267. package/dest/slashing/helpers.js +6 -0
  268. package/dest/slashing/tally.d.ts +8 -2
  269. package/dest/slashing/tally.d.ts.map +1 -1
  270. package/dest/slashing/tally.js +35 -3
  271. package/dest/slashing/types.d.ts +7 -3
  272. package/dest/slashing/types.d.ts.map +1 -1
  273. package/dest/slashing/types.js +13 -1
  274. package/dest/tests/factories.d.ts +3 -1
  275. package/dest/tests/factories.d.ts.map +1 -1
  276. package/dest/tests/factories.js +21 -13
  277. package/dest/tests/mocks.d.ts +8 -3
  278. package/dest/tests/mocks.d.ts.map +1 -1
  279. package/dest/tests/mocks.js +31 -21
  280. package/dest/timetable/index.d.ts +37 -0
  281. package/dest/timetable/index.d.ts.map +1 -0
  282. package/dest/timetable/index.js +39 -0
  283. package/dest/trees/public_data_leaf.d.ts +2 -1
  284. package/dest/trees/public_data_leaf.d.ts.map +1 -1
  285. package/dest/trees/public_data_leaf.js +7 -6
  286. package/dest/tx/block_header.d.ts +3 -1
  287. package/dest/tx/block_header.d.ts.map +1 -1
  288. package/dest/tx/block_header.js +6 -2
  289. package/dest/tx/global_variables.d.ts +4 -4
  290. package/dest/tx/global_variables.d.ts.map +1 -1
  291. package/dest/tx/private_execution_result.d.ts +6 -6
  292. package/dest/tx/private_execution_result.d.ts.map +1 -1
  293. package/dest/tx/private_execution_result.js +6 -6
  294. package/dest/tx/profiling.d.ts +17 -5
  295. package/dest/tx/profiling.d.ts.map +1 -1
  296. package/dest/tx/profiling.js +15 -5
  297. package/dest/tx/protocol_contracts.d.ts +1 -1
  298. package/dest/tx/protocol_contracts.d.ts.map +1 -1
  299. package/dest/tx/protocol_contracts.js +2 -2
  300. package/dest/tx/public_simulation_output.d.ts +4 -2
  301. package/dest/tx/public_simulation_output.d.ts.map +1 -1
  302. package/dest/tx/public_simulation_output.js +7 -3
  303. package/dest/tx/simulated_tx.d.ts +5 -2
  304. package/dest/tx/simulated_tx.d.ts.map +1 -1
  305. package/dest/tx/simulated_tx.js +4 -1
  306. package/dest/tx/tx.d.ts +6 -5
  307. package/dest/tx/tx.d.ts.map +1 -1
  308. package/dest/tx/tx.js +18 -6
  309. package/dest/tx/tx_receipt.d.ts +22 -3
  310. package/dest/tx/tx_receipt.d.ts.map +1 -1
  311. package/dest/tx/tx_receipt.js +15 -4
  312. package/dest/tx/tx_request.js +2 -2
  313. package/dest/tx/validator/empty_validator.d.ts +2 -2
  314. package/dest/tx/validator/empty_validator.d.ts.map +1 -1
  315. package/dest/tx/validator/error_texts.d.ts +6 -2
  316. package/dest/tx/validator/error_texts.d.ts.map +1 -1
  317. package/dest/tx/validator/error_texts.js +5 -1
  318. package/dest/tx/validator/tx_validator.d.ts +2 -2
  319. package/dest/tx/validator/tx_validator.d.ts.map +1 -1
  320. package/dest/update-checker/index.d.ts +3 -2
  321. package/dest/update-checker/index.d.ts.map +1 -1
  322. package/dest/update-checker/index.js +2 -1
  323. package/dest/update-checker/package_version.d.ts +3 -0
  324. package/dest/update-checker/package_version.d.ts.map +1 -0
  325. package/dest/update-checker/package_version.js +24 -0
  326. package/dest/update-checker/version_checker.d.ts +25 -0
  327. package/dest/update-checker/version_checker.d.ts.map +1 -0
  328. package/dest/update-checker/version_checker.js +50 -0
  329. package/dest/validators/errors.d.ts +6 -1
  330. package/dest/validators/errors.d.ts.map +1 -1
  331. package/dest/validators/errors.js +7 -0
  332. package/dest/validators/schemas.d.ts +30 -30
  333. package/dest/validators/schemas.d.ts.map +1 -1
  334. package/dest/validators/schemas.js +4 -3
  335. package/dest/validators/types.d.ts +3 -3
  336. package/dest/validators/types.d.ts.map +1 -1
  337. package/dest/versioning/versioning.d.ts +4 -2
  338. package/dest/versioning/versioning.d.ts.map +1 -1
  339. package/dest/versioning/versioning.js +4 -1
  340. package/package.json +24 -12
  341. package/src/abi/decoder.ts +15 -6
  342. package/src/abi/encoder.ts +49 -6
  343. package/src/abi/event_metadata_definition.ts +2 -0
  344. package/src/abi/function_call.ts +25 -3
  345. package/src/abi/utils.ts +25 -0
  346. package/src/auth_witness/auth_witness.ts +3 -3
  347. package/src/avm/revert_code.ts +15 -0
  348. package/src/block/block_data.ts +26 -0
  349. package/src/block/in_block.ts +1 -1
  350. package/src/block/index.ts +1 -0
  351. package/src/block/l2_block.ts +13 -1
  352. package/src/block/l2_block_source.ts +36 -7
  353. package/src/block/l2_block_stream/l2_block_stream.ts +21 -0
  354. package/src/checkpoint/checkpoint.ts +43 -16
  355. package/src/checkpoint/checkpoint_data.ts +51 -0
  356. package/src/checkpoint/index.ts +2 -0
  357. package/src/checkpoint/published_checkpoint.ts +3 -1
  358. package/src/checkpoint/validate.ts +230 -0
  359. package/src/config/index.ts +1 -0
  360. package/src/config/sequencer-config.ts +37 -0
  361. package/src/contract/contract_address.ts +4 -4
  362. package/src/contract/contract_class.ts +3 -3
  363. package/src/contract/contract_class_id.ts +5 -4
  364. package/src/contract/interfaces/node-info.ts +3 -0
  365. package/src/contract/private_function.ts +2 -2
  366. package/src/epoch-helpers/index.ts +6 -0
  367. package/src/file-store/local.ts +15 -5
  368. package/src/file-store/s3.ts +12 -3
  369. package/src/gas/README.md +123 -0
  370. package/src/gas/gas_fees.ts +7 -1
  371. package/src/ha-signing/config.ts +156 -0
  372. package/src/ha-signing/index.ts +27 -0
  373. package/src/ha-signing/local_config.ts +46 -0
  374. package/src/ha-signing/types.ts +112 -0
  375. package/src/hash/hash.ts +14 -10
  376. package/src/hash/map_slot.ts +2 -2
  377. package/src/interfaces/allowed_element.ts +29 -9
  378. package/src/interfaces/archiver.ts +8 -2
  379. package/src/interfaces/aztec-node-admin.ts +23 -0
  380. package/src/interfaces/aztec-node.ts +24 -6
  381. package/src/interfaces/block-builder.ts +41 -12
  382. package/src/interfaces/configs.ts +41 -8
  383. package/src/interfaces/l2_logs_source.ts +4 -1
  384. package/src/interfaces/merkle_tree_operations.ts +9 -19
  385. package/src/interfaces/p2p.ts +3 -14
  386. package/src/interfaces/prover-broker.ts +22 -0
  387. package/src/interfaces/prover-client.ts +15 -0
  388. package/src/interfaces/slasher.ts +4 -0
  389. package/src/interfaces/validator.ts +59 -27
  390. package/src/interfaces/world_state.ts +4 -3
  391. package/src/kernel/hints/build_note_hash_read_request_hints.ts +14 -18
  392. package/src/kernel/hints/build_nullifier_read_request_hints.ts +15 -18
  393. package/src/kernel/hints/build_transient_data_hints.ts +17 -2
  394. package/src/kernel/hints/index.ts +2 -2
  395. package/src/kernel/hints/{key_validation_request_and_generator.ts → key_validation_request_and_separator.ts} +12 -15
  396. package/src/kernel/hints/{scoped_key_validation_request_and_generator.ts → scoped_key_validation_request_and_separator.ts} +10 -10
  397. package/src/kernel/private_circuit_public_inputs.ts +14 -14
  398. package/src/kernel/private_kernel_circuit_public_inputs.ts +2 -2
  399. package/src/kernel/private_kernel_tail_circuit_private_inputs.ts +2 -2
  400. package/src/kernel/private_kernel_tail_circuit_public_inputs.ts +14 -5
  401. package/src/kernel/private_to_public_kernel_circuit_public_inputs.ts +5 -5
  402. package/src/kernel/private_to_rollup_kernel_circuit_public_inputs.ts +5 -5
  403. package/src/kernel/private_validation_requests.ts +8 -8
  404. package/src/keys/derivation.ts +8 -8
  405. package/src/keys/key_types.ts +6 -2
  406. package/src/keys/public_keys.ts +2 -2
  407. package/src/keys/utils.ts +5 -5
  408. package/src/kv-store/config.ts +36 -0
  409. package/src/kv-store/index.ts +1 -0
  410. package/src/logs/debug_log_store.ts +54 -0
  411. package/src/logs/{directional_app_tagging_secret.ts → extended_directional_app_tagging_secret.ts} +24 -16
  412. package/src/logs/index.ts +3 -1
  413. package/src/logs/log_id.ts +15 -12
  414. package/src/logs/pre_tag.ts +5 -5
  415. package/src/logs/public_log.ts +4 -2
  416. package/src/logs/siloed_tag.ts +10 -5
  417. package/src/logs/tag.ts +1 -1
  418. package/src/logs/tagging_index_range.ts +24 -0
  419. package/src/messaging/l1_to_l2_message_source.ts +3 -1
  420. package/src/messaging/l2_to_l1_membership.ts +101 -36
  421. package/src/note/index.ts +0 -1
  422. package/src/p2p/attestation_utils.ts +56 -0
  423. package/src/p2p/block_proposal.ts +1 -3
  424. package/src/p2p/checkpoint_attestation.ts +6 -1
  425. package/src/p2p/checkpoint_proposal.ts +46 -31
  426. package/src/p2p/client_type.ts +0 -6
  427. package/src/p2p/consensus_payload.ts +25 -12
  428. package/src/p2p/constants.ts +3 -0
  429. package/src/p2p/index.ts +0 -1
  430. package/src/p2p/peer_error.ts +7 -0
  431. package/src/p2p/topic_type.ts +8 -15
  432. package/src/rollup/checkpoint_header.ts +2 -2
  433. package/src/rollup/checkpoint_rollup_public_inputs.ts +5 -5
  434. package/src/rollup/root_rollup_public_inputs.ts +7 -7
  435. package/src/slashing/empire.ts +3 -1
  436. package/src/slashing/helpers.ts +8 -0
  437. package/src/slashing/tally.ts +41 -2
  438. package/src/slashing/types.ts +14 -0
  439. package/src/tests/factories.ts +26 -17
  440. package/src/tests/mocks.ts +46 -20
  441. package/src/timetable/index.ts +66 -0
  442. package/src/trees/public_data_leaf.ts +11 -5
  443. package/src/tx/block_header.ts +8 -2
  444. package/src/tx/global_variables.ts +3 -3
  445. package/src/tx/private_execution_result.ts +5 -5
  446. package/src/tx/profiling.ts +14 -5
  447. package/src/tx/protocol_contracts.ts +2 -2
  448. package/src/tx/public_simulation_output.ts +4 -0
  449. package/src/tx/simulated_tx.ts +8 -1
  450. package/src/tx/tx.ts +20 -11
  451. package/src/tx/tx_receipt.ts +17 -2
  452. package/src/tx/tx_request.ts +2 -2
  453. package/src/tx/validator/empty_validator.ts +1 -1
  454. package/src/tx/validator/error_texts.ts +5 -1
  455. package/src/tx/validator/tx_validator.ts +1 -1
  456. package/src/update-checker/index.ts +2 -1
  457. package/src/update-checker/package_version.ts +30 -0
  458. package/src/update-checker/version_checker.ts +65 -0
  459. package/src/validators/errors.ts +9 -0
  460. package/src/validators/schemas.ts +8 -1
  461. package/src/validators/types.ts +5 -4
  462. package/src/versioning/versioning.ts +4 -1
  463. package/dest/kernel/hints/key_validation_request_and_generator.d.ts +0 -30
  464. package/dest/kernel/hints/key_validation_request_and_generator.d.ts.map +0 -1
  465. package/dest/logs/directional_app_tagging_secret.d.ts +0 -40
  466. package/dest/logs/directional_app_tagging_secret.d.ts.map +0 -1
  467. package/dest/note/notes_filter.d.ts +0 -27
  468. package/dest/note/notes_filter.d.ts.map +0 -1
  469. package/dest/note/notes_filter.js +0 -11
  470. package/dest/update-checker/update-checker.d.ts +0 -49
  471. package/dest/update-checker/update-checker.d.ts.map +0 -1
  472. package/dest/update-checker/update-checker.js +0 -130
  473. package/src/note/notes_filter.ts +0 -38
  474. package/src/update-checker/update-checker.ts +0 -166
@@ -0,0 +1,230 @@
1
+ import { BLOBS_PER_CHECKPOINT, FIELDS_PER_BLOB, MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT } from '@aztec/constants';
2
+ import type { CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
+ import { sum } from '@aztec/foundation/collection';
4
+
5
+ import { MAX_BLOCKS_PER_CHECKPOINT } from '../deserialization/index.js';
6
+ import type { Checkpoint } from './checkpoint.js';
7
+
8
+ export class CheckpointValidationError extends Error {
9
+ constructor(
10
+ message: string,
11
+ public readonly checkpointNumber: CheckpointNumber,
12
+ public readonly slot: SlotNumber,
13
+ ) {
14
+ super(message);
15
+ this.name = 'CheckpointValidationError';
16
+ }
17
+ }
18
+
19
+ /**
20
+ * Validates a checkpoint. Throws a CheckpointValidationError if any validation fails.
21
+ * - Validates structural integrity (non-empty, block count, sequential numbers, archive chaining, slot consistency)
22
+ * - Validates checkpoint blob field count against maxBlobFields limit
23
+ * - Validates total L2 gas used by checkpoint blocks against the Rollup contract mana limit
24
+ * - Validates total DA gas used by checkpoint blocks against MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT
25
+ * - Validates individual block L2 gas and DA gas against maxL2BlockGas and maxDABlockGas limits
26
+ */
27
+ export function validateCheckpoint(
28
+ checkpoint: Checkpoint,
29
+ opts: {
30
+ rollupManaLimit?: number;
31
+ maxL2BlockGas?: number;
32
+ maxDABlockGas?: number;
33
+ maxTxsPerCheckpoint?: number;
34
+ maxTxsPerBlock?: number;
35
+ },
36
+ ): void {
37
+ validateCheckpointStructure(checkpoint);
38
+ validateCheckpointLimits(checkpoint, opts);
39
+ validateCheckpointBlocksGasLimits(checkpoint, opts);
40
+ }
41
+
42
+ /**
43
+ * Validates structural integrity of a checkpoint.
44
+ * - Non-empty block list
45
+ * - Block count within MAX_BLOCKS_PER_CHECKPOINT
46
+ * - Checkpoint slot matches the first block's slot
47
+ * - Checkpoint lastArchiveRoot matches the first block's lastArchive root
48
+ * - Sequential block numbers without gaps
49
+ * - Sequential indexWithinCheckpoint starting at 0
50
+ * - Archive root chaining between consecutive blocks
51
+ * - Consistent slot number across all blocks
52
+ * - Global variables (slot, timestamp, coinbase, feeRecipient, gasFees) match checkpoint header for each block
53
+ */
54
+ export function validateCheckpointStructure(checkpoint: Checkpoint): void {
55
+ const { blocks, number, slot } = checkpoint;
56
+
57
+ if (blocks.length === 0) {
58
+ throw new CheckpointValidationError('Checkpoint has no blocks', number, slot);
59
+ }
60
+
61
+ if (blocks.length > MAX_BLOCKS_PER_CHECKPOINT) {
62
+ throw new CheckpointValidationError(
63
+ `Checkpoint has ${blocks.length} blocks, exceeding limit of ${MAX_BLOCKS_PER_CHECKPOINT}`,
64
+ number,
65
+ slot,
66
+ );
67
+ }
68
+
69
+ const firstBlock = blocks[0];
70
+
71
+ if (!checkpoint.header.lastArchiveRoot.equals(firstBlock.header.lastArchive.root)) {
72
+ throw new CheckpointValidationError(
73
+ `Checkpoint lastArchiveRoot does not match first block's lastArchive root`,
74
+ number,
75
+ slot,
76
+ );
77
+ }
78
+
79
+ for (let i = 0; i < blocks.length; i++) {
80
+ const block = blocks[i];
81
+
82
+ if (block.indexWithinCheckpoint !== i) {
83
+ throw new CheckpointValidationError(
84
+ `Block at index ${i} has indexWithinCheckpoint ${block.indexWithinCheckpoint}, expected ${i}`,
85
+ number,
86
+ slot,
87
+ );
88
+ }
89
+
90
+ if (block.slot !== slot) {
91
+ throw new CheckpointValidationError(
92
+ `Block ${block.number} has slot ${block.slot}, expected ${slot} (all blocks must share the same slot)`,
93
+ number,
94
+ slot,
95
+ );
96
+ }
97
+
98
+ if (!checkpoint.header.matchesGlobalVariables(block.header.globalVariables)) {
99
+ throw new CheckpointValidationError(
100
+ `Block ${block.number} global variables (slot, timestamp, coinbase, feeRecipient, gasFees) do not match checkpoint header`,
101
+ number,
102
+ slot,
103
+ );
104
+ }
105
+
106
+ if (i > 0) {
107
+ const prev = blocks[i - 1];
108
+ if (block.number !== prev.number + 1) {
109
+ throw new CheckpointValidationError(
110
+ `Block numbers are not sequential: block at index ${i - 1} has number ${prev.number}, block at index ${i} has number ${block.number}`,
111
+ number,
112
+ slot,
113
+ );
114
+ }
115
+
116
+ if (!block.header.lastArchive.root.equals(prev.archive.root)) {
117
+ throw new CheckpointValidationError(
118
+ `Block ${block.number} lastArchive root does not match archive root of block ${prev.number}`,
119
+ number,
120
+ slot,
121
+ );
122
+ }
123
+ }
124
+ }
125
+ }
126
+
127
+ /** Validates checkpoint blocks gas limits */
128
+ function validateCheckpointBlocksGasLimits(
129
+ checkpoint: Checkpoint,
130
+ opts: {
131
+ maxL2BlockGas?: number;
132
+ maxDABlockGas?: number;
133
+ maxTxsPerBlock?: number;
134
+ },
135
+ ): void {
136
+ const { maxL2BlockGas, maxDABlockGas, maxTxsPerBlock } = opts;
137
+
138
+ if (maxL2BlockGas !== undefined) {
139
+ for (const block of checkpoint.blocks) {
140
+ const blockL2Gas = block.header.totalManaUsed.toNumber();
141
+ if (blockL2Gas > maxL2BlockGas) {
142
+ throw new CheckpointValidationError(
143
+ `Block ${block.number} in checkpoint has L2 gas used ${blockL2Gas} exceeding limit of ${maxL2BlockGas}`,
144
+ checkpoint.number,
145
+ checkpoint.slot,
146
+ );
147
+ }
148
+ }
149
+ }
150
+
151
+ if (maxDABlockGas !== undefined) {
152
+ for (const block of checkpoint.blocks) {
153
+ const blockDAGas = block.computeDAGasUsed();
154
+ if (blockDAGas > maxDABlockGas) {
155
+ throw new CheckpointValidationError(
156
+ `Block ${block.number} in checkpoint has DA gas used ${blockDAGas} exceeding limit of ${maxDABlockGas}`,
157
+ checkpoint.number,
158
+ checkpoint.slot,
159
+ );
160
+ }
161
+ }
162
+ }
163
+
164
+ if (maxTxsPerBlock !== undefined) {
165
+ for (const block of checkpoint.blocks) {
166
+ const blockTxCount = block.body.txEffects.length;
167
+ if (blockTxCount > maxTxsPerBlock) {
168
+ throw new CheckpointValidationError(
169
+ `Block ${block.number} in checkpoint has ${blockTxCount} txs exceeding limit of ${maxTxsPerBlock}`,
170
+ checkpoint.number,
171
+ checkpoint.slot,
172
+ );
173
+ }
174
+ }
175
+ }
176
+ }
177
+
178
+ /** Validates checkpoint max blob fields, gas limits, and tx limits */
179
+ function validateCheckpointLimits(
180
+ checkpoint: Checkpoint,
181
+ opts: {
182
+ rollupManaLimit?: number;
183
+ maxTxsPerCheckpoint?: number;
184
+ },
185
+ ): void {
186
+ const { rollupManaLimit, maxTxsPerCheckpoint } = opts;
187
+
188
+ const maxBlobFields = BLOBS_PER_CHECKPOINT * FIELDS_PER_BLOB;
189
+ const maxDAGas = MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT;
190
+
191
+ if (rollupManaLimit !== undefined) {
192
+ const checkpointMana = sum(checkpoint.blocks.map(block => block.header.totalManaUsed.toNumber()));
193
+ if (checkpointMana > rollupManaLimit) {
194
+ throw new CheckpointValidationError(
195
+ `Checkpoint mana cost ${checkpointMana} exceeds rollup limit of ${rollupManaLimit}`,
196
+ checkpoint.number,
197
+ checkpoint.slot,
198
+ );
199
+ }
200
+ }
201
+
202
+ const checkpointDAGas = sum(checkpoint.blocks.map(block => block.computeDAGasUsed()));
203
+ if (checkpointDAGas > maxDAGas) {
204
+ throw new CheckpointValidationError(
205
+ `Checkpoint DA gas cost ${checkpointDAGas} exceeds limit of ${maxDAGas}`,
206
+ checkpoint.number,
207
+ checkpoint.slot,
208
+ );
209
+ }
210
+
211
+ const checkpointBlobFields = checkpoint.toBlobFields().length;
212
+ if (checkpointBlobFields > maxBlobFields) {
213
+ throw new CheckpointValidationError(
214
+ `Checkpoint blob field count ${checkpointBlobFields} exceeds limit of ${maxBlobFields}`,
215
+ checkpoint.number,
216
+ checkpoint.slot,
217
+ );
218
+ }
219
+
220
+ if (maxTxsPerCheckpoint !== undefined) {
221
+ const checkpointTxCount = sum(checkpoint.blocks.map(block => block.body.txEffects.length));
222
+ if (checkpointTxCount > maxTxsPerCheckpoint) {
223
+ throw new CheckpointValidationError(
224
+ `Checkpoint tx count ${checkpointTxCount} exceeds limit of ${maxTxsPerCheckpoint}`,
225
+ checkpoint.number,
226
+ checkpoint.slot,
227
+ );
228
+ }
229
+ }
230
+ }
@@ -1,2 +1,3 @@
1
1
  export * from './chain-config.js';
2
2
  export * from './node-rpc-config.js';
3
+ export * from './sequencer-config.js';
@@ -0,0 +1,37 @@
1
+ import type { ConfigMappingsType } from '@aztec/foundation/config';
2
+
3
+ import type { SequencerConfig } from '../interfaces/configs.js';
4
+
5
+ /** Default maximum number of transactions per block. */
6
+ export const DEFAULT_MAX_TXS_PER_BLOCK = 32;
7
+
8
+ /**
9
+ * Partial sequencer config mappings for fields that need to be shared across packages.
10
+ * The full sequencer config mappings remain in sequencer-client, but shared fields
11
+ * (like blockDurationMs needed by both p2p and sequencer-client) are defined here
12
+ * to avoid duplication.
13
+ */
14
+ export const sharedSequencerConfigMappings: ConfigMappingsType<
15
+ Pick<SequencerConfig, 'blockDurationMs' | 'expectedBlockProposalsPerSlot' | 'maxTxsPerBlock'>
16
+ > = {
17
+ blockDurationMs: {
18
+ env: 'SEQ_BLOCK_DURATION_MS',
19
+ description:
20
+ 'Duration per block in milliseconds when building multiple blocks per slot. ' +
21
+ 'If undefined (default), builds a single block per slot using the full slot duration.',
22
+ parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
23
+ },
24
+ expectedBlockProposalsPerSlot: {
25
+ env: 'SEQ_EXPECTED_BLOCK_PROPOSALS_PER_SLOT',
26
+ description:
27
+ 'Expected number of block proposals per slot for P2P peer scoring. ' +
28
+ '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,
31
+ },
32
+ maxTxsPerBlock: {
33
+ env: 'SEQ_MAX_TX_PER_BLOCK',
34
+ description: 'The maximum number of txs to include in a block.',
35
+ parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
36
+ },
37
+ };
@@ -1,4 +1,4 @@
1
- import { GeneratorIndex } from '@aztec/constants';
1
+ import { DomainSeparator } from '@aztec/constants';
2
2
  import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
3
3
  import { Fr } from '@aztec/foundation/curves/bn254';
4
4
 
@@ -44,7 +44,7 @@ export async function computePartialAddress(
44
44
 
45
45
  return poseidon2HashWithSeparator(
46
46
  [instance.originalContractClassId, saltedInitializationHash],
47
- GeneratorIndex.PARTIAL_ADDRESS,
47
+ DomainSeparator.PARTIAL_ADDRESS,
48
48
  );
49
49
  }
50
50
 
@@ -57,7 +57,7 @@ export function computeSaltedInitializationHash(
57
57
  ): Promise<Fr> {
58
58
  return poseidon2HashWithSeparator(
59
59
  [instance.salt, instance.initializationHash, instance.deployer],
60
- GeneratorIndex.PARTIAL_ADDRESS,
60
+ DomainSeparator.PARTIAL_ADDRESS,
61
61
  );
62
62
  }
63
63
 
@@ -87,5 +87,5 @@ export async function computeInitializationHashFromEncodedArgs(
87
87
  encodedArgs: Fr[],
88
88
  ): Promise<Fr> {
89
89
  const argsHash = await computeVarArgsHash(encodedArgs);
90
- return poseidon2HashWithSeparator([initFn, argsHash], GeneratorIndex.INITIALIZER);
90
+ return poseidon2HashWithSeparator([initFn, argsHash], DomainSeparator.INITIALIZER);
91
91
  }
@@ -8,7 +8,7 @@ import { type ContractClassIdPreimage, computeContractClassIdWithPreimage } from
8
8
  import type { ContractClass, ContractClassWithId } from './interfaces/index.js';
9
9
 
10
10
  /** Contract artifact including its artifact hash */
11
- type ContractArtifactWithHash = ContractArtifact & { artifactHash: Fr };
11
+ export type ContractArtifactWithHash = ContractArtifact & { artifactHash: Fr };
12
12
 
13
13
  const cmpFunctionArtifacts = <T extends { selector: FunctionSelector }>(a: T, b: T) =>
14
14
  a.selector.toField().cmp(b.selector.toField());
@@ -35,8 +35,8 @@ export async function getContractClassFromArtifact(
35
35
 
36
36
  privateArtifactFunctions.sort(cmpFunctionArtifacts);
37
37
 
38
- const contractClass: ContractClass = {
39
- version: 1,
38
+ const contractClass = {
39
+ version: 1 as const,
40
40
  artifactHash,
41
41
  packedBytecode,
42
42
  privateFunctions: privateArtifactFunctions,
@@ -1,4 +1,4 @@
1
- import { GeneratorIndex, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS } from '@aztec/constants';
1
+ import { DomainSeparator, MAX_PACKED_PUBLIC_BYTECODE_SIZE_IN_FIELDS } from '@aztec/constants';
2
2
  import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
3
3
  import { Fr } from '@aztec/foundation/curves/bn254';
4
4
 
@@ -40,7 +40,7 @@ export async function computeContractClassIdWithPreimage(
40
40
  : await computePublicBytecodeCommitment(contractClass.packedBytecode);
41
41
  const id = await poseidon2HashWithSeparator(
42
42
  [artifactHash, privateFunctionsRoot, publicBytecodeCommitment],
43
- GeneratorIndex.CONTRACT_CLASS_ID,
43
+ DomainSeparator.CONTRACT_CLASS_ID,
44
44
  );
45
45
  return { id, artifactHash, privateFunctionsRoot, publicBytecodeCommitment };
46
46
  }
@@ -60,7 +60,7 @@ export type ContractClassIdPreimage = {
60
60
  };
61
61
 
62
62
  export async function computePublicBytecodeCommitment(packedBytecode: Buffer) {
63
- // Encode the buffer into field elements (chunked into 32 bytes each)
63
+ // Encode the buffer into field elements (chunked into 31 bytes each)
64
64
  // The first element is the length of the bytecode (in bytes)
65
65
  const [bytecodeLengthAsField, ...bytecodeAsFields] = bufferAsFields(
66
66
  packedBytecode,
@@ -72,5 +72,6 @@ export async function computePublicBytecodeCommitment(packedBytecode: Buffer) {
72
72
 
73
73
  // NOTE: hash the bytecode here only up to the actual length of the bytecode.
74
74
  // We do not hash the entire max bytecode length!
75
- return await poseidon2HashWithSeparator(bytecodeAsFields.slice(0, bytecodeLength), GeneratorIndex.PUBLIC_BYTECODE);
75
+ const sep = BigInt(DomainSeparator.PUBLIC_BYTECODE) + (bytecodeLengthAsField.toBigInt() << 32n);
76
+ return await poseidon2HashWithSeparator(bytecodeAsFields.slice(0, bytecodeLength), new Fr(sep).toNumber());
76
77
  }
@@ -19,6 +19,8 @@ export interface NodeInfo {
19
19
  l1ContractAddresses: L1ContractAddresses;
20
20
  /** Protocol contract addresses */
21
21
  protocolContractAddresses: ProtocolContractAddresses;
22
+ /** Whether the node requires real proofs for transaction submission. */
23
+ realProofs: boolean;
22
24
  }
23
25
 
24
26
  export const NodeInfoSchema: ZodFor<NodeInfo> = z
@@ -29,5 +31,6 @@ export const NodeInfoSchema: ZodFor<NodeInfo> = z
29
31
  enr: z.string().optional(),
30
32
  l1ContractAddresses: L1ContractAddressesSchema,
31
33
  protocolContractAddresses: ProtocolContractAddressesSchema,
34
+ realProofs: z.boolean(),
32
35
  })
33
36
  .transform(obj => ({ enr: undefined, ...obj }));
@@ -1,4 +1,4 @@
1
- import { FUNCTION_TREE_HEIGHT, GeneratorIndex } from '@aztec/constants';
1
+ import { DomainSeparator, FUNCTION_TREE_HEIGHT } from '@aztec/constants';
2
2
  import { poseidon2Hash, poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
3
3
  import { Fr } from '@aztec/foundation/curves/bn254';
4
4
  import { type MerkleTree, MerkleTreeCalculator } from '@aztec/foundation/trees';
@@ -31,7 +31,7 @@ function computePrivateFunctionLeaves(fns: PrivateFunction[]): Promise<Buffer[]>
31
31
 
32
32
  /** Returns the leaf for a given private function. */
33
33
  export async function computePrivateFunctionLeaf(fn: PrivateFunction): Promise<Buffer> {
34
- return (await poseidon2HashWithSeparator([fn.selector, fn.vkHash], GeneratorIndex.PRIVATE_FUNCTION_LEAF)).toBuffer();
34
+ return (await poseidon2HashWithSeparator([fn.selector, fn.vkHash], DomainSeparator.PRIVATE_FUNCTION_LEAF)).toBuffer();
35
35
  }
36
36
 
37
37
  async function getPrivateFunctionTreeCalculator(): Promise<MerkleTreeCalculator> {
@@ -11,6 +11,8 @@ export type L1RollupConstants = {
11
11
  epochDuration: number;
12
12
  ethereumSlotDuration: number;
13
13
  proofSubmissionEpochs: number;
14
+ targetCommitteeSize: number;
15
+ rollupManaLimit: number;
14
16
  };
15
17
 
16
18
  export const EmptyL1RollupConstants: L1RollupConstants = {
@@ -20,6 +22,8 @@ export const EmptyL1RollupConstants: L1RollupConstants = {
20
22
  slotDuration: 1,
21
23
  ethereumSlotDuration: 1,
22
24
  proofSubmissionEpochs: 1,
25
+ targetCommitteeSize: 48,
26
+ rollupManaLimit: Number.MAX_SAFE_INTEGER,
23
27
  };
24
28
 
25
29
  export const L1RollupConstantsSchema = zodFor<L1RollupConstants>()(
@@ -30,6 +34,8 @@ export const L1RollupConstantsSchema = zodFor<L1RollupConstants>()(
30
34
  epochDuration: z.number(),
31
35
  ethereumSlotDuration: z.number(),
32
36
  proofSubmissionEpochs: z.number(),
37
+ targetCommitteeSize: z.number(),
38
+ rollupManaLimit: z.number(),
33
39
  }),
34
40
  );
35
41
 
@@ -1,15 +1,21 @@
1
1
  import { access, mkdir, readFile, writeFile } from 'fs/promises';
2
2
  import { dirname, resolve } from 'path';
3
+ import { promisify } from 'util';
4
+ import { gunzip as gunzipCb, gzip as gzipCb } from 'zlib';
3
5
 
4
- import type { FileStore } from './interface.js';
6
+ import type { FileStore, FileStoreSaveOptions } from './interface.js';
7
+
8
+ const gzip = promisify(gzipCb);
9
+ const gunzip = promisify(gunzipCb);
5
10
 
6
11
  export class LocalFileStore implements FileStore {
7
12
  constructor(private readonly basePath: string) {}
8
13
 
9
- public async save(path: string, data: Buffer): Promise<string> {
14
+ public async save(path: string, data: Buffer, opts?: FileStoreSaveOptions): Promise<string> {
10
15
  const fullPath = this.getFullPath(path);
11
16
  await mkdir(dirname(fullPath), { recursive: true });
12
- await writeFile(fullPath, data);
17
+ const toWrite = opts?.compress ? await gzip(data) : data;
18
+ await writeFile(fullPath, toWrite);
13
19
  return `file://${fullPath}`;
14
20
  }
15
21
 
@@ -18,9 +24,13 @@ export class LocalFileStore implements FileStore {
18
24
  return this.save(destPath, data);
19
25
  }
20
26
 
21
- public read(pathOrUrlStr: string): Promise<Buffer> {
27
+ public async read(pathOrUrlStr: string): Promise<Buffer> {
22
28
  const fullPath = this.getFullPath(pathOrUrlStr);
23
- return readFile(fullPath);
29
+ const data = await readFile(fullPath);
30
+ if (data.length >= 2 && data[0] === 0x1f && data[1] === 0x8b) {
31
+ return await gunzip(data);
32
+ }
33
+ return data;
24
34
  }
25
35
 
26
36
  public async download(pathOrUrlStr: string, destPath: string): Promise<void> {
@@ -13,10 +13,14 @@ import { tmpdir } from 'os';
13
13
  import { basename, dirname, join } from 'path';
14
14
  import { Readable } from 'stream';
15
15
  import { pipeline } from 'stream/promises';
16
- import { createGzip } from 'zlib';
16
+ import { promisify } from 'util';
17
+ import { createGzip, gunzip as gunzipCb, gzip as gzipCb } from 'zlib';
17
18
 
18
19
  import type { FileStore, FileStoreSaveOptions } from './interface.js';
19
20
 
21
+ const gzip = promisify(gzipCb);
22
+ const gunzip = promisify(gunzipCb);
23
+
20
24
  function normalizeBasePath(path: string): string {
21
25
  return path?.replace(/^\/+|\/+$/g, '') ?? '';
22
26
  }
@@ -52,7 +56,7 @@ export class S3FileStore implements FileStore {
52
56
  const key = this.getFullPath(path);
53
57
  const shouldCompress = !!opts.compress;
54
58
 
55
- const body = shouldCompress ? (await import('zlib')).gzipSync(data) : data;
59
+ const body = shouldCompress ? await gzip(data) : data;
56
60
  const contentLength = body.length;
57
61
  const contentType = this.detectContentType(key, shouldCompress);
58
62
  const put = new PutObjectCommand({
@@ -60,6 +64,7 @@ export class S3FileStore implements FileStore {
60
64
  Key: key,
61
65
  Body: body,
62
66
  ContentType: contentType,
67
+ ContentEncoding: shouldCompress ? 'gzip' : undefined,
63
68
  CacheControl: opts.metadata?.['Cache-control'],
64
69
  Metadata: this.extractUserMetadata(opts.metadata),
65
70
  ContentLength: contentLength,
@@ -134,7 +139,11 @@ export class S3FileStore implements FileStore {
134
139
  for await (const chunk of stream) {
135
140
  chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
136
141
  }
137
- return Buffer.concat(chunks);
142
+ const buffer = Buffer.concat(chunks);
143
+ if (out.ContentEncoding === 'gzip') {
144
+ return await gunzip(buffer);
145
+ }
146
+ return buffer;
138
147
  }
139
148
 
140
149
  public async download(pathOrUrlStr: string, destPath: string): Promise<void> {
@@ -0,0 +1,123 @@
1
+ # Aztec Gas and Fee Model
2
+
3
+ The minimum fee per mana and its components are computed on L1 in
4
+ `l1-contracts/src/core/libraries/rollup/FeeLib.sol`. This document describes the
5
+ formulas, the oracle lag/lifetime mechanism, and the TypeScript types in this directory.
6
+
7
+ ## Mana
8
+
9
+ Aztec uses **mana** as its unit of work (analogous to Ethereum gas). Transactions consume
10
+ mana in two dimensions: **DA** (data availability) and **L2** (execution). The total fee
11
+ is `gasUsed * feePerMana` summed across both dimensions.
12
+
13
+ ## Fee Components
14
+
15
+ The minimum fee per mana has four components:
16
+
17
+ ### Sequencer Cost
18
+
19
+ L1 cost to propose a checkpoint (calldata gas + blob data), amortized over `manaTarget`:
20
+
21
+ ```
22
+ sequencerCost = ((L1_GAS_PER_CHECKPOINT_PROPOSED * baseFee)
23
+ + (BLOBS_PER_CHECKPOINT * BLOB_GAS_PER_BLOB * blobFee))
24
+ / manaTarget
25
+ ```
26
+
27
+ ### Prover Cost
28
+
29
+ L1 cost to verify an epoch proof, amortized over epoch duration and `manaTarget`, plus a
30
+ governance-set proving cost that compensates for off-chain proof generation:
31
+
32
+ ```
33
+ proverCost = (L1_GAS_PER_EPOCH_VERIFIED * baseFee / epochDuration) / manaTarget
34
+ + provingCostPerMana
35
+ ```
36
+
37
+ ### Congestion Cost
38
+
39
+ An exponential surcharge when the network is congested (inspired by EIP-1559; the
40
+ implementation uses the `fakeExponential` Taylor series approximation from EIP-4844):
41
+
42
+ ```
43
+ baseCost = sequencerCost + proverCost
44
+ congestionCost = baseCost * congestionMultiplier / MINIMUM_CONGESTION_MULTIPLIER - baseCost
45
+ ```
46
+
47
+ When there is no congestion the multiplier equals `MINIMUM_CONGESTION_MULTIPLIER` (1e9)
48
+ and congestion cost is zero.
49
+
50
+ ### Congestion Multiplier
51
+
52
+ ```
53
+ excessMana = max(0, prevExcessMana + prevManaUsed - manaTarget)
54
+ congestionMultiplier = fakeExponential(MINIMUM_CONGESTION_MULTIPLIER, excessMana, denominator)
55
+ ```
56
+
57
+ Each additional `manaTarget` of excess mana increases the multiplier by ~12.5%.
58
+
59
+ ### Total
60
+
61
+ ```
62
+ minFeePerMana = sequencerCost + proverCost + congestionCost
63
+ ```
64
+
65
+ ## L1 Gas Oracle: Lag and Lifetime
66
+
67
+ The oracle feeds Ethereum's `baseFee` and `blobFee` into the fee model using a two-phase
68
+ (`pre` / `post`) system that smooths out L1 fee volatility.
69
+
70
+ - **LAG = 2 slots** — when new L1 fees are observed, they activate `LAG` slots later
71
+ (`slotOfChange = currentSlot + LAG`). This gives mempool transactions time to land
72
+ before fees change.
73
+ - **LIFETIME = 5 slots** — after an oracle update, the next update is rejected until
74
+ `slotOfChange + (LIFETIME - LAG)` = 3 more slots have passed. This rate-limits how
75
+ frequently L1 fee data can change.
76
+
77
+ Fee resolution at a given timestamp:
78
+
79
+ ```
80
+ if slot < slotOfChange → use pre (old fees)
81
+ else → use post (new fees)
82
+ ```
83
+
84
+ **Net effect**: L1 fee changes reach L2 with a 2-slot delay and can update at most once
85
+ every 5 slots.
86
+
87
+ ## Fee Asset Price
88
+
89
+ Fees are computed in ETH internally but converted to the fee asset (Fee Juice) via
90
+ `ethPerFeeAsset` (1e12 precision). The price updates at most ±1% (±100 bps) per
91
+ checkpoint:
92
+
93
+ ```
94
+ newPrice = currentPrice * (10000 + modifierBps) / 10000
95
+ ```
96
+
97
+ ## Maximum Fee Change Rate
98
+
99
+ | Component | Bound |
100
+ | ---------------------- | ------------------------------------------------------- |
101
+ | L1 base fee / blob fee | At most once every 5 slots (oracle LIFETIME) |
102
+ | Fee asset price | ±1% per checkpoint |
103
+ | Congestion multiplier | Depends on excess mana accumulation/drain per checkpoint |
104
+ | Sequencer/prover costs | Scale linearly with L1 fees |
105
+
106
+ ## Key Constants
107
+
108
+ | Constant | Value |
109
+ | ------------------------------ | -------------- |
110
+ | `L1_GAS_PER_CHECKPOINT_PROPOSED` | 300,000 |
111
+ | `L1_GAS_PER_EPOCH_VERIFIED` | 3,600,000 |
112
+ | `BLOBS_PER_CHECKPOINT` | 3 |
113
+ | `BLOB_GAS_PER_BLOB` | 2^17 |
114
+ | `MINIMUM_CONGESTION_MULTIPLIER` | 1e9 |
115
+ | `LAG` | 2 slots |
116
+ | `LIFETIME` | 5 slots |
117
+
118
+ ## TypeScript Types
119
+
120
+ - **`Gas`** — mana quantity in two dimensions (`daGas`, `l2Gas`).
121
+ - **`GasFees`** — per-unit price in each dimension (`feePerDaGas`, `feePerL2Gas`).
122
+ - **`GasSettings`** — sender-chosen fee parameters: gas limits, teardown limits, max fees, priority fees.
123
+ - **`GasUsed`** — actual consumption after execution. Note: `billedGas` uses the teardown gas *limit*, not actual usage.
@@ -56,8 +56,14 @@ export class GasFees {
56
56
  return this.clone();
57
57
  } else if (typeof scalar === 'bigint') {
58
58
  return new GasFees(this.feePerDaGas * scalar, this.feePerL2Gas * scalar);
59
+ } else if (Number.isInteger(scalar)) {
60
+ const s = BigInt(scalar);
61
+ return new GasFees(this.feePerDaGas * s, this.feePerL2Gas * s);
59
62
  } else {
60
- return new GasFees(Number(this.feePerDaGas) * scalar, Number(this.feePerL2Gas) * scalar);
63
+ return new GasFees(
64
+ BigInt(Math.ceil(Number(this.feePerDaGas) * scalar)),
65
+ BigInt(Math.ceil(Number(this.feePerL2Gas) * scalar)),
66
+ );
61
67
  }
62
68
  }
63
69