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

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
@@ -0,0 +1,70 @@
1
+ import { GeneratorIndex, MAX_PROTOCOL_CONTRACTS } from '@aztec/constants';
2
+ import { makeTuple } from '@aztec/foundation/array';
3
+ import { arraySerializedSizeOfNonEmpty } from '@aztec/foundation/collection';
4
+ import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto';
5
+ import { Fr } from '@aztec/foundation/fields';
6
+ import {
7
+ BufferReader,
8
+ FieldReader,
9
+ type Tuple,
10
+ assertLength,
11
+ serializeToBuffer,
12
+ serializeToFields,
13
+ } from '@aztec/foundation/serialize';
14
+ import type { FieldsOf } from '@aztec/foundation/types';
15
+
16
+ import { z } from 'zod';
17
+
18
+ import { AztecAddress } from '../aztec-address/index.js';
19
+
20
+ export class ProtocolContracts {
21
+ constructor(public derivedAddresses: Tuple<AztecAddress, typeof MAX_PROTOCOL_CONTRACTS>) {}
22
+
23
+ static from(fields: FieldsOf<ProtocolContracts>) {
24
+ return new ProtocolContracts(...ProtocolContracts.getFields(fields));
25
+ }
26
+
27
+ static getFields(fields: FieldsOf<ProtocolContracts>) {
28
+ return [fields.derivedAddresses] as const;
29
+ }
30
+
31
+ static fromFields(fields: Fr[] | FieldReader): ProtocolContracts {
32
+ const reader = FieldReader.asReader(fields);
33
+ return new ProtocolContracts(reader.readArray(MAX_PROTOCOL_CONTRACTS, AztecAddress));
34
+ }
35
+
36
+ toFields(): Fr[] {
37
+ return serializeToFields(...ProtocolContracts.getFields(this));
38
+ }
39
+
40
+ static fromBuffer(buffer: Buffer | BufferReader): ProtocolContracts {
41
+ const reader = BufferReader.asReader(buffer);
42
+ return new ProtocolContracts(reader.readArray(MAX_PROTOCOL_CONTRACTS, AztecAddress));
43
+ }
44
+
45
+ toBuffer() {
46
+ return serializeToBuffer(...ProtocolContracts.getFields(this));
47
+ }
48
+
49
+ static empty() {
50
+ return new ProtocolContracts(makeTuple(MAX_PROTOCOL_CONTRACTS, () => AztecAddress.zero()));
51
+ }
52
+
53
+ getSize() {
54
+ return arraySerializedSizeOfNonEmpty(this.derivedAddresses);
55
+ }
56
+
57
+ hash() {
58
+ return poseidon2HashWithSeparator(this.derivedAddresses, GeneratorIndex.PROTOCOL_CONTRACTS);
59
+ }
60
+
61
+ static get schema() {
62
+ return z
63
+ .object({
64
+ derivedAddresses: AztecAddress.schema.array().min(MAX_PROTOCOL_CONTRACTS).max(MAX_PROTOCOL_CONTRACTS),
65
+ })
66
+ .transform(
67
+ ({ derivedAddresses }) => new ProtocolContracts(assertLength(derivedAddresses, MAX_PROTOCOL_CONTRACTS)),
68
+ );
69
+ }
70
+ }
@@ -78,6 +78,10 @@ export class StateReference {
78
78
  return new StateReference(AppendOnlyTreeSnapshot.empty(), PartialStateReference.empty());
79
79
  }
80
80
 
