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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/dest/abi/buffer.d.ts +6 -2
  2. package/dest/abi/buffer.d.ts.map +1 -1
  3. package/dest/abi/buffer.js +13 -1
  4. package/dest/avm/avm.js +1 -1
  5. package/dest/avm/avm_proving_request.d.ts +70 -70
  6. package/dest/avm/index.d.ts +1 -6
  7. package/dest/avm/index.d.ts.map +1 -1
  8. package/dest/avm/index.js +0 -5
  9. package/dest/aztec-address/index.d.ts +35 -5
  10. package/dest/aztec-address/index.d.ts.map +1 -1
  11. package/dest/aztec-address/index.js +32 -8
  12. package/dest/block/attestation_info.d.ts +1 -1
  13. package/dest/block/attestation_info.d.ts.map +1 -1
  14. package/dest/block/attestation_info.js +7 -4
  15. package/dest/block/l2_block_source.d.ts +46 -23
  16. package/dest/block/l2_block_source.d.ts.map +1 -1
  17. package/dest/block/l2_block_source.js +15 -1
  18. package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts +39 -0
  19. package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts.map +1 -0
  20. package/dest/block/l2_block_stream/event_driven_l2_block_stream.js +165 -0
  21. package/dest/block/l2_block_stream/index.d.ts +2 -1
  22. package/dest/block/l2_block_stream/index.d.ts.map +1 -1
  23. package/dest/block/l2_block_stream/index.js +1 -0
  24. package/dest/block/l2_block_stream/interfaces.d.ts +81 -11
  25. package/dest/block/l2_block_stream/interfaces.d.ts.map +1 -1
  26. package/dest/block/l2_block_stream/interfaces.js +25 -1
  27. package/dest/block/l2_block_stream/l2_block_stream.d.ts +23 -15
  28. package/dest/block/l2_block_stream/l2_block_stream.d.ts.map +1 -1
  29. package/dest/block/l2_block_stream/l2_block_stream.js +149 -152
  30. package/dest/block/l2_block_stream/l2_tips_memory_store.d.ts +6 -12
  31. package/dest/block/l2_block_stream/l2_tips_memory_store.d.ts.map +1 -1
  32. package/dest/block/l2_block_stream/l2_tips_memory_store.js +8 -32
  33. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts +17 -18
  34. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts.map +1 -1
  35. package/dest/block/l2_block_stream/l2_tips_store_base.js +70 -58
  36. package/dest/block/proposal/attestations_and_signers.d.ts +19 -1
  37. package/dest/block/proposal/attestations_and_signers.d.ts.map +1 -1
  38. package/dest/block/proposal/attestations_and_signers.js +47 -7
  39. package/dest/block/test/l2_tips_store_test_suite.d.ts +1 -1
  40. package/dest/block/test/l2_tips_store_test_suite.d.ts.map +1 -1
  41. package/dest/block/test/l2_tips_store_test_suite.js +296 -37
  42. package/dest/block/validate_block_result.d.ts +16 -1
  43. package/dest/block/validate_block_result.d.ts.map +1 -1
  44. package/dest/block/validate_block_result.js +18 -3
  45. package/dest/checkpoint/checkpoint.js +2 -2
  46. package/dest/checkpoint/index.d.ts +2 -1
  47. package/dest/checkpoint/index.d.ts.map +1 -1
  48. package/dest/checkpoint/index.js +1 -0
  49. package/dest/checkpoint/simulation_overrides.d.ts +61 -0
  50. package/dest/checkpoint/simulation_overrides.d.ts.map +1 -0
  51. package/dest/checkpoint/simulation_overrides.js +98 -0
  52. package/dest/checkpoint/validate.d.ts +11 -3
  53. package/dest/checkpoint/validate.d.ts.map +1 -1
  54. package/dest/checkpoint/validate.js +9 -6
  55. package/dest/config/index.d.ts +2 -1
  56. package/dest/config/index.d.ts.map +1 -1
  57. package/dest/config/index.js +1 -0
  58. package/dest/config/network-consensus-config.d.ts +72 -0
  59. package/dest/config/network-consensus-config.d.ts.map +1 -0
  60. package/dest/config/network-consensus-config.js +223 -0
  61. package/dest/config/sequencer-config.d.ts +4 -2
  62. package/dest/config/sequencer-config.d.ts.map +1 -1
  63. package/dest/config/sequencer-config.js +22 -3
  64. package/dest/contract/contract_address.d.ts +5 -4
  65. package/dest/contract/contract_address.d.ts.map +1 -1
  66. package/dest/contract/contract_class.d.ts +1 -1
  67. package/dest/contract/contract_class.d.ts.map +1 -1
  68. package/dest/contract/contract_class.js +3 -2
  69. package/dest/contract/contract_instance.d.ts +16 -2
  70. package/dest/contract/contract_instance.d.ts.map +1 -1
  71. package/dest/contract/contract_instance.js +45 -0
  72. package/dest/contract/index.d.ts +1 -2
  73. package/dest/contract/index.d.ts.map +1 -1
  74. package/dest/contract/index.js +0 -1
  75. package/dest/contract/interfaces/contract_data_source.d.ts +3 -5
  76. package/dest/contract/interfaces/contract_data_source.d.ts.map +1 -1
  77. package/dest/contract/interfaces/contract_instance.d.ts +71 -10
  78. package/dest/contract/interfaces/contract_instance.d.ts.map +1 -1
  79. package/dest/contract/interfaces/contract_instance.js +7 -2
  80. package/dest/contract/interfaces/node-info.d.ts +11 -1
  81. package/dest/contract/interfaces/node-info.d.ts.map +1 -1
  82. package/dest/contract/interfaces/node-info.js +7 -1
  83. package/dest/contract/partial_address.d.ts +9 -3
  84. package/dest/contract/partial_address.d.ts.map +1 -1
  85. package/dest/contract/partial_address.js +8 -2
  86. package/dest/database-version/version_manager.d.ts +18 -4
  87. package/dest/database-version/version_manager.d.ts.map +1 -1
  88. package/dest/database-version/version_manager.js +76 -6
  89. package/dest/deserialization/index.d.ts +35 -3
  90. package/dest/deserialization/index.d.ts.map +1 -1
  91. package/dest/deserialization/index.js +32 -1
  92. package/dest/file-store/factory.d.ts +1 -1
  93. package/dest/file-store/factory.d.ts.map +1 -1
  94. package/dest/file-store/factory.js +7 -0
  95. package/dest/file-store/index.d.ts +2 -1
  96. package/dest/file-store/index.d.ts.map +1 -1
  97. package/dest/file-store/index.js +1 -0
  98. package/dest/file-store/memory.d.ts +24 -0
  99. package/dest/file-store/memory.d.ts.map +1 -0
  100. package/dest/file-store/memory.js +80 -0
  101. package/dest/gas/gas_settings.d.ts +7 -13
  102. package/dest/gas/gas_settings.d.ts.map +1 -1
  103. package/dest/gas/gas_settings.js +9 -16
  104. package/dest/gas/index.d.ts +2 -1
  105. package/dest/gas/index.d.ts.map +1 -1
  106. package/dest/gas/index.js +1 -0
  107. package/dest/gas/tx_gas_limits.d.ts +72 -0
  108. package/dest/gas/tx_gas_limits.d.ts.map +1 -0
  109. package/dest/gas/tx_gas_limits.js +85 -0
  110. package/dest/ha-signing/config.d.ts +19 -5
  111. package/dest/ha-signing/config.d.ts.map +1 -1
  112. package/dest/ha-signing/config.js +9 -3
  113. package/dest/ha-signing/local_config.d.ts +10 -2
  114. package/dest/ha-signing/local_config.d.ts.map +1 -1
  115. package/dest/ha-signing/local_config.js +8 -2
  116. package/dest/interfaces/archiver.d.ts +7 -9
  117. package/dest/interfaces/archiver.d.ts.map +1 -1
  118. package/dest/interfaces/archiver.js +3 -2
  119. package/dest/interfaces/aztec-node-admin.d.ts +24 -17
  120. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  121. package/dest/interfaces/aztec-node-admin.js +1 -1
  122. package/dest/interfaces/aztec-node-debug.d.ts +40 -2
  123. package/dest/interfaces/aztec-node-debug.d.ts.map +1 -1
  124. package/dest/interfaces/aztec-node-debug.js +29 -1
  125. package/dest/interfaces/aztec-node.d.ts +69 -28
  126. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  127. package/dest/interfaces/aztec-node.js +56 -20
  128. package/dest/interfaces/block-builder.d.ts +3 -1
  129. package/dest/interfaces/block-builder.d.ts.map +1 -1
  130. package/dest/interfaces/chain_tips.d.ts +8 -47
  131. package/dest/interfaces/chain_tips.d.ts.map +1 -1
  132. package/dest/interfaces/chain_tips.js +1 -6
  133. package/dest/interfaces/checkpoint_parameter.d.ts +3 -3
  134. package/dest/interfaces/checkpoint_parameter.d.ts.map +1 -1
  135. package/dest/interfaces/checkpoint_parameter.js +3 -3
  136. package/dest/interfaces/client.d.ts +2 -1
  137. package/dest/interfaces/client.d.ts.map +1 -1
  138. package/dest/interfaces/configs.d.ts +27 -6
  139. package/dest/interfaces/configs.d.ts.map +1 -1
  140. package/dest/interfaces/configs.js +5 -1
  141. package/dest/interfaces/get_tx_by_hash_options.d.ts +9 -0
  142. package/dest/interfaces/get_tx_by_hash_options.d.ts.map +1 -0
  143. package/dest/interfaces/get_tx_by_hash_options.js +4 -0
  144. package/dest/interfaces/merkle_tree_operations.d.ts +8 -3
  145. package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
  146. package/dest/interfaces/p2p.d.ts +38 -9
  147. package/dest/interfaces/p2p.d.ts.map +1 -1
  148. package/dest/interfaces/p2p.js +14 -2
  149. package/dest/interfaces/private_kernel_prover.d.ts +71 -12
  150. package/dest/interfaces/private_kernel_prover.d.ts.map +1 -1
  151. package/dest/interfaces/prover-client.d.ts +2 -3
  152. package/dest/interfaces/prover-client.d.ts.map +1 -1
  153. package/dest/interfaces/prover-node.d.ts +12 -8
  154. package/dest/interfaces/prover-node.d.ts.map +1 -1
  155. package/dest/interfaces/prover-node.js +24 -17
  156. package/dest/interfaces/proving-job.d.ts +4 -4
  157. package/dest/interfaces/proving-job.d.ts.map +1 -1
  158. package/dest/interfaces/proving-job.js +2 -2
  159. package/dest/interfaces/server.d.ts +1 -3
  160. package/dest/interfaces/server.d.ts.map +1 -1
  161. package/dest/interfaces/server.js +0 -2
  162. package/dest/interfaces/server_circuit_prover.d.ts +3 -3
  163. package/dest/interfaces/server_circuit_prover.d.ts.map +1 -1
  164. package/dest/interfaces/validator.d.ts +15 -4
  165. package/dest/interfaces/validator.d.ts.map +1 -1
  166. package/dest/interfaces/validator.js +3 -1
  167. package/dest/interfaces/world_state.d.ts +14 -1
  168. package/dest/interfaces/world_state.d.ts.map +1 -1
  169. package/dest/kernel/hints/find_private_kernel_reset_dimensions.d.ts +8 -2
  170. package/dest/kernel/hints/find_private_kernel_reset_dimensions.d.ts.map +1 -1
  171. package/dest/kernel/hints/find_private_kernel_reset_dimensions.js +12 -74
  172. package/dest/kernel/hints/index.d.ts +1 -2
  173. package/dest/kernel/hints/index.d.ts.map +1 -1
  174. package/dest/kernel/hints/index.js +0 -1
  175. package/dest/kernel/hints/read_request.js +1 -1
  176. package/dest/kernel/index.d.ts +6 -2
  177. package/dest/kernel/index.d.ts.map +1 -1
  178. package/dest/kernel/index.js +5 -1
  179. package/dest/kernel/log_hash.d.ts +1 -1
  180. package/dest/kernel/log_hash.d.ts.map +1 -1
  181. package/dest/kernel/log_hash.js +2 -2
  182. package/dest/kernel/note_hash.js +1 -1
  183. package/dest/kernel/nullifier.js +1 -1
  184. package/dest/kernel/private_circuit_public_inputs.d.ts +13 -3
  185. package/dest/kernel/private_circuit_public_inputs.d.ts.map +1 -1
  186. package/dest/kernel/private_circuit_public_inputs.js +14 -7
  187. package/dest/kernel/private_context_inputs.d.ts +4 -3
  188. package/dest/kernel/private_context_inputs.d.ts.map +1 -1
  189. package/dest/kernel/private_context_inputs.js +7 -3
  190. package/dest/kernel/private_kernel_circuit_public_inputs.d.ts +7 -9
  191. package/dest/kernel/private_kernel_circuit_public_inputs.d.ts.map +1 -1
  192. package/dest/kernel/private_kernel_circuit_public_inputs.js +10 -7
  193. package/dest/kernel/private_kernel_init_2_circuit_private_inputs.d.ts +2 -3
  194. package/dest/kernel/private_kernel_init_2_circuit_private_inputs.d.ts.map +1 -1
  195. package/dest/kernel/private_kernel_init_2_circuit_private_inputs.js +3 -5
  196. package/dest/kernel/private_kernel_init_3_circuit_private_inputs.d.ts +2 -3
  197. package/dest/kernel/private_kernel_init_3_circuit_private_inputs.d.ts.map +1 -1
  198. package/dest/kernel/private_kernel_init_3_circuit_private_inputs.js +3 -5
  199. package/dest/kernel/private_kernel_init_4_circuit_private_inputs.d.ts +24 -0
  200. package/dest/kernel/private_kernel_init_4_circuit_private_inputs.d.ts.map +1 -0
  201. package/dest/kernel/private_kernel_init_4_circuit_private_inputs.js +37 -0
  202. package/dest/kernel/private_kernel_init_5_circuit_private_inputs.d.ts +25 -0
  203. package/dest/kernel/private_kernel_init_5_circuit_private_inputs.d.ts.map +1 -0
  204. package/dest/kernel/private_kernel_init_5_circuit_private_inputs.js +39 -0
  205. package/dest/kernel/private_kernel_init_circuit_private_inputs.d.ts +1 -9
  206. package/dest/kernel/private_kernel_init_circuit_private_inputs.d.ts.map +1 -1
  207. package/dest/kernel/private_kernel_init_circuit_private_inputs.js +2 -6
  208. package/dest/kernel/private_kernel_inner_4_circuit_private_inputs.d.ts +18 -0
  209. package/dest/kernel/private_kernel_inner_4_circuit_private_inputs.d.ts.map +1 -0
  210. package/dest/kernel/private_kernel_inner_4_circuit_private_inputs.js +27 -0
  211. package/dest/kernel/private_kernel_inner_5_circuit_private_inputs.d.ts +19 -0
  212. package/dest/kernel/private_kernel_inner_5_circuit_private_inputs.d.ts.map +1 -0
  213. package/dest/kernel/private_kernel_inner_5_circuit_private_inputs.js +29 -0
  214. package/dest/kernel/private_kernel_prover_output.d.ts +4 -1
  215. package/dest/kernel/private_kernel_prover_output.d.ts.map +1 -1
  216. package/dest/kernel/private_kernel_prover_output.js +4 -1
  217. package/dest/kernel/private_kernel_reset_dimensions.d.ts +7 -8
  218. package/dest/kernel/private_kernel_reset_dimensions.d.ts.map +1 -1
  219. package/dest/kernel/private_kernel_reset_tail_circuit_private_inputs.d.ts +29 -0
  220. package/dest/kernel/private_kernel_reset_tail_circuit_private_inputs.d.ts.map +1 -0
  221. package/dest/kernel/private_kernel_reset_tail_circuit_private_inputs.js +36 -0
  222. package/dest/kernel/private_kernel_simulated_output.d.ts +1 -7
  223. package/dest/kernel/private_kernel_simulated_output.d.ts.map +1 -1
  224. package/dest/kernel/private_kernel_simulated_output.js +2 -1
  225. package/dest/kernel/private_log_data.d.ts +1 -1
  226. package/dest/kernel/private_log_data.d.ts.map +1 -1
  227. package/dest/kernel/private_log_data.js +1 -1
  228. package/dest/kernel/utils/index.d.ts +1 -2
  229. package/dest/kernel/utils/index.d.ts.map +1 -1
  230. package/dest/kernel/utils/index.js +0 -1
  231. package/dest/keys/derivation.d.ts +41 -5
  232. package/dest/keys/derivation.d.ts.map +1 -1
  233. package/dest/keys/derivation.js +53 -23
  234. package/dest/logs/app_tagging_secret.d.ts +30 -7
  235. package/dest/logs/app_tagging_secret.d.ts.map +1 -1
  236. package/dest/logs/app_tagging_secret.js +44 -28
  237. package/dest/logs/app_tagging_secret_kind.js +1 -1
  238. package/dest/logs/contract_class_log.d.ts +1 -2
  239. package/dest/logs/contract_class_log.d.ts.map +1 -1
  240. package/dest/logs/contract_class_log.js +0 -4
  241. package/dest/logs/message_context.d.ts +5 -15
  242. package/dest/logs/message_context.d.ts.map +1 -1
  243. package/dest/logs/message_context.js +1 -66
  244. package/dest/logs/pending_tagged_log.d.ts +6 -8
  245. package/dest/logs/pending_tagged_log.d.ts.map +1 -1
  246. package/dest/logs/pending_tagged_log.js +1 -31
  247. package/dest/logs/shared_secret_derivation.d.ts +19 -6
  248. package/dest/logs/shared_secret_derivation.d.ts.map +1 -1
  249. package/dest/logs/shared_secret_derivation.js +26 -11
  250. package/dest/p2p/attestation_utils.d.ts +1 -1
  251. package/dest/p2p/attestation_utils.d.ts.map +1 -1
  252. package/dest/p2p/attestation_utils.js +8 -1
  253. package/dest/p2p/checkpoint_attestation.d.ts +10 -1
  254. package/dest/p2p/checkpoint_attestation.d.ts.map +1 -1
  255. package/dest/p2p/checkpoint_attestation.js +10 -0
  256. package/dest/p2p/checkpoint_proposal.d.ts +2 -1
  257. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  258. package/dest/p2p/consensus_payload.d.ts +2 -1
  259. package/dest/p2p/consensus_payload.d.ts.map +1 -1
  260. package/dest/p2p/index.d.ts +1 -2
  261. package/dest/p2p/index.d.ts.map +1 -1
  262. package/dest/p2p/index.js +0 -1
  263. package/dest/p2p/signature_utils.d.ts +10 -1
  264. package/dest/p2p/signature_utils.d.ts.map +1 -1
  265. package/dest/p2p/signature_utils.js +9 -1
  266. package/dest/rollup/avm_proof_data.d.ts +3 -3
  267. package/dest/rollup/avm_proof_data.d.ts.map +1 -1
  268. package/dest/rollup/checkpoint_header.d.ts +8 -3
  269. package/dest/rollup/checkpoint_header.d.ts.map +1 -1
  270. package/dest/rollup/checkpoint_header.js +20 -10
  271. package/dest/stats/stats.d.ts +2 -2
  272. package/dest/stats/stats.d.ts.map +1 -1
  273. package/dest/tests/factories.d.ts +1 -27
  274. package/dest/tests/factories.d.ts.map +1 -1
  275. package/dest/tests/factories.js +10 -45
  276. package/dest/tests/mocks.d.ts +1 -1
  277. package/dest/tests/mocks.d.ts.map +1 -1
  278. package/dest/tests/mocks.js +3 -2
  279. package/dest/timetable/budgets.d.ts +57 -0
  280. package/dest/timetable/budgets.d.ts.map +1 -0
  281. package/dest/timetable/budgets.js +56 -0
  282. package/dest/timetable/build_proposer_timetable.d.ts +21 -0
  283. package/dest/timetable/build_proposer_timetable.d.ts.map +1 -0
  284. package/dest/timetable/build_proposer_timetable.js +17 -0
  285. package/dest/timetable/consensus_timetable.d.ts +70 -0
  286. package/dest/timetable/consensus_timetable.d.ts.map +1 -0
  287. package/dest/timetable/consensus_timetable.js +89 -0
  288. package/dest/timetable/index.d.ts +5 -84
  289. package/dest/timetable/index.d.ts.map +1 -1
  290. package/dest/timetable/index.js +4 -209
  291. package/dest/timetable/proposer_timetable.d.ts +106 -0
  292. package/dest/timetable/proposer_timetable.d.ts.map +1 -0
  293. package/dest/timetable/proposer_timetable.js +132 -0
  294. package/dest/trees/nullifier_membership_witness.d.ts +5 -8
  295. package/dest/trees/nullifier_membership_witness.d.ts.map +1 -1
  296. package/dest/trees/nullifier_membership_witness.js +0 -9
  297. package/dest/trees/public_data_witness.d.ts +7 -17
  298. package/dest/trees/public_data_witness.d.ts.map +1 -1
  299. package/dest/trees/public_data_witness.js +0 -27
  300. package/dest/tx/execution_payload.d.ts +1 -1
  301. package/dest/tx/execution_payload.d.ts.map +1 -1
  302. package/dest/tx/execution_payload.js +1 -1
  303. package/dest/tx/fee_provider.d.ts +2 -2
  304. package/dest/tx/fee_provider.d.ts.map +1 -1
  305. package/dest/tx/global_variable_builder.d.ts +2 -12
  306. package/dest/tx/global_variable_builder.d.ts.map +1 -1
  307. package/dest/tx/global_variables.js +2 -2
  308. package/dest/tx/index.d.ts +1 -2
  309. package/dest/tx/index.d.ts.map +1 -1
  310. package/dest/tx/index.js +0 -1
  311. package/dest/tx/private_tx_constant_data.d.ts +18 -2
  312. package/dest/tx/private_tx_constant_data.d.ts.map +1 -1
  313. package/dest/tx/private_tx_constant_data.js +13 -4
  314. package/dest/tx/profiling.d.ts +1 -1
  315. package/dest/tx/profiling.d.ts.map +1 -1
  316. package/dest/tx/profiling.js +2 -0
  317. package/dest/tx/simulated_tx.d.ts +10 -6
  318. package/dest/tx/simulated_tx.d.ts.map +1 -1
  319. package/dest/tx/tx.d.ts +9 -1
  320. package/dest/tx/tx.d.ts.map +1 -1
  321. package/dest/tx/tx.js +15 -0
  322. package/dest/tx/validator/error_texts.d.ts +2 -2
  323. package/dest/tx/validator/error_texts.d.ts.map +1 -1
  324. package/dest/tx/validator/error_texts.js +1 -1
  325. package/dest/world-state/world_state_revision.d.ts +1 -18
  326. package/dest/world-state/world_state_revision.d.ts.map +1 -1
  327. package/dest/world-state/world_state_revision.js +0 -20
  328. package/package.json +8 -8
  329. package/src/abi/buffer.ts +13 -1
  330. package/src/avm/avm.ts +1 -1
  331. package/src/avm/index.ts +0 -5
  332. package/src/aztec-address/index.ts +36 -6
  333. package/src/block/attestation_info.ts +7 -2
  334. package/src/block/l2_block_source.ts +67 -13
  335. package/src/block/l2_block_stream/event_driven_l2_block_stream.ts +207 -0
  336. package/src/block/l2_block_stream/index.ts +1 -0
  337. package/src/block/l2_block_stream/interfaces.ts +96 -10
  338. package/src/block/l2_block_stream/l2_block_stream.ts +216 -175
  339. package/src/block/l2_block_stream/l2_tips_memory_store.ts +12 -41
  340. package/src/block/l2_block_stream/l2_tips_store_base.ts +84 -93
  341. package/src/block/proposal/attestations_and_signers.ts +53 -7
  342. package/src/block/test/l2_tips_store_test_suite.ts +270 -28
  343. package/src/block/validate_block_result.ts +48 -2
  344. package/src/checkpoint/checkpoint.ts +2 -2
  345. package/src/checkpoint/index.ts +1 -0
  346. package/src/checkpoint/simulation_overrides.ts +171 -0
  347. package/src/checkpoint/validate.ts +16 -6
  348. package/src/config/index.ts +1 -0
  349. package/src/config/network-consensus-config.ts +291 -0
  350. package/src/config/sequencer-config.ts +36 -5
  351. package/src/contract/contract_address.ts +4 -3
  352. package/src/contract/contract_class.ts +3 -2
  353. package/src/contract/contract_instance.ts +62 -1
  354. package/src/contract/index.ts +0 -1
  355. package/src/contract/interfaces/contract_data_source.ts +2 -4
  356. package/src/contract/interfaces/contract_instance.ts +26 -8
  357. package/src/contract/interfaces/node-info.ts +11 -0
  358. package/src/contract/partial_address.ts +8 -2
  359. package/src/database-version/version_manager.ts +96 -6
  360. package/src/deserialization/index.ts +35 -2
  361. package/src/file-store/factory.ts +7 -0
  362. package/src/file-store/index.ts +1 -0
  363. package/src/file-store/memory.ts +94 -0
  364. package/src/gas/README.md +92 -0
  365. package/src/gas/gas_settings.ts +11 -21
  366. package/src/gas/index.ts +1 -0
  367. package/src/gas/tx_gas_limits.ts +123 -0
  368. package/src/ha-signing/config.ts +23 -5
  369. package/src/ha-signing/local_config.ts +20 -1
  370. package/src/interfaces/archiver.ts +8 -9
  371. package/src/interfaces/aztec-node-admin.ts +1 -1
  372. package/src/interfaces/aztec-node-debug.ts +54 -2
  373. package/src/interfaces/aztec-node.ts +121 -43
  374. package/src/interfaces/block-builder.ts +2 -0
  375. package/src/interfaces/chain_tips.ts +8 -16
  376. package/src/interfaces/checkpoint_parameter.ts +3 -3
  377. package/src/interfaces/client.ts +1 -0
  378. package/src/interfaces/configs.ts +27 -6
  379. package/src/interfaces/get_tx_by_hash_options.ts +14 -0
  380. package/src/interfaces/merkle_tree_operations.ts +8 -2
  381. package/src/interfaces/p2p.ts +29 -9
  382. package/src/interfaces/private_kernel_prover.ts +104 -13
  383. package/src/interfaces/prover-client.ts +1 -3
  384. package/src/interfaces/prover-node.ts +32 -17
  385. package/src/interfaces/proving-job.ts +3 -3
  386. package/src/interfaces/server.ts +0 -2
  387. package/src/interfaces/server_circuit_prover.ts +2 -2
  388. package/src/interfaces/validator.ts +11 -0
  389. package/src/interfaces/world_state.ts +14 -0
  390. package/src/kernel/hints/find_private_kernel_reset_dimensions.ts +22 -112
  391. package/src/kernel/hints/index.ts +0 -1
  392. package/src/kernel/hints/read_request.ts +1 -1
  393. package/src/kernel/index.ts +5 -1
  394. package/src/kernel/log_hash.ts +5 -2
  395. package/src/kernel/note_hash.ts +1 -1
  396. package/src/kernel/nullifier.ts +1 -1
  397. package/src/kernel/private_circuit_public_inputs.ts +12 -1
  398. package/src/kernel/private_context_inputs.ts +10 -3
  399. package/src/kernel/private_kernel_circuit_public_inputs.ts +9 -7
  400. package/src/kernel/private_kernel_init_2_circuit_private_inputs.ts +0 -3
  401. package/src/kernel/private_kernel_init_3_circuit_private_inputs.ts +0 -3
  402. package/src/kernel/private_kernel_init_4_circuit_private_inputs.ts +52 -0
  403. package/src/kernel/private_kernel_init_5_circuit_private_inputs.ts +55 -0
  404. package/src/kernel/private_kernel_init_circuit_private_inputs.ts +0 -6
  405. package/src/kernel/private_kernel_inner_4_circuit_private_inputs.ts +39 -0
  406. package/src/kernel/private_kernel_inner_5_circuit_private_inputs.ts +42 -0
  407. package/src/kernel/private_kernel_prover_output.ts +4 -0
  408. package/src/kernel/private_kernel_reset_dimensions.ts +15 -5
  409. package/src/kernel/private_kernel_reset_tail_circuit_private_inputs.ts +69 -0
  410. package/src/kernel/private_kernel_simulated_output.ts +0 -7
  411. package/src/kernel/private_log_data.ts +4 -1
  412. package/src/kernel/utils/index.ts +0 -1
  413. package/src/keys/derivation.ts +71 -21
  414. package/src/logs/app_tagging_secret.ts +56 -24
  415. package/src/logs/app_tagging_secret_kind.ts +1 -1
  416. package/src/logs/contract_class_log.ts +0 -9
  417. package/src/logs/message_context.ts +7 -65
  418. package/src/logs/pending_tagged_log.ts +6 -33
  419. package/src/logs/shared_secret_derivation.ts +31 -15
  420. package/src/p2p/attestation_utils.ts +8 -1
  421. package/src/p2p/checkpoint_attestation.ts +12 -0
  422. package/src/p2p/index.ts +0 -1
  423. package/src/p2p/signature_utils.ts +9 -0
  424. package/src/rollup/avm_proof_data.ts +2 -2
  425. package/src/rollup/checkpoint_header.ts +16 -2
  426. package/src/stats/stats.ts +6 -2
  427. package/src/tests/factories.ts +13 -51
  428. package/src/tests/mocks.ts +7 -2
  429. package/src/timetable/README.md +609 -0
  430. package/src/timetable/budgets.ts +87 -0
  431. package/src/timetable/build_proposer_timetable.ts +42 -0
  432. package/src/timetable/consensus_timetable.ts +126 -0
  433. package/src/timetable/index.ts +4 -304
  434. package/src/timetable/proposer_timetable.ts +190 -0
  435. package/src/timetable/timetable-example.svg +108 -0
  436. package/src/trees/nullifier_membership_witness.ts +0 -11
  437. package/src/trees/public_data_witness.ts +0 -31
  438. package/src/tx/execution_payload.ts +2 -1
  439. package/src/tx/fee_provider.ts +1 -1
  440. package/src/tx/global_variable_builder.ts +1 -17
  441. package/src/tx/global_variables.ts +2 -2
  442. package/src/tx/index.ts +0 -1
  443. package/src/tx/private_tx_constant_data.ts +25 -2
  444. package/src/tx/profiling.ts +2 -0
  445. package/src/tx/tx.ts +17 -0
  446. package/src/tx/validator/error_texts.ts +2 -1
  447. package/src/world-state/world_state_revision.ts +0 -33
  448. package/dest/avm/contract_storage_read.d.ts +0 -58
  449. package/dest/avm/contract_storage_read.d.ts.map +0 -1
  450. package/dest/avm/contract_storage_read.js +0 -65
  451. package/dest/avm/contract_storage_update_request.d.ts +0 -65
  452. package/dest/avm/contract_storage_update_request.d.ts.map +0 -1
  453. package/dest/avm/contract_storage_update_request.js +0 -80
  454. package/dest/avm/public_call_stack_item_compressed.d.ts +0 -43
  455. package/dest/avm/public_call_stack_item_compressed.d.ts.map +0 -1
  456. package/dest/avm/public_call_stack_item_compressed.js +0 -70
  457. package/dest/avm/public_data_update_request.d.ts +0 -62
  458. package/dest/avm/public_data_update_request.d.ts.map +0 -1
  459. package/dest/avm/public_data_update_request.js +0 -67
  460. package/dest/avm/public_inner_call_request.d.ts +0 -50
  461. package/dest/avm/public_inner_call_request.d.ts.map +0 -1
  462. package/dest/avm/public_inner_call_request.js +0 -74
  463. package/dest/contract/deployment_info.d.ts +0 -24
  464. package/dest/contract/deployment_info.d.ts.map +0 -1
  465. package/dest/contract/deployment_info.js +0 -3
  466. package/dest/interfaces/epoch-prover.d.ts +0 -57
  467. package/dest/interfaces/epoch-prover.d.ts.map +0 -1
  468. package/dest/interfaces/epoch-prover.js +0 -1
  469. package/dest/interfaces/prover-coordination.d.ts +0 -15
  470. package/dest/interfaces/prover-coordination.d.ts.map +0 -1
  471. package/dest/interfaces/prover-coordination.js +0 -1
  472. package/dest/kernel/hints/tree_leaf_read_request.d.ts +0 -14
  473. package/dest/kernel/hints/tree_leaf_read_request.d.ts.map +0 -1
  474. package/dest/kernel/hints/tree_leaf_read_request.js +0 -33
  475. package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts +0 -47
  476. package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts.map +0 -1
  477. package/dest/kernel/private_kernel_tail_circuit_private_inputs.js +0 -38
  478. package/dest/kernel/utils/optional_number.d.ts +0 -31
  479. package/dest/kernel/utils/optional_number.d.ts.map +0 -1
  480. package/dest/kernel/utils/optional_number.js +0 -42
  481. package/dest/p2p/interface.d.ts +0 -5
  482. package/dest/p2p/interface.d.ts.map +0 -1
  483. package/dest/p2p/interface.js +0 -1
  484. package/dest/tx/validator/empty_validator.d.ts +0 -5
  485. package/dest/tx/validator/empty_validator.d.ts.map +0 -1
  486. package/dest/tx/validator/empty_validator.js +0 -7
  487. package/src/avm/contract_storage_read.ts +0 -77
  488. package/src/avm/contract_storage_update_request.ts +0 -93
  489. package/src/avm/public_call_stack_item_compressed.ts +0 -113
  490. package/src/avm/public_data_update_request.ts +0 -106
  491. package/src/avm/public_inner_call_request.ts +0 -85
  492. package/src/contract/deployment_info.ts +0 -25
  493. package/src/interfaces/epoch-prover.ts +0 -72
  494. package/src/interfaces/prover-coordination.ts +0 -17
  495. package/src/kernel/hints/tree_leaf_read_request.ts +0 -35
  496. package/src/kernel/private_kernel_tail_circuit_private_inputs.ts +0 -58
  497. package/src/kernel/utils/optional_number.ts +0 -50
  498. package/src/p2p/interface.ts +0 -4
  499. package/src/tx/validator/empty_validator.ts +0 -7
