@aztec/foundation 4.0.0-nightly.20250907 → 4.0.0-nightly.20260108

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 (476) hide show
  1. package/dest/array/array.d.ts +1 -9
  2. package/dest/array/array.d.ts.map +1 -1
  3. package/dest/array/array.js +0 -11
  4. package/dest/array/index.d.ts +2 -1
  5. package/dest/array/index.d.ts.map +1 -1
  6. package/dest/array/index.js +1 -0
  7. package/dest/array/sorted_array.d.ts +10 -0
  8. package/dest/array/sorted_array.d.ts.map +1 -0
  9. package/dest/array/sorted_array.js +106 -0
  10. package/dest/async-map/index.d.ts +1 -1
  11. package/dest/async-pool/index.d.ts +1 -1
  12. package/dest/bigint/index.d.ts +1 -1
  13. package/dest/bigint-buffer/index.d.ts +1 -1
  14. package/dest/branded-types/block_number.d.ts +53 -0
  15. package/dest/branded-types/block_number.d.ts.map +1 -0
  16. package/dest/branded-types/block_number.js +75 -0
  17. package/dest/branded-types/checkpoint_number.d.ts +46 -0
  18. package/dest/branded-types/checkpoint_number.d.ts.map +1 -0
  19. package/dest/branded-types/checkpoint_number.js +68 -0
  20. package/dest/branded-types/epoch.d.ts +42 -0
  21. package/dest/branded-types/epoch.d.ts.map +1 -0
  22. package/dest/branded-types/epoch.js +59 -0
  23. package/dest/branded-types/index.d.ts +6 -0
  24. package/dest/branded-types/index.d.ts.map +1 -0
  25. package/dest/branded-types/index.js +4 -0
  26. package/dest/branded-types/slot.d.ts +42 -0
  27. package/dest/branded-types/slot.d.ts.map +1 -0
  28. package/dest/branded-types/slot.js +59 -0
  29. package/dest/branded-types/types.d.ts +5 -0
  30. package/dest/branded-types/types.d.ts.map +1 -0
  31. package/dest/branded-types/types.js +1 -0
  32. package/dest/buffer/buffer16.d.ts +2 -5
  33. package/dest/buffer/buffer16.d.ts.map +1 -1
  34. package/dest/buffer/buffer16.js +4 -2
  35. package/dest/buffer/buffer32.d.ts +2 -5
  36. package/dest/buffer/buffer32.d.ts.map +1 -1
  37. package/dest/buffer/buffer32.js +4 -2
  38. package/dest/buffer/index.d.ts +1 -1
  39. package/dest/collection/array.d.ts +3 -1
  40. package/dest/collection/array.d.ts.map +1 -1
  41. package/dest/collection/array.js +12 -3
  42. package/dest/collection/index.d.ts +1 -1
  43. package/dest/collection/object.d.ts +5 -1
  44. package/dest/collection/object.d.ts.map +1 -1
  45. package/dest/collection/object.js +6 -0
  46. package/dest/committable/committable.d.ts +1 -1
  47. package/dest/committable/committable.d.ts.map +1 -1
  48. package/dest/committable/index.d.ts +1 -1
  49. package/dest/config/env_var.d.ts +2 -2
  50. package/dest/config/env_var.d.ts.map +1 -1
  51. package/dest/config/index.d.ts +12 -2
  52. package/dest/config/index.d.ts.map +1 -1
  53. package/dest/config/index.js +17 -2
  54. package/dest/config/network_config.d.ts +54 -0
  55. package/dest/config/network_config.d.ts.map +1 -0
  56. package/dest/config/network_config.js +11 -0
  57. package/dest/config/network_name.d.ts +2 -2
  58. package/dest/config/network_name.d.ts.map +1 -1
  59. package/dest/config/network_name.js +10 -2
  60. package/dest/config/secret_value.d.ts +1 -1
  61. package/dest/config/secret_value.d.ts.map +1 -1
  62. package/dest/config/secret_value.js +3 -1
  63. package/dest/crypto/aes128/index.d.ts +1 -1
  64. package/dest/crypto/aes128/index.d.ts.map +1 -1
  65. package/dest/crypto/aes128/index.js +19 -6
  66. package/dest/crypto/bls/bn254_keystore.d.ts +296 -0
  67. package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -0
  68. package/dest/crypto/bls/bn254_keystore.js +218 -0
  69. package/dest/crypto/bls/index.d.ts +13 -0
  70. package/dest/crypto/bls/index.d.ts.map +1 -0
  71. package/dest/crypto/bls/index.js +87 -0
  72. package/dest/crypto/bn254/index.d.ts +39 -0
  73. package/dest/crypto/bn254/index.d.ts.map +1 -0
  74. package/dest/crypto/bn254/index.js +56 -0
  75. package/dest/crypto/ecdsa/index.d.ts +1 -1
  76. package/dest/crypto/ecdsa/index.d.ts.map +1 -1
  77. package/dest/crypto/ecdsa/index.js +58 -48
  78. package/dest/crypto/ecdsa/signature.d.ts +2 -11
  79. package/dest/crypto/ecdsa/signature.d.ts.map +1 -1
  80. package/dest/crypto/ecdsa/signature.js +2 -2
  81. package/dest/crypto/grumpkin/index.d.ts +10 -13
  82. package/dest/crypto/grumpkin/index.d.ts.map +1 -1
  83. package/dest/crypto/grumpkin/index.js +61 -55
  84. package/dest/crypto/keccak/index.d.ts +1 -1
  85. package/dest/crypto/keys/index.d.ts +2 -2
  86. package/dest/crypto/keys/index.d.ts.map +1 -1
  87. package/dest/crypto/keys/index.js +8 -5
  88. package/dest/crypto/pedersen/index.d.ts +1 -1
  89. package/dest/crypto/pedersen/pedersen.noble.d.ts +1 -1
  90. package/dest/crypto/pedersen/pedersen.wasm.d.ts +2 -2
  91. package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
  92. package/dest/crypto/pedersen/pedersen.wasm.js +24 -14
  93. package/dest/crypto/poseidon/index.d.ts +2 -2
  94. package/dest/crypto/poseidon/index.d.ts.map +1 -1
  95. package/dest/crypto/poseidon/index.js +33 -18
  96. package/dest/crypto/random/index.d.ts +1 -1
  97. package/dest/crypto/random/index.d.ts.map +1 -1
  98. package/dest/crypto/random/randomness_singleton.d.ts +1 -1
  99. package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
  100. package/dest/crypto/schnorr/index.d.ts +3 -2
  101. package/dest/crypto/schnorr/index.d.ts.map +1 -1
  102. package/dest/crypto/schnorr/index.js +30 -38
  103. package/dest/crypto/schnorr/signature.d.ts +2 -2
  104. package/dest/crypto/schnorr/signature.d.ts.map +1 -1
  105. package/dest/crypto/schnorr/signature.js +2 -2
  106. package/dest/crypto/secp256k1/index.d.ts +1 -1
  107. package/dest/crypto/secp256k1/index.d.ts.map +1 -1
  108. package/dest/crypto/secp256k1/index.js +23 -18
  109. package/dest/crypto/secp256k1-signer/index.d.ts +1 -1
  110. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +1 -1
  111. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -1
  112. package/dest/crypto/secp256k1-signer/utils.d.ts +49 -3
  113. package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
  114. package/dest/crypto/secp256k1-signer/utils.js +87 -5
  115. package/dest/crypto/serialize.d.ts +1 -1
  116. package/dest/crypto/sha256/index.d.ts +2 -2
  117. package/dest/crypto/sha256/index.d.ts.map +1 -1
  118. package/dest/crypto/sha256/index.js +1 -1
  119. package/dest/crypto/sha512/index.d.ts +3 -3
  120. package/dest/crypto/sha512/index.d.ts.map +1 -1
  121. package/dest/crypto/sha512/index.js +1 -1
  122. package/dest/crypto/signature/index.d.ts +2 -2
  123. package/dest/crypto/signature/index.d.ts.map +1 -1
  124. package/dest/crypto/sync/index.d.ts +1 -1
  125. package/dest/crypto/sync/index.js +1 -1
  126. package/dest/crypto/sync/pedersen/index.d.ts +2 -2
  127. package/dest/crypto/sync/pedersen/index.d.ts.map +1 -1
  128. package/dest/crypto/sync/pedersen/index.js +18 -11
  129. package/dest/crypto/sync/poseidon/index.d.ts +2 -2
  130. package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
  131. package/dest/crypto/sync/poseidon/index.js +28 -13
  132. package/dest/{fields/bls12_fields.d.ts → curves/bls12/field.d.ts} +3 -3
  133. package/dest/curves/bls12/field.d.ts.map +1 -0
  134. package/dest/{fields/bls12_fields.js → curves/bls12/field.js} +12 -9
  135. package/dest/curves/bls12/index.d.ts +3 -0
  136. package/dest/curves/bls12/index.d.ts.map +1 -0
  137. package/dest/curves/bls12/index.js +2 -0
  138. package/dest/{fields/bls12_point.d.ts → curves/bls12/point.d.ts} +11 -20
  139. package/dest/curves/bls12/point.d.ts.map +1 -0
  140. package/dest/{fields/bls12_point.js → curves/bls12/point.js} +17 -15
  141. package/dest/curves/bn254/field.d.ts +180 -0
  142. package/dest/curves/bn254/field.d.ts.map +1 -0
  143. package/dest/{fields/fields.js → curves/bn254/field.js} +71 -59
  144. package/dest/curves/bn254/index.d.ts +3 -0
  145. package/dest/curves/bn254/index.d.ts.map +1 -0
  146. package/dest/curves/bn254/index.js +2 -0
  147. package/dest/curves/bn254/point.d.ts +54 -0
  148. package/dest/curves/bn254/point.d.ts.map +1 -0
  149. package/dest/curves/bn254/point.js +143 -0
  150. package/dest/curves/grumpkin/index.d.ts +10 -0
  151. package/dest/curves/grumpkin/index.d.ts.map +1 -0
  152. package/dest/curves/grumpkin/index.js +3 -0
  153. package/dest/{fields → curves/grumpkin}/point.d.ts +13 -13
  154. package/dest/curves/grumpkin/point.d.ts.map +1 -0
  155. package/dest/{fields → curves/grumpkin}/point.js +24 -7
  156. package/dest/decorators/index.d.ts +1 -1
  157. package/dest/decorators/memoize.d.ts +1 -1
  158. package/dest/decorators/memoize.d.ts.map +1 -1
  159. package/dest/error/index.d.ts +4 -4
  160. package/dest/error/index.d.ts.map +1 -1
  161. package/dest/eth-address/index.d.ts +14 -4
  162. package/dest/eth-address/index.d.ts.map +1 -1
  163. package/dest/eth-address/index.js +26 -2
  164. package/dest/eth-signature/eth_signature.d.ts +1 -4
  165. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  166. package/dest/eth-signature/eth_signature.js +2 -4
  167. package/dest/eth-signature/index.d.ts +1 -1
  168. package/dest/fs/index.d.ts +1 -1
  169. package/dest/fs/run_in_dir.d.ts +1 -1
  170. package/dest/fs/try_rm_dir.d.ts +1 -1
  171. package/dest/iterable/all.d.ts +1 -1
  172. package/dest/iterable/filter.d.ts +1 -1
  173. package/dest/iterable/index.d.ts +1 -1
  174. package/dest/iterable/isAsyncIt.d.ts +1 -1
  175. package/dest/iterable/map.d.ts +1 -1
  176. package/dest/iterable/peek.d.ts +1 -1
  177. package/dest/iterable/sort.d.ts +1 -1
  178. package/dest/iterable/take.d.ts +1 -1
  179. package/dest/iterable/toArray.d.ts +1 -1
  180. package/dest/iterator/filter.d.ts +3 -0
  181. package/dest/iterator/filter.d.ts.map +1 -0
  182. package/dest/iterator/filter.js +7 -0
  183. package/dest/iterator/index.d.ts +2 -0
  184. package/dest/iterator/index.d.ts.map +1 -0
  185. package/dest/iterator/index.js +1 -0
  186. package/dest/json-rpc/client/fetch.d.ts +1 -1
  187. package/dest/json-rpc/client/index.d.ts +1 -1
  188. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +1 -1
  189. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
  190. package/dest/json-rpc/client/safe_json_rpc_client.js +9 -0
  191. package/dest/json-rpc/client/undici.d.ts +1 -1
  192. package/dest/json-rpc/convert.d.ts +1 -1
  193. package/dest/json-rpc/errors.d.ts +1 -1
  194. package/dest/json-rpc/errors.d.ts.map +1 -1
  195. package/dest/json-rpc/fixtures/class_a.d.ts +3 -3
  196. package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
  197. package/dest/json-rpc/fixtures/class_b.d.ts +3 -3
  198. package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -1
  199. package/dest/json-rpc/fixtures/test_state.d.ts +1 -1
  200. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
  201. package/dest/json-rpc/index.d.ts +1 -1
  202. package/dest/json-rpc/js_utils.d.ts +1 -1
  203. package/dest/json-rpc/js_utils.d.ts.map +1 -1
  204. package/dest/json-rpc/server/index.d.ts +1 -1
  205. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +1 -1
  206. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
  207. package/dest/json-rpc/test/index.d.ts +1 -1
  208. package/dest/json-rpc/test/integration.d.ts +1 -1
  209. package/dest/log/console.d.ts +1 -1
  210. package/dest/log/gcloud-logger-config.d.ts +1 -1
  211. package/dest/log/gcloud-logger-config.d.ts.map +1 -1
  212. package/dest/log/index.d.ts +1 -1
  213. package/dest/log/libp2p_logger.d.ts +1 -1
  214. package/dest/log/log-filters.d.ts +1 -1
  215. package/dest/log/log-levels.d.ts +1 -1
  216. package/dest/log/log_fn.d.ts +2 -2
  217. package/dest/log/log_fn.d.ts.map +1 -1
  218. package/dest/log/noir_debug_log_util.d.ts +1 -1
  219. package/dest/log/pino-logger.d.ts +2 -2
  220. package/dest/log/pino-logger.d.ts.map +1 -1
  221. package/dest/log/pino-logger.js +0 -1
  222. package/dest/message/index.d.ts +1 -1
  223. package/dest/message/index.d.ts.map +1 -1
  224. package/dest/mutex/index.d.ts +1 -1
  225. package/dest/mutex/index.d.ts.map +1 -1
  226. package/dest/mutex/mutex_database.d.ts +1 -1
  227. package/dest/noir/index.d.ts +1 -1
  228. package/dest/noir/noir_package_config.d.ts +9 -9
  229. package/dest/number/index.d.ts +1 -1
  230. package/dest/profiler/index.d.ts +2 -0
  231. package/dest/profiler/index.d.ts.map +1 -0
  232. package/dest/profiler/index.js +1 -0
  233. package/dest/profiler/profiler.d.ts +8 -0
  234. package/dest/profiler/profiler.d.ts.map +1 -0
  235. package/dest/profiler/profiler.js +97 -0
  236. package/dest/promise/index.d.ts +1 -1
  237. package/dest/promise/running-promise.d.ts +1 -1
  238. package/dest/promise/running-promise.d.ts.map +1 -1
  239. package/dest/promise/utils.d.ts +1 -1
  240. package/dest/queue/base_memory_queue.d.ts +1 -1
  241. package/dest/queue/base_memory_queue.d.ts.map +1 -1
  242. package/dest/queue/batch_queue.d.ts +1 -1
  243. package/dest/queue/batch_queue.d.ts.map +1 -1
  244. package/dest/queue/bounded_serial_queue.d.ts +1 -1
  245. package/dest/queue/bounded_serial_queue.d.ts.map +1 -1
  246. package/dest/queue/fifo_memory_queue.d.ts +1 -1
  247. package/dest/queue/fifo_memory_queue.d.ts.map +1 -1
  248. package/dest/queue/index.d.ts +1 -1
  249. package/dest/queue/priority_memory_queue.d.ts +1 -1
  250. package/dest/queue/priority_memory_queue.d.ts.map +1 -1
  251. package/dest/queue/priority_queue.d.ts +1 -1
  252. package/dest/queue/priority_queue.d.ts.map +1 -1
  253. package/dest/queue/semaphore.d.ts +1 -1
  254. package/dest/queue/semaphore.d.ts.map +1 -1
  255. package/dest/queue/serial_queue.d.ts +1 -1
  256. package/dest/queue/serial_queue.d.ts.map +1 -1
  257. package/dest/retry/index.d.ts +1 -1
  258. package/dest/running-promise/index.d.ts +1 -1
  259. package/dest/schemas/api.d.ts +1 -1
  260. package/dest/schemas/index.d.ts +1 -1
  261. package/dest/schemas/parse.d.ts +1 -1
  262. package/dest/schemas/schemas.d.ts +15 -17
  263. package/dest/schemas/schemas.d.ts.map +1 -1
  264. package/dest/schemas/schemas.js +14 -10
  265. package/dest/schemas/types.d.ts +31 -1
  266. package/dest/schemas/types.d.ts.map +1 -1
  267. package/dest/schemas/types.js +25 -1
  268. package/dest/schemas/utils.d.ts +4 -4
  269. package/dest/schemas/utils.d.ts.map +1 -1
  270. package/dest/schemas/utils.js +15 -5
  271. package/dest/serialize/buffer_reader.d.ts +3 -1
  272. package/dest/serialize/buffer_reader.d.ts.map +1 -1
  273. package/dest/serialize/buffer_reader.js +3 -0
  274. package/dest/serialize/field_reader.d.ts +2 -2
  275. package/dest/serialize/field_reader.d.ts.map +1 -1
  276. package/dest/serialize/field_reader.js +1 -1
  277. package/dest/serialize/free_funcs.d.ts +2 -2
  278. package/dest/serialize/free_funcs.d.ts.map +1 -1
  279. package/dest/serialize/free_funcs.js +1 -1
  280. package/dest/serialize/index.d.ts +1 -1
  281. package/dest/serialize/serialize.d.ts +2 -2
  282. package/dest/serialize/serialize.d.ts.map +1 -1
  283. package/dest/serialize/serialize.js +1 -1
  284. package/dest/serialize/type_registry.d.ts +1 -1
  285. package/dest/serialize/type_registry.d.ts.map +1 -1
  286. package/dest/serialize/types.d.ts +1 -1
  287. package/dest/sleep/index.d.ts +3 -1
  288. package/dest/sleep/index.d.ts.map +1 -1
  289. package/dest/sleep/index.js +4 -0
  290. package/dest/string/index.d.ts +5 -1
  291. package/dest/string/index.d.ts.map +1 -1
  292. package/dest/string/index.js +19 -2
  293. package/dest/testing/files/index.d.ts +2 -1
  294. package/dest/testing/files/index.d.ts.map +1 -1
  295. package/dest/testing/files/index.js +1 -1
  296. package/dest/testing/formatting.d.ts +4 -0
  297. package/dest/testing/formatting.d.ts.map +1 -0
  298. package/dest/testing/formatting.js +3 -0
  299. package/dest/testing/index.d.ts +2 -1
  300. package/dest/testing/index.d.ts.map +1 -1
  301. package/dest/testing/index.js +1 -0
  302. package/dest/testing/port_allocator.d.ts +1 -1
  303. package/dest/testing/snapshot_serializer.d.ts +1 -1
  304. package/dest/testing/test_data.d.ts +1 -1
  305. package/dest/timer/date.d.ts +2 -1
  306. package/dest/timer/date.d.ts.map +1 -1
  307. package/dest/timer/date.js +3 -0
  308. package/dest/timer/elapsed.d.ts +1 -1
  309. package/dest/timer/index.d.ts +1 -1
  310. package/dest/timer/timeout.d.ts +1 -1
  311. package/dest/timer/timeout.d.ts.map +1 -1
  312. package/dest/timer/timer.d.ts +1 -1
  313. package/dest/timer/timer.d.ts.map +1 -1
  314. package/dest/transport/dispatch/create_dispatch_fn.d.ts +1 -1
  315. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
  316. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +1 -1
  317. package/dest/transport/dispatch/messages.d.ts +1 -1
  318. package/dest/transport/index.d.ts +1 -1
  319. package/dest/transport/interface/connector.d.ts +1 -1
  320. package/dest/transport/interface/listener.d.ts +1 -1
  321. package/dest/transport/interface/socket.d.ts +1 -1
  322. package/dest/transport/interface/transferable.d.ts +1 -1
  323. package/dest/transport/node/index.d.ts +1 -1
  324. package/dest/transport/node/node_connector.d.ts +1 -1
  325. package/dest/transport/node/node_connector.d.ts.map +1 -1
  326. package/dest/transport/node/node_connector_socket.d.ts +1 -1
  327. package/dest/transport/node/node_connector_socket.d.ts.map +1 -1
  328. package/dest/transport/node/node_listener.d.ts +1 -1
  329. package/dest/transport/node/node_listener.d.ts.map +1 -1
  330. package/dest/transport/node/node_listener_socket.d.ts +1 -1
  331. package/dest/transport/node/node_listener_socket.d.ts.map +1 -1
  332. package/dest/transport/transport_client.d.ts +1 -1
  333. package/dest/transport/transport_client.d.ts.map +1 -1
  334. package/dest/transport/transport_server.d.ts +1 -10
  335. package/dest/transport/transport_server.d.ts.map +1 -1
  336. package/dest/trees/balanced_merkle_tree.d.ts +22 -0
  337. package/dest/trees/balanced_merkle_tree.d.ts.map +1 -0
  338. package/dest/trees/balanced_merkle_tree.js +66 -0
  339. package/dest/trees/hasher.d.ts +1 -1
  340. package/dest/trees/index.d.ts +2 -1
  341. package/dest/trees/index.d.ts.map +1 -1
  342. package/dest/trees/index.js +1 -0
  343. package/dest/trees/indexed_merkle_tree.d.ts +1 -1
  344. package/dest/trees/indexed_merkle_tree.d.ts.map +1 -1
  345. package/dest/trees/indexed_merkle_tree.js +1 -1
  346. package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -1
  347. package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
  348. package/dest/trees/indexed_tree_leaf.d.ts +1 -1
  349. package/dest/trees/membership_witness.d.ts +3 -24
  350. package/dest/trees/membership_witness.d.ts.map +1 -1
  351. package/dest/trees/membership_witness.js +1 -1
  352. package/dest/trees/merkle_tree.d.ts +1 -1
  353. package/dest/trees/merkle_tree.d.ts.map +1 -1
  354. package/dest/trees/merkle_tree_calculator.d.ts +2 -12
  355. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
  356. package/dest/trees/merkle_tree_calculator.js +1 -31
  357. package/dest/trees/sibling_path.d.ts +5 -39
  358. package/dest/trees/sibling_path.d.ts.map +1 -1
  359. package/dest/trees/sibling_path.js +2 -2
  360. package/dest/trees/unbalanced_merkle_tree.d.ts +5 -4
  361. package/dest/trees/unbalanced_merkle_tree.d.ts.map +1 -1
  362. package/dest/trees/unbalanced_merkle_tree.js +33 -10
  363. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts +27 -23
  364. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -1
  365. package/dest/trees/unbalanced_merkle_tree_calculator.js +123 -97
  366. package/dest/trees/unbalanced_tree_store.d.ts +2 -1
  367. package/dest/trees/unbalanced_tree_store.d.ts.map +1 -1
  368. package/dest/trees/unbalanced_tree_store.js +6 -0
  369. package/dest/types/index.d.ts +3 -1
  370. package/dest/types/index.d.ts.map +1 -1
  371. package/dest/types/index.js +3 -0
  372. package/dest/url/index.d.ts +1 -1
  373. package/dest/validation/index.d.ts +1 -1
  374. package/package.json +32 -8
  375. package/src/array/array.ts +0 -16
  376. package/src/array/index.ts +1 -0
  377. package/src/array/sorted_array.ts +133 -0
  378. package/src/branded-types/block_number.ts +112 -0
  379. package/src/branded-types/checkpoint_number.ts +100 -0
  380. package/src/branded-types/epoch.ts +88 -0
  381. package/src/branded-types/index.ts +6 -0
  382. package/src/branded-types/slot.ts +88 -0
  383. package/src/branded-types/types.ts +2 -0
  384. package/src/buffer/buffer16.ts +2 -2
  385. package/src/buffer/buffer32.ts +2 -2
  386. package/src/collection/array.ts +15 -3
  387. package/src/collection/object.ts +8 -0
  388. package/src/config/env_var.ts +44 -10
  389. package/src/config/index.ts +22 -2
  390. package/src/config/network_config.ts +18 -0
  391. package/src/config/network_name.ts +18 -3
  392. package/src/crypto/aes128/index.ts +19 -10
  393. package/src/crypto/bls/bn254_keystore.ts +287 -0
  394. package/src/crypto/bls/index.ts +77 -0
  395. package/src/crypto/bn254/index.ts +64 -0
  396. package/src/crypto/ecdsa/index.ts +40 -37
  397. package/src/crypto/ecdsa/signature.ts +2 -2
  398. package/src/crypto/grumpkin/index.ts +38 -46
  399. package/src/crypto/keys/index.ts +6 -6
  400. package/src/crypto/pedersen/pedersen.wasm.ts +23 -19
  401. package/src/crypto/poseidon/index.ts +33 -25
  402. package/src/crypto/schnorr/index.ts +22 -18
  403. package/src/crypto/schnorr/signature.ts +2 -2
  404. package/src/crypto/secp256k1/index.ts +15 -11
  405. package/src/crypto/secp256k1-signer/utils.ts +115 -7
  406. package/src/crypto/sha256/index.ts +1 -1
  407. package/src/crypto/sha512/index.ts +1 -1
  408. package/src/crypto/signature/index.ts +1 -1
  409. package/src/crypto/sync/index.ts +1 -1
  410. package/src/crypto/sync/pedersen/index.ts +17 -16
  411. package/src/crypto/sync/poseidon/index.ts +28 -23
  412. package/src/{fields/bls12_fields.ts → curves/bls12/field.ts} +6 -6
  413. package/src/curves/bls12/index.ts +2 -0
  414. package/src/{fields/bls12_point.ts → curves/bls12/point.ts} +14 -14
  415. package/src/{fields/fields.ts → curves/bn254/field.ts} +69 -62
  416. package/src/curves/bn254/index.ts +2 -0
  417. package/src/curves/bn254/point.ts +170 -0
  418. package/src/curves/grumpkin/index.ts +11 -0
  419. package/src/{fields → curves/grumpkin}/point.ts +26 -7
  420. package/src/eth-address/index.ts +28 -3
  421. package/src/eth-signature/eth_signature.ts +2 -4
  422. package/src/iterator/filter.ts +11 -0
  423. package/src/iterator/index.ts +1 -0
  424. package/src/json-rpc/client/safe_json_rpc_client.ts +9 -0
  425. package/src/log/log_fn.ts +1 -1
  426. package/src/log/pino-logger.ts +0 -1
  427. package/src/profiler/index.ts +1 -0
  428. package/src/profiler/profiler.ts +125 -0
  429. package/src/schemas/schemas.ts +24 -13
  430. package/src/schemas/types.ts +33 -0
  431. package/src/schemas/utils.ts +21 -8
  432. package/src/serialize/buffer_reader.ts +5 -0
  433. package/src/serialize/field_reader.ts +1 -1
  434. package/src/serialize/free_funcs.ts +1 -1
  435. package/src/serialize/serialize.ts +1 -1
  436. package/src/sleep/index.ts +6 -0
  437. package/src/string/index.ts +24 -1
  438. package/src/testing/files/index.ts +1 -1
  439. package/src/testing/formatting.ts +3 -0
  440. package/src/testing/index.ts +1 -0
  441. package/src/timer/date.ts +4 -0
  442. package/src/trees/balanced_merkle_tree.ts +84 -0
  443. package/src/trees/index.ts +1 -0
  444. package/src/trees/indexed_merkle_tree.ts +1 -1
  445. package/src/trees/membership_witness.ts +1 -1
  446. package/src/trees/merkle_tree_calculator.ts +1 -34
  447. package/src/trees/sibling_path.ts +2 -2
  448. package/src/trees/unbalanced_merkle_tree.ts +55 -7
  449. package/src/trees/unbalanced_merkle_tree_calculator.ts +134 -93
  450. package/src/trees/unbalanced_tree_store.ts +5 -1
  451. package/src/types/index.ts +5 -0
  452. package/dest/crypto/index.d.ts +0 -15
  453. package/dest/crypto/index.d.ts.map +0 -1
  454. package/dest/crypto/index.js +0 -14
  455. package/dest/fields/bls12_fields.d.ts.map +0 -1
  456. package/dest/fields/bls12_point.d.ts.map +0 -1
  457. package/dest/fields/coordinate.d.ts +0 -66
  458. package/dest/fields/coordinate.d.ts.map +0 -1
  459. package/dest/fields/coordinate.js +0 -96
  460. package/dest/fields/fields.d.ts +0 -174
  461. package/dest/fields/fields.d.ts.map +0 -1
  462. package/dest/fields/index.d.ts +0 -6
  463. package/dest/fields/index.d.ts.map +0 -1
  464. package/dest/fields/index.js +0 -5
  465. package/dest/fields/point.d.ts.map +0 -1
  466. package/dest/index.d.ts +0 -29
  467. package/dest/index.d.ts.map +0 -1
  468. package/dest/index.js +0 -29
  469. package/dest/json-rpc/server/telemetry.d.ts +0 -2
  470. package/dest/json-rpc/server/telemetry.d.ts.map +0 -1
  471. package/dest/json-rpc/server/telemetry.js +0 -0
  472. package/src/crypto/index.ts +0 -14
  473. package/src/fields/coordinate.ts +0 -104
  474. package/src/fields/index.ts +0 -5
  475. package/src/index.ts +0 -29
  476. package/src/json-rpc/server/telemetry.ts +0 -0
