@aztec/stdlib 0.0.1-commit.cd76b27 → 0.0.1-commit.ce4f8c4f2

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 (340) hide show
  1. package/dest/abi/abi.d.ts +138 -1
  2. package/dest/abi/abi.d.ts.map +1 -1
  3. package/dest/abi/abi.js +10 -2
  4. package/dest/abi/buffer.d.ts +14 -4
  5. package/dest/abi/buffer.d.ts.map +1 -1
  6. package/dest/abi/buffer.js +25 -4
  7. package/dest/abi/decoder.d.ts +2 -2
  8. package/dest/abi/decoder.d.ts.map +1 -1
  9. package/dest/abi/decoder.js +7 -5
  10. package/dest/abi/encoder.d.ts +1 -1
  11. package/dest/abi/encoder.d.ts.map +1 -1
  12. package/dest/abi/encoder.js +37 -6
  13. package/dest/abi/event_metadata_definition.d.ts +3 -1
  14. package/dest/abi/event_metadata_definition.d.ts.map +1 -1
  15. package/dest/abi/event_metadata_definition.js +1 -1
  16. package/dest/abi/utils.d.ts +14 -1
  17. package/dest/abi/utils.d.ts.map +1 -1
  18. package/dest/abi/utils.js +15 -0
  19. package/dest/avm/avm_proving_request.d.ts +166 -166
  20. package/dest/avm/revert_code.d.ts +16 -1
  21. package/dest/avm/revert_code.d.ts.map +1 -1
  22. package/dest/avm/revert_code.js +15 -5
  23. package/dest/block/l2_block.d.ts +9 -1
  24. package/dest/block/l2_block.d.ts.map +1 -1
  25. package/dest/block/l2_block.js +12 -2
  26. package/dest/block/l2_block_source.d.ts +16 -8
  27. package/dest/block/l2_block_source.d.ts.map +1 -1
  28. package/dest/block/l2_block_stream/l2_block_stream.d.ts +1 -1
  29. package/dest/block/l2_block_stream/l2_block_stream.d.ts.map +1 -1
  30. package/dest/block/l2_block_stream/l2_block_stream.js +10 -0
  31. package/dest/checkpoint/checkpoint.d.ts +2 -1
  32. package/dest/checkpoint/checkpoint.d.ts.map +1 -1
  33. package/dest/checkpoint/checkpoint.js +9 -4
  34. package/dest/checkpoint/index.d.ts +2 -1
  35. package/dest/checkpoint/index.d.ts.map +1 -1
  36. package/dest/checkpoint/index.js +1 -0
  37. package/dest/checkpoint/validate.d.ts +36 -0
  38. package/dest/checkpoint/validate.d.ts.map +1 -0
  39. package/dest/checkpoint/validate.js +120 -0
  40. package/dest/config/index.d.ts +2 -1
  41. package/dest/config/index.d.ts.map +1 -1
  42. package/dest/config/index.js +1 -0
  43. package/dest/config/pipelining-config.d.ts +19 -0
  44. package/dest/config/pipelining-config.d.ts.map +1 -0
  45. package/dest/config/pipelining-config.js +18 -0
  46. package/dest/config/sequencer-config.d.ts +4 -2
  47. package/dest/config/sequencer-config.d.ts.map +1 -1
  48. package/dest/config/sequencer-config.js +6 -0
  49. package/dest/contract/contract_address.d.ts +3 -3
  50. package/dest/contract/contract_address.js +3 -3
  51. package/dest/contract/contract_class.d.ts +2 -3
  52. package/dest/contract/contract_class.d.ts.map +1 -1
  53. package/dest/contract/contract_class_id.d.ts +2 -2
  54. package/dest/contract/contract_class_id.js +2 -2
  55. package/dest/contract/index.d.ts +1 -3
  56. package/dest/contract/index.d.ts.map +1 -1
  57. package/dest/contract/index.js +0 -2
  58. package/dest/contract/interfaces/contract_class.d.ts +3 -156
  59. package/dest/contract/interfaces/contract_class.d.ts.map +1 -1
  60. package/dest/contract/interfaces/contract_class.js +1 -28
  61. package/dest/epoch-helpers/index.d.ts +7 -1
  62. package/dest/epoch-helpers/index.d.ts.map +1 -1
  63. package/dest/epoch-helpers/index.js +10 -2
  64. package/dest/gas/gas_fees.d.ts +1 -1
  65. package/dest/gas/gas_fees.d.ts.map +1 -1
  66. package/dest/gas/gas_fees.js +4 -1
  67. package/dest/ha-signing/config.d.ts +136 -0
  68. package/dest/ha-signing/config.d.ts.map +1 -0
  69. package/dest/ha-signing/config.js +97 -0
  70. package/dest/ha-signing/index.d.ts +4 -0
  71. package/dest/ha-signing/index.d.ts.map +1 -0
  72. package/dest/ha-signing/index.js +3 -0
  73. package/dest/ha-signing/local_config.d.ts +63 -0
  74. package/dest/ha-signing/local_config.d.ts.map +1 -0
  75. package/dest/ha-signing/local_config.js +24 -0
  76. package/dest/ha-signing/types.d.ts +85 -0
  77. package/dest/ha-signing/types.d.ts.map +1 -0
  78. package/dest/ha-signing/types.js +32 -0
  79. package/dest/hash/hash.d.ts +16 -1
  80. package/dest/hash/hash.d.ts.map +1 -1
  81. package/dest/hash/hash.js +24 -0
  82. package/dest/interfaces/allowed_element.d.ts +26 -20
  83. package/dest/interfaces/allowed_element.d.ts.map +1 -1
  84. package/dest/interfaces/allowed_element.js +8 -8
  85. package/dest/interfaces/archiver.d.ts +1 -1
  86. package/dest/interfaces/archiver.d.ts.map +1 -1
  87. package/dest/interfaces/archiver.js +3 -2
  88. package/dest/interfaces/aztec-node-admin.d.ts +76 -30
  89. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  90. package/dest/interfaces/aztec-node.d.ts +12 -6
  91. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  92. package/dest/interfaces/aztec-node.js +5 -2
  93. package/dest/interfaces/block-builder.d.ts +38 -11
  94. package/dest/interfaces/block-builder.d.ts.map +1 -1
  95. package/dest/interfaces/block-builder.js +13 -6
  96. package/dest/interfaces/configs.d.ts +62 -32
  97. package/dest/interfaces/configs.d.ts.map +1 -1
  98. package/dest/interfaces/configs.js +6 -2
  99. package/dest/interfaces/l2_logs_source.d.ts +5 -3
  100. package/dest/interfaces/l2_logs_source.d.ts.map +1 -1
  101. package/dest/interfaces/merkle_tree_operations.d.ts +9 -19
  102. package/dest/interfaces/merkle_tree_operations.d.ts.map +1 -1
  103. package/dest/interfaces/p2p.d.ts +3 -8
  104. package/dest/interfaces/p2p.d.ts.map +1 -1
  105. package/dest/interfaces/prover-client.d.ts +6 -1
  106. package/dest/interfaces/prover-client.d.ts.map +1 -1
  107. package/dest/interfaces/prover-client.js +7 -1
  108. package/dest/interfaces/proving-job.d.ts +200 -200
  109. package/dest/interfaces/validator.d.ts +103 -41
  110. package/dest/interfaces/validator.d.ts.map +1 -1
  111. package/dest/interfaces/validator.js +8 -4
  112. package/dest/interfaces/world_state.d.ts +5 -4
  113. package/dest/interfaces/world_state.d.ts.map +1 -1
  114. package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts +3 -3
  115. package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts.map +1 -1
  116. package/dest/kernel/hints/build_note_hash_read_request_hints.js +13 -10
  117. package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts +3 -3
  118. package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts.map +1 -1
  119. package/dest/kernel/hints/build_nullifier_read_request_hints.js +13 -10
  120. package/dest/kernel/hints/build_transient_data_hints.d.ts +5 -2
  121. package/dest/kernel/hints/build_transient_data_hints.d.ts.map +1 -1
  122. package/dest/kernel/hints/build_transient_data_hints.js +9 -3
  123. package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts +2 -1
  124. package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts.map +1 -1
  125. package/dest/kernel/private_kernel_tail_circuit_public_inputs.js +4 -0
  126. package/dest/kv-store/config.d.ts +17 -0
  127. package/dest/kv-store/config.d.ts.map +1 -0
  128. package/dest/kv-store/config.js +26 -0
  129. package/dest/kv-store/index.d.ts +2 -0
  130. package/dest/kv-store/index.d.ts.map +1 -0
  131. package/dest/kv-store/index.js +1 -0
  132. package/dest/logs/debug_log_store.d.ts +30 -0
  133. package/dest/logs/debug_log_store.d.ts.map +1 -0
  134. package/dest/logs/debug_log_store.js +30 -0
  135. package/dest/logs/extended_directional_app_tagging_secret.d.ts +47 -0
  136. package/dest/logs/extended_directional_app_tagging_secret.d.ts.map +1 -0
  137. package/dest/logs/{directional_app_tagging_secret.js → extended_directional_app_tagging_secret.js} +23 -15
  138. package/dest/logs/index.d.ts +4 -2
  139. package/dest/logs/index.d.ts.map +1 -1
  140. package/dest/logs/index.js +3 -1
  141. package/dest/logs/log_filter.d.ts +4 -1
  142. package/dest/logs/log_filter.d.ts.map +1 -1
  143. package/dest/logs/log_filter.js +2 -1
  144. package/dest/logs/pre_tag.d.ts +16 -11
  145. package/dest/logs/pre_tag.d.ts.map +1 -1
  146. package/dest/logs/pre_tag.js +2 -2
  147. package/dest/logs/public_log.d.ts +4 -3
  148. package/dest/logs/public_log.d.ts.map +1 -1
  149. package/dest/logs/public_log.js +2 -1
  150. package/dest/logs/siloed_tag.d.ts +5 -3
  151. package/dest/logs/siloed_tag.d.ts.map +1 -1
  152. package/dest/logs/siloed_tag.js +6 -1
  153. package/dest/logs/tag.js +1 -1
  154. package/dest/logs/tagging_index_range.d.ts +40 -0
  155. package/dest/logs/tagging_index_range.d.ts.map +1 -0
  156. package/dest/logs/tagging_index_range.js +8 -0
  157. package/dest/logs/tx_scoped_l2_log.d.ts +3 -1
  158. package/dest/logs/tx_scoped_l2_log.d.ts.map +1 -1
  159. package/dest/logs/tx_scoped_l2_log.js +7 -0
  160. package/dest/messaging/l1_to_l2_message.d.ts +3 -2
  161. package/dest/messaging/l1_to_l2_message.d.ts.map +1 -1
  162. package/dest/messaging/l1_to_l2_message.js +11 -13
  163. package/dest/messaging/l1_to_l2_message_source.d.ts +4 -2
  164. package/dest/messaging/l1_to_l2_message_source.d.ts.map +1 -1
  165. package/dest/messaging/l2_to_l1_membership.d.ts +32 -6
  166. package/dest/messaging/l2_to_l1_membership.d.ts.map +1 -1
  167. package/dest/messaging/l2_to_l1_membership.js +69 -26
  168. package/dest/noir/index.d.ts +3 -3
  169. package/dest/noir/index.d.ts.map +1 -1
  170. package/dest/p2p/attestation_utils.d.ts +11 -1
  171. package/dest/p2p/attestation_utils.d.ts.map +1 -1
  172. package/dest/p2p/attestation_utils.js +45 -0
  173. package/dest/p2p/block_proposal.d.ts +2 -2
  174. package/dest/p2p/block_proposal.d.ts.map +1 -1
  175. package/dest/p2p/block_proposal.js +1 -1
  176. package/dest/p2p/checkpoint_proposal.d.ts +2 -7
  177. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  178. package/dest/p2p/checkpoint_proposal.js +14 -24
  179. package/dest/p2p/client_type.d.ts +2 -5
  180. package/dest/p2p/client_type.d.ts.map +1 -1
  181. package/dest/p2p/client_type.js +0 -7
  182. package/dest/p2p/index.d.ts +1 -2
  183. package/dest/p2p/index.d.ts.map +1 -1
  184. package/dest/p2p/index.js +0 -1
  185. package/dest/p2p/peer_error.d.ts +3 -1
  186. package/dest/p2p/peer_error.d.ts.map +1 -1
  187. package/dest/p2p/peer_error.js +5 -0
  188. package/dest/p2p/topic_type.d.ts +3 -4
  189. package/dest/p2p/topic_type.d.ts.map +1 -1
  190. package/dest/p2p/topic_type.js +7 -24
  191. package/dest/proofs/chonk_proof.d.ts +46 -2
  192. package/dest/proofs/chonk_proof.d.ts.map +1 -1
  193. package/dest/proofs/chonk_proof.js +85 -10
  194. package/dest/slashing/tally.d.ts +7 -2
  195. package/dest/slashing/tally.d.ts.map +1 -1
  196. package/dest/slashing/tally.js +30 -2
  197. package/dest/tests/factories.d.ts +4 -4
  198. package/dest/tests/factories.d.ts.map +1 -1
  199. package/dest/tests/factories.js +8 -27
  200. package/dest/tests/mocks.d.ts +5 -3
  201. package/dest/tests/mocks.d.ts.map +1 -1
  202. package/dest/tests/mocks.js +18 -13
  203. package/dest/tx/block_header.d.ts +3 -1
  204. package/dest/tx/block_header.d.ts.map +1 -1
  205. package/dest/tx/block_header.js +4 -0
  206. package/dest/tx/private_execution_result.d.ts +6 -6
  207. package/dest/tx/private_execution_result.d.ts.map +1 -1
  208. package/dest/tx/private_execution_result.js +6 -6
  209. package/dest/tx/profiling.d.ts +14 -2
  210. package/dest/tx/profiling.d.ts.map +1 -1
  211. package/dest/tx/profiling.js +13 -3
  212. package/dest/tx/public_simulation_output.d.ts +4 -2
  213. package/dest/tx/public_simulation_output.d.ts.map +1 -1
  214. package/dest/tx/public_simulation_output.js +7 -3
  215. package/dest/tx/simulated_tx.d.ts +113 -2
  216. package/dest/tx/simulated_tx.d.ts.map +1 -1
  217. package/dest/tx/simulated_tx.js +4 -1
  218. package/dest/tx/tx.d.ts +6 -5
  219. package/dest/tx/tx.d.ts.map +1 -1
  220. package/dest/tx/tx.js +18 -6
  221. package/dest/tx/tx_receipt.d.ts +22 -3
  222. package/dest/tx/tx_receipt.d.ts.map +1 -1
  223. package/dest/tx/tx_receipt.js +15 -4
  224. package/dest/tx/validator/error_texts.d.ts +9 -1
  225. package/dest/tx/validator/error_texts.d.ts.map +1 -1
  226. package/dest/tx/validator/error_texts.js +10 -0
  227. package/dest/update-checker/index.d.ts +3 -2
  228. package/dest/update-checker/index.d.ts.map +1 -1
  229. package/dest/update-checker/index.js +2 -1
  230. package/dest/update-checker/package_version.d.ts +3 -0
  231. package/dest/update-checker/package_version.d.ts.map +1 -0
  232. package/dest/update-checker/package_version.js +24 -0
  233. package/dest/update-checker/version_checker.d.ts +25 -0
  234. package/dest/update-checker/version_checker.d.ts.map +1 -0
  235. package/dest/update-checker/version_checker.js +50 -0
  236. package/dest/validators/errors.d.ts +6 -1
  237. package/dest/validators/errors.d.ts.map +1 -1
  238. package/dest/validators/errors.js +7 -0
  239. package/dest/versioning/versioning.d.ts +4 -2
  240. package/dest/versioning/versioning.d.ts.map +1 -1
  241. package/dest/versioning/versioning.js +4 -1
  242. package/package.json +12 -11
  243. package/src/abi/abi.ts +25 -2
  244. package/src/abi/buffer.ts +25 -4
  245. package/src/abi/decoder.ts +15 -6
  246. package/src/abi/encoder.ts +49 -6
  247. package/src/abi/event_metadata_definition.ts +2 -0
  248. package/src/abi/utils.ts +25 -0
  249. package/src/avm/revert_code.ts +15 -0
  250. package/src/block/l2_block.ts +13 -1
  251. package/src/block/l2_block_source.ts +16 -7
  252. package/src/block/l2_block_stream/l2_block_stream.ts +21 -0
  253. package/src/checkpoint/checkpoint.ts +12 -3
  254. package/src/checkpoint/index.ts +1 -0
  255. package/src/checkpoint/validate.ts +230 -0
  256. package/src/config/index.ts +1 -0
  257. package/src/config/pipelining-config.ts +31 -0
  258. package/src/config/sequencer-config.ts +9 -1
  259. package/src/contract/contract_address.ts +3 -3
  260. package/src/contract/contract_class.ts +3 -3
  261. package/src/contract/contract_class_id.ts +2 -2
  262. package/src/contract/index.ts +0 -2
  263. package/src/contract/interfaces/contract_class.ts +2 -82
  264. package/src/epoch-helpers/index.ts +14 -0
  265. package/src/gas/README.md +123 -0
  266. package/src/gas/gas_fees.ts +7 -1
  267. package/src/ha-signing/config.ts +156 -0
  268. package/src/ha-signing/index.ts +27 -0
  269. package/src/ha-signing/local_config.ts +46 -0
  270. package/src/ha-signing/types.ts +112 -0
  271. package/src/hash/hash.ts +29 -0
  272. package/src/interfaces/allowed_element.ts +29 -9
  273. package/src/interfaces/archiver.ts +3 -2
  274. package/src/interfaces/aztec-node.ts +24 -5
  275. package/src/interfaces/block-builder.ts +60 -14
  276. package/src/interfaces/configs.ts +25 -8
  277. package/src/interfaces/l2_logs_source.ts +4 -1
  278. package/src/interfaces/merkle_tree_operations.ts +8 -18
  279. package/src/interfaces/p2p.ts +2 -13
  280. package/src/interfaces/prover-client.ts +8 -0
  281. package/src/interfaces/validator.ts +50 -28
  282. package/src/interfaces/world_state.ts +4 -3
  283. package/src/kernel/hints/build_note_hash_read_request_hints.ts +14 -18
  284. package/src/kernel/hints/build_nullifier_read_request_hints.ts +15 -18
  285. package/src/kernel/hints/build_transient_data_hints.ts +17 -2
  286. package/src/kernel/private_kernel_tail_circuit_public_inputs.ts +9 -0
  287. package/src/kv-store/config.ts +36 -0
  288. package/src/kv-store/index.ts +1 -0
  289. package/src/logs/debug_log_store.ts +54 -0
  290. package/src/logs/{directional_app_tagging_secret.ts → extended_directional_app_tagging_secret.ts} +24 -16
  291. package/src/logs/index.ts +3 -1
  292. package/src/logs/log_filter.ts +5 -0
  293. package/src/logs/pre_tag.ts +5 -5
  294. package/src/logs/public_log.ts +4 -2
  295. package/src/logs/siloed_tag.ts +8 -2
  296. package/src/logs/tag.ts +1 -1
  297. package/src/logs/tagging_index_range.ts +24 -0
  298. package/src/logs/tx_scoped_l2_log.ts +16 -0
  299. package/src/messaging/l1_to_l2_message.ts +12 -9
  300. package/src/messaging/l1_to_l2_message_source.ts +3 -1
  301. package/src/messaging/l2_to_l1_membership.ts +98 -33
  302. package/src/noir/index.ts +2 -2
  303. package/src/p2p/attestation_utils.ts +56 -0
  304. package/src/p2p/block_proposal.ts +1 -1
  305. package/src/p2p/checkpoint_proposal.ts +24 -38
  306. package/src/p2p/client_type.ts +0 -6
  307. package/src/p2p/index.ts +0 -1
  308. package/src/p2p/peer_error.ts +7 -0
  309. package/src/p2p/topic_type.ts +8 -15
  310. package/src/proofs/chonk_proof.ts +91 -5
  311. package/src/slashing/tally.ts +34 -1
  312. package/src/tests/factories.ts +9 -33
  313. package/src/tests/mocks.ts +25 -10
  314. package/src/tx/block_header.ts +6 -0
  315. package/src/tx/private_execution_result.ts +5 -5
  316. package/src/tx/profiling.ts +11 -2
  317. package/src/tx/public_simulation_output.ts +4 -0
  318. package/src/tx/simulated_tx.ts +8 -1
  319. package/src/tx/tx.ts +20 -11
  320. package/src/tx/tx_receipt.ts +17 -2
  321. package/src/tx/validator/error_texts.ts +12 -0
  322. package/src/update-checker/index.ts +2 -1
  323. package/src/update-checker/package_version.ts +30 -0
  324. package/src/update-checker/version_checker.ts +65 -0
  325. package/src/validators/errors.ts +9 -0
  326. package/src/versioning/versioning.ts +4 -1
  327. package/dest/contract/private_function_membership_proof.d.ts +0 -32
  328. package/dest/contract/private_function_membership_proof.d.ts.map +0 -1
  329. package/dest/contract/private_function_membership_proof.js +0 -124
  330. package/dest/contract/utility_function_membership_proof.d.ts +0 -27
  331. package/dest/contract/utility_function_membership_proof.d.ts.map +0 -1
  332. package/dest/contract/utility_function_membership_proof.js +0 -87
  333. package/dest/logs/directional_app_tagging_secret.d.ts +0 -40
  334. package/dest/logs/directional_app_tagging_secret.d.ts.map +0 -1
  335. package/dest/update-checker/update-checker.d.ts +0 -49
  336. package/dest/update-checker/update-checker.d.ts.map +0 -1
  337. package/dest/update-checker/update-checker.js +0 -130
  338. package/src/contract/private_function_membership_proof.ts +0 -167
  339. package/src/contract/utility_function_membership_proof.ts +0 -118
  340. package/src/update-checker/update-checker.ts +0 -166