@@ -0,0 +1,190 @@
1
+ import type { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import type { Logger } from '@aztec/foundation/log';
3
+
4
+ import { type ResolvedTimingBudgets, getDefaultCheckpointProposalSyncGrace, resolveTimingBudgets } from './budgets.js';
5
+ import { ConsensusTimetable, type SlotTimingConstants } from './consensus_timetable.js';
6
+
7
+ /** Result of selecting the next block sub-slot to build. */
8
+ export type SubslotSelection =
9
+ | { canStart: false; index: undefined; deadline: undefined; isLastBlock: false }
10
+ | { canStart: true; index: number; deadline: number; isLastBlock: boolean };
11
+
12
+ /**
13
+ * Proposer ideal/happy-path schedule and block sub-slot timetable.
14
+ *
15
+ * Composes a {@link ConsensusTimetable} and adds the operational budgets that only the proposer needs
16
+ * (`min_block_duration`, `p2p_propagation_time`, `checkpoint_proposal_prepare_time`). Used by the
17
+ * sequencer and checkpoint-proposal job. All getters take a target slot and return an absolute
18
+ * wall-clock timestamp in seconds (or sub-slot deadlines in seconds for {@link selectNextSubslot}).
19
+ *
20
+ * The single hard deadline {@link getAttestationDeadline} is inherited from the composed
21
+ * {@link ConsensusTimetable}, so the proposer uses one object.
22
+ *
23
+ * `maxBlocksPerCheckpoint` is computed from the local operational budgets and then clamped down to the optional
24
+ * network-provided value when that value is lower; a network value at or above the computed count leaves the
25
+ * computed count in effect. When clamping down occurs and a logger is supplied, a warning is emitted.
26
+ */
27
+ export class ProposerTimetable extends ConsensusTimetable {
28
+ /** Minimum block-building time (`min_block_duration`) in seconds. */
29
+ public readonly minBlockDuration: number;
30
+
31
+ /** One-way proposal/attestation propagation budget (`p2p_propagation_time`) in seconds. */
32
+ public readonly p2pPropagationTime: number;
33
+
34
+ /** Local checkpoint proposal preparation budget (`checkpoint_proposal_prepare_time`) in seconds. */
35
+ public readonly checkpointProposalPrepareTime: number;
36
+
37
+ /** Proposer initialization budget (`checkpoint_proposal_init_time`) reserved before the first sub-slot, in seconds. */
38
+ public readonly checkpointProposalInitTime: number;
39
+
40
+ /**
41
+ * Effective maximum number of block sub-slots per checkpoint: the value the local operational budgets compute,
42
+ * clamped down to the explicit network value when that value is lower. A network value above the computed
43
+ * count has no effect (the computed count is used) and is not logged.
44
+ */
45
+ public readonly maxBlocksPerCheckpoint: number;
46
+
47
+ constructor(opts: {
48
+ l1Constants: SlotTimingConstants;
49
+ blockDuration: number;
50
+ minBlockDuration: number;
51
+ p2pPropagationTime: number;
52
+ checkpointProposalPrepareTime: number;
53
+ checkpointProposalInitTime: number;
54
+ checkpointProposalSyncGrace?: number;
55
+ /** Explicit network max blocks per checkpoint; the effective value is clamped down to this when it is lower. */
56
+ maxBlocksPerCheckpoint?: number;
57
+ /** Optional logger; warns when the local budgets compute more blocks than the network value allows. */
58
+ logger?: Logger;
59
+ }) {
60
+ super({
61
+ l1Constants: opts.l1Constants,
62
+ blockDuration: opts.blockDuration,
63
+ checkpointProposalSyncGrace:
64
+ opts.checkpointProposalSyncGrace ?? getDefaultCheckpointProposalSyncGrace(opts.blockDuration),
65
+ });
66
+
67
+ // Resolve operational budgets, applying the fast local/e2e profile for low ethereum slot durations so a
68
+ // fast network does not inherit the conservative production budgets (which would shrink the build window).
69
+ const budgets: ResolvedTimingBudgets = resolveTimingBudgets(this.ethereumSlotDuration, {
70
+ minBlockDuration: opts.minBlockDuration,
71
+ p2pPropagationTime: opts.p2pPropagationTime,
72
+ checkpointProposalPrepareTime: opts.checkpointProposalPrepareTime,
73
+ checkpointProposalInitTime: opts.checkpointProposalInitTime,
74
+ });
75
+ this.p2pPropagationTime = budgets.p2pPropagationTime;
76
+ this.checkpointProposalPrepareTime = budgets.checkpointProposalPrepareTime;
77
+ this.checkpointProposalInitTime = budgets.checkpointProposalInitTime;
78
+
79
+ // Clamp min block duration to the block duration so a single sub-slot is always startable.
80
+ this.minBlockDuration = Math.min(budgets.minBlockDuration, this.blockDuration);
81
+
82
+ const computed = this.computeMaxBlocksPerCheckpoint();
83
+ this.maxBlocksPerCheckpoint =
84
+ opts.maxBlocksPerCheckpoint !== undefined ? Math.min(computed, opts.maxBlocksPerCheckpoint) : computed;
85
+ if (opts.maxBlocksPerCheckpoint !== undefined && opts.maxBlocksPerCheckpoint < computed) {
86
+ opts.logger?.warn(`Locally computed max blocks per checkpoint clamped down to the network-provided value`, {
87
+ computed,
88
+ maxBlocksPerCheckpoint: opts.maxBlocksPerCheckpoint,
89
+ });
90
+ }
91
+ if (this.maxBlocksPerCheckpoint < 1) {
92
+ throw new Error(
93
+ `Invalid timing configuration: derived ${this.maxBlocksPerCheckpoint} blocks per checkpoint for ` +
94
+ `slot duration ${this.aztecSlotDuration}s and block duration ${this.blockDuration}s.`,
95
+ );
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Computes the maximum number of full-duration block sub-slots in a checkpoint from the already-resolved
101
+ * budgets. Derived from the spec's `max_blocks_per_checkpoint = floor((last_block_build_time -
102
+ * first_subslot_start) / D)`, where the first sub-slot starts one `checkpoint_proposal_init_time` (`init`)
103
+ * after `build_frame_start`, so it simplifies to `floor((S - init - D - 2P - prepCp) / D)`.
104
+ */
105
+ private computeMaxBlocksPerCheckpoint(): number {
106
+ // last_block_build_time - (build_frame_start + init) = S - init - D - 2P - prepCp.
107
+ const timeAvailableForBlocks =
108
+ this.aztecSlotDuration -
109
+ this.checkpointProposalInitTime -
110
+ this.blockDuration -
111
+ 2 * this.p2pPropagationTime -
112
+ this.checkpointProposalPrepareTime;
113
+ return Math.floor(timeAvailableForBlocks / this.blockDuration);
114
+ }
115
+
116
+ /**
117
+ * Ideal time the last block must finish building by to make the ideal L1 publish path:
118
+ * `target_slot_start - E - D - 2P - prepCp` (= `checkpoint_proposal_send_time - prepCp`). Single value;
119
+ * the proposer sizes block production around the ideal L1-publish path only.
120
+ */
121
+ public getLastBlockBuildTime(slot: SlotNumber): number {
122
+ return (
123
+ this.getTargetSlotStart(slot) -
124
+ this.ethereumSlotDuration -
125
+ this.blockDuration -
126
+ 2 * this.p2pPropagationTime -
127
+ this.checkpointProposalPrepareTime
128
+ );
129
+ }
130
+
131
+ /**
132
+ * Latest start at which the proposer can still squeeze in a minimum-duration block.
133
+ *
134
+ * Multi-block mode: `last_block_build_time - min_block_duration`, an ideal-derived cutoff
135
+ * intentionally earlier (by `P`) than the consensus receive gate would strictly allow, and
136
+ * conservatively no later than the final sub-slot's start cutoff in {@link selectNextSubslot}.
137
+ *
138
+ */
139
+ public getBuildStartDeadline(slot: SlotNumber): number {
140
+ return this.getLastBlockBuildTime(slot) - this.minBlockDuration;
141
+ }
142
+
143
+ /** Ideal L1 publish/send time: `target_slot_start - E`. Also the ideal attestation-receipt target. */
144
+ public getL1PublishIdealTime(slot: SlotNumber): number {
145
+ return this.getTargetSlotStart(slot) - this.ethereumSlotDuration;
146
+ }
147
+
148
+ /**
149
+ * Build deadline for sub-slot `k` (zero-based): `build_frame_start + init + (k + 1) * D`.
150
+ *
151
+ * The `init` (`checkpoint_proposal_init_time`) offset reserves the proposer's sync/proposer-check/init
152
+ * budget at the start of the build frame, so the first sub-slot still has its full duration once the
153
+ * prologue finishes rather than being eaten by it.
154
+ */
155
+ public getBlockBuildDeadline(slot: SlotNumber, blockIndex: number): number {
156
+ return this.getBuildFrameStart(slot) + this.checkpointProposalInitTime + (blockIndex + 1) * this.blockDuration;
157
+ }
158
+
159
+ /** Latest time to keep waiting for txs for sub-slot `k`: `block_build_deadline(k) - min_block_duration`. */
160
+ public getWaitForTxsDeadline(slot: SlotNumber, blockIndex: number): number {
161
+ return this.getBlockBuildDeadline(slot, blockIndex) - this.minBlockDuration;
162
+ }
163
+
164
+ /** Maximum number of full-duration block sub-slots for this timing config. */
165
+ public getMaxBlocksPerCheckpoint(): number {
166
+ return this.maxBlocksPerCheckpoint;
167
+ }
168
+
169
+ /**
170
+ * Selects the next block sub-slot to build for the target slot given the current wall-clock time.
171
+ *
172
+ * Scans sub-slots in order and picks the first whose build deadline is at least `min_block_duration`
173
+ * in the future. Sub-slots with insufficient remaining headroom are skipped.
174
+ *
175
+ * @param slot - Target slot the checkpoint commits to.
176
+ * @param now - Current wall-clock time in seconds.
177
+ */
178
+ public selectNextSubslot(slot: SlotNumber, now: number): SubslotSelection {
179
+ const maxBlocks = this.maxBlocksPerCheckpoint;
180
+ for (let index = 0; index < maxBlocks; index++) {
181
+ const deadline = this.getBlockBuildDeadline(slot, index);
182
+ if (deadline - now >= this.minBlockDuration) {
183
+ const isLastBlock = index === maxBlocks - 1;
184
+ return { canStart: true, index, deadline, isLastBlock };
185
+ }
186
+ }
187
+
188
+ return { canStart: false, index: undefined, deadline: undefined, isLastBlock: false };
189
+ }
190
+ }
@@ -0,0 +1,108 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg viewBox="0 0 1080 460" width="1080" height="460" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system, Segoe UI, Helvetica, Arial, sans-serif" role="img" aria-label="Proportional example timetable">
3
+ <rect x="0" y="0" width="1080" height="460" fill="#ffffff"/>
4
+ <text x="540" y="28" text-anchor="middle" font-size="16" font-weight="700" fill="#1e293b">Example timetable — offsets from build_frame_start (S=72,E=12,D=6,P=2,prepCp=1)</text>
5
+
6
+ <!-- phase bands -->
7
+ <rect x="70" y="244" width="427" height="32" rx="4" fill="#dbeafe"/>
8
+ <rect x="497" y="244" width="77" height="32" fill="#fde68a"/>
9
+ <rect x="574" y="244" width="84" height="32" fill="#e9d5ff"/>
10
+ <rect x="658" y="244" width="352" height="32" rx="4" fill="#dcfce7"/>
11
+
12
+ <text x="283" y="236" text-anchor="middle" font-size="12" fill="#1e40af">block building</text>
13
+ <text x="535" y="236" text-anchor="middle" font-size="10.5" fill="#92400e">dead zone</text>
14
+ <text x="616" y="236" text-anchor="middle" font-size="10.5" fill="#6b21a8">send lead</text>
15
+ <text x="834" y="236" text-anchor="middle" font-size="12" fill="#166534">target L2 slot →</text>
16
+
17
+ <!-- ethereum-slot ticks (12s) -->
18
+ <g stroke="#94a3b8" stroke-width="1" opacity="0.45">
19
+ <line x1="154" y1="246" x2="154" y2="274"/>
20
+ <line x1="238" y1="246" x2="238" y2="274"/>
21
+ <line x1="322" y1="246" x2="322" y2="274"/>
22
+ <line x1="406" y1="246" x2="406" y2="274"/>
23
+ <line x1="490" y1="246" x2="490" y2="274"/>
24
+ <line x1="574" y1="246" x2="574" y2="274"/>
25
+ <line x1="658" y1="246" x2="658" y2="274"/>
26
+ <line x1="742" y1="246" x2="742" y2="274"/>
27
+ <line x1="826" y1="246" x2="826" y2="274"/>
28
+ <line x1="910" y1="246" x2="910" y2="274"/>
29
+ <line x1="994" y1="246" x2="994" y2="274"/>
30
+ </g>
31
+
32
+ <line x1="70" y1="260" x2="1010" y2="260" stroke="#475569" stroke-width="1.5"/>
33
+
34
+ <!-- slot boundaries (dashed) -->
35
+ <line x1="154" y1="242" x2="154" y2="296" stroke="#94a3b8" stroke-width="1.2" stroke-dasharray="4 3"/>
36
+ <text x="154" y="310" text-anchor="middle" font-size="10" fill="#64748b">build slot start (+12)</text>
37
+ <line x1="658" y1="218" x2="658" y2="302" stroke="#64748b" stroke-width="1.4" stroke-dasharray="5 3"/>
38
+ <text x="658" y="212" text-anchor="middle" font-size="10.5" fill="#334155">target slot start (+84)</text>
39
+
40
+ <!-- build frame opens (+0) -->
41
+ <line x1="70" y1="255" x2="70" y2="222" stroke="#94a3b8" stroke-width="1"/>
42
+ <circle cx="70" cy="260" r="5" fill="#2563eb" stroke="#fff" stroke-width="1.5"/>
43
+ <text x="64" y="216" text-anchor="start" font-size="11" fill="#1e3a5f">Build frame opens (+0)</text>
44
+
45
+ <!-- block 1 build deadline (+6) -->
46
+ <line x1="112" y1="265" x2="112" y2="300" stroke="#94a3b8" stroke-width="1"/>
47
+ <circle cx="112" cy="260" r="4" fill="#2563eb" stroke="#fff" stroke-width="1.5"/>
48
+ <text x="112" y="314" text-anchor="middle" font-size="10" fill="#64748b">block 1 build deadline (+6)</text>
49
+
50
+ <!-- start_deadline (+59) -->
51
+ <line x1="483" y1="265" x2="483" y2="332" stroke="#94a3b8" stroke-width="1"/>
52
+ <circle cx="483" cy="260" r="5" fill="#2563eb" stroke="#fff" stroke-width="1.5"/>
53
+ <text x="483" y="346" text-anchor="middle" font-size="11" fill="#1e3a5f">start_deadline (+59)</text>
54
+
55
+ <!-- last_block_build_time (+61, single value) -->
56
+ <line x1="497" y1="265" x2="497" y2="362" stroke="#94a3b8" stroke-width="1"/>
57
+ <circle cx="497" cy="260" r="5" fill="#2563eb" stroke="#fff" stroke-width="1.5"/>
58
+ <text x="497" y="376" text-anchor="middle" font-size="11" fill="#1e3a5f">last_block_build_time (+61)</text>
59
+
60
+ <!-- checkpoint_proposal_send_time (+62) -->
61
+ <line x1="504" y1="255" x2="504" y2="190" stroke="#94a3b8" stroke-width="1"/>
62
+ <circle cx="504" cy="260" r="5" fill="#2563eb" stroke="#fff" stroke-width="1.5"/>
63
+ <text x="504" y="184" text-anchor="middle" font-size="11" fill="#1e3a5f">checkpoint_proposal_send_time (+62)</text>
64
+
65
+ <!-- checkpoint_proposal_receive_ideal (+64) -->
66
+ <line x1="518" y1="255" x2="518" y2="146" stroke="#16a34a" stroke-width="1"/>
67
+ <circle cx="518" cy="260" r="5" fill="#16a34a" stroke="#fff" stroke-width="1.5"/>
68
+ <text x="518" y="140" text-anchor="middle" font-size="11" fill="#14532d">checkpoint_proposal_receive_ideal (+64)</text>
69
+
70
+ <!-- checkpoint_proposal_receive_deadline (+66) -->
71
+ <line x1="532" y1="255" x2="532" y2="92" stroke="#dc2626" stroke-width="1"/>
72
+ <circle cx="532" cy="260" r="5" fill="#dc2626" stroke="#fff" stroke-width="1.5"/>
73
+ <text x="532" y="72" text-anchor="middle" font-size="11" fill="#7f1d1d">checkpoint_proposal</text>
74
+ <text x="532" y="86" text-anchor="middle" font-size="11" fill="#7f1d1d">receive_deadline (+66)</text>
75
+
76
+ <!-- next proposer frame opens / l1_publish_ideal / attestation_receive_ideal (+72) -->
77
+ <line x1="574" y1="255" x2="574" y2="116" stroke="#16a34a" stroke-width="1"/>
78
+ <circle cx="574" cy="260" r="5" fill="#16a34a" stroke="#fff" stroke-width="1.5"/>
79
+ <text x="574" y="96" text-anchor="middle" font-size="11" fill="#6b21a8">Next proposer frame opens (+72)</text>
80
+ <text x="574" y="110" text-anchor="middle" font-size="11" fill="#14532d">l1_publish_ideal = attestation_receive_ideal</text>
81
+
82
+ <!-- single attestation_deadline (+132) -->
83
+ <line x1="994" y1="255" x2="994" y2="176" stroke="#dc2626" stroke-width="1.4"/>
84
+ <circle cx="994" cy="260" r="5.5" fill="#dc2626" stroke="#fff" stroke-width="1.5"/>
85
+ <text x="994" y="148" text-anchor="middle" font-size="11" font-weight="700" fill="#7f1d1d">attestation_deadline (+132)</text>
86
+ <text x="994" y="162" text-anchor="middle" font-size="10.5" fill="#7f1d1d">single deadline: validation / re-exec / signing</text>
87
+ <text x="994" y="176" text-anchor="middle" font-size="10" fill="#991b1b">+ collection cutoff · latest useful L1 send · tx timeout</text>
88
+
89
+ <!-- acceptance windows — both open at build_frame_start (+0, x=70) -->
90
+ <text x="70" y="397" text-anchor="start" font-size="10" fill="#7f1d1d">acceptance windows open at build_frame_start (+0):</text>
91
+ <!-- proposal acceptance: +0 .. +66 (checkpoint_proposal_receive_deadline) -->
92
+ <rect x="70" y="402" width="462" height="9" rx="3" fill="#fee2e2" stroke="#dc2626" stroke-width="0.8"/>
93
+ <text x="538" y="410" text-anchor="start" font-size="9.5" fill="#991b1b">proposal accept [+0 .. +66] (narrow, non-overlapping)</text>
94
+ <!-- attestation acceptance: +0 .. +132 (attestation_deadline) -->
95
+ <rect x="70" y="414" width="924" height="9" rx="3" fill="#dcfce7" stroke="#16a34a" stroke-width="0.8"/>
96
+ <text x="70" y="436" text-anchor="start" font-size="9.5" fill="#166534">attestation accept [+0 .. +132] (wide, liberal)</text>
97
+
98
+ <!-- legend -->
99
+ <g font-size="11">
100
+ <circle cx="540" cy="432" r="5" fill="#2563eb"/>
101
+ <text x="552" y="436" fill="#334155">build / structural</text>
102
+ <circle cx="682" cy="432" r="5" fill="#16a34a"/>
103
+ <text x="694" y="436" fill="#334155">ideal path</text>
104
+ <circle cx="782" cy="432" r="5" fill="#dc2626"/>
105
+ <text x="794" y="436" fill="#334155">late-acceptance deadline</text>
106
+ <text x="540" y="453" text-anchor="middle" fill="#64748b">dashed = slot boundary · ticks = 12s Ethereum slots · time → seconds from build_frame_start</text>
107
+ </g>
108
+ </svg>
@@ -1,5 +1,4 @@
1
1
  import { NULLIFIER_TREE_HEIGHT } from '@aztec/constants';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
3
2
  import { MembershipWitness, SiblingPath } from '@aztec/foundation/trees';
4
3
 
5
4
  import { z } from 'zod';
@@ -52,14 +51,4 @@ export class NullifierMembershipWitness {
52
51
  public withoutPreimage(): MembershipWitness<typeof NULLIFIER_TREE_HEIGHT> {
53
52
  return new MembershipWitness(NULLIFIER_TREE_HEIGHT, this.index, this.siblingPath.toTuple());
54
53
  }
55
-
56
- /** Serializes as `(NullifierLeafPreimage, MembershipWitness)` to match the Noir oracle return type. */
57
- public toNoirRepresentation(): (string | string[])[] {
58
- // TODO(#12874): remove the stupid as string conversion by modifying ForeignCallOutput type in acvm.js
59
- return [
60
- ...(this.leafPreimage.toFields().map(fr => fr.toString()) as string[]),
61
- new Fr(this.index).toString() as string,
62
- this.siblingPath.toFields().map(fr => fr.toString()) as string[],
63
- ];
64
- }
65
54
  }
@@ -1,6 +1,5 @@
1
1
  import { PUBLIC_DATA_TREE_HEIGHT } from '@aztec/constants';
2
2
  import { toBigIntBE } from '@aztec/foundation/bigint-buffer';
3
- import { Fr } from '@aztec/foundation/curves/bn254';
4
3
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
5
4
  import { bufferToHex, hexToBuffer } from '@aztec/foundation/string';
6
5
  import { MembershipWitness, SiblingPath } from '@aztec/foundation/trees';
@@ -43,36 +42,6 @@ export class PublicDataWitness {
43
42
  .transform(({ index, leafPreimage, siblingPath }) => new PublicDataWitness(index, leafPreimage, siblingPath));
44
43
  }
45
44
 
46
- /**
47
- * Returns a field array representation of a public data witness.
48
- * @returns A field array representation of a public data witness.
49
- */
50
- public toFields(): Fr[] {
51
- return [
52
- new Fr(this.index),
53
- new Fr(this.leafPreimage.leaf.slot),
54
- new Fr(this.leafPreimage.leaf.value),
55
- new Fr(this.leafPreimage.nextIndex),
56
- new Fr(this.leafPreimage.nextKey),
57
- ...this.siblingPath.toFields(),
58
- ];
59
- }
60
-
61
- /**
62
- * Returns a representation of the public data witness as expected by intrinsic Noir deserialization.
63
- */
64
- public toNoirRepresentation(): (string | string[])[] {
65
- // TODO(#12874): remove the stupid as string conversion by modifying ForeignCallOutput type in acvm.js
66
- return [
67
- new Fr(this.index).toString() as string,
68
- new Fr(this.leafPreimage.leaf.slot).toString() as string,
69
- new Fr(this.leafPreimage.leaf.value).toString() as string,
70
- new Fr(this.leafPreimage.nextKey).toString() as string,
71
- new Fr(this.leafPreimage.nextIndex).toString() as string,
72
- this.siblingPath.toFields().map(fr => fr.toString()) as string[],
73
- ];
74
- }
75
-
76
45
  toBuffer(): Buffer {
77
46
  return serializeToBuffer([this.index, this.leafPreimage, this.siblingPath]);
78
47
  }
@@ -54,7 +54,8 @@ export function mergeExecutionPayloads(requests: ExecutionPayload[]): ExecutionP
54
54
  );
55
55
  }
56
56
 
57
- const feePayer = uniqueFeePayers.size === 1 ? AztecAddress.fromString(Array.from(uniqueFeePayers)[0]) : undefined;
57
+ const feePayer =
58
+ uniqueFeePayers.size === 1 ? AztecAddress.fromStringUnsafe(Array.from(uniqueFeePayers)[0]) : undefined;
58
59
 
59
60
  return new ExecutionPayload(calls, combinedAuthWitnesses, combinedCapsules, combinedExtraHashedArgs, feePayer);
60
61
  }
@@ -5,6 +5,6 @@ import type { GasFees } from '../gas/gas_fees.js';
5
5
  export interface FeeProvider {
6
6
  /** Returns the current minimum fees for inclusion in the next block. */
7
7
  getCurrentMinFees(): Promise<GasFees>;
8
- /** Returns predicted min fees for each slot in the prediction window. */
8
+ /** Returns current min fees first, followed by predicted min fees for each slot in the prediction window. */
9
9
  getPredictedMinFees(manaUsage?: ManaUsageEstimate): Promise<GasFees[]>;
10
10
  }
@@ -3,28 +3,12 @@ import type { EthAddress } from '@aztec/foundation/eth-address';
3
3
  import type { SlotNumber } from '@aztec/foundation/schemas';
4
4
 
5
5
  import type { AztecAddress } from '../aztec-address/index.js';
6
- import type { UInt32 } from '../types/index.js';
7
- import type { CheckpointGlobalVariables, GlobalVariables } from './global_variables.js';
6
+ import type { CheckpointGlobalVariables } from './global_variables.js';
8
7
 
9
8
  /**
10
9
  * Interface for building global variables for Aztec blocks.
11
10
  */
12
11
  export interface GlobalVariableBuilder {
13
- /**
14
- * Builds global variables for a given block.
15
- * @param blockNumber - The block number to build global variables for.
16
- * @param coinbase - The address to receive block reward.
17
- * @param feeRecipient - The address to receive fees.
18
- * @param slotNumber - Optional. The slot number to use for the global variables. If undefined, it will be calculated.
19
- * @returns A promise that resolves to the GlobalVariables for the given block number.
20
- */
21
- buildGlobalVariables(
22
- blockNumber: UInt32,
23
- coinbase: EthAddress,
24
- feeRecipient: AztecAddress,
25
- slotNumber?: SlotNumber,
26
- ): Promise<GlobalVariables>;
27
-
28
12
  /** Builds global variables that are constant throughout a checkpoint. */
29
13
  buildCheckpointGlobalVariables(
30
14
  coinbase: EthAddress,
@@ -125,7 +125,7 @@ export class GlobalVariables {
125
125
  SlotNumber(reader.readU32()),
126
126
  reader.readField().toBigInt(),
127
127
  EthAddress.fromField(reader.readField()),
128
- AztecAddress.fromField(reader.readField()),
128
+ AztecAddress.fromFieldUnsafe(reader.readField()),
129
129
  GasFees.fromFields(reader),
130
130
  );
131
131
  }
@@ -220,7 +220,7 @@ export class GlobalVariables {
220
220
  blockNumber: BlockNumber(randomInt(100_000)),
221
221
  slotNumber: SlotNumber(randomInt(100_000)),
222
222
  coinbase: EthAddress.random(),
223
- feeRecipient: AztecAddress.fromField(Fr.random()),
223
+ feeRecipient: AztecAddress.fromFieldUnsafe(Fr.random()),
224
224
  gasFees: GasFees.random(),
225
225
  timestamp: BigInt(randomInt(100_000_000)),
226
226
  ...overrides,
package/src/tx/index.ts CHANGED
@@ -21,7 +21,6 @@ export * from './tx_effect.js';
21
21
  export * from './public_simulation_output.js';
22
22
  export * from './tx_execution_request.js';
23
23
  export * from './validator/tx_validator.js';
24
- export * from './validator/empty_validator.js';
25
24
  export * from './validator/error_texts.js';
26
25
  export * from './capsule.js';
27
26
  export * from './fee_provider.js';
@@ -23,6 +23,14 @@ export class PrivateTxConstantData {
23
23
  * protocol to execute and prove the transaction.
24
24
  */
25
25
  public txContext: TxContext,
26
+ /**
27
+ * Salt of the transaction request (`TxRequest.salt`).
28
+ *
29
+ * Bound to the user's `tx_request` by the Init circuit and kept constant by every subsequent kernel so that each
30
+ * app circuit's `txRequestSalt` public input can be checked against it. It is intentionally not carried into
31
+ * `TxConstantData`: it is dropped by the Tail circuits rather than being exposed by the final (hiding) kernel.
32
+ */
33
+ public txRequestSalt: Fr,
26
34
  /**
27
35
  * Root of the vk tree for the protocol circuits.
28
36
  */
@@ -38,7 +46,13 @@ export class PrivateTxConstantData {
38
46
  }
39
47
 
40
48
  static getFields(fields: FieldsOf<PrivateTxConstantData>) {
41
- return [fields.anchorBlockHeader, fields.txContext, fields.vkTreeRoot, fields.protocolContracts] as const;
49
+ return [
50
+ fields.anchorBlockHeader,
51
+ fields.txContext,
52
+ fields.txRequestSalt,
53
+ fields.vkTreeRoot,
54
+ fields.protocolContracts,
55
+ ] as const;
42
56
  }
43
57
 
44
58
  static fromFields(fields: Fr[] | FieldReader): PrivateTxConstantData {
@@ -47,6 +61,7 @@ export class PrivateTxConstantData {
47
61
  reader.readObject(BlockHeader),
48
62
  reader.readObject(TxContext),
49
63
  reader.readField(),
64
+ reader.readField(),
50
65
  reader.readObject(ProtocolContracts),
51
66
  );
52
67
  }
@@ -67,6 +82,7 @@ export class PrivateTxConstantData {
67
82
  reader.readObject(BlockHeader),
68
83
  reader.readObject(TxContext),
69
84
  Fr.fromBuffer(reader),
85
+ Fr.fromBuffer(reader),
70
86
  reader.readObject(ProtocolContracts),
71
87
  );
72
88
  }
@@ -76,13 +92,20 @@ export class PrivateTxConstantData {
76
92
  }
77
93
 
78
94
  static empty() {
79
- return new PrivateTxConstantData(BlockHeader.empty(), TxContext.empty(), Fr.ZERO, ProtocolContracts.empty());
95
+ return new PrivateTxConstantData(
96
+ BlockHeader.empty(),
97
+ TxContext.empty(),
98
+ Fr.ZERO,
99
+ Fr.ZERO,
100
+ ProtocolContracts.empty(),
101
+ );
80
102
  }
81
103
 
82
104
  getSize() {
83
105
  return (
84
106
  this.anchorBlockHeader.getSize() +
85
107
  this.txContext.getSize() +
108
+ this.txRequestSalt.size +
86
109
  this.vkTreeRoot.size +
87
110
  this.protocolContracts.getSize()
88
111
  );
@@ -1,3 +1,4 @@
1
+ import { CircuitKind } from '@aztec/bb.js';
1
2
  import { Fr } from '@aztec/foundation/curves/bn254';
2
3
  import { type ZodFor, optional, schemas } from '@aztec/foundation/schemas';
3
4
 
@@ -125,6 +126,7 @@ export class TxProfileResult {
125
126
  bytecode: Buffer.from('random'),
126
127
  witness: new Map([[1, 'random']]),
127
128
  vk: Buffer.from('random'),
129
+ kind: CircuitKind.App,
128
130
  timings: {
129
131
  witgen: 1,
130
132
  gateCount: 1,
package/src/tx/tx.ts CHANGED
@@ -135,6 +135,23 @@ export class Tx extends Gossipable {
135
135
  );
136
136
  }
137
137
 
138
+ /**
139
+ * Deserializes a Tx from separately-stored tx and proof buffers. The tx buffer is expected to carry an empty
140
+ * proof placeholder (as produced by `withoutProof().toBuffer()`), which is skipped in favor of the given proof.
141
+ * @param txBuffer - Serialized tx with an empty proof placeholder.
142
+ * @param proofBuffer - Serialized proof to attach.
143
+ * @returns An instance of Tx carrying the given proof.
144
+ */
145
+ static fromBuffers(txBuffer: Buffer | BufferReader, proofBuffer: Buffer | BufferReader): Tx {
146
+ const reader = BufferReader.asReader(txBuffer);
147
+ const txHash = reader.readObject(TxHash);
148
+ const data = reader.readObject(PrivateKernelTailCircuitPublicInputs);
149
+ reader.readObject(ChonkProof);
150
+ const contractClassLogFields = reader.readVectorUint8Prefix(ContractClassLogFields);
151
+ const publicFunctionCalldata = reader.readVectorUint8Prefix(HashedValues);
152
+ return new Tx(txHash, data, ChonkProof.fromBuffer(proofBuffer), contractClassLogFields, publicFunctionCalldata);
153
+ }
154
+
138
155
  /**
139
156
  * Serializes the Tx object into a Buffer.
140
157
  * @returns Buffer representation of the Tx object.
@@ -2,7 +2,8 @@
2
2
  export const TX_ERROR_INSUFFICIENT_FEE_PER_GAS = 'Insufficient fee per gas';
3
3
  export const TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE = 'Insufficient fee payer balance';
4
4
  export const TX_ERROR_INSUFFICIENT_GAS_LIMIT = 'Gas limit is below the minimum fixed cost';
5
- export const TX_ERROR_GAS_LIMIT_TOO_HIGH = 'Gas limit is higher than the amount of gas that the AVM can process';
5
+ export const TX_ERROR_GAS_LIMIT_TOO_HIGH =
6
+ 'Gas limit is higher than the maximum amount of gas this network allows per tx';
6
7
 
7
8
  // Phases
8
9
  export const TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED = 'Setup function not on allow list';
@@ -36,36 +36,3 @@ export class WorldStateRevision {
36
36
  );
37
37
  }
38
38
  }
39
-
40
- export class WorldStateRevisionWithHandle extends WorldStateRevision {
41
- constructor(
42
- forkId: number,
43
- blockNumber: number,
44
- includeUncommitted: boolean,
45
- public readonly handle: any,
46
- ) {
47
- super(forkId, blockNumber, includeUncommitted);
48
- }
49
-
50
- public toWorldStateRevision() {
51
- return new WorldStateRevision(this.forkId, this.blockNumber, this.includeUncommitted);
52
- }
53
-
54
- static fromWorldStateRevision(revision: WorldStateRevision, handle: any) {
55
- return new WorldStateRevisionWithHandle(revision.forkId, revision.blockNumber, revision.includeUncommitted, handle);
56
- }
57
-
58
- static override get schema() {
59
- return z
60
- .object({
61
- forkId: z.number(),
62
- blockNumber: z.number(),
63
- includeUncommitted: z.boolean(),
64
- handle: z.any(),
65
- })
66
- .transform(
67
- ({ forkId, blockNumber, includeUncommitted, handle }) =>
68
- new WorldStateRevisionWithHandle(forkId, blockNumber, includeUncommitted, handle),
69
- );
70
- }
71
- }
@@ -1,58 +0,0 @@
1
- import { Fr } from '@aztec/foundation/curves/bn254';
2
- import { BufferReader, FieldReader } from '@aztec/foundation/serialize';
3
- import type { AztecAddress } from '../aztec-address/index.js';
4
- /**
5
- * Contract storage read operation on a specific contract.
6
- *
7
- * Note: Similar to `PublicDataRead` but it's from the POV of contract storage so we are not working with public data
8
- * tree leaf index but storage slot index.
9
- */
10
- export declare class ContractStorageRead {
11
- /**
12
- * Storage slot we are reading from.
13
- */
14
- readonly storageSlot: Fr;
15
- /**
16
- * Value read from the storage slot.
17
- */
18
- readonly currentValue: Fr;
19
- /**
20
- * Side effect counter tracking position of this event in tx execution.
21
- */
22
- readonly counter: number;
23
- /**
24
- * Contract address whose storage is being read.
25
- */
26
- contractAddress?: AztecAddress | undefined;
27
- constructor(
28
- /**
29
- * Storage slot we are reading from.
30
- */
31
- storageSlot: Fr,
32
- /**
33
- * Value read from the storage slot.
34
- */
35
- currentValue: Fr,
36
- /**
37
- * Side effect counter tracking position of this event in tx execution.
38
- */
39
- counter: number,
40
- /**
41
- * Contract address whose storage is being read.
42
- */
43
- contractAddress?: AztecAddress | undefined);
44
- static from(args: {
45
- storageSlot: Fr;
46
- currentValue: Fr;
47
- counter: number;
48
- contractAddress?: AztecAddress;
49
- }): ContractStorageRead;
50
- toBuffer(): Buffer<ArrayBufferLike>;
51
- static fromBuffer(buffer: Buffer | BufferReader): ContractStorageRead;
52
- static empty(): ContractStorageRead;
53
- isEmpty(): boolean;
54
- toFriendlyJSON(): string;
55
- toFields(): Fr[];
56
- static fromFields(fields: Fr[] | FieldReader): ContractStorageRead;
57
- }
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3Rfc3RvcmFnZV9yZWFkLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtL2NvbnRyYWN0X3N0b3JhZ2VfcmVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFFM0YsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFOUQ7Ozs7O0dBS0c7QUFDSCxxQkFBYSxtQkFBbUI7SUFFNUI7O09BRUc7YUFDYSxXQUFXLEVBQUUsRUFBRTtJQUMvQjs7T0FFRzthQUNhLFlBQVksRUFBRSxFQUFFO0lBQ2hDOztPQUVHO2FBQ2EsT0FBTyxFQUFFLE1BQU07SUFDL0I7O09BRUc7SUFDSSxlQUFlLENBQUM7SUFoQnpCO0lBQ0U7O09BRUc7SUFDYSxXQUFXLEVBQUUsRUFBRTtJQUMvQjs7T0FFRztJQUNhLFlBQVksRUFBRSxFQUFFO0lBQ2hDOztPQUVHO0lBQ2EsT0FBTyxFQUFFLE1BQU07SUFDL0I7O09BRUc7SUFDSSxlQUFlLENBQUMsMEJBQWMsRUFDbkM7SUFFSixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsQ0FBQyxFQUFFLFlBQVksQ0FBQTtLQUFFLHVCQUV2RztJQUVELFFBQVEsNEJBRVA7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsWUFBWSx1QkFHOUM7SUFFRCxNQUFNLENBQUMsS0FBSyx3QkFFWDtJQUVELE9BQU8sWUFFTjtJQUVELGNBQWMsV0FFYjtJQUVELFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FRZjtJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsR0FBRyxtQkFBbUIsQ0FRakU7Q0FDRiJ9