@@ -1,10 +1,10 @@
1
- import { toBigIntBE } from '../bigint-buffer/index.js';
2
- import { poseidon2Hash } from '../crypto/poseidon/index.js';
3
- import { randomBoolean } from '../crypto/random/index.js';
4
- import { hexSchemaFor } from '../schemas/utils.js';
5
- import { BufferReader, FieldReader, serializeToBuffer } from '../serialize/index.js';
6
- import { bufferToHex, hexToBuffer } from '../string/index.js';
7
- import { Fr } from './fields.js';
1
+ import { toBigIntBE } from '../../bigint-buffer/index.js';
2
+ import { poseidon2Hash } from '../../crypto/poseidon/index.js';
3
+ import { randomBoolean } from '../../crypto/random/index.js';
4
+ import { hexSchemaFor } from '../../schemas/utils.js';
5
+ import { BufferReader, FieldReader, serializeToBuffer } from '../../serialize/index.js';
6
+ import { bufferToHex, hexToBuffer } from '../../string/index.js';
7
+ import { Fr } from '../bn254/field.js';
8
8
 
9
9
  /**
10
10
  * Represents a Point on an elliptic curve with x and y coordinates.
@@ -42,9 +42,28 @@ export class Point {
42
42
  }
43
43
 
44
44
  static get schema() {
45
+ // Serialization from hex string.
45
46
  return hexSchemaFor(Point);
46
47
  }
47
48
 
49
+ /**
50
+ * Creates a Point from a plain object without Zod validation.
51
+ * This method is optimized for performance and skips validation, making it suitable
52
+ * for deserializing trusted data (e.g., from C++ via MessagePack).
53
+ * Handles buffers, existing instances, or objects with x, y, and isInfinite fields.
54
+ * @param obj - Plain object, buffer, or Point instance
55
+ * @returns A Point instance
56
+ */
57
+ static fromPlainObject(obj: any): Point {
58
+ if (obj instanceof Point) {
59
+ return obj;
60
+ }
61
+ if (obj instanceof Buffer || Buffer.isBuffer(obj)) {
62
+ return Point.fromBuffer(obj);
63
+ }
64
+ return new Point(Fr.fromPlainObject(obj.x), Fr.fromPlainObject(obj.y), obj.isInfinite ?? false);
65
+ }
66
+
48
67
  /**
49
68
  * Generate a random Point instance.
50
69
  *
@@ -2,7 +2,7 @@ import { inspect } from 'util';
2
2
 
3
3
  import { keccak256String } from '../crypto/keccak/index.js';
4
4
  import { randomBytes } from '../crypto/random/index.js';
5
- import { Fr } from '../fields/index.js';
5
+ import { Fr } from '../curves/bn254/index.js';
6
6
  import { hexSchemaFor } from '../schemas/utils.js';
7
7
  import { BufferReader, FieldReader } from '../serialize/index.js';
8
8
  import { TypeRegistry } from '../serialize/type_registry.js';
@@ -41,6 +41,24 @@ export class EthAddress {
41
41
  return new EthAddress(Buffer.from(address.replace(/^0x/i, ''), 'hex'));
42
42
  }
43
43
 
44
+ /**
45
+ * Creates an EthAddress from a plain object without Zod validation.
46
+ * This method is optimized for performance and skips validation, making it suitable
47
+ * for deserializing trusted data (e.g., from C++ via MessagePack).
48
+ * Handles buffers (20 or 32 bytes), strings, or existing instances.
49
+ * @param obj - Plain object, buffer, string, or EthAddress instance
50
+ * @returns An EthAddress instance
51
+ */
52
+ public static fromPlainObject(obj: any): EthAddress {
53
+ if (obj instanceof EthAddress) {
54
+ return obj;
55
+ }
56
+ if (obj instanceof Buffer || Buffer.isBuffer(obj)) {
57
+ return obj.length === 20 ? new EthAddress(obj) : EthAddress.fromField(new Fr(obj));
58
+ }
59
+ return EthAddress.fromString(obj);
60
+ }
61
+
44
62
  /**
45
63
  * Create a random EthAddress instance with 20 random bytes.
46
64
  * This method generates a new Ethereum address with a randomly generated set of 20 bytes.
@@ -117,14 +135,14 @@ export class EthAddress {
117
135
  * @param address - The Ethereum address as a hex-encoded string.
118
136
  * @returns The Ethereum address in its checksum format.
119
137
  */
