@aztec/stdlib 6.0.0-nightly.20260605 → 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
@@ -1,4 +1,4 @@
1
- import { DEFAULT_FBPK_M_HASH, DEFAULT_MSPK_M_HASH, DomainSeparator } from '@aztec/constants';
1
+ import { DomainSeparator } from '@aztec/constants';
2
2
  import { Grumpkin } from '@aztec/foundation/crypto/grumpkin';
3
3
  import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
4
4
  import { sha512ToGrumpkinScalar } from '@aztec/foundation/crypto/sha512';
@@ -11,8 +11,11 @@ import { PublicKey, hashPublicKey } from './public_key.js';
11
11
  import { PublicKeys } from './public_keys.js';
12
12
  import { getKeyGenerator } from './utils.js';
13
13
 
14
- export function computeAppNullifierHidingKey(masterNullifierHidingKey: GrumpkinScalar, app: AztecAddress): Promise<Fr> {
15
- return computeAppSecretKey(masterNullifierHidingKey, app, 'n'); // 'n' is the key prefix for nullifier hiding key
14
+ export function computeAppNullifierHidingKey(
15
+ masterNullifierHidingSecretKey: GrumpkinScalar,
16
+ app: AztecAddress,
17
+ ): Promise<Fr> {
18
+ return computeAppSecretKey(masterNullifierHidingSecretKey, app, 'n'); // 'n' is the key prefix for nullifier hiding key
16
19
  }
17
20
 
18
21
  export function computeAppSecretKey(skM: GrumpkinScalar, app: AztecAddress, keyPrefix: KeyPrefix): Promise<Fr> {
@@ -27,7 +30,7 @@ export async function computeOvskApp(ovsk: GrumpkinScalar, app: AztecAddress): P
27
30
  return GrumpkinScalar.fromBuffer(ovskAppFr.toBuffer());
28
31
  }
29
32
 
30
- export function deriveMasterNullifierHidingKey(secretKey: Fr): GrumpkinScalar {
33
+ export function deriveMasterNullifierHidingSecretKey(secretKey: Fr): GrumpkinScalar {
31
34
  return sha512ToGrumpkinScalar([secretKey, DomainSeparator.NHK_M]);
32
35
  }
33
36
 
@@ -39,6 +42,14 @@ export function deriveMasterOutgoingViewingSecretKey(secretKey: Fr): GrumpkinSca
39
42
  return sha512ToGrumpkinScalar([secretKey, DomainSeparator.OVSK_M]);
40
43
  }
41
44
 
45
+ export function deriveMasterMessageSigningSecretKey(secretKey: Fr): GrumpkinScalar {
46
+ return sha512ToGrumpkinScalar([secretKey, DomainSeparator.MSSK_M]);
47
+ }
48
+
49
+ export function deriveMasterFallbackSecretKey(secretKey: Fr): GrumpkinScalar {
50
+ return sha512ToGrumpkinScalar([secretKey, DomainSeparator.FBSK_M]);
51
+ }
52
+
42
53
  export function deriveSigningKey(secretKey: Fr): GrumpkinScalar {
43
54
  // TODO(#5837): come up with a standard signing key derivation scheme instead of using ivsk_m as signing keys here
44
55
  return sha512ToGrumpkinScalar([secretKey, DomainSeparator.IVSK_M]);
@@ -85,52 +96,91 @@ export async function computeAddressSecret(preaddress: Fr, ivsk: Fq) {
85
96
  }
86
97
 
87
98
  export function derivePublicKeyFromSecretKey(secretKey: Fq): Promise<PublicKey> {
99
+ // 0 * G is the point at infinity. The WASM encodes infinity with an out-of-field x coordinate that Point cannot
100
+ // deserialize, so return the point directly instead of calling into it.
101
+ if (secretKey.isZero()) {
102
+ return Promise.resolve(PublicKey.INFINITY);
103
+ }
88
104
  return Grumpkin.mul(Grumpkin.generator, secretKey);
89
105
  }
90
106
 
107
+ /**
108
+ * The six master secret keys that fully define an account's privacy keys.
109
+ */
110
+ export type MasterSecretKeys = {
111
+ masterNullifierHidingSecretKey: GrumpkinScalar;
112
+ masterIncomingViewingSecretKey: GrumpkinScalar;
113
+ masterOutgoingViewingSecretKey: GrumpkinScalar;
114
+ masterTaggingSecretKey: GrumpkinScalar;
115
+ masterMessageSigningSecretKey: GrumpkinScalar;
116
+ masterFallbackSecretKey: GrumpkinScalar;
117
+ };
118
+
91
119
  /**
92
120
  * Computes secret and public keys and public keys hash from a secret key.
93
121
  * @param secretKey - The secret key to derive keys from.
94
122
  * @returns The derived keys.
95
123
  */
96
- export async function deriveKeys(secretKey: Fr) {
124
+ export function deriveKeys(secretKey: Fr) {
97
125
  // First we derive master secret/hiding keys - we use sha512 here because this derivation will never take place
98
126
  // in a circuit
99
- const masterNullifierHidingKey = deriveMasterNullifierHidingKey(secretKey);
100
- const masterIncomingViewingSecretKey = deriveMasterIncomingViewingSecretKey(secretKey);
101
- const masterOutgoingViewingSecretKey = deriveMasterOutgoingViewingSecretKey(secretKey);
102
- const masterTaggingSecretKey = sha512ToGrumpkinScalar([secretKey, DomainSeparator.TSK_M]);
127
+ return deriveKeysFromMasterSecretKeys({
128
+ masterNullifierHidingSecretKey: deriveMasterNullifierHidingSecretKey(secretKey),
129
+ masterIncomingViewingSecretKey: deriveMasterIncomingViewingSecretKey(secretKey),
130
+ masterOutgoingViewingSecretKey: deriveMasterOutgoingViewingSecretKey(secretKey),
131
+ masterTaggingSecretKey: sha512ToGrumpkinScalar([secretKey, DomainSeparator.TSK_M]),
132
+ masterMessageSigningSecretKey: deriveMasterMessageSigningSecretKey(secretKey),
133
+ masterFallbackSecretKey: deriveMasterFallbackSecretKey(secretKey),
134
+ });
135
+ }
136
+
137
+ /**
138
+ * Derives the master public keys and the {@link PublicKeys} struct from a set of master secret keys.
139
+ * @param secretKeys - The master secret keys to derive public keys from.
140
+ * @returns The provided secret keys alongside the derived public keys.
141
+ */
142
+ export async function deriveKeysFromMasterSecretKeys(secretKeys: MasterSecretKeys) {
143
+ const {
144
+ masterNullifierHidingSecretKey,
145
+ masterIncomingViewingSecretKey,
146
+ masterOutgoingViewingSecretKey,
147
+ masterTaggingSecretKey,
148
+ masterMessageSigningSecretKey,
149
+ masterFallbackSecretKey,
150
+ } = secretKeys;
103
151
 
104
- // Then we derive master public keys
105
- const masterNullifierPublicKey = await derivePublicKeyFromSecretKey(masterNullifierHidingKey);
152
+ const masterNullifierHidingPublicKey = await derivePublicKeyFromSecretKey(masterNullifierHidingSecretKey);
106
153
  const masterIncomingViewingPublicKey = await derivePublicKeyFromSecretKey(masterIncomingViewingSecretKey);
107
154
  const masterOutgoingViewingPublicKey = await derivePublicKeyFromSecretKey(masterOutgoingViewingSecretKey);
108
155
  const masterTaggingPublicKey = await derivePublicKeyFromSecretKey(masterTaggingSecretKey);
156
+ const masterMessageSigningPublicKey = await derivePublicKeyFromSecretKey(masterMessageSigningSecretKey);
157
+ const masterFallbackPublicKey = await derivePublicKeyFromSecretKey(masterFallbackSecretKey);
109
158
 
110
159
  // The non-owner-visible PublicKeys carries hashes for npk/ovpk/tpk/mspk/fbpk and the raw
111
- // point only for ivpk_m. The npk/ovpk/tpk raw points are also returned alongside so the key
112
- // store can persist them under `${account}-{n|ov|t}pk_m` (only their hashes live in publicKeys).
160
+ // point only for ivpk_m. The npk/ovpk/tpk/mspk/fbpk raw points are also returned alongside so the key
161
+ // store can persist them under `${account}-{n|ov|t|ms|fb}pk_m` (only their hashes live in publicKeys).
113
162
  // The ivpk_m point isn't returned separately because it already lives in publicKeys.ivpkM.
114
- //
115
- // TODO: There isn't a derivation path for the message signing(msk) and fallback(fbk) keys yet. So we just use the the
116
- // default values for now.
117
163
  const publicKeys = new PublicKeys(
118
- await hashPublicKey(masterNullifierPublicKey),
164
+ await hashPublicKey(masterNullifierHidingPublicKey),
119
165
  masterIncomingViewingPublicKey,
120
166
  await hashPublicKey(masterOutgoingViewingPublicKey),
121
167
  await hashPublicKey(masterTaggingPublicKey),
122
- new Fr(DEFAULT_MSPK_M_HASH),
123
- new Fr(DEFAULT_FBPK_M_HASH),
168
+ await hashPublicKey(masterMessageSigningPublicKey),
169
+ await hashPublicKey(masterFallbackPublicKey),
124
170
  );
125
171
 
126
172
  return {
127
- masterNullifierHidingKey,
173
+ masterNullifierHidingSecretKey,
128
174
  masterIncomingViewingSecretKey,
129
175
  masterOutgoingViewingSecretKey,
130
176
  masterTaggingSecretKey,
131
- masterNullifierPublicKey,
177
+ masterMessageSigningSecretKey,
178
+ masterFallbackSecretKey,
179
+ masterNullifierHidingPublicKey,
132
180
  masterOutgoingViewingPublicKey,
133
181
  masterTaggingPublicKey,
182
+ masterMessageSigningPublicKey,
183
+ masterFallbackPublicKey,
134
184
  publicKeys,
135
185
  };
136
186
  }
@@ -9,6 +9,7 @@ import { AztecAddress } from '../aztec-address/index.js';
9
9
  import type { CompleteAddress } from '../contract/complete_address.js';
10
10
  import { computeAddressSecret, computePreaddress } from '../keys/derivation.js';
11
11
  import { AppTaggingSecretKind } from './app_tagging_secret_kind.js';
12
+ import { appSiloEcdhSharedSecretPoint } from './shared_secret_derivation.js';
12
13
 
13
14
  const AppTaggingSecretKindSchema = z.union([
14
15
  z.literal(AppTaggingSecretKind.UNCONSTRAINED),
@@ -30,17 +31,49 @@ export class AppTaggingSecret {
30
31
  ) {}
31
32
 
32
33
  /**
33
- * Derives shared tagging secret and from that, the app address and recipient derives the directional app tagging
34
- * secret. Returns undefined if `externalAddress` is an invalid address.
34
+ * Derives an app-siloed, recipient-directional tagging secret from a shared tagging secret point.
35
35
  *
36
- * @param localAddress - The complete address of entity A in the shared tagging secret derivation scheme
37
- * @param localIvsk - The incoming viewing secret key of entity A
38
- * @param externalAddress - The address of entity B in the shared tagging secret derivation scheme
36
+ * App-silos the point via {@link appSiloEcdhSharedSecretPoint}, then directs the result to `recipient`:
37
+ * `h([s_app, recipient])`. The directional step stops a symmetric shared secret (ECDH against an address, or an
38
+ * arbitrary registered point) from colliding bidirectionally, so two parties never share a tag sequence.
39
+ *
40
+ * The point is obtained either via {@link computeSharedTaggingSecret} (an ECDH key exchange against a sender) or
41
+ * registered directly as a pre-shared secret.
42
+ *
43
+ * @param taggingSecretPoint - The shared tagging secret point (ECDH output, or a directly registered pre-shared secret)
39
44
  * @param app - Contract address to silo the secret to
40
45
  * @param recipient - Recipient of the log. Defines the "direction of the secret".
41
46
  * @returns The secret that can be used along with an index to compute a tag to be included in a log.
42
47
  */
43
- static async computeUnconstrained(
48
+ static async computeDirectional(
49
+ taggingSecretPoint: Point,
50
+ app: AztecAddress,
51
+ recipient: AztecAddress,
52
+ ): Promise<AppTaggingSecret> {
53
+ const appSiloedSecret = await appSiloEcdhSharedSecretPoint(taggingSecretPoint, app);
54
+ const directionalAppTaggingSecret = await poseidon2Hash([appSiloedSecret, recipient]);
55
+
56
+ return new AppTaggingSecret(directionalAppTaggingSecret, app);
57
+ }
58
+
59
+ /**
60
+ * Derives the bare app-siloed tagging secret from a shared secret point via {@link appSiloEcdhSharedSecretPoint},
61
+ * under the given delivery-mode kind.
62
+ */
63
+ static async computeAppSiloed(
64
+ taggingSecretPoint: Point,
65
+ app: AztecAddress,
66
+ kind: AppTaggingSecretKind,
67
+ ): Promise<AppTaggingSecret> {
68
+ return new AppTaggingSecret(await appSiloEcdhSharedSecretPoint(taggingSecretPoint, app), app, kind);
69
+ }
70
+
71
+ /**
72
+ * Derives the tagging secret for `(externalAddress, recipient, app)` by performing an ECDH key exchange against
73
+ * `externalAddress` to obtain the shared point, then siloing and directing it via {@link computeDirectional}.
74
+ * Returns undefined if `externalAddress` is not a valid address.
75
+ */
76
+ static async computeViaEcdh(
44
77
  localAddress: CompleteAddress,
45
78
  localIvsk: Fq,
46
79
  externalAddress: AztecAddress,
@@ -52,10 +85,7 @@ export class AppTaggingSecret {
52
85
  return undefined;
53
86
  }
54
87
 
55
- const appTaggingSecret = await poseidon2Hash([taggingSecretPoint.x, taggingSecretPoint.y, app]);
56
- const directionalAppTaggingSecret = await poseidon2Hash([appTaggingSecret, recipient]);
57
-
58
- return new AppTaggingSecret(directionalAppTaggingSecret, app);
88
+ return AppTaggingSecret.computeDirectional(taggingSecretPoint, app, recipient);
59
89
  }
60
90
 
61
91
  toString(): string {
@@ -71,13 +101,13 @@ export class AppTaggingSecret {
71
101
  if (parts.length === 2) {
72
102
  // TODO(F-680): Remove legacy two-part parsing after stored tagging keys are migrated.
73
103
  const [secretStr, appStr] = parts;
74
- return new AppTaggingSecret(Fr.fromString(secretStr), AztecAddress.fromString(appStr));
104
+ return new AppTaggingSecret(Fr.fromString(secretStr), AztecAddress.fromStringUnsafe(appStr));
75
105
  }
76
106
  if (parts.length === 3) {
77
107
  const [kindStr, secretStr, appStr] = parts;
78
108
  return new AppTaggingSecret(
79
109
  Fr.fromString(secretStr),
80
- AztecAddress.fromString(appStr),
110
+ AztecAddress.fromStringUnsafe(appStr),
81
111
  appTaggingSecretKindFromString(kindStr),
82
112
  );
83
113
  }
@@ -111,18 +141,17 @@ function appTaggingSecretKindFromString(kind: string): AppTaggingSecretKind {
111
141
  }
112
142
  }
113
143
 
114
- // Returns shared tagging secret computed with Diffie-Hellman key exchange, or undefined if `externalAddress` is an
115
- // invalid address.
116
- async function computeSharedTaggingSecret(
144
+ /**
145
+ * Computes the shared tagging secret point between a local address (i.e. one for which the privacy keys are known) and
146
+ * an external one via a Diffie-Hellman key exchange.
147
+ *
148
+ * Returns undefined if `externalAddress` is an invalid address.
149
+ */
150
+ export async function computeSharedTaggingSecret(
117
151
  localAddress: CompleteAddress,
118
152
  localIvsk: Fq,
119
153
  externalAddress: AztecAddress,
120
154
  ): Promise<Point | undefined> {
121
- // Given A (local complete address) -> B (external address) and h == preaddress
122
- // Compute shared secret as S = (h_A + local_ivsk_A) * Addr_Point_B
123
-
124
- const knownPreaddress = await computePreaddress(await localAddress.publicKeys.hash(), localAddress.partialAddress);
125
-
126
155
  // An invalid address has no corresponding address point
127
156
  if (!(await externalAddress.isValid())) {
128
157
  return undefined;
@@ -130,8 +159,11 @@ async function computeSharedTaggingSecret(
130
159
 
131
160
  const externalAddressPoint = await externalAddress.toAddressPoint();
132
161
 
133
- // Beware! h_a + local_ivsk_a (also known as the address secret) can lead to an address point with a negative
134
- // y-coordinate, since there's two possible candidates computeAddressSecret takes care of selecting the one that
135
- // leads to a positive y-coordinate, which is the only valid address point
136
- return Grumpkin.mul(externalAddressPoint, await computeAddressSecret(knownPreaddress, localIvsk));
162
+ const localPreaddress = await computePreaddress(await localAddress.publicKeys.hash(), localAddress.partialAddress);
163
+ const localAddressSecret = await computeAddressSecret(localPreaddress, localIvsk);
164
+
165
+ // For a given local address A and external address B, the shared tagging secret S is (h_A + ivsk_A) * Addr_Point_B
166
+ // (conceptually, in reality we don't use h_A + ivsk_A directly but rather the actual address secret, which is the
167
+ // same but with an optional sign adjustment to prevent A's address point from having a negative y-coordinate).
168
+ return Grumpkin.mul(externalAddressPoint, localAddressSecret);
137
169
  }
@@ -5,7 +5,7 @@ export const AppTaggingSecretKind = {
5
5
 
6
6
  export type AppTaggingSecretKind = (typeof AppTaggingSecretKind)[keyof typeof AppTaggingSecretKind];
7
7
 
8
- // Keep in sync with aztec::messages::message_delivery::{ONCHAIN_UNCONSTRAINED, ONCHAIN_CONSTRAINED}.
8
+ // Keep in sync with aztec::messages::delivery::OnchainDeliveryMode.
9
9
  const ONCHAIN_UNCONSTRAINED_DELIVERY_MODE = 2;
10
10
  const ONCHAIN_CONSTRAINED_DELIVERY_MODE = 3;
11
11
 
@@ -138,15 +138,6 @@ export class ContractClassLog {
138
138
  );
139
139
  }
140
140
 
141
- static fromFields(fields: Fr[] | FieldReader) {
142
- const reader = FieldReader.asReader(fields);
143
- return new ContractClassLog(
144
- reader.readObject(AztecAddress),
145
- reader.readObject(ContractClassLogFields),
146
- reader.readU32(),
147
- );
148
- }
149
-
150
141
  getEmittedFields() {
151
142
  return this.fields.getEmittedFields(this.emittedLength);
152
143
  }
@@ -1,8 +1,6 @@
1
- import { MAX_NOTE_HASHES_PER_TX } from '@aztec/constants';
2
- import { range } from '@aztec/foundation/array';
3
- import { Fr } from '@aztec/foundation/curves/bn254';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
4
2
 
5
- import { TxHash } from '../tx/tx_hash.js';
3
+ import type { TxHash } from '../tx/tx_hash.js';
6
4
 
7
5
  /**
8
6
  * Additional information needed to process a message.
@@ -13,64 +11,8 @@ import { TxHash } from '../tx/tx_hash.js';
13
11
  *
14
12
  * A TS version of `message_context.nr`.
15
13
  */
16
- export class MessageContext {
17
- constructor(
18
- public txHash: TxHash,
19
- public uniqueNoteHashesInTx: Fr[],
20
- public firstNullifierInTx: Fr,
21
- ) {}
22
-
23
- toFields(): Fr[] {
24
- return [
25
- this.txHash.hash,
26
- ...serializeBoundedVec(this.uniqueNoteHashesInTx, MAX_NOTE_HASHES_PER_TX),
27
- this.firstNullifierInTx,
28
- ];
29
- }
30
-
31
- toNoirStruct() {
32
- /* eslint-disable camelcase */
33
- return {
34
- tx_hash: this.txHash.hash,
35
- unique_note_hashes_in_tx: this.uniqueNoteHashesInTx,
36
- first_nullifier_in_tx: this.firstNullifierInTx,
37
- };
38
- /* eslint-enable camelcase */
39
- }
40
-
41
- static empty(): MessageContext {
42
- return new MessageContext(TxHash.zero(), [], Fr.ZERO);
43
- }
44
-
45
- static toEmptyFields(): Fr[] {
46
- const serializationLen =
47
- 1 /* txHash */ + MAX_NOTE_HASHES_PER_TX + 1 /* uniqueNoteHashesInTx BVec */ + 1; /* firstNullifierInTx */
48
- return range(serializationLen).map(_ => Fr.zero());
49
- }
50
-
51
- static toSerializedOption(response: MessageContext | null): Fr[] {
52
- if (response) {
53
- return [new Fr(1), ...response.toFields()];
54
- } else {
55
- return [new Fr(0), ...MessageContext.toEmptyFields()];
56
- }
57
- }
58
- }
59
-
60
- /**
61
- * Helper function to serialize a bounded vector according to Noir's BoundedVec format
62
- * @param values - The values to serialize
63
- * @param maxLength - The maximum length of the bounded vector
64
- * @returns The serialized bounded vector as Fr[]
65
- * @dev Copied over from pending_tagged_log.ts.
66
- */
67
- function serializeBoundedVec(values: Fr[], maxLength: number): Fr[] {
68
- if (values.length > maxLength) {
69
- throw new Error(`Attempted to serialize ${values} values into a BoundedVec with max length ${maxLength}`);
70
- }
71
-
72
- const lengthDiff = maxLength - values.length;
73
- const zeroPaddingArray = Array(lengthDiff).fill(Fr.ZERO);
74
- const storage = values.concat(zeroPaddingArray);
75
- return [...storage, new Fr(values.length)];
76
- }
14
+ export type MessageContext = {
15
+ txHash: TxHash;
16
+ uniqueNoteHashesInTx: Fr[];
17
+ firstNullifierInTx: Fr;
18
+ };
@@ -1,39 +1,12 @@
1
- import { PRIVATE_LOG_SIZE_IN_FIELDS } from '@aztec/constants';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
3
2
 
4
- import type { TxHash } from '../tx/tx_hash.js';
5
- import { MessageContext } from './message_context.js';
3
+ import type { MessageContext } from './message_context.js';
6
4
 
7
5
  /**
8
6
  * Represents a pending tagged log as it is stored in the pending tagged log array to which the fetchTaggedLogs oracle
9
7
  * inserts found private logs. A TS version of `pending_tagged_log.nr`.
10
8
  */
11
- export class PendingTaggedLog {
12
- private context: MessageContext;
13
-
14
- constructor(
15
- public log: Fr[],
16
- txHash: TxHash,
17
- uniqueNoteHashesInTx: Fr[],
18
- firstNullifierInTx: Fr,
19
- ) {
20
- this.context = new MessageContext(txHash, uniqueNoteHashesInTx, firstNullifierInTx);
21
- }
22
-
23
- toFields(): Fr[] {
24
- return [...serializeBoundedVec(this.log, PRIVATE_LOG_SIZE_IN_FIELDS), ...this.context.toFields()];
25
- }
26
- }
27
-
28
- /**
29
- * Helper function to serialize a bounded vector according to Noir's BoundedVec format
30
- * @param values - The values to serialize
31
- * @param maxLength - The maximum length of the bounded vector
32
- * @returns The serialized bounded vector as Fr[]
33
- */
34
- function serializeBoundedVec(values: Fr[], maxLength: number): Fr[] {
35
- const lengthDiff = maxLength - values.length;
36
- const zeroPaddingArray = Array(lengthDiff).fill(Fr.ZERO);
37
- const storage = values.concat(zeroPaddingArray);
38
- return [...storage, new Fr(values.length)];
39
- }
9
+ export type PendingTaggedLog = {
10
+ log: Fr[];
11
+ context: MessageContext;
12
+ };
@@ -2,16 +2,28 @@ import { DomainSeparator } from '@aztec/constants';
2
2
  import { Grumpkin } from '@aztec/foundation/crypto/grumpkin';
3
3
  import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
4
4
  import type { Fr } from '@aztec/foundation/curves/bn254';
5
- import type { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
5
+ import type { GrumpkinScalar, Point } from '@aztec/foundation/curves/grumpkin';
6
6
 
7
7
  import type { AztecAddress } from '../aztec-address/index.js';
8
8
  import type { PublicKey } from '../keys/public_key.js';
9
9
 
10
10
  /**
11
- * Derives an app-siloed ECDH shared secret.
11
+ * Derives the raw ECDH shared secret point `S = secretKey * publicKey`.
12
12
  *
13
- * Computes the raw ECDH shared secret `S = secretKey * publicKey`, then app-silos it:
14
- * `s_app = h(DOM_SEP__APP_SILOED_ECDH_SHARED_SECRET, S.x, S.y, contractAddress)`
13
+ * @throws If the publicKey is zero.
14
+ */
15
+ export function deriveEcdhSharedSecretPoint(secretKey: GrumpkinScalar, publicKey: PublicKey): Promise<Point> {
16
+ if (publicKey.isZero()) {
17
+ throw new Error(
18
+ `Attempting to derive a shared secret with a zero public key. You have probably passed a zero public key in your Noir code somewhere thinking that the note won't be broadcast... but it was.`,
19
+ );
20
+ }
21
+ return Grumpkin.mul(publicKey, secretKey);
22
+ }
23
+
24
+ /**
25
+ * Derives an app-siloed ECDH shared secret from keys: ECDHs `S = secretKey * publicKey` via
26
+ * {@link deriveEcdhSharedSecretPoint}, then app-silos it via {@link appSiloEcdhSharedSecretPoint}.
15
27
  *
16
28
  * @param secretKey - The secret key used to derive shared secret.
17
29
  * @param publicKey - The public key used to derive shared secret.
@@ -19,19 +31,23 @@ import type { PublicKey } from '../keys/public_key.js';
19
31
  * @returns The app-siloed shared secret as a Field.
20
32
  * @throws If the publicKey is zero.
21
33
  */
22
- export async function deriveAppSiloedSharedSecret(
34
+ export async function appSiloEcdhSharedSecret(
23
35
  secretKey: GrumpkinScalar,
24
36
  publicKey: PublicKey,
25
37
  contractAddress: AztecAddress,
26
38
  ): Promise<Fr> {
27
- if (publicKey.isZero()) {
28
- throw new Error(
29
- `Attempting to derive a shared secret with a zero public key. You have probably passed a zero public key in your Noir code somewhere thinking that the note won't be broadcast... but it was.`,
30
- );
31
- }
32
- const rawSharedSecret = await Grumpkin.mul(publicKey, secretKey);
33
- return poseidon2HashWithSeparator(
34
- [rawSharedSecret.x, rawSharedSecret.y, contractAddress],
35
- DomainSeparator.APP_SILOED_ECDH_SHARED_SECRET,
36
- );
39
+ const rawSharedSecret = await deriveEcdhSharedSecretPoint(secretKey, publicKey);
40
+ return appSiloEcdhSharedSecretPoint(rawSharedSecret, contractAddress);
41
+ }
42
+
43
+ /**
44
+ * App-silos a shared secret point: `s_app = h(DOM_SEP__APP_SILOED_ECDH_SHARED_SECRET, S.x, S.y, app)`.
45
+ *
46
+ * Mirrors `compute_app_siloed_shared_secret` in aztec-nr.
47
+ *
48
+ * @param point - The raw shared secret point `S`.
49
+ * @param app - The contract address to silo to.
50
+ */
51
+ export function appSiloEcdhSharedSecretPoint(point: Point, app: AztecAddress): Promise<Fr> {
52
+ return poseidon2HashWithSeparator([point.x, point.y, app], DomainSeparator.APP_SILOED_ECDH_SHARED_SECRET);
37
53
  }
@@ -1,3 +1,4 @@
1
+ import { normalizeSignature } from '@aztec/foundation/crypto/secp256k1-signer';
1
2
  import type { EthAddress } from '@aztec/foundation/eth-address';
2
3
 
3
4
  import { CommitteeAttestation } from '../block/index.js';
@@ -18,9 +19,15 @@ export function orderAttestations(
18
19
  for (const attestation of attestations) {
19
20
  const sender = attestation.getSender();
20
21
  if (sender) {
22
+ // Canonicalize the recovery byte to v ∈ {27, 28} before it reaches the L1 bundle. A committee
23
+ // member (or a peer mutating the byte in flight) can emit an equivalent signature in yParity form
24
+ // (v = 0/1); left as-is it makes `packAttestations` (empty iff v === 0) and `getSigners` (empty iff
25
+ // r,s,v all zero) disagree, reverting `propose()` with SignersSizeMismatch, and a v = 1 byte would
26
+ // later revert epoch proving in ECDSA.recover. `sender` recovered, so the signature is non-empty
27
+ // and low-s, and normalizeSignature preserves the recovered address.
21
28
  attestationMap.set(
22
29
  sender.toString(),
23
- CommitteeAttestation.fromAddressAndSignature(sender, attestation.signature),
30
+ CommitteeAttestation.fromAddressAndSignature(sender, normalizeSignature(attestation.signature)),
24
31
  );
25
32
  }
26
33
  }
@@ -1,5 +1,6 @@
1
1
  import { CheckpointProposalHash, type SlotNumber } from '@aztec/foundation/branded-types';
2
2
  import { type BaseBuffer32, Buffer32 } from '@aztec/foundation/buffer';
3
+ import { normalizeSignature } from '@aztec/foundation/crypto/secp256k1-signer';
3
4
  import type { Fr } from '@aztec/foundation/curves/bn254';
4
5
  import type { EthAddress } from '@aztec/foundation/eth-address';
5
6
  import { Signature } from '@aztec/foundation/eth-signature';
@@ -97,6 +98,17 @@ export class CheckpointAttestation extends Gossipable {
97
98
  return this.cachedProposer ?? undefined;
98
99
  }
99
100
 
101
+ /**
102
+ * Returns a copy with the attester signature canonicalized to v ∈ {27, 28}. Callers store attestations
103
+ * received from gossip verbatim; normalizing on ingress keeps a signature emitted in yParity form
104
+ * (v = 0/1) — whether by a malicious committee member or a peer mutating the byte in flight — from
105
+ * reaching the L1 bundle in a non-canonical form. Must only be called once the signature has recovered
106
+ * a sender (so it is non-empty and low-s); `normalizeSignature` throws on an all-zero signature.
107
+ */
108
+ withNormalizedSignature(): CheckpointAttestation {
109
+ return new CheckpointAttestation(this.payload, normalizeSignature(this.signature), this.proposerSignature);
110
+ }
111
+
100
112
  getPayload(): Buffer {
101
113
  return this.payload.getPayloadToSign();
102
114
  }
package/src/p2p/index.ts CHANGED
@@ -4,7 +4,6 @@ export * from './checkpoint_attestation.js';
4
4
  export * from './checkpoint_proposal.js';
5
5
  export * from './consensus_payload.js';
6
6
  export * from './gossipable.js';
7
- export * from './interface.js';
8
7
  export * from './signature_utils.js';
9
8
  export * from './signed_txs.js';
10
9
  export * from './topic_type.js';
@@ -112,6 +112,15 @@ export function getHashedSignaturePayloadTypedData(signable: Signable): Buffer32
112
112
  return Buffer32.fromString(hashTypedData(getCoordinationSignatureTypedData(signable)));
113
113
  }
114
114
 
115
+ /**
116
+ * Recovers the sender of a gossiped coordination message. Deliberately lenient (allowYParityAsV): a
117
+ * signature whose recovery byte is in yParity form (v ∈ {0, 1}) still resolves to its sender, so the P2P
118
+ * layer can attribute and accept it and then canonicalize on ingress (CheckpointAttestation.
119
+ * withNormalizedSignature, A-1351) before it reaches the L1 bundle. This is intentionally looser than
120
+ * on-chain checkpoint validation (getAttestationInfoFromPayload), which recovers strictly to mirror L1's
121
+ * ECDSA.recover — do not unify the two. These proposal/attestation signatures are P2P-only and never reach
122
+ * L1 verbatim, so leniency here cannot leak a non-canonical byte onto L1.
123
+ */
115
124
  export function recoverCoordinationSigner(signable: Signable, signature: Signature): EthAddress | undefined {
116
125
  const digest = getHashedSignaturePayloadTypedData(signable);
117
126
  return tryRecoverAddress(digest, signature, { allowYParityAsV: true });
@@ -1,6 +1,6 @@
1
- import { AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED } from '@aztec/constants';
1
+ import { AVM_V2_PROOF_LENGTH_IN_FIELDS } from '@aztec/constants';
2
2
 
3
3
  import { AvmCircuitPublicInputs } from '../avm/avm_circuit_public_inputs.js';
4
4
  import type { ProofDataForFixedVk } from '../proofs/proof_data.js';
5
5
 
6
- export type AvmProofData = ProofDataForFixedVk<AvmCircuitPublicInputs, typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>;
6
+ export type AvmProofData = ProofDataForFixedVk<AvmCircuitPublicInputs, typeof AVM_V2_PROOF_LENGTH_IN_FIELDS>;