81
+ static random(): StateReference {
82
+ return new StateReference(AppendOnlyTreeSnapshot.random(), PartialStateReference.random());
83
+ }
84
+
81
85
  toViem(): ViemStateReference {
82
86
  return {
83
87
  l1ToL2MessageTree: this.l1ToL2MessageTree.toViem(),
@@ -133,6 +137,6 @@ export class StateReference {
133
137
  }
134
138
 
135
139
  public equals(other: this): boolean {
136
- return this.l1ToL2MessageTree.root.equals(other.l1ToL2MessageTree.root) && this.partial.equals(other.partial);
140
+ return this.l1ToL2MessageTree.equals(other.l1ToL2MessageTree) && this.partial.equals(other.partial);
137
141
  }
138
142
  }
package/src/tx/tx.ts CHANGED
@@ -38,7 +38,6 @@ export class Tx extends Gossipable {
38
38
  public readonly data: PrivateKernelTailCircuitPublicInputs,
39
39
  /**
40
40
  * Proof from the private kernel circuit.
41
- * TODO(#7368): This client IVC object currently contains various VKs that will eventually be more like static data.
42
41
  */
43
42
  public readonly clientIvcProof: ClientIvcProof,
44
43
  /**
@@ -162,6 +161,16 @@ export class Tx extends Gossipable {
162
161
  );
163
162
  }
164
163
 
164
+ /**
165
+ * Validates that the tx hash matches the computed hash from the tx data.
166
+ * This should be called when deserializing a tx from an untrusted source.
167
+ * @returns true if the hash is valid, false otherwise
168
+ */
169
+ async validateTxHash(): Promise<boolean> {
170
+ const expectedHash = await Tx.computeTxHash(this);
171
+ return this.txHash.equals(expectedHash);
172
+ }
173
+
165
174
  /**
166
175
  * Gets public logs emitted by this tx.
167
176
  * @param logsSource - An instance of `L2LogsSource` which can be used to obtain the logs.
@@ -207,16 +216,6 @@ export class Tx extends Gossipable {
207
216
  return this.txHash;
208
217
  }
209
218
 
210
- /**
211
- * Allows setting the hash of the Tx.
212
- * Use this when you want to skip computing it from the original data.
213
- * Don't set a Tx hash received from an untrusted source.
214
- * @param hash - The hash to set.
215
- */
216
- setTxHash(_hash: TxHash) {
217
- return this;
218
- }
219
-
220
219
  getCalldataMap(): Map<string, Fr[]> {
221
220
  if (!this.calldataMap) {
222
221
  const calldataMap = new Map();
@@ -238,7 +237,7 @@ export class Tx extends Gossipable {
238
237
  classPublishedCount: this.data.getNonEmptyContractClassLogsHashes().length,
239
238
  contractClassLogSize: this.data.getEmittedContractClassLogsLength(),
240
239
 
241
- proofSize: this.clientIvcProof.clientIvcProofBuffer.length,
240
+ proofSize: this.clientIvcProof.fields.length,
242
241
  size: this.toBuffer().length,
243
242
 
244
243
  feePaymentMethod:
@@ -250,7 +249,7 @@ export class Tx extends Gossipable {
250
249
  getSize() {
251
250
  return (
252
251
  this.data.getSize() +
253
- this.clientIvcProof.clientIvcProofBuffer.length +
252
+ this.clientIvcProof.fields.length * Fr.SIZE_IN_BYTES +
254
253
  arraySerializedSizeOfNonEmpty(this.contractClassLogFields) +
255
254
  this.publicFunctionCalldata.reduce((accum, cd) => accum + cd.getSize(), 0)
256
255
  );
@@ -7,29 +7,16 @@ import { BlockHeader } from './block_header.js';
7
7
  import { TxContext } from './tx_context.js';
8
8
 
9
9
  /**
10
- * Data that is constant/not modified by neither of the kernels.
10
+ * Version of `PrivateTxConstantData` exposed by the tail circuits
11
+ * It compresses the protocol contracts list to a hash to minimize the number of public inputs.
12
+ * Refer to `PrivateTxConstantData` for more details.
11
13
  */
12
14
  export class TxConstantData {
13
15
  constructor(
14
- /** Header of a block whose state is used during execution (not the block the transaction is included in). */
15
- public historicalHeader: BlockHeader,
16
- /**
17
- * Context of the transaction.
18
- *
19
- * Note: `chainId` and `version` in txContext are not redundant to the values in
20
- * self.historical_header.global_variables because they can be different in case of a protocol upgrade. In such
21
- * a situation we could be using header from a block before the upgrade took place but be using the updated
22
- * protocol to execute and prove the transaction.
23
- */
16
+ public anchorBlockHeader: BlockHeader,
24
17
  public txContext: TxContext,
25
- /**
26
- * Root of the vk tree for the protocol circuits.
27
- */
28
18
  public vkTreeRoot: Fr,
29
- /**
30
- * Root of the tree for the protocol contracts.
31
- */
32
- public protocolContractTreeRoot: Fr,
19
+ public protocolContractsHash: Fr,
33
20
  ) {}
34
21
 
35
22
  static from(fields: FieldsOf<TxConstantData>) {
@@ -37,7 +24,7 @@ export class TxConstantData {
37
24
  }
38
25
 
39
26
  static getFields(fields: FieldsOf<TxConstantData>) {
40
- return [fields.historicalHeader, fields.txContext, fields.vkTreeRoot, fields.protocolContractTreeRoot] as const;
27
+ return [fields.anchorBlockHeader, fields.txContext, fields.vkTreeRoot, fields.protocolContractsHash] as const;
41
28
  }
42
29
 
43
30
  static fromFields(fields: Fr[] | FieldReader): TxConstantData {
@@ -80,10 +67,10 @@ export class TxConstantData {
80
67
 
81
68
  getSize() {
82
69
  return (
83
- this.historicalHeader.getSize() +
70
+ this.anchorBlockHeader.getSize() +
84
71
  this.txContext.getSize() +
85
72
  this.vkTreeRoot.size +
86
- this.protocolContractTreeRoot.size
73
+ this.protocolContractsHash.size
87
74
  );
88
75
  }
89
76
 
@@ -1,22 +1,13 @@
1
+ import { decodeTxStartMarker, encodeTxStartMarker, isValidTxStartMarker } from '@aztec/blob-lib/encoding';
1
2
  import {
2
- CONTRACT_CLASS_LOGS_PREFIX,
3
- L2_L1_MSGS_PREFIX,
4
3
  MAX_CONTRACT_CLASS_LOGS_PER_TX,
5
4
  MAX_L2_TO_L1_MSGS_PER_TX,
6
5
  MAX_NOTE_HASHES_PER_TX,
7
6
  MAX_NULLIFIERS_PER_TX,
8
7
  MAX_PRIVATE_LOGS_PER_TX,
9
8
  MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
10
- NOTES_PREFIX,
11
- NULLIFIERS_PREFIX,
12
- PRIVATE_LOGS_PREFIX,
13
- PUBLIC_DATA_UPDATE_REQUESTS_PREFIX,
14
- PUBLIC_LOGS_PREFIX,
15
- REVERT_CODE_PREFIX,
16
- TX_FEE_PREFIX,
17
9
  } from '@aztec/constants';
18
10
  import { type FieldsOf, makeTuple, makeTupleAsync } from '@aztec/foundation/array';
19
- import { toBufferBE } from '@aztec/foundation/bigint-buffer';
20
11
  import { Fr } from '@aztec/foundation/fields';
21
12
  import { type ZodFor, schemas } from '@aztec/foundation/schemas';
22
13
  import {
@@ -35,16 +26,9 @@ import { PublicDataWrite } from '../avm/public_data_write.js';
35
26
  import { RevertCode } from '../avm/revert_code.js';
36
27
  import { ContractClassLog } from '../logs/contract_class_log.js';
37
28
  import { PrivateLog } from '../logs/private_log.js';
38
- import { PublicLog } from '../logs/public_log.js';
29
+ import { FlatPublicLogs, PublicLog } from '../logs/public_log.js';
39
30
  import { TxHash } from './tx_hash.js';
40
31
 
41
- // This will appear as 0x74785f7374617274 in logs
42
- export const TX_START_PREFIX = 8392562855083340404n;
43
- // These are helper constants to decode tx effects from blob encoded fields
44
- export const TX_START_PREFIX_BYTES_LENGTH = TX_START_PREFIX.toString(16).length / 2;
45
- // 7 bytes for: | 0 | txlen[0] | txlen[1] | 0 | REVERT_CODE_PREFIX | 0 | revertCode |
46
- export const TX_EFFECT_PREFIX_BYTE_LENGTH = TX_START_PREFIX_BYTES_LENGTH + 7;
47
-
48
32
  export class TxEffect {
49
33
  constructor(
50
34
  /**
@@ -149,7 +133,7 @@ export class TxEffect {
149
133
  serializeArrayOfBufferableToVector(this.l2ToL1Msgs, 1),
150
134
  serializeArrayOfBufferableToVector(this.publicDataWrites, 1),
151
135
  serializeArrayOfBufferableToVector(this.privateLogs, 1),
152
- serializeArrayOfBufferableToVector(this.publicLogs, 1),
136
+ serializeArrayOfBufferableToVector(this.publicLogs, 4),
153
137
  serializeArrayOfBufferableToVector(this.contractClassLogs, 1),
154
138
  ]);
155
139
  }
@@ -198,7 +182,7 @@ export class TxEffect {
198
182
  reader.readVectorUint8Prefix(Fr),
199
183
  reader.readVectorUint8Prefix(PublicDataWrite),
200
184
  reader.readVectorUint8Prefix(PrivateLog),
201
- reader.readVectorUint8Prefix(PublicLog),
185
+ reader.readVector(PublicLog),
202
186
  reader.readVectorUint8Prefix(ContractClassLog),
203
187
  );
204
188
  }
@@ -244,7 +228,7 @@ export class TxEffect {
244
228
  PublicDataWrite.random,
245
229
  ),
246
230
  makeTuple(MAX_PRIVATE_LOGS_PER_TX, () => PrivateLog.random()),
247
- await makeTupleAsync(numPublicCallsPerTx * numPublicLogsPerCall, async () => await PublicLog.random()),
231
+ await Promise.all(new Array(numPublicCallsPerTx * numPublicLogsPerCall).fill(null).map(() => PublicLog.random())),
248
232
  await makeTupleAsync(MAX_CONTRACT_CLASS_LOGS_PER_TX, ContractClassLog.random),
249
233
  );
250
234
  }
@@ -253,223 +237,90 @@ export class TxEffect {
253
237
  return new TxEffect(RevertCode.OK, TxHash.zero(), Fr.ZERO, [], [], [], [], [], [], []);
254
238
  }
255
239
 
256
- isEmpty(): boolean {
257
- return this.nullifiers.length === 0;
258
- }
259
-
260
240
  /** Returns a hex representation of the TxEffect object. */
261
241
  toString() {
262
242
  return bufferToHex(this.toBuffer());
263
243
  }
264
244
 
265
245
  /**
266
- * Returns the prefix as used in a blob.
267
- * Used to prefix a 'block' of tx effects with its type and length.
268
- */
269
- private toPrefix(type: number, length: number): Fr {
270
- const buf = Buffer.alloc(4);
271
- buf.writeUint8(type);
272
- buf.writeUInt16BE(length, 2);
273
- return new Fr(buf);
274
- }
275
-
276
- /**
277
- * Decodes the prefix as used in a blob to tx effect type and length.
278
- */
279
- static fromPrefix(prefix: Fr) {
280
- const buf = prefix.toBuffer().subarray(-4);
281
- return { type: buf[0], length: new Fr(buf.subarray(-2)).toNumber() };
282
- }
283
-
284
- /**
285
- * Encodes the first field of a tx effect as used in a blob:
286
- * TX_START_PREFIX | 0 | txlen[0] txlen[1] | 0 | REVERT_CODE_PREFIX | 0 | revert_code
287
- */
288
- private encodeFirstField(length: number, revertCode: RevertCode) {
289
- const lengthBuf = Buffer.alloc(2);
290
- lengthBuf.writeUInt16BE(length, 0);
291
- return new Fr(
292
- Buffer.concat([
293
- toBufferBE(TX_START_PREFIX, TX_START_PREFIX_BYTES_LENGTH),
294
- Buffer.alloc(1),
295
- lengthBuf,
296
- Buffer.alloc(1),
297
- Buffer.from([REVERT_CODE_PREFIX]),
298
- Buffer.alloc(1),
299
- revertCode.toBuffer(),
300
- ]),
301
- );
302
- }
303
-
304
- /**
305
- * Decodes the first field of a tx effect as used in a blob:
306
- * TX_START_PREFIX | 0 | txlen[0] txlen[1] | 0 | REVERT_CODE_PREFIX | 0 | revert_code
307
- * Assumes that isFirstField has been called already.
308
- */
309
- static decodeFirstField(field: Fr) {
310
- const buf = field.toBuffer().subarray(-TX_EFFECT_PREFIX_BYTE_LENGTH);
311
- return {
312
- length: new Fr(buf.subarray(TX_START_PREFIX_BYTES_LENGTH + 1, TX_START_PREFIX_BYTES_LENGTH + 3)).toNumber(),
313
- revertCode: buf[buf.length - 1],
314
- };
315
- }
316
-
317
- /**
318
- * Determines whether a field is the first field of a tx effect
319
- */
320
- static isFirstField(field: Fr) {
321
- const buf = field.toBuffer();
322
- if (
323
- !buf
324
- .subarray(0, field.size - TX_EFFECT_PREFIX_BYTE_LENGTH)
325
- .equals(Buffer.alloc(field.size - TX_EFFECT_PREFIX_BYTE_LENGTH))
326
- ) {
327
- return false;
328
- }
329
- const sliced = buf.subarray(-TX_EFFECT_PREFIX_BYTE_LENGTH);
330
- if (
331
- // Checking we start with the correct prefix...
332
- !new Fr(sliced.subarray(0, TX_START_PREFIX_BYTES_LENGTH)).equals(new Fr(TX_START_PREFIX)) ||
333
- // ...and include the revert code prefix..
334
- sliced[sliced.length - 3] !== REVERT_CODE_PREFIX ||
335
- // ...and the following revert code is valid.
336
- sliced[sliced.length - 1] > 4
337
- ) {
338
- return false;
339
- }
340
- return true;
341
- }
342
-
343
- /**
344
- * Returns a flat packed array of prefixed fields of all tx effects, used for blobs.
246
+ * Returns a flat packed array of fields of all tx effects, to be appended to blobs.
247
+ * Must match the implementation in noir-protocol-circuits/crates/rollup-lib/src/tx_base/components/tx_blob_data.nr
345
248
  */
346
249
  toBlobFields(): Fr[] {
347
- if (this.isEmpty()) {
348
- return [];
349
- }
350
250
  const flattened: Fr[] = [];
351
- // We reassign the first field when we know the length of all effects - see below
251
+
252
+ // We reassign the first field at the end when we know the length of all effects to create the tx start marker.
352
253
  flattened.push(Fr.ZERO);
353
254
 
354
255
  flattened.push(this.txHash.hash);
355
- // TODO: how long should tx fee be? For now, not using toPrefix()
356
- flattened.push(
357
- new Fr(
358
- Buffer.concat([Buffer.from([TX_FEE_PREFIX]), Buffer.alloc(1), this.transactionFee.toBuffer().subarray(3)]),
359
- ),
360
- );
361
- if (this.noteHashes.length) {
362
- flattened.push(this.toPrefix(NOTES_PREFIX, this.noteHashes.length));
363
- flattened.push(...this.noteHashes);
364
- }
365
- if (this.nullifiers.length) {
366
- flattened.push(this.toPrefix(NULLIFIERS_PREFIX, this.nullifiers.length));
367
- flattened.push(...this.nullifiers);
368
- }
369
- if (this.l2ToL1Msgs.length) {
370
- flattened.push(this.toPrefix(L2_L1_MSGS_PREFIX, this.l2ToL1Msgs.length));
371
- flattened.push(...this.l2ToL1Msgs);
372
- }
373
- if (this.publicDataWrites.length) {
374
- flattened.push(this.toPrefix(PUBLIC_DATA_UPDATE_REQUESTS_PREFIX, this.publicDataWrites.length));
375
- flattened.push(...this.publicDataWrites.flatMap(w => w.toBlobFields()));
376
- }
377
- if (this.privateLogs.length) {
378
- flattened.push(this.toPrefix(PRIVATE_LOGS_PREFIX, this.privateLogs.length));
379
- flattened.push(...this.privateLogs.flatMap(l => l.toBlobFields()));
380
- }
381
- if (this.publicLogs.length) {
382
- flattened.push(this.toPrefix(PUBLIC_LOGS_PREFIX, this.publicLogs.length));
383
- flattened.push(...this.publicLogs.flatMap(l => l.toBlobFields()));
384
- }
385
- if (this.contractClassLogs.length) {
386
- flattened.push(this.toPrefix(CONTRACT_CLASS_LOGS_PREFIX, this.contractClassLogs.length));
387
- flattened.push(...this.contractClassLogs.flatMap(l => l.toBlobFields()));
388
- }
256
+ flattened.push(this.transactionFee);
257
+ flattened.push(...this.noteHashes);
258
+ flattened.push(...this.nullifiers);
259
+ flattened.push(...this.l2ToL1Msgs);
260
+ flattened.push(...this.publicDataWrites.flatMap(w => w.toBlobFields()));
261
+ flattened.push(...this.privateLogs.flatMap(l => l.toBlobFields()));
262
+ const flattenedPublicLogs = FlatPublicLogs.fromLogs(this.publicLogs);
263
+ flattened.push(...flattenedPublicLogs.toBlobFields());
264
+ flattened.push(...this.contractClassLogs.flatMap(l => l.toBlobFields()));
265
+
266
+ flattened[0] = encodeTxStartMarker({
267
+ revertCode: this.revertCode.getCode(),
268
+ numBlobFields: flattened.length,
269
+ numNoteHashes: this.noteHashes.length,
270
+ numNullifiers: this.nullifiers.length,
271
+ numL2ToL1Msgs: this.l2ToL1Msgs.length,
272
+ numPublicDataWrites: this.publicDataWrites.length,
273
+ numPrivateLogs: this.privateLogs.length,
274
+ publicLogsLength: flattenedPublicLogs.length,
275
+ contractClassLogLength: this.contractClassLogs[0]?.emittedLength ?? 0,
276
+ });
389
277
 
390
- // The first value appended to each list of fields representing a tx effect is:
391
- // TX_START_PREFIX | 0 | txlen[0] txlen[1] | 0 | REVERT_CODE_PREFIX | 0 | revert_code
392
- // Tx start and len are to aid decomposing/ identifying when we reach a new tx effect
393
- // The remaining bytes are used for revert code, since that only requires 3 bytes
394
- flattened[0] = this.encodeFirstField(flattened.length, this.revertCode);
395
278
  return flattened;
396
279
  }
397
280
 
398
281
  /**
399
- * Decodes a flat packed array of prefixed fields to TxEffect
282
+ * Decodes a flat packed array of fields to TxEffect.
400
283
  */
401
284
  static fromBlobFields(fields: Fr[] | FieldReader) {
402
- const ensureEmpty = <T>(arr: Array<T>) => {
403
- if (arr.length) {
404
- throw new Error('Invalid fields given to TxEffect.fromBlobFields(): Attempted to assign property twice.');
405
- }
406
- };
407
-
408
- const effect = this.empty();
409
285
  const reader = FieldReader.asReader(fields);
410
286
  const totalFields = reader.remainingFields();
411
287
  if (!totalFields) {
412
- return effect;
288
+ throw new Error('Cannot process empty blob fields.');
413
289
  }
414
290
 
415
- const firstField = reader.readField();
416
- if (!this.isFirstField(firstField)) {
417
- throw new Error('Invalid fields given to TxEffect.fromBlobFields(): First field invalid.');
291
+ const txStartMarker = decodeTxStartMarker(reader.readField());
292
+ if (!isValidTxStartMarker(txStartMarker)) {
293
+ throw new Error('Invalid fields given to TxEffect.fromBlobFields(): invalid TxStartMarker');
418
294
  }
419
295
 
420
- const { length: fieldsToProcess, revertCode } = this.decodeFirstField(firstField);
421
- effect.revertCode = RevertCode.fromField(new Fr(revertCode));
422
-
423
- effect.txHash = new TxHash(reader.readField());
424
- // TODO: how long should tx fee be? For now, not using fromPrefix()
425
- const prefixedFee = reader.readField();
426
- // NB: Fr.fromBuffer hangs here if you provide a buffer less than 32 in len
427
- // todo: try new Fr(prefixedFee.toBuffer().subarray(3))
428
- effect.transactionFee = Fr.fromBuffer(Buffer.concat([Buffer.alloc(3), prefixedFee.toBuffer().subarray(3)]));
429
-
430
- let fieldsProcessed = totalFields - reader.remainingFields();
431
- while (fieldsProcessed < fieldsToProcess) {
432
- const { type, length } = this.fromPrefix(reader.readField());
433
- switch (type) {
434
- case NOTES_PREFIX:
435
- ensureEmpty(effect.noteHashes);
436
- effect.noteHashes = reader.readFieldArray(length);
437
- break;
438
- case NULLIFIERS_PREFIX:
439
- ensureEmpty(effect.nullifiers);
440
- effect.nullifiers = reader.readFieldArray(length);
441
- break;
442
- case L2_L1_MSGS_PREFIX:
443
- ensureEmpty(effect.l2ToL1Msgs);
444
- effect.l2ToL1Msgs = reader.readFieldArray(length);
445
- break;
446
- case PUBLIC_DATA_UPDATE_REQUESTS_PREFIX: {
447
- ensureEmpty(effect.publicDataWrites);
448
- effect.publicDataWrites = Array.from({ length }, () => PublicDataWrite.fromBlobFields(reader));
449
- break;
450
- }
451
- case PRIVATE_LOGS_PREFIX: {
452
- ensureEmpty(effect.privateLogs);
453
- effect.privateLogs = Array.from({ length }, () => PrivateLog.fromBlobFields(reader));
454
- break;
455
- }
456
- case PUBLIC_LOGS_PREFIX: {
457
- ensureEmpty(effect.publicLogs);
458
- effect.publicLogs = Array.from({ length }, () => PublicLog.fromBlobFields(reader));
459
- break;
460
- }
461
- case CONTRACT_CLASS_LOGS_PREFIX: {
462
- ensureEmpty(effect.contractClassLogs);
463
- effect.contractClassLogs = Array.from({ length }, () => ContractClassLog.fromBlobFields(reader));
464
- break;
465
- }
466
- case REVERT_CODE_PREFIX:
467
- default:
468
- throw new Error(`Too many fields to decode given to TxEffect.fromBlobFields()`);
469
- }
470
- fieldsProcessed = totalFields - reader.remainingFields();
471
- }
472
- return effect;
296
+ const revertCode = RevertCode.fromField(new Fr(txStartMarker.revertCode));
297
+ const txHash = new TxHash(reader.readField());
298
+ const transactionFee = reader.readField();
299
+ const noteHashes = reader.readFieldArray(txStartMarker.numNoteHashes);
300
+ const nullifiers = reader.readFieldArray(txStartMarker.numNullifiers);
301
+ const l2ToL1Msgs = reader.readFieldArray(txStartMarker.numL2ToL1Msgs);
302
+ const publicDataWrites = Array.from({ length: txStartMarker.numPublicDataWrites }, () =>
303
+ PublicDataWrite.fromBlobFields(reader),
304
+ );
305
+ const privateLogs = Array.from({ length: txStartMarker.numPrivateLogs }, () => PrivateLog.fromBlobFields(reader));
306
+ const publicLogs = FlatPublicLogs.fromBlobFields(txStartMarker.publicLogsLength, reader).toLogs();
307
+ const contractClassLogs =
308
+ txStartMarker.contractClassLogLength > 0
309
+ ? [ContractClassLog.fromBlobFields(txStartMarker.contractClassLogLength, reader)]
310
+ : [];
311
+
312
+ return TxEffect.from({
313
+ revertCode,
314
+ txHash,
315
+ transactionFee,
316
+ noteHashes,
317
+ nullifiers,
318
+ l2ToL1Msgs,
319
+ publicDataWrites,
320
+ privateLogs,
321
+ publicLogs,
322
+ contractClassLogs,
323
+ });
473
324
  }
474
325
 
475
326
  static from(fields: FieldsOf<TxEffect>) {
@@ -514,7 +365,7 @@ export class TxEffect {
514
365
  l2ToL1Msgs: [${this.l2ToL1Msgs.map(h => h.toString()).join(', ')}],
515
366
  publicDataWrites: [${this.publicDataWrites.map(h => h.toString()).join(', ')}],
516
367
  privateLogs: [${this.privateLogs.map(l => l.fields.map(f => f.toString()).join(',')).join(', ')}],
517
- publicLogs: [${this.publicLogs.map(l => l.fields.map(f => f.toString()).join(',')).join(', ')}],
368
+ publicLogs: ${inspect(this.publicLogs)},
518
369
  contractClassLogs: [${this.contractClassLogs
519
370
  .map(l =>
520
371
  l
@@ -16,7 +16,7 @@ export const TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP = 'Invalid expiration timesta
16
16
  export const TX_ERROR_INCORRECT_L1_CHAIN_ID = 'Incorrect L1 chain id';
17
17
  export const TX_ERROR_INCORRECT_ROLLUP_VERSION = 'Incorrect rollup version';
18
18
  export const TX_ERROR_INCORRECT_VK_TREE_ROOT = 'Incorrect verification keys tree root';
19
- export const TX_ERROR_INCORRECT_PROTOCOL_CONTRACT_TREE_ROOT = 'Incorrect protocol contracts tree root';
19
+ export const TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH = 'Incorrect protocol contracts hash';
20
20
 
21
21
  // Proof
22
22
  export const TX_ERROR_INVALID_PROOF = 'Invalid proof';
@@ -43,7 +43,7 @@ export class UpdateChecker extends EventEmitter<EventMap> {
43
43
  private rollupVersion: bigint,
44
44
  private fetch: typeof globalThis.fetch,
45
45
  private getLatestRollupVersion: () => Promise<bigint>,
46
- private checkIntervalMs = 60_000, // every minute
46
+ private checkIntervalMs = 10 * 60_000, // every 10 mins
47
47
  private log = createLogger('foundation:update-check'),
48
48
  ) {
49
49
  super();
@@ -4,6 +4,7 @@ import { z } from 'zod';
4
4
 
5
5
  import type {
6
6
  SingleValidatorStats,
7
+ ValidatorMissedStats,
7
8
  ValidatorStats,
8
9
  ValidatorStatusHistory,
9
10
  ValidatorStatusInSlot,
@@ -35,19 +36,20 @@ const ValidatorTimeStatSchema = z.object({
35
36
  date: z.string(),
36
37
  });
37
38
 
38
- const ValidatorFilteredHistorySchema = z.object({
39
+ const ValidatorMissedStatsSchema = z.object({
39
40
  currentStreak: schemas.Integer,
40
41
  rate: z.number().optional(),
41
42
  count: schemas.Integer,
42
- });
43
+ total: schemas.Integer,
44
+ }) satisfies ZodFor<ValidatorMissedStats>;
43
45
 
44
46
  export const ValidatorStatsSchema = z.object({
45
47
  address: schemas.EthAddress,
46
48
  lastProposal: ValidatorTimeStatSchema.optional(),
47
49
  lastAttestation: ValidatorTimeStatSchema.optional(),
48
50
  totalSlots: schemas.Integer,
49
- missedProposals: ValidatorFilteredHistorySchema,
50
- missedAttestations: ValidatorFilteredHistorySchema,
51
+ missedProposals: ValidatorMissedStatsSchema,
52
+ missedAttestations: ValidatorMissedStatsSchema,
51
53
  history: ValidatorStatusHistorySchema,
52
54
  }) satisfies ZodFor<ValidatorStats>;
53
55
 
@@ -11,21 +11,20 @@ export type ValidatorStatusInSlot =
11
11
 
12
12
  export type ValidatorStatusHistory = { slot: bigint; status: ValidatorStatusInSlot }[];
13
13
 
14
+ export type ValidatorMissedStats = {
15
+ currentStreak: number;
16
+ rate?: number;
17
+ count: number;
18
+ total: number;
19
+ };
20
+
14
21
  export type ValidatorStats = {
15
22
  address: EthAddress;
16
23
  lastProposal?: { timestamp: bigint; slot: bigint; date: string };
17
24
  lastAttestation?: { timestamp: bigint; slot: bigint; date: string };
18
25
  totalSlots: number;
19
- missedProposals: {
20
- currentStreak: number;
21
- rate?: number;
22
- count: number;
23
- };
24
- missedAttestations: {
25
- currentStreak: number;
26
- rate?: number;
27
- count: number;
28
- };
26
+ missedProposals: ValidatorMissedStats;
27
+ missedAttestations: ValidatorMissedStats;
29
28
  history: ValidatorStatusHistory;
30
29
  };
31
30