@aztec/stdlib 3.0.0-canary.a9708bd → 3.0.0-devnet.3

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 (633) hide show
  1. package/dest/abi/abi.d.ts +8 -8
  2. package/dest/abi/abi.js +1 -1
  3. package/dest/abi/contract_artifact.js +3 -0
  4. package/dest/abi/event_metadata_definition.d.ts +8 -0
  5. package/dest/abi/event_metadata_definition.d.ts.map +1 -0
  6. package/dest/abi/event_metadata_definition.js +1 -0
  7. package/dest/abi/function_call.d.ts +7 -2
  8. package/dest/abi/function_call.d.ts.map +1 -1
  9. package/dest/abi/function_call.js +6 -2
  10. package/dest/abi/index.d.ts +1 -0
  11. package/dest/abi/index.d.ts.map +1 -1
  12. package/dest/abi/index.js +1 -0
  13. package/dest/avm/avm.d.ts +132 -73
  14. package/dest/avm/avm.d.ts.map +1 -1
  15. package/dest/avm/avm.js +10 -6
  16. package/dest/avm/avm_accumulated_data.d.ts +10 -21
  17. package/dest/avm/avm_accumulated_data.d.ts.map +1 -1
  18. package/dest/avm/avm_accumulated_data.js +19 -22
  19. package/dest/avm/avm_circuit_public_inputs.d.ts +30 -13
  20. package/dest/avm/avm_circuit_public_inputs.d.ts.map +1 -1
  21. package/dest/avm/avm_circuit_public_inputs.js +17 -6
  22. package/dest/avm/avm_proving_request.d.ts +96 -48
  23. package/dest/avm/avm_proving_request.d.ts.map +1 -1
  24. package/dest/avm/index.d.ts +1 -1
  25. package/dest/avm/index.d.ts.map +1 -1
  26. package/dest/avm/index.js +1 -1
  27. package/dest/avm/message_pack.d.ts +1 -0
  28. package/dest/avm/message_pack.d.ts.map +1 -1
  29. package/dest/avm/message_pack.js +28 -5
  30. package/dest/block/attestation_info.d.ts +30 -0
  31. package/dest/block/attestation_info.d.ts.map +1 -0
  32. package/dest/block/attestation_info.js +39 -0
  33. package/dest/block/body.d.ts +4 -1
  34. package/dest/block/body.d.ts.map +1 -1
  35. package/dest/block/body.js +17 -15
  36. package/dest/block/in_block.d.ts +5 -5
  37. package/dest/block/in_block.d.ts.map +1 -1
  38. package/dest/block/index.d.ts +4 -0
  39. package/dest/block/index.d.ts.map +1 -1
  40. package/dest/block/index.js +4 -0
  41. package/dest/block/l2_block.d.ts +21 -13
  42. package/dest/block/l2_block.d.ts.map +1 -1
  43. package/dest/block/l2_block.js +33 -10
  44. package/dest/block/l2_block_code_to_purge.d.ts +3 -14
  45. package/dest/block/l2_block_code_to_purge.d.ts.map +1 -1
  46. package/dest/block/l2_block_code_to_purge.js +23 -13
  47. package/dest/block/l2_block_header.d.ts +100 -0
  48. package/dest/block/l2_block_header.d.ts.map +1 -0
  49. package/dest/block/l2_block_header.js +146 -0
  50. package/dest/block/l2_block_info.d.ts +41 -0
  51. package/dest/block/l2_block_info.d.ts.map +1 -0
  52. package/dest/block/l2_block_info.js +40 -0
  53. package/dest/block/l2_block_source.d.ts +30 -428
  54. package/dest/block/l2_block_source.d.ts.map +1 -1
  55. package/dest/block/l2_block_source.js +0 -28
  56. package/dest/block/l2_block_stream/l2_tips_memory_store.js +1 -1
  57. package/dest/block/proposal/attestations_and_signers.d.ts +48 -0
  58. package/dest/block/proposal/attestations_and_signers.d.ts.map +1 -0
  59. package/dest/block/proposal/attestations_and_signers.js +99 -0
  60. package/dest/block/proposal/index.d.ts +1 -0
  61. package/dest/block/proposal/index.d.ts.map +1 -1
  62. package/dest/block/proposal/index.js +1 -0
  63. package/dest/block/published_l2_block.d.ts +27 -5
  64. package/dest/block/published_l2_block.d.ts.map +1 -1
  65. package/dest/block/published_l2_block.js +20 -7
  66. package/dest/block/test/l2_tips_store_test_suite.d.ts.map +1 -1
  67. package/dest/block/test/l2_tips_store_test_suite.js +3 -4
  68. package/dest/block/validate_block_result.d.ts +222 -0
  69. package/dest/block/validate_block_result.d.ts.map +1 -0
  70. package/dest/block/validate_block_result.js +83 -0
  71. package/dest/checkpoint/checkpoint_body.d.ts +4 -0
  72. package/dest/checkpoint/checkpoint_body.d.ts.map +1 -0
  73. package/dest/checkpoint/checkpoint_body.js +9 -0
  74. package/dest/checkpoint/index.d.ts +2 -0
  75. package/dest/checkpoint/index.d.ts.map +1 -0
  76. package/dest/checkpoint/index.js +1 -0
  77. package/dest/config/node-rpc-config.d.ts +2 -0
  78. package/dest/config/node-rpc-config.d.ts.map +1 -1
  79. package/dest/config/node-rpc-config.js +6 -0
  80. package/dest/contract/contract_address.d.ts +1 -1
  81. package/dest/contract/contract_address.js +1 -1
  82. package/dest/contract/contract_class_metadata.d.ts +8 -0
  83. package/dest/contract/contract_class_metadata.d.ts.map +1 -0
  84. package/dest/contract/contract_class_metadata.js +1 -0
  85. package/dest/contract/contract_instance.d.ts +9 -8
  86. package/dest/contract/contract_instance.d.ts.map +1 -1
  87. package/dest/contract/contract_instance.js +1 -2
  88. package/dest/contract/contract_metadata.d.ts +7 -0
  89. package/dest/contract/contract_metadata.d.ts.map +1 -0
  90. package/dest/contract/contract_metadata.js +1 -0
  91. package/dest/contract/index.d.ts +2 -0
  92. package/dest/contract/index.d.ts.map +1 -1
  93. package/dest/contract/index.js +2 -0
  94. package/dest/contract/interfaces/contract_class.d.ts +4 -4
  95. package/dest/contract/interfaces/contract_instance.d.ts +2 -2
  96. package/dest/epoch-helpers/index.d.ts +8 -2
  97. package/dest/epoch-helpers/index.d.ts.map +1 -1
  98. package/dest/epoch-helpers/index.js +9 -0
  99. package/dest/fees/transaction_fee.d.ts.map +1 -1
  100. package/dest/fees/transaction_fee.js +3 -0
  101. package/dest/file-store/factory.d.ts.map +1 -1
  102. package/dest/file-store/factory.js +18 -0
  103. package/dest/file-store/interface.d.ts +8 -2
  104. package/dest/file-store/interface.d.ts.map +1 -1
  105. package/dest/file-store/s3.d.ts +26 -0
  106. package/dest/file-store/s3.d.ts.map +1 -0
  107. package/dest/file-store/s3.js +252 -0
  108. package/dest/hash/hash.d.ts.map +1 -1
  109. package/dest/hash/hash.js +0 -3
  110. package/dest/interfaces/archiver.d.ts +43 -0
  111. package/dest/interfaces/archiver.d.ts.map +1 -1
  112. package/dest/interfaces/archiver.js +17 -1
  113. package/dest/interfaces/aztec-node-admin.d.ts +87 -40
  114. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  115. package/dest/interfaces/aztec-node-admin.js +7 -1
  116. package/dest/interfaces/aztec-node.d.ts +35 -2
  117. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  118. package/dest/interfaces/aztec-node.js +8 -1
  119. package/dest/interfaces/block-builder.d.ts +7 -8
  120. package/dest/interfaces/block-builder.d.ts.map +1 -1
  121. package/dest/interfaces/client.d.ts +0 -1
  122. package/dest/interfaces/client.d.ts.map +1 -1
  123. package/dest/interfaces/client.js +0 -1
  124. package/dest/interfaces/configs.d.ts +10 -0
  125. package/dest/interfaces/configs.d.ts.map +1 -1
  126. package/dest/interfaces/configs.js +3 -1
  127. package/dest/interfaces/epoch-prover.d.ts +26 -9
  128. package/dest/interfaces/epoch-prover.d.ts.map +1 -1
  129. package/dest/interfaces/merkle_tree_operations.d.ts +5 -0
  130. package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
  131. package/dest/interfaces/p2p.d.ts +2 -0
  132. package/dest/interfaces/p2p.d.ts.map +1 -1
  133. package/dest/interfaces/p2p.js +2 -1
  134. package/dest/interfaces/private_kernel_prover.d.ts +2 -2
  135. package/dest/interfaces/private_kernel_prover.d.ts.map +1 -1
  136. package/dest/interfaces/proving-job.d.ts +349 -200
  137. package/dest/interfaces/proving-job.d.ts.map +1 -1
  138. package/dest/interfaces/proving-job.js +131 -113
  139. package/dest/interfaces/server.d.ts +1 -0
  140. package/dest/interfaces/server.d.ts.map +1 -1
  141. package/dest/interfaces/server.js +1 -0
  142. package/dest/interfaces/server_circuit_prover.d.ts +34 -34
  143. package/dest/interfaces/server_circuit_prover.d.ts.map +1 -1
  144. package/dest/interfaces/slasher.d.ts +4 -0
  145. package/dest/interfaces/slasher.d.ts.map +1 -1
  146. package/dest/interfaces/slasher.js +1 -0
  147. package/dest/interfaces/tx_provider.d.ts +1 -1
  148. package/dest/interfaces/tx_provider.d.ts.map +1 -1
  149. package/dest/interfaces/validator.d.ts +163 -0
  150. package/dest/interfaces/validator.d.ts.map +1 -0
  151. package/dest/interfaces/validator.js +18 -0
  152. package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts +3 -2
  153. package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts.map +1 -1
  154. package/dest/kernel/hints/nullifier_read_request_hints.d.ts +4 -3
  155. package/dest/kernel/hints/nullifier_read_request_hints.d.ts.map +1 -1
  156. package/dest/kernel/nullifier.d.ts +2 -2
  157. package/dest/kernel/nullifier.d.ts.map +1 -1
  158. package/dest/kernel/nullifier.js +11 -11
  159. package/dest/kernel/private_call_data.d.ts +4 -24
  160. package/dest/kernel/private_call_data.d.ts.map +1 -1
  161. package/dest/kernel/private_call_data.js +4 -16
  162. package/dest/kernel/private_circuit_public_inputs.d.ts +5 -5
  163. package/dest/kernel/private_circuit_public_inputs.d.ts.map +1 -1
  164. package/dest/kernel/private_circuit_public_inputs.js +7 -7
  165. package/dest/kernel/private_context_inputs.d.ts +2 -2
  166. package/dest/kernel/private_context_inputs.d.ts.map +1 -1
  167. package/dest/kernel/private_context_inputs.js +4 -4
  168. package/dest/kernel/private_kernel_circuit_public_inputs.d.ts +3 -3
  169. package/dest/kernel/private_kernel_circuit_public_inputs.d.ts.map +1 -1
  170. package/dest/kernel/private_kernel_circuit_public_inputs.js +3 -3
  171. package/dest/kernel/private_kernel_init_circuit_private_inputs.d.ts +5 -4
  172. package/dest/kernel/private_kernel_init_circuit_private_inputs.d.ts.map +1 -1
  173. package/dest/kernel/private_kernel_init_circuit_private_inputs.js +7 -6
  174. package/dest/kernel/private_kernel_prover_output.d.ts +1 -1
  175. package/dest/kernel/private_kernel_prover_output.d.ts.map +1 -1
  176. package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts +1 -0
  177. package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts.map +1 -1
  178. package/dest/kernel/private_kernel_tail_circuit_public_inputs.js +4 -1
  179. package/dest/kernel/private_to_public_accumulated_data.d.ts +1 -1
  180. package/dest/kernel/private_to_public_kernel_circuit_public_inputs.d.ts +2 -0
  181. package/dest/kernel/private_to_public_kernel_circuit_public_inputs.d.ts.map +1 -1
  182. package/dest/kernel/private_to_public_kernel_circuit_public_inputs.js +7 -0
  183. package/dest/kernel/private_to_rollup_accumulated_data.d.ts +1 -1
  184. package/dest/keys/derivation.d.ts +0 -2
  185. package/dest/keys/derivation.d.ts.map +1 -1
  186. package/dest/keys/derivation.js +1 -21
  187. package/dest/logs/contract_class_log.d.ts +1 -1
  188. package/dest/logs/contract_class_log.d.ts.map +1 -1
  189. package/dest/logs/contract_class_log.js +1 -3
  190. package/dest/logs/debug_log.d.ts +13 -0
  191. package/dest/logs/debug_log.d.ts.map +1 -0
  192. package/dest/logs/debug_log.js +26 -0
  193. package/dest/logs/directional_app_tagging_secret.d.ts +40 -0
  194. package/dest/logs/directional_app_tagging_secret.d.ts.map +1 -0
  195. package/dest/logs/directional_app_tagging_secret.js +64 -0
  196. package/dest/logs/index.d.ts +3 -1
  197. package/dest/logs/index.d.ts.map +1 -1
  198. package/dest/logs/index.js +3 -1
  199. package/dest/logs/log_with_tx_data.d.ts +9 -12
  200. package/dest/logs/log_with_tx_data.d.ts.map +1 -1
  201. package/dest/logs/log_with_tx_data.js +18 -23
  202. package/dest/logs/pre_tag.d.ts +34 -0
  203. package/dest/logs/pre_tag.d.ts.map +1 -0
  204. package/dest/logs/pre_tag.js +7 -0
  205. package/dest/logs/public_log.d.ts +23 -10
  206. package/dest/logs/public_log.d.ts.map +1 -1
  207. package/dest/logs/public_log.js +117 -42
  208. package/dest/messaging/inbox_leaf.d.ts +2 -0
  209. package/dest/messaging/inbox_leaf.d.ts.map +1 -1
  210. package/dest/messaging/inbox_leaf.js +3 -0
  211. package/dest/messaging/l2_to_l1_membership.d.ts +1 -1
  212. package/dest/messaging/l2_to_l1_membership.d.ts.map +1 -1
  213. package/dest/messaging/l2_to_l1_membership.js +16 -18
  214. package/dest/noir/index.d.ts +11 -0
  215. package/dest/noir/index.d.ts.map +1 -1
  216. package/dest/note/index.d.ts +1 -1
  217. package/dest/note/index.d.ts.map +1 -1
  218. package/dest/note/index.js +1 -1
  219. package/dest/note/notes_filter.d.ts +0 -5
  220. package/dest/note/notes_filter.d.ts.map +1 -1
  221. package/dest/note/notes_filter.js +0 -3
  222. package/dest/note/unique_note.d.ts +43 -0
  223. package/dest/note/unique_note.d.ts.map +1 -0
  224. package/dest/note/{extended_note.js → unique_note.js} +9 -48
  225. package/dest/p2p/block_attestation.d.ts +45 -9
  226. package/dest/p2p/block_attestation.d.ts.map +1 -1
  227. package/dest/p2p/block_attestation.js +37 -15
  228. package/dest/p2p/block_proposal.d.ts +7 -9
  229. package/dest/p2p/block_proposal.d.ts.map +1 -1
  230. package/dest/p2p/block_proposal.js +13 -14
  231. package/dest/p2p/consensus_payload.d.ts +35 -6
  232. package/dest/p2p/consensus_payload.d.ts.map +1 -1
  233. package/dest/p2p/consensus_payload.js +21 -8
  234. package/dest/p2p/gossipable.d.ts +2 -4
  235. package/dest/p2p/gossipable.d.ts.map +1 -1
  236. package/dest/p2p/gossipable.js +5 -14
  237. package/dest/p2p/signature_utils.d.ts +2 -1
  238. package/dest/p2p/signature_utils.d.ts.map +1 -1
  239. package/dest/p2p/signature_utils.js +1 -0
  240. package/dest/parity/index.d.ts +2 -3
  241. package/dest/parity/index.d.ts.map +1 -1
  242. package/dest/parity/index.js +2 -3
  243. package/dest/parity/{base_parity_inputs.d.ts → parity_base_private_inputs.d.ts} +7 -7
  244. package/dest/parity/parity_base_private_inputs.d.ts.map +1 -0
  245. package/dest/parity/{base_parity_inputs.js → parity_base_private_inputs.js} +10 -6
  246. package/dest/parity/parity_root_private_inputs.d.ts +39 -0
  247. package/dest/parity/parity_root_private_inputs.d.ts.map +1 -0
  248. package/dest/parity/{root_parity_inputs.js → parity_root_private_inputs.js} +12 -13
  249. package/dest/proofs/client_ivc_proof.d.ts +17 -7
  250. package/dest/proofs/client_ivc_proof.d.ts.map +1 -1
  251. package/dest/proofs/client_ivc_proof.js +78 -19
  252. package/dest/proofs/index.d.ts +1 -0
  253. package/dest/proofs/index.d.ts.map +1 -1
  254. package/dest/proofs/index.js +1 -0
  255. package/dest/proofs/proof_data.d.ts +21 -0
  256. package/dest/proofs/proof_data.d.ts.map +1 -0
  257. package/dest/proofs/proof_data.js +22 -0
  258. package/dest/proofs/proving_request_type.d.ts +17 -13
  259. package/dest/proofs/proving_request_type.d.ts.map +1 -1
  260. package/dest/proofs/proving_request_type.js +17 -12
  261. package/dest/rollup/avm_proof_data.d.ts +2 -12
  262. package/dest/rollup/avm_proof_data.d.ts.map +1 -1
  263. package/dest/rollup/avm_proof_data.js +0 -24
  264. package/dest/rollup/base_rollup_hints.d.ts +17 -17
  265. package/dest/rollup/base_rollup_hints.d.ts.map +1 -1
  266. package/dest/rollup/base_rollup_hints.js +26 -26
  267. package/dest/rollup/block_constant_data.d.ts +24 -10
  268. package/dest/rollup/block_constant_data.d.ts.map +1 -1
  269. package/dest/rollup/block_constant_data.js +18 -10
  270. package/dest/rollup/{block_merge_rollup.d.ts → block_merge_rollup_private_inputs.d.ts} +17 -10
  271. package/dest/rollup/block_merge_rollup_private_inputs.d.ts.map +1 -0
  272. package/dest/rollup/{block_merge_rollup.js → block_merge_rollup_private_inputs.js} +14 -13
  273. package/dest/rollup/block_rollup_public_inputs.d.ts +124 -0
  274. package/dest/rollup/block_rollup_public_inputs.d.ts.map +1 -0
  275. package/dest/rollup/block_rollup_public_inputs.js +85 -0
  276. package/dest/rollup/block_root_rollup_private_inputs.d.ts +236 -0
  277. package/dest/rollup/block_root_rollup_private_inputs.d.ts.map +1 -0
  278. package/dest/rollup/block_root_rollup_private_inputs.js +257 -0
  279. package/dest/rollup/checkpoint_constant_data.d.ts +54 -0
  280. package/dest/rollup/checkpoint_constant_data.d.ts.map +1 -0
  281. package/dest/rollup/checkpoint_constant_data.js +55 -0
  282. package/dest/{tx/proposed_block_header.d.ts → rollup/checkpoint_header.d.ts} +12 -11
  283. package/dest/rollup/checkpoint_header.d.ts.map +1 -0
  284. package/dest/{tx/proposed_block_header.js → rollup/checkpoint_header.js} +14 -8
  285. package/dest/rollup/checkpoint_merge_rollup_private_inputs.d.ts +30 -0
  286. package/dest/rollup/checkpoint_merge_rollup_private_inputs.d.ts.map +1 -0
  287. package/dest/rollup/checkpoint_merge_rollup_private_inputs.js +37 -0
  288. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +106 -0
  289. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -0
  290. package/dest/rollup/checkpoint_rollup_public_inputs.js +108 -0
  291. package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts +123 -0
  292. package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts.map +1 -0
  293. package/dest/rollup/checkpoint_root_rollup_private_inputs.js +178 -0
  294. package/dest/rollup/epoch_constant_data.d.ts +23 -6
  295. package/dest/rollup/epoch_constant_data.d.ts.map +1 -1
  296. package/dest/rollup/epoch_constant_data.js +25 -12
  297. package/dest/rollup/index.d.ts +17 -16
  298. package/dest/rollup/index.d.ts.map +1 -1
  299. package/dest/rollup/index.js +17 -16
  300. package/dest/rollup/private_tx_base_rollup_private_inputs.d.ts +21 -0
  301. package/dest/rollup/private_tx_base_rollup_private_inputs.d.ts.map +1 -0
  302. package/dest/rollup/private_tx_base_rollup_private_inputs.js +42 -0
  303. package/dest/rollup/public_tube_private_inputs.d.ts +21 -0
  304. package/dest/rollup/public_tube_private_inputs.d.ts.map +1 -0
  305. package/dest/rollup/public_tube_private_inputs.js +42 -0
  306. package/dest/rollup/public_tube_public_inputs.d.ts +20 -0
  307. package/dest/rollup/public_tube_public_inputs.d.ts.map +1 -0
  308. package/dest/rollup/public_tube_public_inputs.js +41 -0
  309. package/dest/rollup/public_tx_base_rollup_private_inputs.d.ts +23 -0
  310. package/dest/rollup/public_tx_base_rollup_private_inputs.d.ts.map +1 -0
  311. package/dest/rollup/public_tx_base_rollup_private_inputs.js +46 -0
  312. package/dest/rollup/root_rollup_private_inputs.d.ts +67 -0
  313. package/dest/rollup/root_rollup_private_inputs.d.ts.map +1 -0
  314. package/dest/rollup/root_rollup_private_inputs.js +69 -0
  315. package/dest/rollup/root_rollup_public_inputs.d.ts +46 -0
  316. package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -0
  317. package/dest/rollup/root_rollup_public_inputs.js +71 -0
  318. package/dest/rollup/{state_diff_hints.d.ts → tree_snapshot_diff_hints.d.ts} +22 -38
  319. package/dest/rollup/tree_snapshot_diff_hints.d.ts.map +1 -0
  320. package/dest/rollup/tree_snapshot_diff_hints.js +75 -0
  321. package/dest/rollup/{merge_rollup.d.ts → tx_merge_rollup_private_inputs.d.ts} +11 -10
  322. package/dest/rollup/tx_merge_rollup_private_inputs.d.ts.map +1 -0
  323. package/dest/rollup/{merge_rollup.js → tx_merge_rollup_private_inputs.js} +14 -13
  324. package/dest/rollup/{base_or_merge_rollup_public_inputs.d.ts → tx_rollup_public_inputs.d.ts} +14 -14
  325. package/dest/rollup/tx_rollup_public_inputs.d.ts.map +1 -0
  326. package/dest/rollup/{base_or_merge_rollup_public_inputs.js → tx_rollup_public_inputs.js} +15 -15
  327. package/dest/slashing/types.d.ts +1 -0
  328. package/dest/slashing/types.d.ts.map +1 -1
  329. package/dest/slashing/types.js +22 -0
  330. package/dest/snapshots/download.d.ts.map +1 -1
  331. package/dest/snapshots/download.js +58 -2
  332. package/dest/snapshots/upload.d.ts.map +1 -1
  333. package/dest/snapshots/upload.js +1 -0
  334. package/dest/stats/stats.d.ts +1 -1
  335. package/dest/stats/stats.d.ts.map +1 -1
  336. package/dest/tests/factories.d.ts +42 -74
  337. package/dest/tests/factories.d.ts.map +1 -1
  338. package/dest/tests/factories.js +144 -167
  339. package/dest/tests/mocks.d.ts +14 -8
  340. package/dest/tests/mocks.d.ts.map +1 -1
  341. package/dest/tests/mocks.js +53 -31
  342. package/dest/trees/index.d.ts +0 -1
  343. package/dest/trees/index.d.ts.map +1 -1
  344. package/dest/trees/index.js +0 -1
  345. package/dest/trees/merkle_tree_id.d.ts +4 -4
  346. package/dest/trees/nullifier_membership_witness.d.ts +3 -3
  347. package/dest/tx/block_header.d.ts +12 -13
  348. package/dest/tx/block_header.d.ts.map +1 -1
  349. package/dest/tx/block_header.js +16 -21
  350. package/dest/tx/content_commitment.d.ts +1 -0
  351. package/dest/tx/content_commitment.d.ts.map +1 -1
  352. package/dest/tx/content_commitment.js +3 -0
  353. package/dest/tx/global_variables.d.ts.map +1 -1
  354. package/dest/tx/global_variables.js +0 -1
  355. package/dest/tx/index.d.ts +2 -1
  356. package/dest/tx/index.d.ts.map +1 -1
  357. package/dest/tx/index.js +2 -1
  358. package/dest/tx/indexed_tx_effect.d.ts +3 -3
  359. package/dest/tx/partial_state_reference.d.ts +1 -0
  360. package/dest/tx/partial_state_reference.d.ts.map +1 -1
  361. package/dest/tx/partial_state_reference.js +3 -0
  362. package/dest/tx/private_execution_result.d.ts +7 -2
  363. package/dest/tx/private_execution_result.d.ts.map +1 -1
  364. package/dest/tx/private_execution_result.js +10 -6
  365. package/dest/tx/private_tx_constant_data.d.ts +60 -0
  366. package/dest/tx/private_tx_constant_data.d.ts.map +1 -0
  367. package/dest/tx/private_tx_constant_data.js +69 -0
  368. package/dest/tx/processed_tx.d.ts +0 -1
  369. package/dest/tx/processed_tx.d.ts.map +1 -1
  370. package/dest/tx/processed_tx.js +1 -6
  371. package/dest/tx/profiling.d.ts.map +1 -1
  372. package/dest/tx/profiling.js +0 -2
  373. package/dest/tx/protocol_contracts.d.ts +29 -0
  374. package/dest/tx/protocol_contracts.d.ts.map +1 -0
  375. package/dest/tx/protocol_contracts.js +49 -0
  376. package/dest/tx/simulated_tx.d.ts +3 -3
  377. package/dest/tx/state_reference.d.ts +1 -0
  378. package/dest/tx/state_reference.d.ts.map +1 -1
  379. package/dest/tx/state_reference.js +4 -1
  380. package/dest/tx/tx.d.ts +6 -9
  381. package/dest/tx/tx.d.ts.map +1 -1
  382. package/dest/tx/tx.js +10 -11
  383. package/dest/tx/tx_constant_data.d.ts +6 -38
  384. package/dest/tx/tx_constant_data.d.ts.map +1 -1
  385. package/dest/tx/tx_constant_data.js +11 -20
  386. package/dest/tx/tx_effect.d.ts +3 -36
  387. package/dest/tx/tx_effect.d.ts.map +1 -1
  388. package/dest/tx/tx_effect.js +63 -202
  389. package/dest/tx/validator/error_texts.d.ts +1 -1
  390. package/dest/tx/validator/error_texts.d.ts.map +1 -1
  391. package/dest/tx/validator/error_texts.js +1 -1
  392. package/dest/update-checker/update-checker.d.ts +1 -1
  393. package/dest/update-checker/update-checker.d.ts.map +1 -1
  394. package/dest/update-checker/update-checker.js +1 -1
  395. package/dest/validators/schemas.d.ts +42 -4
  396. package/dest/validators/schemas.d.ts.map +1 -1
  397. package/dest/validators/schemas.js +5 -4
  398. package/dest/validators/types.d.ts +8 -10
  399. package/dest/validators/types.d.ts.map +1 -1
  400. package/dest/versioning/versioning.d.ts +2 -2
  401. package/dest/versioning/versioning.d.ts.map +1 -1
  402. package/dest/versioning/versioning.js +18 -13
  403. package/dest/world-state/index.d.ts +2 -0
  404. package/dest/world-state/index.d.ts.map +1 -0
  405. package/dest/world-state/index.js +1 -0
  406. package/dest/world-state/world_state_revision.d.ts +22 -0
  407. package/dest/world-state/world_state_revision.d.ts.map +1 -0
  408. package/dest/world-state/world_state_revision.js +21 -0
  409. package/dest/zkpassport/index.d.ts +17 -11
  410. package/dest/zkpassport/index.d.ts.map +1 -1
  411. package/dest/zkpassport/index.js +21 -15
  412. package/package.json +15 -11
  413. package/src/abi/abi.ts +1 -1
  414. package/src/abi/contract_artifact.ts +3 -0
  415. package/src/abi/event_metadata_definition.ts +8 -0
  416. package/src/abi/function_call.ts +5 -1
  417. package/src/abi/index.ts +1 -0
  418. package/src/avm/avm.ts +15 -7
  419. package/src/avm/avm_accumulated_data.ts +25 -29
  420. package/src/avm/avm_circuit_public_inputs.ts +21 -0
  421. package/src/avm/index.ts +1 -1
  422. package/src/avm/message_pack.ts +25 -1
  423. package/src/block/attestation_info.ts +62 -0
  424. package/src/block/body.ts +25 -23
  425. package/src/block/index.ts +4 -0
  426. package/src/block/l2_block.ts +39 -19
  427. package/src/block/l2_block_code_to_purge.ts +30 -31
  428. package/src/block/l2_block_header.ts +232 -0
  429. package/src/block/l2_block_info.ts +63 -0
  430. package/src/block/l2_block_source.ts +33 -51
  431. package/src/block/l2_block_stream/l2_tips_memory_store.ts +1 -1
  432. package/src/block/proposal/attestations_and_signers.ts +121 -0
  433. package/src/block/proposal/index.ts +1 -0
  434. package/src/block/published_l2_block.ts +37 -15
  435. package/src/block/test/l2_tips_store_test_suite.ts +7 -7
  436. package/src/block/validate_block_result.ts +122 -0
  437. package/src/checkpoint/checkpoint_body.ts +10 -0
  438. package/src/checkpoint/index.ts +1 -0
  439. package/src/config/node-rpc-config.ts +9 -0
  440. package/src/contract/contract_address.ts +1 -1
  441. package/src/contract/contract_class_metadata.ts +8 -0
  442. package/src/contract/contract_instance.ts +11 -10
  443. package/src/contract/contract_metadata.ts +7 -0
  444. package/src/contract/index.ts +2 -0
  445. package/src/contract/interfaces/contract_class.ts +1 -1
  446. package/src/epoch-helpers/index.ts +24 -2
  447. package/src/fees/transaction_fee.ts +11 -0
  448. package/src/file-store/factory.ts +15 -0
  449. package/src/file-store/interface.ts +8 -2
  450. package/src/file-store/s3.ts +254 -0
  451. package/src/hash/hash.ts +0 -4
  452. package/src/interfaces/archiver.ts +46 -1
  453. package/src/interfaces/aztec-node-admin.ts +17 -1
  454. package/src/interfaces/aztec-node.ts +53 -2
  455. package/src/interfaces/block-builder.ts +11 -12
  456. package/src/interfaces/client.ts +0 -1
  457. package/src/interfaces/configs.ts +6 -0
  458. package/src/interfaces/epoch-prover.ts +35 -11
  459. package/src/interfaces/merkle_tree_operations.ts +6 -0
  460. package/src/interfaces/p2p.ts +4 -0
  461. package/src/interfaces/private_kernel_prover.ts +2 -2
  462. package/src/interfaces/proving-job.ts +215 -134
  463. package/src/interfaces/server.ts +1 -0
  464. package/src/interfaces/server_circuit_prover.ts +87 -61
  465. package/src/interfaces/slasher.ts +2 -0
  466. package/src/interfaces/tx_provider.ts +1 -0
  467. package/src/interfaces/validator.ts +95 -0
  468. package/src/kernel/hints/build_nullifier_read_request_hints.ts +3 -2
  469. package/src/kernel/hints/nullifier_read_request_hints.ts +3 -3
  470. package/src/kernel/nullifier.ts +8 -8
  471. package/src/kernel/private_call_data.ts +2 -21
  472. package/src/kernel/private_circuit_public_inputs.ts +5 -5
  473. package/src/kernel/private_context_inputs.ts +2 -2
  474. package/src/kernel/private_kernel_circuit_public_inputs.ts +4 -4
  475. package/src/kernel/private_kernel_init_circuit_private_inputs.ts +5 -4
  476. package/src/kernel/private_kernel_prover_output.ts +1 -1
  477. package/src/kernel/private_kernel_tail_circuit_public_inputs.ts +8 -2
  478. package/src/kernel/private_to_public_kernel_circuit_public_inputs.ts +9 -0
  479. package/src/keys/derivation.ts +1 -26
  480. package/src/logs/contract_class_log.ts +2 -3
  481. package/src/logs/debug_log.ts +32 -0
  482. package/src/logs/directional_app_tagging_secret.ts +78 -0
  483. package/src/logs/index.ts +3 -1
  484. package/src/logs/log_with_tx_data.ts +14 -24
  485. package/src/logs/pre_tag.ts +25 -0
  486. package/src/logs/public_log.ts +120 -58
  487. package/src/messaging/inbox_leaf.ts +5 -0
  488. package/src/messaging/l2_to_l1_membership.ts +20 -26
  489. package/src/noir/index.ts +11 -0
  490. package/src/note/index.ts +1 -1
  491. package/src/note/notes_filter.ts +0 -7
  492. package/src/note/{extended_note.ts → unique_note.ts} +14 -75
  493. package/src/p2p/block_attestation.ts +46 -15
  494. package/src/p2p/block_proposal.ts +15 -18
  495. package/src/p2p/consensus_payload.ts +30 -10
  496. package/src/p2p/gossipable.ts +6 -16
  497. package/src/p2p/signature_utils.ts +1 -0
  498. package/src/parity/index.ts +2 -3
  499. package/src/parity/{base_parity_inputs.ts → parity_base_private_inputs.ts} +13 -11
  500. package/src/parity/{root_parity_inputs.ts → parity_root_private_inputs.ts} +16 -18
  501. package/src/proofs/client_ivc_proof.ts +86 -20
  502. package/src/proofs/index.ts +1 -0
  503. package/src/proofs/proof_data.ts +36 -0
  504. package/src/proofs/proving_request_type.ts +14 -10
  505. package/src/rollup/avm_proof_data.ts +2 -31
  506. package/src/rollup/base_rollup_hints.ts +22 -22
  507. package/src/rollup/block_constant_data.ts +16 -6
  508. package/src/rollup/{block_merge_rollup.ts → block_merge_rollup_private_inputs.ts} +15 -11
  509. package/src/rollup/block_rollup_public_inputs.ts +123 -0
  510. package/src/rollup/block_root_rollup_private_inputs.ts +312 -0
  511. package/src/rollup/checkpoint_constant_data.ts +84 -0
  512. package/src/{tx/proposed_block_header.ts → rollup/checkpoint_header.ts} +40 -15
  513. package/src/rollup/checkpoint_merge_rollup_private_inputs.ts +49 -0
  514. package/src/rollup/{block_root_or_block_merge_public_inputs.ts → checkpoint_rollup_public_inputs.ts} +30 -52
  515. package/src/rollup/checkpoint_root_rollup_private_inputs.ts +218 -0
  516. package/src/rollup/epoch_constant_data.ts +28 -10
  517. package/src/rollup/index.ts +17 -16
  518. package/src/rollup/private_tx_base_rollup_private_inputs.ts +53 -0
  519. package/src/rollup/public_tube_private_inputs.ts +53 -0
  520. package/src/rollup/public_tube_public_inputs.ts +52 -0
  521. package/src/rollup/public_tx_base_rollup_private_inputs.ts +57 -0
  522. package/src/rollup/root_rollup_private_inputs.ts +90 -0
  523. package/src/rollup/root_rollup_public_inputs.ts +99 -0
  524. package/src/rollup/{state_diff_hints.ts → tree_snapshot_diff_hints.ts} +26 -41
  525. package/src/rollup/{merge_rollup.ts → tx_merge_rollup_private_inputs.ts} +13 -9
  526. package/src/rollup/{base_or_merge_rollup_public_inputs.ts → tx_rollup_public_inputs.ts} +13 -13
  527. package/src/slashing/types.ts +23 -0
  528. package/src/snapshots/download.ts +66 -2
  529. package/src/snapshots/upload.ts +1 -0
  530. package/src/stats/stats.ts +19 -13
  531. package/src/tests/factories.ts +217 -275
  532. package/src/tests/mocks.ts +87 -57
  533. package/src/trees/index.ts +0 -1
  534. package/src/tx/block_header.ts +17 -32
  535. package/src/tx/content_commitment.ts +4 -0
  536. package/src/tx/global_variables.ts +0 -1
  537. package/src/tx/index.ts +2 -1
  538. package/src/tx/partial_state_reference.ts +8 -0
  539. package/src/tx/private_execution_result.ts +9 -3
  540. package/src/tx/private_tx_constant_data.ts +94 -0
  541. package/src/tx/processed_tx.ts +1 -7
  542. package/src/tx/profiling.ts +0 -2
  543. package/src/tx/protocol_contracts.ts +70 -0
  544. package/src/tx/state_reference.ts +5 -1
  545. package/src/tx/tx.ts +12 -13
  546. package/src/tx/tx_constant_data.ts +8 -21
  547. package/src/tx/tx_effect.ts +64 -213
  548. package/src/tx/validator/error_texts.ts +1 -1
  549. package/src/update-checker/update-checker.ts +1 -1
  550. package/src/validators/schemas.ts +6 -4
  551. package/src/validators/types.ts +9 -10
  552. package/src/versioning/versioning.ts +20 -15
  553. package/src/world-state/index.ts +1 -0
  554. package/src/world-state/world_state_revision.ts +21 -0
  555. package/src/zkpassport/index.ts +42 -30
  556. package/dest/avm/public_data_hint.d.ts +0 -16
  557. package/dest/avm/public_data_hint.d.ts.map +0 -1
  558. package/dest/avm/public_data_hint.js +0 -27
  559. package/dest/interfaces/pxe.d.ts +0 -329
  560. package/dest/interfaces/pxe.d.ts.map +0 -1
  561. package/dest/interfaces/pxe.js +0 -100
  562. package/dest/logs/indexed_tagging_secret.d.ts +0 -28
  563. package/dest/logs/indexed_tagging_secret.d.ts.map +0 -1
  564. package/dest/logs/indexed_tagging_secret.js +0 -50
  565. package/dest/note/extended_note.d.ts +0 -111
  566. package/dest/note/extended_note.d.ts.map +0 -1
  567. package/dest/parity/base_parity_inputs.d.ts.map +0 -1
  568. package/dest/parity/root_parity_input.d.ts +0 -52
  569. package/dest/parity/root_parity_input.d.ts.map +0 -1
  570. package/dest/parity/root_parity_input.js +0 -50
  571. package/dest/parity/root_parity_inputs.d.ts +0 -37
  572. package/dest/parity/root_parity_inputs.d.ts.map +0 -1
  573. package/dest/rollup/base_or_merge_rollup_public_inputs.d.ts.map +0 -1
  574. package/dest/rollup/block_merge_rollup.d.ts.map +0 -1
  575. package/dest/rollup/block_root_or_block_merge_public_inputs.d.ts +0 -134
  576. package/dest/rollup/block_root_or_block_merge_public_inputs.d.ts.map +0 -1
  577. package/dest/rollup/block_root_or_block_merge_public_inputs.js +0 -125
  578. package/dest/rollup/block_root_rollup.d.ts +0 -283
  579. package/dest/rollup/block_root_rollup.d.ts.map +0 -1
  580. package/dest/rollup/block_root_rollup.js +0 -306
  581. package/dest/rollup/empty_block_root_rollup_inputs.d.ts +0 -51
  582. package/dest/rollup/empty_block_root_rollup_inputs.d.ts.map +0 -1
  583. package/dest/rollup/empty_block_root_rollup_inputs.js +0 -65
  584. package/dest/rollup/merge_rollup.d.ts.map +0 -1
  585. package/dest/rollup/padding_block_root_rollup_inputs.d.ts +0 -20
  586. package/dest/rollup/padding_block_root_rollup_inputs.d.ts.map +0 -1
  587. package/dest/rollup/padding_block_root_rollup_inputs.js +0 -39
  588. package/dest/rollup/previous_rollup_block_data.d.ts +0 -47
  589. package/dest/rollup/previous_rollup_block_data.d.ts.map +0 -1
  590. package/dest/rollup/previous_rollup_block_data.js +0 -37
  591. package/dest/rollup/previous_rollup_data.d.ts +0 -47
  592. package/dest/rollup/previous_rollup_data.d.ts.map +0 -1
  593. package/dest/rollup/previous_rollup_data.js +0 -37
  594. package/dest/rollup/private_base_rollup_inputs.d.ts +0 -21
  595. package/dest/rollup/private_base_rollup_inputs.d.ts.map +0 -1
  596. package/dest/rollup/private_base_rollup_inputs.js +0 -44
  597. package/dest/rollup/private_tube_data.d.ts +0 -15
  598. package/dest/rollup/private_tube_data.d.ts.map +0 -1
  599. package/dest/rollup/private_tube_data.js +0 -25
  600. package/dest/rollup/public_base_rollup_inputs.d.ts +0 -23
  601. package/dest/rollup/public_base_rollup_inputs.d.ts.map +0 -1
  602. package/dest/rollup/public_base_rollup_inputs.js +0 -48
  603. package/dest/rollup/public_tube_data.d.ts +0 -15
  604. package/dest/rollup/public_tube_data.d.ts.map +0 -1
  605. package/dest/rollup/public_tube_data.js +0 -25
  606. package/dest/rollup/root_rollup.d.ts +0 -106
  607. package/dest/rollup/root_rollup.d.ts.map +0 -1
  608. package/dest/rollup/root_rollup.js +0 -147
  609. package/dest/rollup/state_diff_hints.d.ts.map +0 -1
  610. package/dest/rollup/state_diff_hints.js +0 -85
  611. package/dest/rollup/tube_inputs.d.ts +0 -43
  612. package/dest/rollup/tube_inputs.d.ts.map +0 -1
  613. package/dest/rollup/tube_inputs.js +0 -63
  614. package/dest/trees/protocol_contract_leaf.d.ts +0 -84
  615. package/dest/trees/protocol_contract_leaf.d.ts.map +0 -1
  616. package/dest/trees/protocol_contract_leaf.js +0 -100
  617. package/dest/tx/proposed_block_header.d.ts.map +0 -1
  618. package/src/avm/public_data_hint.ts +0 -38
  619. package/src/interfaces/pxe.ts +0 -532
  620. package/src/logs/indexed_tagging_secret.ts +0 -48
  621. package/src/parity/root_parity_input.ts +0 -71
  622. package/src/rollup/block_root_rollup.ts +0 -380
  623. package/src/rollup/empty_block_root_rollup_inputs.ts +0 -80
  624. package/src/rollup/padding_block_root_rollup_inputs.ts +0 -47
  625. package/src/rollup/previous_rollup_block_data.ts +0 -48
  626. package/src/rollup/previous_rollup_data.ts +0 -48
  627. package/src/rollup/private_base_rollup_inputs.ts +0 -53
  628. package/src/rollup/private_tube_data.ts +0 -35
  629. package/src/rollup/public_base_rollup_inputs.ts +0 -59
  630. package/src/rollup/public_tube_data.ts +0 -35
  631. package/src/rollup/root_rollup.ts +0 -195
  632. package/src/rollup/tube_inputs.ts +0 -77
  633. package/src/trees/protocol_contract_leaf.ts +0 -128