@@ -1,118 +0,0 @@
1
- import { Fr } from '@aztec/foundation/curves/bn254';
2
- import { createLogger } from '@aztec/foundation/log';
3
- import { computeRootFromSiblingPath } from '@aztec/foundation/trees';
4
-
5
- import { type ContractArtifact, FunctionSelector, FunctionType } from '../abi/index.js';
6
- import {
7
- computeArtifactFunctionTree,
8
- computeArtifactHash,
9
- computeArtifactHashPreimage,
10
- computeFunctionArtifactHash,
11
- computeFunctionMetadataHash,
12
- getArtifactMerkleTreeHasher,
13
- } from './artifact_hash.js';
14
- import type {
15
- ContractClassPublic,
16
- UtilityFunctionMembershipProof,
17
- UtilityFunctionWithMembershipProof,
18
- } from './interfaces/index.js';
19
-
20
- /**
21
- * Creates a membership proof for a utility function in a contract class, to be verified via `isValidUtilityFunctionMembershipProof`.
22
- * @param selector - Selector of the function to create the proof for.
23
- * @param artifact - Artifact of the contract class where the function is defined.
24
- */
25
- export async function createUtilityFunctionMembershipProof(
26
- selector: FunctionSelector,
27
- artifact: ContractArtifact,
28
- ): Promise<UtilityFunctionMembershipProof> {
29
- const log = createLogger('circuits:function_membership_proof');
30
-
31
- // Locate function artifact
32
- const utilityFunctions = artifact.functions.filter(fn => fn.functionType === FunctionType.UTILITY);
33
- const utilityFunctionsAndSelectors = await Promise.all(
34
- utilityFunctions.map(async fn => ({ fn, selector: await FunctionSelector.fromNameAndParameters(fn) })),
35
- );
36
- const fn = utilityFunctionsAndSelectors.find(fnAndSelector => selector.equals(fnAndSelector.selector))?.fn;
37
- if (!fn) {
38
- throw new Error(`Utility function with selector ${selector.toString()} not found`);
39
- }
40
- // Compute preimage for the artifact hash
41
- const { privateFunctionRoot: privateFunctionsArtifactTreeRoot, metadataHash: artifactMetadataHash } =
42
- await computeArtifactHashPreimage(artifact);
43
-
44
- // Compute the sibling path for the "artifact tree"
45
- const functionMetadataHash = computeFunctionMetadataHash(fn);
46
- const functionArtifactHash = await computeFunctionArtifactHash({ ...fn, functionMetadataHash });
47
- const artifactTree = (await computeArtifactFunctionTree(artifact, FunctionType.UTILITY))!;
48
- const artifactTreeLeafIndex = artifactTree.getIndex(functionArtifactHash.toBuffer());
49
- const artifactTreeSiblingPath = artifactTree.getSiblingPath(artifactTreeLeafIndex).map(Fr.fromBuffer);
50
-
51
- log.debug(`Computed proof for utility function with selector ${selector.toString()}`, {
52
- functionArtifactHash,
53
- functionMetadataHash,
54
- artifactMetadataHash,
55
- artifactFunctionTreeSiblingPath: artifactTreeSiblingPath.map(fr => fr.toString()).join(','),
56
- privateFunctionsArtifactTreeRoot,
57
- });
58
-
59
- return {
60
- artifactTreeSiblingPath,
61
- artifactTreeLeafIndex,
62
- artifactMetadataHash,
63
- functionMetadataHash,
64
- privateFunctionsArtifactTreeRoot,
65
- };
66
- }
67
-
68
- /**
69
- * Verifies that a utility function with a membership proof as emitted by the ClassRegistry contract is valid,
70
- * as defined in the protocol specs at contract-deployment/classes:
71
- *
72
- * ```
73
- * // Load contract class from local db
74
- * contract_class = db.get_contract_class(contract_class_id)
75
- *
76
- * // Compute artifact leaf and assert it belongs to the artifact
77
- * artifact_function_leaf = sha256(selector, metadata_hash, sha256(bytecode))
78
- * computed_artifact_utility_function_tree_root = compute_root(artifact_function_leaf, artifact_function_tree_sibling_path, artifact_function_tree_leaf_index)
79
- * computed_artifact_hash = sha256(private_functions_artifact_tree_root, computed_artifact_utility_function_tree_root, artifact_metadata_hash)
80
- * assert computed_artifact_hash == contract_class.artifact_hash
81
- * ```
82
- * @param fn - Function to check membership proof for.
83
- * @param contractClass - In which contract class the function is expected to be.
84
- */
85
- export async function isValidUtilityFunctionMembershipProof(
86
- fn: UtilityFunctionWithMembershipProof,
87
- contractClass: Pick<ContractClassPublic, 'artifactHash'>,
88
- ) {
89
- const log = createLogger('circuits:function_membership_proof');
90
-
91
- const functionArtifactHash = await computeFunctionArtifactHash(fn);
92
- const computedArtifactFunctionTreeRootBuffer = await computeRootFromSiblingPath(
93
- functionArtifactHash.toBuffer(),
94
- fn.artifactTreeSiblingPath.map(fr => fr.toBuffer()),
95
- fn.artifactTreeLeafIndex,
96
- getArtifactMerkleTreeHasher(),
97
- );
98
- const computedArtifactFunctionTreeRoot = Fr.fromBuffer(computedArtifactFunctionTreeRootBuffer);
99
- const computedArtifactHash = await computeArtifactHash({
100
- privateFunctionRoot: fn.privateFunctionsArtifactTreeRoot,
101
- utilityFunctionRoot: computedArtifactFunctionTreeRoot,
102
- metadataHash: fn.artifactMetadataHash,
103
- });
104
- if (!contractClass.artifactHash.equals(computedArtifactHash)) {
105
- log.debug(`Artifact hash mismatch`, {
106
- expected: contractClass.artifactHash,
107
- computedArtifactHash,
108
- computedFunctionArtifactHash: functionArtifactHash,
109
- computedArtifactFunctionTreeRoot,
110
- privateFunctionsArtifactTreeRoot: fn.privateFunctionsArtifactTreeRoot,
111
- metadataHash: fn.artifactMetadataHash,
112
- artifactFunctionTreeSiblingPath: fn.artifactTreeSiblingPath.map(fr => fr.toString()).join(','),
113
- });
114
- return false;
115
- }
116
-
117
- return true;
118
- }
@@ -1,166 +0,0 @@
1
- import { RegistryContract } from '@aztec/ethereum/contracts';
2
- import type { ViemClient } from '@aztec/ethereum/types';
3
- import { EthAddress } from '@aztec/foundation/eth-address';
4
- import { createLogger } from '@aztec/foundation/log';
5
- import { RunningPromise } from '@aztec/foundation/running-promise';
6
- import { fileURLToPath } from '@aztec/foundation/url';
7
-
8
- import { EventEmitter } from 'events';
9
- import { readFileSync } from 'fs';
10
- import { dirname, resolve } from 'path';
11
- import { isDeepStrictEqual } from 'util';
12
- import { z } from 'zod';
13
-
14
- const updateConfigSchema = z.object({
15
- version: z.string().optional(),
16
- publicTelemetry: z.any().optional(),
17
- config: z.any().optional(),
18
- });
19
-
20
- export type EventMap = {
21
- newRollupVersion: [{ currentVersion: bigint; latestVersion: bigint }];
22
- newNodeVersion: [{ currentVersion: string; latestVersion: string }];
23
- updateNodeConfig: [object];
24
- updatePublicTelemetryConfig: [object];
25
- };
26
-
27
- type Config = {
28
- baseURL: URL;
29
- nodeVersion?: string;
30
- checkIntervalMs?: number;
31
- registryContractAddress: EthAddress;
32
- publicClient: ViemClient;
33
- fetch?: typeof fetch;
34
- };
35
-
36
- export class UpdateChecker extends EventEmitter<EventMap> {
37
- private runningPromise: RunningPromise;
38
- private lastPatchedConfig: object = {};
39
- private lastPatchedPublicTelemetryConfig: object = {};
40
-
41
- constructor(
42
- private updatesUrl: URL,
43
- private nodeVersion: string | undefined,
44
- private rollupVersion: bigint,
45
- private fetch: typeof globalThis.fetch,
46
- private getLatestRollupVersion: () => Promise<bigint>,
47
- private checkIntervalMs = 10 * 60_000, // every 10 mins
48
- private log = createLogger('foundation:update-check'),
49
- ) {
50
- super();
51
- this.runningPromise = new RunningPromise(this.runChecks, this.log, this.checkIntervalMs);
52
- }
53
-
54
- public static async new(config: Config): Promise<UpdateChecker> {
55
- const registryContract = new RegistryContract(config.publicClient, config.registryContractAddress);
56
- const getLatestRollupVersion = () => registryContract.getRollupVersions().then(versions => versions.at(-1)!);
57
-
58
- return new UpdateChecker(
59
- config.baseURL,
60
- config.nodeVersion ?? getPackageVersion(),
61
- await getLatestRollupVersion(),
62
- config.fetch ?? fetch,
63
- getLatestRollupVersion,
64
- config.checkIntervalMs,
65
- );
66
- }
67
-
68
- public start(): void {
69
- if (this.runningPromise.isRunning()) {
70
- this.log.debug(`Can't start update checker again`);
71
- return;
72
- }
73
-
74
- this.log.info('Starting update checker', {
75
- nodeVersion: this.nodeVersion,
76
- rollupVersion: this.rollupVersion,
77
- });
78
- this.runningPromise.start();
79
- }
80
-
81
- public stop(): Promise<void> {
82
- if (!this.runningPromise.isRunning()) {
83
- this.log.debug(`Can't stop update checker because it is not running`);
84
- return Promise.resolve();
85
- }
86
- return this.runningPromise.stop();
87
- }
88
-
89
- public trigger(): Promise<void> {
90
- return this.runningPromise.trigger();
91
- }
92
-
93
- private runChecks = async (): Promise<void> => {
94
- await Promise.all([this.checkRollupVersion(), this.checkConfig()]);
95
- };
96
-
97
- private async checkRollupVersion(): Promise<void> {
98
- try {
99
- const canonicalRollupVersion = await this.getLatestRollupVersion();
100
- if (canonicalRollupVersion !== this.rollupVersion) {
101
- this.log.debug('New canonical rollup version', {
102
- currentVersion: this.rollupVersion,
103
- latestVersion: canonicalRollupVersion,
104
- });
105
- this.emit('newRollupVersion', { currentVersion: this.rollupVersion, latestVersion: canonicalRollupVersion });
106
- }
107
- } catch (err) {
108
- this.log.warn(`Failed to check if there is a new rollup`, err);
109
- }
110
- }
111
-
112
- private async checkConfig(): Promise<void> {
113
- try {
114
- const response = await this.fetch(this.updatesUrl);
115
- const body = await response.json();
116
- if (!response.ok) {
117
- this.log.warn(`Unexpected HTTP response checking for updates`, {
118
- status: response.status,
119
- body: await response.text(),
120
- url: this.updatesUrl,
121
- });
122
- }
123
-
124
- const { version, config, publicTelemetry } = updateConfigSchema.parse(body);
125
-
126
- if (this.nodeVersion && version && version !== this.nodeVersion) {
127
- this.log.debug('New node version', { currentVersion: this.nodeVersion, latestVersion: version });
128
- this.emit('newNodeVersion', { currentVersion: this.nodeVersion, latestVersion: version });
129
- }
130
-
131
- if (config && Object.keys(config).length > 0 && !isDeepStrictEqual(config, this.lastPatchedConfig)) {
132
- this.log.debug('New node config', { config });
133
- this.lastPatchedConfig = config;
134
- this.emit('updateNodeConfig', config);
135
- }
136
-
137
- if (
138
- publicTelemetry &&
139
- Object.keys(publicTelemetry).length > 0 &&
140
- !isDeepStrictEqual(publicTelemetry, this.lastPatchedPublicTelemetryConfig)
141
- ) {
142
- this.log.debug('New metrics config', { config });
143
- this.lastPatchedPublicTelemetryConfig = publicTelemetry;
144
- this.emit('updatePublicTelemetryConfig', publicTelemetry);
145
- }
146
- } catch (err) {
147
- this.log.warn(`Failed to check if there is an update`, err);
148
- }
149
- }
150
- }
151
-
152
- /**
153
- * Returns package version.
154
- */
155
- export function getPackageVersion(): string | undefined {
156
- try {
157
- const releasePleaseManifestPath = resolve(
158
- dirname(fileURLToPath(import.meta.url)),
159
- '../../../../.release-please-manifest.json',
160
- );
161
- const version = JSON.parse(readFileSync(releasePleaseManifestPath).toString())['.'];
162
- return version;
163
- } catch {
164
- return undefined;
165
- }
166
- }