120
- public static toChecksumAddress(address: string) {
138
+ public static toChecksumAddress(address: string): `0x${string}` {
121
139
  if (!EthAddress.isAddress(address)) {
122
140
  throw new Error('Invalid address string.');
123
141
  }
124
142
 
125
143
  address = address.toLowerCase().replace(/^0x/i, '');
126
144
  const addressHash = keccak256String(address);
127
- let checksumAddress = '0x';
145
+ let checksumAddress: `0x${string}` = '0x';
128
146
 
129
147
  for (let i = 0; i < address.length; i++) {
130
148
  // If ith character is 9 to f then make it uppercase.
@@ -240,8 +258,15 @@ export class EthAddress {
240
258
  }
241
259
 
242
260
  static get schema() {
261
+ // Serialization from hex string.
243
262
  return hexSchemaFor(EthAddress, EthAddress.isAddress);
244
263
  }
264
+
265
+ static areEqual(a: EthAddress | string, b: EthAddress | string) {
266
+ const addrA = typeof a === 'string' ? EthAddress.fromString(a) : a;
267
+ const addrB = typeof b === 'string' ? EthAddress.fromString(b) : b;
268
+ return addrA.equals(addrB);
269
+ }
245
270
  }
246
271
 
247
272
  // For deserializing JSON.
@@ -78,7 +78,7 @@ export class Signature {
78
78
  }
79
79
 
80
80
  static random(): Signature {
81
- return new Signature(Buffer32.random(), Buffer32.random(), Math.floor(Math.random() * 2));
81
+ return new Signature(Buffer32.random(), Buffer32.random(), 1);
82
82
  }
83
83
 
84
84
  static empty(): Signature {
@@ -94,9 +94,7 @@ export class Signature {
94
94
  }
95
95
 
96
96
  toBuffer(): Buffer {
97
- const buffer = serializeToBuffer([this.r, this.s, this.v]);
98
- this.size = buffer.length;
99
- return buffer;
97
+ return serializeToBuffer([this.r, this.s, this.v]);
100
98
  }
101
99
 
102
100
  getSize(): number {
@@ -0,0 +1,11 @@
1
+ /** Wraps an async iterable iterator such that it filters values based on a predicate. */
2
+ export async function* filter<T>(
3
+ iterator: AsyncIterableIterator<T>,
4
+ predicate: (item: T) => boolean | Promise<boolean>,
5
+ ): AsyncIterableIterator<T> {
6
+ for await (const item of iterator) {
7
+ if (await predicate(item)) {
8
+ yield item;
9
+ }
10
+ }
11
+ }
@@ -0,0 +1 @@
1
+ export { filter } from './filter.js';
@@ -178,6 +178,15 @@ export function createSafeJsonRpcClient<T extends object>(
178
178
  }
179
179
  }
180
180
  } catch (err) {
181
+ // Re-throw ComponentsVersionsError immediately without converting to JSON-RPC error
182
+ // This ensures version mismatch errors are surfaced to the user instead of being hidden
183
+ if (err && typeof err === 'object' && 'name' in err && err.name === 'ComponentsVersionsError') {
184
+ // Reject all pending requests with the version error
185
+ for (let i = 0; i < rpcCalls.length; i++) {
186
+ rpcCalls[i].deferred.reject(err);
187
+ }
188
+ return; // Return early, the promises are already rejected
189
+ }
181
190
  log.warn(`Failed to fetch from the remote server`, err);
182
191
  for (let i = 0; i < rpcCalls.length; i++) {
183
192
  const { request, deferred } = rpcCalls[i];
package/src/log/log_fn.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Structured log data to include with the message. */
2
- export type LogData = Record<string, string | number | bigint | boolean | { toString(): string } | undefined>;
2
+ export type LogData = Record<string, string | number | bigint | boolean | { toString(): string } | undefined | null>;
3
3
 
4
4
  /** A callable logger instance. */
5
5
  export type LogFn = (msg: string, data?: unknown) => void;
@@ -111,7 +111,6 @@ const redactedPaths = [
111
111
  // bot keys
112
112
  'l1PrivateKey',
113
113
  'senderPrivateKey',
114
- 'recipientEncryptionSecret',
115
114
  // blob sink
116
115
  'l1ConsensusHostApiKeys',
117
116
  // sensitive options used in the CLI
@@ -0,0 +1 @@
1
+ export * from './profiler.js';
@@ -0,0 +1,125 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import { performance } from 'node:perf_hooks';
5
+
6
+ interface Span {
7
+ label: string;
8
+ start: number;
9
+ dur: number;
10
+ count: number;
11
+ children: Span[];
12
+ parent: Span | undefined;
13
+ }
14
+
15
+ interface ProfileData {
16
+ spans: SerializedSpan[];
17
+ timestamp: string;
18
+ totalTime: number;
19
+ }
20
+
21
+ interface SerializedSpan {
22
+ label: string;
23
+ dur: number;
24
+ count: number;
25
+ children: SerializedSpan[];
26
+ }
27
+
28
+ const als = new AsyncLocalStorage<Span>();
29
+ const roots: Span[] = [];
30
+
31
+ function reset(): void {
32
+ roots.length = 0;
33
+ }
34
+
35
+ // Strip out circular references (parent) and unused fields (start) for JSON serialization
36
+ function serializeSpans(spans: Span[]): SerializedSpan[] {
37
+ return spans.map(span => ({
38
+ label: span.label,
39
+ dur: span.dur,
40
+ count: span.count,
41
+ children: serializeSpans(span.children),
42
+ }));
43
+ }
44
+
45
+ let i = 0;
46
+ function save(): void {
47
+ if (roots.length === 0) {
48
+ return;
49
+ }
50
+
51
+ // Find max single execution time across all spans (dur/count since dur is accumulated)
52
+ const findMaxSingleDuration = (spans: Span[]): number => {
53
+ let max = 0;
54
+ for (const span of spans) {
55
+ const singleDur = span.dur / span.count;
56
+ max = Math.max(max, singleDur);
57
+ if (span.children.length > 0) {
58
+ max = Math.max(max, findMaxSingleDuration(span.children));
59
+ }
60
+ }
61
+ return max;
62
+ };
63
+
64
+ const profileData: ProfileData = {
65
+ spans: serializeSpans(roots),
66
+ timestamp: new Date().toISOString(),
67
+ totalTime: findMaxSingleDuration(roots),
68
+ };
69
+
70
+ const profilePath = path.join(process.cwd(), `profile-${i++}.json`);
71
+ process.stdout.write(`Writing profile data to ${profilePath}\n`);
72
+ fs.writeFileSync(profilePath, JSON.stringify(profileData, null, 2));
73
+ }
74
+
75
+ // Hook into Jest to save after each test
76
+ if (typeof afterEach === 'function') {
77
+ afterEach(() => {
78
+ save();
79
+ reset();
80
+ });
81
+ }
82
+
83
+ // Also save on process exit for non-Jest environments
84
+ process.on('exit', () => {
85
+ save();
86
+ });
87
+
88
+ // Wrapper for async functions to maintain context properly
89
+ async function runAsync<ReturnType>(label: string, fn: () => Promise<ReturnType>): Promise<ReturnType> {
90
+ const parent = als.getStore();
91
+
92
+ // Check if we already have a span with this label in the current context
93
+ let existingSpan: Span | undefined;
94
+ if (parent) {
95
+ existingSpan = parent.children.find(c => c.label === label);
96
+ } else {
97
+ existingSpan = roots.find(r => r.label === label);
98
+ }
99
+
100
+ let span: Span;
101
+ if (existingSpan) {
102
+ // Reuse existing span and increment count
103
+ span = existingSpan;
104
+ span.count++;
105
+ } else {
106
+ // Create new span
107
+ span = { label, start: performance.now(), dur: 0, count: 1, children: [], parent };
108
+ if (parent) {
109
+ parent.children.push(span);
110
+ } else {
111
+ roots.push(span);
112
+ }
113
+ }
114
+
115
+ const startTime = performance.now();
116
+ const result: ReturnType = await als.run(span, fn);
117
+ const elapsed = performance.now() - startTime;
118
+
119
+ // Add to total duration (for averaging)
120
+ span.dur += elapsed;
121
+
122
+ return result;
123
+ }
124
+
125
+ export const profiler = { reset, runAsync };
@@ -1,14 +1,22 @@
1
1
  import { z } from 'zod';
2
2
 
3
+ import { EpochNumber, EpochNumberSchema } from '../branded-types/epoch.js';
4
+ import { SlotNumber, SlotNumberSchema } from '../branded-types/slot.js';
3
5
  import { Buffer32 } from '../buffer/buffer32.js';
4
6
  import { SecretValue } from '../config/secret_value.js';
7
+ import { Fq, Fr } from '../curves/bn254/field.js';
8
+ import { Point } from '../curves/grumpkin/point.js';
5
9
  import { EthAddress } from '../eth-address/index.js';
6
- import { Fq, Fr } from '../fields/fields.js';
7
- import { Point } from '../fields/point.js';
8
- import { isHex, withoutHexPrefix } from '../string/index.js';
10
+ import { isHex, withHexPrefix, withoutHexPrefix } from '../string/index.js';
9
11
  import { bufferSchema, hexSchema } from './utils.js';
10
12
 
11
13
  export const schemas = {
14
+ /** Accepts a number, bigint, or string as an EpochNumber. */
15
+ EpochNumber: EpochNumberSchema,
16
+
17
+ /** Accepts a number, bigint, or string as a SlotNumber. */
18
+ SlotNumber: SlotNumberSchema,
19
+
12
20
  /** Accepts a hex string. */
13
21
  EthAddress: EthAddress.schema,
14
22
 
@@ -50,19 +58,19 @@ export const schemas = {
50
58
  .max(2 ** 32 - 1),
51
59
  ),
52
60
 
61
+ /** Coerces input to UInt64. */
62
+ UInt64: z.union([z.bigint(), z.number(), z.string()]).pipe(
63
+ z.coerce
64
+ .bigint()
65
+ .min(0n)
66
+ .max(2n ** 64n - 1n),
67
+ ),
68
+
53
69
  /** Accepts a hex string as a Buffer32 type. */
54
70
  Buffer32: z.string().refine(isHex, 'Not a valid hex string').transform(Buffer32.fromString),
55
71
 
56
72
  /** Accepts a base64 string or an object `{ type: 'Buffer', data: [byte, byte...] }` as a buffer. */
57
- Buffer: z.union([
58
- bufferSchema,
59
- z
60
- .object({
61
- type: z.literal('Buffer'),
62
- data: z.array(z.number().int().min(0).max(255)),
63
- })
64
- .transform(({ data }) => Buffer.from(data)),
65
- ]),
73
+ Buffer: bufferSchema,
66
74
 
67
75
  /** Accepts a hex string as a buffer. */
68
76
  BufferHex: z
@@ -74,9 +82,12 @@ export const schemas = {
74
82
  /** Hex string with an optional 0x prefix which gets removed as part of the parsing. */
75
83
  HexString: hexSchema,
76
84
 
85
+ /** Hex string with an optional 0x prefix which gets enforced as part of the parsing. */
86
+ HexStringWith0x: z.string().refine(isHex, 'Not a valid hex string').transform(withHexPrefix),
87
+
77
88
  /** A secret config value */
78
89
  SecretValue: SecretValue.schema,
79
90
  };
80
91
 
81
92
  // These are needed to avoid errors such as: "The inferred type of 'YourClassSchema' cannot be named without a reference to..."
82
- export type { EthAddress, Fq, Fr, Point };
93
+ export type { EpochNumber, EthAddress, Fq, Fr, Point, SlotNumber };
@@ -1,3 +1,36 @@
1
1
  import type { ZodType } from 'zod';
2
2
 
3
3
  export type ZodFor<T> = ZodType<T, any, any>;
4
+
5
+ /**
6
+ * Creates a schema validator that enforces all properties of type T are present in the schema.
7
+ * This provides compile-time safety to ensure schemas don't miss optional properties.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * interface MyConfig {
12
+ * foo: string;
13
+ * bar?: number;
14
+ * }
15
+ *
16
+ * // ✅ This will work - all keys present
17
+ * const schema1 = zodFor<MyConfig>()(z.object({
18
+ * foo: z.string(),
19
+ * bar: z.number().optional(),
20
+ * }));
21
+ *
22
+ * // ❌ This will error - 'bar' is missing
23
+ * const schema2 = zodFor<MyConfig>()(z.object({
24
+ * foo: z.string(),
25
+ * }));
26
+ * ```
27
+ */
28
+ export function zodFor<T>() {
29
+ return (schema => schema) as <S extends ZodType<any, any, any>>(
30
+ schema: keyof T extends keyof S['_output']
31
+ ? keyof S['_output'] extends keyof T
32
+ ? S
33
+ : S & { __error__: 'Schema has extra keys not in type'; __extra__: Exclude<keyof S['_output'], keyof T> }
34
+ : S & { __error__: 'Schema is missing keys from type'; __missing__: Exclude<keyof T, keyof S['_output']> },
35
+ ) => S;
36
+ }
@@ -21,13 +21,25 @@ export const hexSchema = z.string().refine(isHex, 'Not a valid hex string').tran
21
21
  // Copied from zod internals, which was copied from https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript
22
22
  const base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;
23
23
 
24
- /** Schema for a buffer represented as a base64 string. */
25
- export const bufferSchema = z
26
- .string()
27
- // We only test the str for base64 if it's shorter than 1024 bytes, otherwise we've run into maximum
28
- // stack size exceeded errors when trying to validate excessively long strings (such as contract bytecode).
29
- .refine(str => str.length > 1024 || base64Regex.test(str), 'Not a valid base64 string')
30
- .transform(data => Buffer.from(data, 'base64'));
24
+ /** Schema for a buffer represented as a base64 string or a Buffer object. */
25
+ export const bufferSchema: ZodFor<Buffer> = z.union([
26
+ // Serialization from base64 string.
27
+ z
28
+ .string()
29
+ // We only test the str for base64 if it's shorter than 1024 bytes, otherwise we've run into maximum
30
+ // stack size exceeded errors when trying to validate excessively long strings (such as contract bytecode).
31
+ .refine(str => str.length > 1024 || base64Regex.test(str), 'Not a valid base64 string')
32
+ .transform(data => Buffer.from(data, 'base64')),
33
+ // Serialization from Buffer-annotated object.
34
+ z
35
+ .object({
36
+ type: z.literal('Buffer'),
37
+ data: z.array(z.number().int().min(0).max(255)),
38
+ })
39
+ .transform(({ data }) => Buffer.from(data)),
40
+ // Serialization from Buffer
41
+ z.instanceof(Buffer),
42
+ ]);
31
43
 
32
44
  export class ZodNullableOptional<T extends ZodTypeAny> extends ZodOptional<T> {
33
45
  _isNullableOptional = true;
@@ -88,12 +100,13 @@ export function hexSchemaFor<TClass extends { fromString(str: string): any } | {
88
100
  */
89
101
  export function bufferSchemaFor<TClass extends { fromBuffer(buf: Buffer): any }>(
90
102
  klazz: TClass,
103
+ refinement?: (buf: Buffer) => boolean,
91
104
  ): ZodType<
92
105
  TClass extends { fromBuffer(buf: Buffer): infer TInstance } ? ToJsonIs<TInstance, Buffer> : never,
93
106
  any,
94
107
  string
95
108
  > {
96
- return bufferSchema.transform(klazz.fromBuffer.bind(klazz));
109
+ return bufferSchema.refine(refinement ?? (() => true), 'Not a valid buffer').transform(klazz.fromBuffer.bind(klazz));
97
110
  }
98
111
 
99
112
  /** Creates a schema for a js Map type that matches the serialization used in jsonStringify. */
@@ -130,6 +130,11 @@ export class BufferReader {
130
130
  return result;
131
131
  }
132
132
 
133
+ /** Alias for readUInt256 */
134
+ public readBigInt(): bigint {
135
+ return this.readUInt256();
136
+ }
137
+
133
138
  /**
134
139
  * Reads a 16-bit unsigned integer from the buffer at the current index position.
135
140
  * Updates the index position by 2 bytes after reading the number.
@@ -1,4 +1,4 @@
1
- import { Fq, type Fr } from '../fields/fields.js';
1
+ import { Fq, type Fr } from '../curves/bn254/field.js';
2
2
  import type { Tuple } from './types.js';
3
3
 
4
4
  /**
@@ -1,5 +1,5 @@
1
1
  import { toBufferBE } from '../bigint-buffer/index.js';
2
- import { Fr } from '../fields/fields.js';
2
+ import { Fr } from '../curves/bn254/field.js';
3
3
  import type { Tuple } from './types.js';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  import { toBigIntBE, toBufferBE } from '../bigint-buffer/index.js';
2
- import { Fr } from '../fields/fields.js';
2
+ import { Fr } from '../curves/bn254/field.js';
3
3
  import { numToUInt32BE } from './free_funcs.js';
4
4
 
5
5
  /**
@@ -73,3 +73,9 @@ export class InterruptibleSleep {
73
73
  export function sleep<T>(ms: number, returnValue?: T): Promise<T> {
74
74
  return new Promise(resolve => setTimeout(() => resolve(returnValue as T), ms));
75
75
  }
76
+
77
+ /** Sleeps until the target date */
78
+ export function sleepUntil<T>(target: Date, now: Date, returnValue?: T): Promise<T> {
79
+ const ms = target.getTime() - now.getTime();
80
+ return sleep(ms, returnValue);
81
+ }
@@ -1,3 +1,6 @@
1
+ /** Parameterized hex string type for specific byte lengths */
2
+ export type Hex<TByteLength extends number> = `0x${string}` & { readonly _length: TByteLength };
3
+
1
4
  export function hasHexPrefix(str: string): str is `0x${string}` {
2
5
  return str.startsWith('0x');
3
6
  }
@@ -39,5 +42,25 @@ export function isoDate(date?: Date) {
39
42
  }
40
43
 
41
44
  export function urlJoin(...args: string[]): string {
42
- return args.map(arg => arg.replace(/\/+$/, '').replace(/^\/+/, '')).join('/');
45
+ const processed = [];
46
+ for (const arg of args) {
47
+ if (arg.length === 0) {
48
+ continue;
49
+ }
50
+
51
+ let start = 0;
52
+ let end = arg.length - 1;
53
+
54
+ while (start <= end && arg[start] === '/') {
55
+ start++;
56
+ }
57
+ while (end >= start && arg[end] === '/') {
58
+ end--;
59
+ }
60
+
61
+ if (start < end) {
62
+ processed.push(arg.slice(start, end + 1));
63
+ }
64
+ }
65
+ return processed.join('/');
43
66
  }
@@ -63,7 +63,7 @@ export function updateProtocolCircuitSampleInputs(circuitName: string, value: st
63
63
  logger(`Updated test data in ${targetFile} for ${circuitName}`);
64
64
  }
65
65
 
66
- function getPathToFile(targetFileFromRepoRoot: string) {
66
+ export function getPathToFile(targetFileFromRepoRoot: string) {
67
67
  const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../../../../../');
68
68
  if (!existsSync(join(repoRoot, 'CODEOWNERS'))) {
69
69
  throw new Error(`Path to repo root is incorrect (got ${repoRoot})`);
@@ -0,0 +1,3 @@
1
+ export function toInlineStrArray(arr: { toString: () => string }[]): string {
2
+ return `[${arr.map(f => f.toString()).join(',')}]`;
3
+ }
@@ -1,3 +1,4 @@
1
+ export * from './formatting.js';
1
2
  export * from './snapshot_serializer.js';
2
3
  export * from './port_allocator.js';
3
4
  export * from './test_data.js';
package/src/timer/date.ts CHANGED
@@ -9,6 +9,10 @@ export class DateProvider {
9
9
  public nowInSeconds(): number {
10
10
  return Math.floor(this.now() / 1000);
11
11
  }
12
+
13
+ public nowAsDate(): Date {
14
+ return new Date(this.now());
15
+ }
12
16
  }
13
17
 
14
18
  /** Returns current datetime and allows to override it. */
@@ -0,0 +1,84 @@
1
+ import { pedersenHash as pedersenHashArray } from '@aztec/foundation/crypto/pedersen';
2
+ import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
3
+ import { sha256Trunc } from '@aztec/foundation/crypto/sha256';
4
+
5
+ import type { AsyncHasher, Hasher } from './hasher.js';
6
+
7
+ export const shaMerkleHash: Hasher['hash'] = (left: Buffer, right: Buffer) =>
8
+ sha256Trunc(Buffer.concat([left, right])) as Buffer<ArrayBuffer>;
9
+
10
+ export const pedersenMerkleHash: AsyncHasher['hash'] = async (left: Buffer, right: Buffer) =>
11
+ (await pedersenHashArray([left, right])).toBuffer() as Buffer<ArrayBuffer>;
12
+
13
+ export const poseidonMerkleHash: AsyncHasher['hash'] = async (left: Buffer, right: Buffer) =>
14
+ (await poseidon2Hash([left, right])).toBuffer() as Buffer<ArrayBuffer>;
15
+
16
+ export const computeBalancedShaRoot = (leaves: Buffer[]) => computeBalancedMerkleTreeRoot(leaves);
17
+
18
+ export const computeBalancedPedersenRoot = async (leaves: Buffer[]) =>
19
+ await computeBalancedMerkleTreeRootAsync(leaves, pedersenMerkleHash);
20
+
21
+ export const computeBalancedPoseidonRoot = async (leaves: Buffer[]) =>
22
+ await computeBalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash);
23
+
24
+ /**
25
+ * Computes the Merkle root with the provided leaves **synchronously**.
26
+ * This method uses a synchronous hash function (defaults to `sha256Trunc`).
27
+ *
28
+ * @throws If the number of leaves is not a power of two.
29
+ */
30
+ export function computeBalancedMerkleTreeRoot(leaves: Buffer[], hasher = shaMerkleHash): Buffer {
31
+ const height = getTreeHeight(leaves);
32
+ let nodes = leaves.slice();
33
+
34
+ for (let i = 0; i < height; ++i) {
35
+ let j = 0;
36
+ for (; j < nodes.length / 2; ++j) {
37
+ const l = nodes[j * 2];
38
+ const r = nodes[j * 2 + 1];
39
+ nodes[j] = hasher(l, r);
40
+ }
41
+ nodes = nodes.slice(0, j);
42
+ }
43
+
44
+ return nodes[0];
45
+ }
46
+
47
+ /**
48
+ * Computes the Merkle root with the provided leaves **asynchronously**.
49
+ * This method uses an asynchronous hash function (defaults to `pedersenHash`).
50
+ *
51
+ * @throws If the number of leaves is not a power of two.
52
+ */
53
+ export async function computeBalancedMerkleTreeRootAsync(
54
+ leaves: Buffer[],
55
+ hasher = poseidonMerkleHash,
56
+ ): Promise<Buffer> {
57
+ const height = getTreeHeight(leaves);
58
+ let nodes = leaves.slice();
59
+
60
+ for (let i = 0; i < height; ++i) {
61
+ let j = 0;
62
+ for (; j < nodes.length / 2; ++j) {
63
+ const l = nodes[j * 2];
64
+ const r = nodes[j * 2 + 1];
65
+ nodes[j] = await hasher(l, r);
66
+ }
67
+ nodes = nodes.slice(0, j);
68
+ }
69
+
70
+ return nodes[0];
71
+ }
72
+
73
+ function getTreeHeight(leaves: Buffer[]) {
74
+ if (leaves.length === 0) {
75
+ throw new Error('Cannot compute a Merkle root with no leaves');
76
+ }
77
+
78
+ const height = Math.log2(leaves.length);
79
+ if (!Number.isInteger(height)) {
80
+ throw new Error('Cannot compute a Merkle root with a non-power-of-two number of leaves');
81
+ }
82
+
83
+ return height;
84
+ }
@@ -1,3 +1,4 @@
1
+ export * from './balanced_merkle_tree.js';
1
2
  export * from './unbalanced_merkle_tree.js';
2
3
  export * from './unbalanced_tree_store.js';
3
4
  export * from './merkle_tree_calculator.js';