@@ -170,10 +170,10 @@ export class PrivateKernelTailCircuitPublicInputs {
170
170
  throw new Error('Private tail public inputs is not for rollup circuit.');
171
171
  }
172
172
  const constants = new TxConstantData(
173
- this.constants.historicalHeader,
173
+ this.constants.anchorBlockHeader,
174
174
  this.constants.txContext,
175
175
  this.constants.vkTreeRoot,
176
- this.constants.protocolContractTreeRoot,
176
+ this.constants.protocolContractsHash,
177
177
  );
178
178
  return new PrivateToRollupKernelCircuitPublicInputs(
179
179
  constants,
@@ -184,6 +184,12 @@ export class PrivateKernelTailCircuitPublicInputs {
184
184
  );
185
185
  }
186
186
 
187
+ publicInputs(): PrivateToPublicKernelCircuitPublicInputs | PrivateToRollupKernelCircuitPublicInputs {
188
+ return this.forPublic
189
+ ? this.toPrivateToPublicKernelCircuitPublicInputs()
190
+ : this.toPrivateToRollupKernelCircuitPublicInputs();
191
+ }
192
+
187
193
  numberOfPublicCallRequests() {
188
194
  return (
189
195
  this.numberOfNonRevertiblePublicCallRequests() +
@@ -1,6 +1,7 @@
1
1
  import { GeneratorIndex, PRIVATE_TO_PUBLIC_KERNEL_CIRCUIT_PUBLIC_INPUTS_LENGTH } from '@aztec/constants';
2
2
  import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto';
3
3
  import type { Fr } from '@aztec/foundation/fields';
4
+ import { bufferSchemaFor } from '@aztec/foundation/schemas';
4
5
  import { BufferReader, bigintToUInt64BE, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize';
5
6
  import { bufferToHex, hexToBuffer } from '@aztec/foundation/string';
6
7
  import type { FieldsOf } from '@aztec/foundation/types';
@@ -93,4 +94,12 @@ export class PrivateToPublicKernelCircuitPublicInputs {
93
94
  hash() {
94
95
  return poseidon2HashWithSeparator(this.toFields(), GeneratorIndex.PUBLIC_TX_HASH);
95
96
  }
97
+
98
+ toJSON() {
99
+ return this.toBuffer();
100
+ }
101
+
102
+ static get schema() {
103
+ return bufferSchemaFor(PrivateToPublicKernelCircuitPublicInputs);
104
+ }
96
105
  }
@@ -1,9 +1,8 @@
1
1
  import { GeneratorIndex } from '@aztec/constants';
2
- import { Grumpkin, poseidon2Hash, poseidon2HashWithSeparator, sha512ToGrumpkinScalar } from '@aztec/foundation/crypto';
2
+ import { Grumpkin, poseidon2HashWithSeparator, sha512ToGrumpkinScalar } from '@aztec/foundation/crypto';
3
3
  import { Fq, Fr, GrumpkinScalar } from '@aztec/foundation/fields';
4
4
 
5
5
  import { AztecAddress } from '../aztec-address/index.js';
6
- import type { CompleteAddress } from '../contract/complete_address.js';
7
6
  import type { KeyPrefix } from './key_types.js';
8
7
  import { PublicKeys } from './public_keys.js';
9
8
  import { getKeyGenerator } from './utils.js';
@@ -121,27 +120,3 @@ export async function deriveKeys(secretKey: Fr) {
121
120
  publicKeys,
122
121
  };
123
122
  }
124
-
125
- // Returns shared tagging secret computed with Diffie-Hellman key exchange.
126
- async function computeTaggingSecretPoint(knownAddress: CompleteAddress, ivsk: Fq, externalAddress: AztecAddress) {
127
- const knownPreaddress = await computePreaddress(await knownAddress.publicKeys.hash(), knownAddress.partialAddress);
128
- // TODO: #8970 - Computation of address point from x coordinate might fail
129
- const externalAddressPoint = await externalAddress.toAddressPoint();
130
- const curve = new Grumpkin();
131
- // Given A (known complete address) -> B (external address) and h == preaddress
132
- // Compute shared secret as S = (h_A + ivsk_A) * Addr_Point_B
133
-
134
- // Beware! h_a + ivsk_a (also known as the address secret) can lead to an address point with a negative y-coordinate, since there's two possible candidates
135
- // computeAddressSecret takes care of selecting the one that leads to a positive y-coordinate, which is the only valid address point
136
- return curve.mul(externalAddressPoint, await computeAddressSecret(knownPreaddress, ivsk));
137
- }
138
-
139
- export async function computeAppTaggingSecret(
140
- knownAddress: CompleteAddress,
141
- ivsk: Fq,
142
- externalAddress: AztecAddress,
143
- app: AztecAddress,
144
- ) {
145
- const taggingSecretPoint = await computeTaggingSecretPoint(knownAddress, ivsk, externalAddress);
146
- return poseidon2Hash([taggingSecretPoint.x, taggingSecretPoint.y, app]);
147
- }
@@ -133,12 +133,11 @@ export class ContractClassLog {
133
133
  }
134
134
 
135
135
  toBlobFields(): Fr[] {
136
- return [new Fr(this.emittedLength), this.contractAddress.toField()].concat(this.getEmittedFields());
136
+ return [this.contractAddress.toField()].concat(this.getEmittedFields());
137
137
  }
138
138
 
139
- static fromBlobFields(fields: Fr[] | FieldReader) {
139
+ static fromBlobFields(emittedLength: number, fields: Fr[] | FieldReader) {
140
140
  const reader = FieldReader.asReader(fields);
141
- const emittedLength = reader.readU32();
142
141
  const contractAddress = reader.readObject(AztecAddress);
143
142
  const emittedFields = reader.readFieldArray(emittedLength);
144
143
  return new ContractClassLog(
@@ -0,0 +1,32 @@
1
+ import type { Fr } from '@aztec/foundation/fields';
2
+ import { type LogLevel, LogLevels } from '@aztec/foundation/log';
3
+ import { type ZodFor, schemas } from '@aztec/foundation/schemas';
4
+
5
+ import { z } from 'zod';
6
+
7
+ import { AztecAddress } from '../aztec-address/index.js';
8
+
9
+ /*
10
+ * Represents a debug log emitted by public bytecode.
11
+ */
12
+ export class DebugLog {
13
+ constructor(
14
+ public contractAddress: AztecAddress,
15
+ public level: LogLevel,
16
+ public message: string,
17
+ public fields: Fr[],
18
+ ) {}
19
+
20
+ static get schema(): ZodFor<DebugLog> {
21
+ return z
22
+ .object({
23
+ contractAddress: AztecAddress.schema,
24
+ level: z.enum(LogLevels),
25
+ message: z.string(),
26
+ fields: z.array(schemas.Fr),
27
+ })
28
+ .transform(
29
+ ({ contractAddress, level, message, fields }) => new DebugLog(contractAddress, level, message, fields),
30
+ );
31
+ }
32
+ }
@@ -0,0 +1,78 @@
1
+ import { Grumpkin, poseidon2Hash } from '@aztec/foundation/crypto';
2
+ import { type Fq, Fr, type Point } from '@aztec/foundation/fields';
3
+
4
+ import { z } from 'zod';
5
+
6
+ import type { AztecAddress } from '../aztec-address/index.js';
7
+ import type { CompleteAddress } from '../contract/complete_address.js';
8
+ import { computeAddressSecret, computePreaddress } from '../keys/derivation.js';
9
+
10
+ /**
11
+ * Directional application tagging secret used for log tagging.
12
+ *
13
+ * "Directional" because the derived secret is bound to the recipient
14
+ * address: A→B differs from B→A even with the same participants and app.
15
+ *
16
+ * Note: It's a bit unfortunate that this type resides in `stdlib` as the rest of the tagging functionality resides
17
+ * in `pxe/src/tagging`. We need to use this type in `PreTag` that in turn is used by other types
18
+ * in stdlib hence there doesn't seem to be a good way around this.
19
+ */
20
+ export class DirectionalAppTaggingSecret {
21
+ private constructor(public readonly value: Fr) {}
22
+
23
+ /**
24
+ * Derives shared tagging secret and from that, the app address and recipient derives the directional app tagging
25
+ * secret.
26
+ *
27
+ * @param localAddress - The complete address of entity A in the shared tagging secret derivation scheme
28
+ * @param localIvsk - The incoming viewing secret key of entity A
29
+ * @param externalAddress - The address of entity B in the shared tagging secret derivation scheme
30
+ * @param app - Contract address to silo the secret to
31
+ * @param recipient - Recipient of the log. Defines the "direction of the secret".
32
+ * @returns The secret that can be used along with an index to compute a tag to be included in a log.
33
+ */
34
+ static async compute(
35
+ localAddress: CompleteAddress,
36
+ localIvsk: Fq,
37
+ externalAddress: AztecAddress,
38
+ app: AztecAddress,
39
+ recipient: AztecAddress,
40
+ ): Promise<DirectionalAppTaggingSecret> {
41
+ const taggingSecretPoint = await computeSharedTaggingSecret(localAddress, localIvsk, externalAddress);
42
+ const appTaggingSecret = await poseidon2Hash([taggingSecretPoint.x, taggingSecretPoint.y, app]);
43
+ const directionalAppTaggingSecret = await poseidon2Hash([appTaggingSecret, recipient]);
44
+
45
+ return new DirectionalAppTaggingSecret(directionalAppTaggingSecret);
46
+ }
47
+
48
+ toString(): string {
49
+ return this.value.toString();
50
+ }
51
+
52
+ static fromString(str: string): DirectionalAppTaggingSecret {
53
+ return new DirectionalAppTaggingSecret(Fr.fromString(str));
54
+ }
55
+ }
56
+
57
+ // Returns shared tagging secret computed with Diffie-Hellman key exchange.
58
+ async function computeSharedTaggingSecret(
59
+ localAddress: CompleteAddress,
60
+ localIvsk: Fq,
61
+ externalAddress: AztecAddress,
62
+ ): Promise<Point> {
63
+ const knownPreaddress = await computePreaddress(await localAddress.publicKeys.hash(), localAddress.partialAddress);
64
+ // TODO: #8970 - Computation of address point from x coordinate might fail
65
+ const externalAddressPoint = await externalAddress.toAddressPoint();
66
+ const curve = new Grumpkin();
67
+ // Given A (local complete address) -> B (external address) and h == preaddress
68
+ // Compute shared secret as S = (h_A + local_ivsk_A) * Addr_Point_B
69
+
70
+ // Beware! h_a + local_ivsk_a (also known as the address secret) can lead to an address point with a negative
71
+ // y-coordinate, since there's two possible candidates computeAddressSecret takes care of selecting the one that
72
+ // leads to a positive y-coordinate, which is the only valid address point
73
+ return curve.mul(externalAddressPoint, await computeAddressSecret(knownPreaddress, localIvsk));
74
+ }
75
+
76
+ export const DirectionalAppTaggingSecretSchema = z.object({
77
+ value: Fr.schema,
78
+ });
package/src/logs/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './log_with_tx_data.js';
2
- export * from './indexed_tagging_secret.js';
2
+ export * from './directional_app_tagging_secret.js';
3
+ export * from './pre_tag.js';
3
4
  export * from './contract_class_log.js';
4
5
  export * from './public_log.js';
5
6
  export * from './private_log.js';
@@ -11,3 +12,4 @@ export * from './extended_contract_class_log.js';
11
12
  export * from './shared_secret_derivation.js';
12
13
  export * from './tx_scoped_l2_log.js';
13
14
  export * from './message_context.js';
15
+ export * from './debug_log.js';
@@ -1,44 +1,34 @@
1
- import { MAX_NOTE_HASHES_PER_TX, PRIVATE_LOG_CIPHERTEXT_LEN, PUBLIC_LOG_PLAINTEXT_LEN } from '@aztec/constants';
1
+ import { MAX_NOTE_HASHES_PER_TX, PRIVATE_LOG_CIPHERTEXT_LEN } from '@aztec/constants';
2
2
  import { Fr } from '@aztec/foundation/fields';
3
3
  import { TxHash } from '@aztec/stdlib/tx';
4
4
 
5
- // TypeScript representation of the Noir aztec::oracle::message_processing::LogWithTxData<N> struct. This is used as a
6
- // response for PXE's custom getPublicLogByTag and getPrivateLogByTag oracles.
7
- class LogWithTxData<N extends number> {
5
+ // This is used as a response for PXE's custom getPublicLogByTag oracle.
6
+ export class PublicLogWithTxData {
7
+ constructor(
8
+ public logPayload: Fr[],
9
+ public txHash: TxHash,
10
+ public uniqueNoteHashesInTx: Fr[],
11
+ public firstNullifierInTx: Fr,
12
+ ) {}
13
+ }
14
+
15
+ // This is used as a response for PXE's custom getPrivateLogByTag oracle.
16
+ export class PrivateLogWithTxData {
8
17
  constructor(
9
18
  public logPayload: Fr[],
10
19
  public txHash: TxHash,
11
20
  public uniqueNoteHashesInTx: Fr[],
12
21
  public firstNullifierInTx: Fr,
13
- private maxLogContentLength: N,
14
22
  ) {}
15
23
 
16
24
  toNoirSerialization(): (Fr | Fr[])[] {
17
25
  return [
18
- ...toBoundedVecSerialization(this.logPayload, this.maxLogContentLength),
26
+ ...toBoundedVecSerialization(this.logPayload, PRIVATE_LOG_CIPHERTEXT_LEN),
19
27
  this.txHash.hash,
20
28
  ...toBoundedVecSerialization(this.uniqueNoteHashesInTx, MAX_NOTE_HASHES_PER_TX),
21
29
  this.firstNullifierInTx,
22
30
  ];
23
31
  }
24
- }
25
-
26
- // This is used as a response for PXE's custom getPublicLogByTag oracle.
27
- export class PublicLogWithTxData extends LogWithTxData<typeof PUBLIC_LOG_PLAINTEXT_LEN> {
28
- constructor(logContent: Fr[], txHash: TxHash, uniqueNoteHashesInTx: Fr[], firstNullifierInTx: Fr) {
29
- super(logContent, txHash, uniqueNoteHashesInTx, firstNullifierInTx, PUBLIC_LOG_PLAINTEXT_LEN);
30
- }
31
-
32
- static noirSerializationOfEmpty(): (Fr | Fr[])[] {
33
- return new PublicLogWithTxData([], TxHash.zero(), [], new Fr(0)).toNoirSerialization();
34
- }
35
- }
36
-
37
- // This is used as a response for PXE's custom getPrivateLogByTag oracle.
38
- export class PrivateLogWithTxData extends LogWithTxData<typeof PRIVATE_LOG_CIPHERTEXT_LEN> {
39
- constructor(logContent: Fr[], txHash: TxHash, uniqueNoteHashesInTx: Fr[], firstNullifierInTx: Fr) {
40
- super(logContent, txHash, uniqueNoteHashesInTx, firstNullifierInTx, PRIVATE_LOG_CIPHERTEXT_LEN);
41
- }
42
32
 
43
33
  static noirSerializationOfEmpty(): (Fr | Fr[])[] {
44
34
  return new PrivateLogWithTxData([], TxHash.zero(), [], new Fr(0)).toNoirSerialization();
@@ -0,0 +1,25 @@
1
+ import { schemas } from '@aztec/foundation/schemas';
2
+
3
+ import { z } from 'zod';
4
+
5
+ import {
6
+ type DirectionalAppTaggingSecret,
7
+ DirectionalAppTaggingSecretSchema,
8
+ } from './directional_app_tagging_secret.js';
9
+
10
+ /**
11
+ * Represents a preimage of a private log tag (see `Tag` in `pxe/src/tagging`).
12
+ *
13
+ * Note: It's a bit unfortunate that this type resides in `stdlib` as the rest of the tagging functionality resides
14
+ * in `pxe/src/tagging`. But this type is used by other types in stdlib hence there doesn't seem to be a good way
15
+ * around this.
16
+ */
17
+ export type PreTag = {
18
+ secret: DirectionalAppTaggingSecret;
19
+ index: number;
20
+ };
21
+
22
+ export const PreTagSchema = z.object({
23
+ secret: DirectionalAppTaggingSecretSchema,
24
+ index: schemas.Integer,
25
+ });
@@ -1,28 +1,113 @@
1
- import { PUBLIC_LOG_LENGTH, PUBLIC_LOG_SIZE_IN_FIELDS } from '@aztec/constants';
2
- import { type FieldsOf, makeTuple } from '@aztec/foundation/array';
3
- import { padArrayEnd } from '@aztec/foundation/collection';
1
+ import { FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH, PUBLIC_LOG_HEADER_LENGTH } from '@aztec/constants';
2
+ import type { FieldsOf } from '@aztec/foundation/array';
4
3
  import { Fr } from '@aztec/foundation/fields';
5
4
  import { type ZodFor, schemas } from '@aztec/foundation/schemas';
6
- import {
7
- BufferReader,
8
- FieldReader,
9
- type Tuple,
10
- serializeToBuffer,
11
- serializeToFields,
12
- } from '@aztec/foundation/serialize';
5
+ import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/serialize';
13
6
 
14
7
  import { inspect } from 'util';
15
8
  import { z } from 'zod';
16
9
 
17
10
  import { AztecAddress } from '../aztec-address/index.js';
18
11
 
19
- export class PublicLog {
20
- static SIZE_IN_BYTES = Fr.SIZE_IN_BYTES * PUBLIC_LOG_LENGTH;
12
+ function totalSizeInFields(logs: PublicLog[]) {
13
+ return logs.reduce((acc, log) => acc + log.sizeInFields(), 0);
14
+ }
15
+
16
+ // This class represents logs in the same format as noir does, with a bounded maximum length.
17
+ export class FlatPublicLogs {
18
+ // We don't use tuple here because FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH is too large
19
+ constructor(
20
+ public length: number,
21
+ public payload: Fr[],
22
+ ) {
23
+ if (payload.length !== FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH) {
24
+ throw new Error('Invalid payload given to FlatPublicLogs');
25
+ }
26
+ if (length > payload.length) {
27
+ throw new Error('Invalid length given to FlatPublicLogs');
28
+ }
29
+ }
30
+
31
+ private static fromUnpaddedPayload(payload: Fr[]) {
32
+ const length = payload.length;
33
+ return new FlatPublicLogs(length, [...payload, ...Array(FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH - length).fill(Fr.ZERO)]);
34
+ }
35
+
36
+ // In blobs, the actual nonempty length of the logs is encoded with the prefix, and then we have the non-padded payload.
37
+ static fromBlobFields(length: number, fields: Fr[] | FieldReader) {
38
+ const reader = FieldReader.asReader(fields);
39
+ const payload = reader.readFieldArray(length);
40
+ return this.fromUnpaddedPayload(payload);
41
+ }
42
+
43
+ toBlobFields() {
44
+ return this.payload.slice(0, this.length);
45
+ }
46
+
47
+ static fromLogs(logs: PublicLog[]) {
48
+ return this.fromUnpaddedPayload(logs.flatMap(log => log.toFields()));
49
+ }
50
+
51
+ toLogs() {
52
+ const reader = FieldReader.asReader(this.payload);
53
+ const logs = [];
54
+ while (totalSizeInFields(logs) < this.length) {
55
+ logs.push(PublicLog.fromFields(reader));
56
+ }
57
+ if (totalSizeInFields(logs) !== this.length) {
58
+ throw new Error('Wrong length in FlatPublicLogs');
59
+ }
60
+ return logs;
61
+ }
62
+
63
+ static get schema(): ZodFor<FlatPublicLogs> {
64
+ return z
65
+ .object({
66
+ length: z.number(),
67
+ payload: z.array(schemas.Fr).min(FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH).max(FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH),
68
+ })
69
+ .transform(({ length, payload }) => new FlatPublicLogs(length, payload));
70
+ }
71
+
72
+ toBuffer(): Buffer {
73
+ return serializeToBuffer(this.length, this.payload.slice(0, this.length));
74
+ }
75
+
76
+ static fromBuffer(buffer: Buffer | BufferReader) {
77
+ const reader = BufferReader.asReader(buffer);
78
+ const length = reader.readNumber();
79
+ return this.fromUnpaddedPayload(reader.readArray(length, Fr));
80
+ }
21
81
 
82
+ // ToFields and fromFields expect the noir style representation, with constant length payload.
83
+ toFields(): Fr[] {
84
+ return [new Fr(this.length), ...this.payload];
85
+ }
86
+
87
+ static fromFields(fields: Fr[] | FieldReader) {
88
+ const reader = FieldReader.asReader(fields);
89
+ // We need to do this because field reader returns tuples, which break the type system on these sizes.
90
+ const length = reader.readU32();
91
+ const payload: Fr[] = [];
92
+ for (let i = 0; i < FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH; ++i) {
93
+ payload.push(reader.readField());
94
+ }
95
+ return new FlatPublicLogs(length, payload);
96
+ }
97
+
98
+ static empty() {
99
+ return new FlatPublicLogs(0, Array(FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH).fill(Fr.ZERO));
100
+ }
101
+
102
+ isEmpty() {
103
+ return this.length === 0;
104
+ }
105
+ }
106
+
107
+ export class PublicLog {
22
108
  constructor(
23
109
  public contractAddress: AztecAddress,
24
- public fields: Tuple<Fr, typeof PUBLIC_LOG_SIZE_IN_FIELDS>,
25
- public emittedLength: number,
110
+ public fields: Fr[],
26
111
  ) {}
27
112
 
28
113
  static from(fields: FieldsOf<PublicLog>) {
@@ -30,104 +115,81 @@ export class PublicLog {
30
115
  }
31
116
 
32
117
  static getFields(fields: FieldsOf<PublicLog>) {
33
- return [fields.contractAddress, fields.fields, fields.emittedLength] as const;
118
+ return [fields.contractAddress, fields.fields] as const;
34
119
  }
35
120
 
36
121
  toFields(): Fr[] {
37
- return serializeToFields(...PublicLog.getFields(this));
122
+ return [new Fr(this.fields.length), this.contractAddress.toField(), ...this.fields];
38
123
  }
39
124
 
40
125
  static fromFields(fields: Fr[] | FieldReader) {
41
126
  const reader = FieldReader.asReader(fields);
42
- return new PublicLog(
43
- reader.readObject(AztecAddress),
44
- reader.readFieldArray(PUBLIC_LOG_SIZE_IN_FIELDS),
45
- reader.readU32(),
46
- );
127
+ const fieldsLength = reader.readU32();
128
+ return new PublicLog(reader.readObject(AztecAddress), reader.readFieldArray(fieldsLength));
47
129
  }
48
130
 
49
- getEmittedFields() {
50
- return this.fields.slice(0, this.emittedLength);
51
- }
52
-
53
- getEmittedFieldsWithoutTag() {
54
- return this.fields.slice(1, this.emittedLength);
131
+ sizeInFields() {
132
+ return this.fields.length + PUBLIC_LOG_HEADER_LENGTH;
55
133
  }
56
134
 
57
- toBlobFields(): Fr[] {
58
- return [new Fr(this.emittedLength), this.contractAddress.toField()].concat(this.getEmittedFields());
135
+ getEmittedFields() {
136
+ return this.fields.slice(0);
59
137
  }
60
138
 
61
- static fromBlobFields(fields: Fr[] | FieldReader) {
62
- const reader = FieldReader.asReader(fields);
63
- const emittedLength = reader.readU32();
64
- const contractAddress = reader.readObject(AztecAddress);
65
- const emittedFields = reader.readFieldArray(emittedLength);
66
- return new PublicLog(
67
- contractAddress,
68
- padArrayEnd(emittedFields, Fr.ZERO, PUBLIC_LOG_SIZE_IN_FIELDS),
69
- emittedLength,
70
- );
139
+ getEmittedFieldsWithoutTag() {
140
+ return this.fields.slice(1);
71
141
  }
72
142
 
73
143
  isEmpty() {
74
- return this.contractAddress.isZero() && this.fields.every(f => f.isZero()) && this.emittedLength === 0;
144
+ return this.contractAddress.isZero() && this.fields.length === 0;
75
145
  }
76
146
 
77
147
  static empty() {
78
- return new PublicLog(AztecAddress.ZERO, makeTuple(PUBLIC_LOG_SIZE_IN_FIELDS, Fr.zero), 0);
148
+ return new PublicLog(AztecAddress.ZERO, []);
79
149
  }
80
150
 
81
151
  toBuffer(): Buffer {
82
- return serializeToBuffer(...PublicLog.getFields(this));
152
+ return serializeToBuffer(this.fields.length, this.contractAddress, this.fields);
83
153
  }
84
154
 
85
155
  static fromBuffer(buffer: Buffer | BufferReader) {
86
156
  const reader = BufferReader.asReader(buffer);
87
- return new PublicLog(
88
- reader.readObject(AztecAddress),
89
- reader.readArray(PUBLIC_LOG_SIZE_IN_FIELDS, Fr),
90
- reader.readNumber(),
91
- );
157
+ const fieldsLength = reader.readNumber();
158
+ return new PublicLog(reader.readObject(AztecAddress), reader.readArray(fieldsLength, Fr));
92
159
  }
93
160
 
94
161
  static async random() {
95
162
  return new PublicLog(
96
163
  await AztecAddress.random(),
97
- makeTuple(PUBLIC_LOG_SIZE_IN_FIELDS, Fr.random),
98
- PUBLIC_LOG_SIZE_IN_FIELDS,
164
+ Array.from({ length: 10 }, () => Fr.random()),
99
165
  );
100
166
  }
101
167
 
102
168
  equals(other: this) {
103
169
  return (
170
+ this.fields.length === other.fields.length &&
104
171
  this.contractAddress.equals(other.contractAddress) &&
105
- this.fields.every((field, i) => field.equals(other.fields[i])) &&
106
- this.emittedLength === other.emittedLength
172
+ this.fields.every((field, i) => field.equals(other.fields[i]))
107
173
  );
108
174
  }
109
175
 
110
176
  toHumanReadable(): string {
111
- return `PublicLog: (contractAddress: ${this.contractAddress} fields: ${this.fields}) emittedLength: ${this.emittedLength}`;
177
+ return `PublicLog: (contractAddress: ${this.contractAddress} fields: ${this.fields})`;
112
178
  }
113
179
 
114
180
  static get schema(): ZodFor<PublicLog> {
115
181
  return z
116
182
  .object({
117
183
  contractAddress: AztecAddress.schema,
118
- fields: z.array(schemas.Fr).refine(arr => arr.length === PUBLIC_LOG_SIZE_IN_FIELDS),
119
- emittedLength: z.number(),
184
+ fields: z.array(schemas.Fr),
120
185
  })
121
- .transform(({ contractAddress, fields, emittedLength }) =>
122
- PublicLog.fromFields([contractAddress.toField(), ...fields, new Fr(emittedLength)]),
123
- );
186
+ .transform(({ contractAddress, fields }) => PublicLog.from({ contractAddress, fields }));
124
187
  }
125
188
 
126
189
  [inspect.custom](): string {
127
190
  return `PublicLog {
128
191
  contractAddress: ${inspect(this.contractAddress)},
129
192
  fields: [${this.fields.map(x => inspect(x)).join(', ')}],
130
- emittedLength: ${this.emittedLength},
131
193
  }`;
132
194
  }
133
195
  }
@@ -35,4 +35,9 @@ export class InboxLeaf {
35
35
  const end = start + BigInt(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
36
36
  return [start, end];
37
37
  }
38
+
39
+ /** Returns the L2 block number for a given leaf index */
40
+ static l2BlockFromIndex(index: bigint): number {
41
+ return Number(index / BigInt(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP)) + INITIAL_L2_BLOCK_NUM;
42
+ }
38
43
  }
@@ -1,18 +1,5 @@
1
1
  import { Fr } from '@aztec/foundation/fields';
2
- import {
3
- SiblingPath,
4
- UnbalancedMerkleTreeCalculator,
5
- computeUnbalancedMerkleTreeRoot,
6
- findLeafLevelAndIndex,
7
- getMaxUnbalancedTreeDepth,
8
- } from '@aztec/foundation/trees';
9
-
10
- async function createOutHashTree(messages: Fr[]) {
11
- const messageSubtreeHeight = getMaxUnbalancedTreeDepth(messages.length);
12
- const calculator = UnbalancedMerkleTreeCalculator.create(messageSubtreeHeight);
13
- await calculator.appendLeaves(messages.map(msg => msg.toBuffer()));
14
- return calculator;
15
- }
2
+ import { SiblingPath, UnbalancedMerkleTreeCalculator, computeUnbalancedMerkleTreeRoot } from '@aztec/foundation/trees';
16
3
 
17
4
  export interface MessageRetrieval {
18
5
  getL2ToL1Messages(l2BlockNumber: number): Promise<Fr[][] | undefined>;
@@ -37,10 +24,12 @@ export async function computeL2ToL1MembershipWitness(
37
24
  return computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, message);
38
25
  }
39
26
 
40
- export async function computeL2ToL1MembershipWitnessFromMessagesForAllTxs(
27
+ // TODO: Allow to specify the message to consume by its index or by an offset, in case there are multiple messages with
28
+ // the same value.
29
+ export function computeL2ToL1MembershipWitnessFromMessagesForAllTxs(
41
30
  messagesForAllTxs: Fr[][],
42
31
  message: Fr,
43
- ): Promise<L2ToL1MembershipWitness> {
32
+ ): L2ToL1MembershipWitness {
44
33
  // Find index of message in subtree and index of tx in a block.
45
34
  let messageIndexInTx = -1;
46
35
  const txIndex = messagesForAllTxs.findIndex(messages => {
@@ -54,9 +43,9 @@ export async function computeL2ToL1MembershipWitnessFromMessagesForAllTxs(
54
43
 
55
44
  // Get the txOutHash and the sibling path of the message in the tx subtree.
56
45
  const txMessages = messagesForAllTxs[txIndex];
57
- const txOutHashTree = await createOutHashTree(txMessages);
46
+ const txOutHashTree = UnbalancedMerkleTreeCalculator.create(txMessages.map(msg => msg.toBuffer()));
58
47
  const txOutHash = txOutHashTree.getRoot();
59
- const messagePathInSubtree = await txOutHashTree.getSiblingPath(message);
48
+ const messagePathInSubtree = txOutHashTree.getSiblingPath(message.toBuffer());
60
49
 
61
50
  // Calculate txOutHash for all txs.
62
51
  const txSubtreeRoots = messagesForAllTxs.map((messages, i) => {
@@ -74,21 +63,26 @@ export async function computeL2ToL1MembershipWitnessFromMessagesForAllTxs(
74
63
  });
75
64
 
76
65
  // Construct the top tree.
77
- // The leaves of this tree are the txOutHashes.
78
- // The root of this tree is the out_hash calculated in the circuit.
79
- const topTree = await createOutHashTree(txSubtreeRoots);
66
+ // The leaves of this tree are the `txOutHashes`.
67
+ // The root of this tree should match the `out_hash` calculated in the circuits. Zero hashes are compressed to reduce
68
+ // cost if the non-zero leaves result in a shorter path.
69
+ const valueToCompress = Buffer.alloc(32);
70
+ const topTree = UnbalancedMerkleTreeCalculator.create(
71
+ txSubtreeRoots.map(root => root.toBuffer()),
72
+ valueToCompress,
73
+ );
80
74
  const root = Fr.fromBuffer(topTree.getRoot());
81
75
 
82
76
  // Compute the combined sibling path by appending the tx subtree path to the top tree path.
83
- const txPathInTopTree = await topTree.getSiblingPath(txOutHash);
77
+ const txPathInTopTree = topTree.getSiblingPath(txOutHash);
84
78
  const combinedPath = messagePathInSubtree.toBufferArray().concat(txPathInTopTree.toBufferArray());
85
79
 
86
80
  // Compute the combined index.
87
81
  // It is the index of the message in the balanced tree at its current height.
88
- const txLeafPosition = findLeafLevelAndIndex(messagesForAllTxs.length, txIndex);
89
- const messageLeafPosition = findLeafLevelAndIndex(txMessages.length, messageIndexInTx);
90
- const numLeavesInLeftSubtrees = txLeafPosition.indexAtLevel * (1 << messageLeafPosition.level);
91
- const combinedIndex = numLeavesInLeftSubtrees + messageLeafPosition.indexAtLevel;
82
+ const txLeafIndexAtLevel = topTree.getLeafLocation(txIndex).index;
83
+ const messageLeafPosition = txOutHashTree.getLeafLocation(messageIndexInTx);
84
+ const numLeavesInLeftSubtrees = txLeafIndexAtLevel * (1 << messageLeafPosition.level);
85
+ const combinedIndex = numLeavesInLeftSubtrees + messageLeafPosition.index;
92
86
 
93
87
  return {
94
88
  root,