@aztec/foundation 0.0.1-commit.b655e406 → 0.0.1-commit.d1f2d6c

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 (472) 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 +56 -0
  15. package/dest/branded-types/block_number.d.ts.map +1 -0
  16. package/dest/branded-types/block_number.js +78 -0
  17. package/dest/branded-types/checkpoint_number.d.ts +54 -0
  18. package/dest/branded-types/checkpoint_number.d.ts.map +1 -0
  19. package/dest/branded-types/checkpoint_number.js +77 -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 +7 -0
  24. package/dest/branded-types/index.d.ts.map +1 -0
  25. package/dest/branded-types/index.js +5 -0
  26. package/dest/branded-types/index_within_checkpoint.d.ts +42 -0
  27. package/dest/branded-types/index_within_checkpoint.d.ts.map +1 -0
  28. package/dest/branded-types/index_within_checkpoint.js +59 -0
  29. package/dest/branded-types/slot.d.ts +42 -0
  30. package/dest/branded-types/slot.d.ts.map +1 -0
  31. package/dest/branded-types/slot.js +59 -0
  32. package/dest/branded-types/types.d.ts +5 -0
  33. package/dest/branded-types/types.d.ts.map +1 -0
  34. package/dest/branded-types/types.js +1 -0
  35. package/dest/buffer/buffer16.d.ts +2 -2
  36. package/dest/buffer/buffer16.d.ts.map +1 -1
  37. package/dest/buffer/buffer16.js +4 -2
  38. package/dest/buffer/buffer32.d.ts +2 -2
  39. package/dest/buffer/buffer32.d.ts.map +1 -1
  40. package/dest/buffer/buffer32.js +4 -2
  41. package/dest/buffer/index.d.ts +1 -1
  42. package/dest/collection/array.d.ts +6 -1
  43. package/dest/collection/array.d.ts.map +1 -1
  44. package/dest/collection/array.js +27 -0
  45. package/dest/collection/index.d.ts +1 -1
  46. package/dest/collection/object.d.ts +1 -1
  47. package/dest/committable/committable.d.ts +1 -1
  48. package/dest/committable/committable.d.ts.map +1 -1
  49. package/dest/committable/index.d.ts +1 -1
  50. package/dest/config/env_var.d.ts +2 -2
  51. package/dest/config/env_var.d.ts.map +1 -1
  52. package/dest/config/index.d.ts +15 -4
  53. package/dest/config/index.d.ts.map +1 -1
  54. package/dest/config/index.js +32 -9
  55. package/dest/config/network_config.d.ts +13 -1
  56. package/dest/config/network_config.d.ts.map +1 -1
  57. package/dest/config/network_config.js +3 -1
  58. package/dest/config/network_name.d.ts +1 -1
  59. package/dest/config/parse-env.d.ts +3 -0
  60. package/dest/config/parse-env.d.ts.map +1 -0
  61. package/dest/config/parse-env.js +7 -0
  62. package/dest/config/secret_value.d.ts +1 -1
  63. package/dest/config/secret_value.d.ts.map +1 -1
  64. package/dest/config/secret_value.js +3 -1
  65. package/dest/crypto/aes128/index.d.ts +1 -1
  66. package/dest/crypto/aes128/index.d.ts.map +1 -1
  67. package/dest/crypto/aes128/index.js +2 -6
  68. package/dest/crypto/bls/bn254_keystore.d.ts +15 -15
  69. package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -1
  70. package/dest/crypto/bls/bn254_keystore.js +1 -1
  71. package/dest/crypto/bls/index.d.ts +1 -1
  72. package/dest/crypto/bls/index.js +1 -1
  73. package/dest/crypto/bn254/index.d.ts +35 -51
  74. package/dest/crypto/bn254/index.d.ts.map +1 -1
  75. package/dest/crypto/bn254/index.js +51 -137
  76. package/dest/crypto/ecdsa/index.d.ts +1 -1
  77. package/dest/crypto/ecdsa/index.d.ts.map +1 -1
  78. package/dest/crypto/ecdsa/index.js +4 -12
  79. package/dest/crypto/ecdsa/signature.d.ts +2 -2
  80. package/dest/crypto/ecdsa/signature.d.ts.map +1 -1
  81. package/dest/crypto/ecdsa/signature.js +2 -2
  82. package/dest/crypto/grumpkin/index.d.ts +4 -2
  83. package/dest/crypto/grumpkin/index.d.ts.map +1 -1
  84. package/dest/crypto/grumpkin/index.js +7 -16
  85. package/dest/crypto/keccak/index.d.ts +1 -1
  86. package/dest/crypto/keys/index.d.ts +2 -2
  87. package/dest/crypto/keys/index.d.ts.map +1 -1
  88. package/dest/crypto/keys/index.js +2 -4
  89. package/dest/crypto/pedersen/index.d.ts +1 -1
  90. package/dest/crypto/pedersen/pedersen.noble.d.ts +1 -1
  91. package/dest/crypto/pedersen/pedersen.wasm.d.ts +2 -2
  92. package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
  93. package/dest/crypto/pedersen/pedersen.wasm.js +4 -10
  94. package/dest/crypto/poseidon/index.d.ts +2 -3
  95. package/dest/crypto/poseidon/index.d.ts.map +1 -1
  96. package/dest/crypto/poseidon/index.js +5 -24
  97. package/dest/crypto/random/index.d.ts +1 -1
  98. package/dest/crypto/random/index.d.ts.map +1 -1
  99. package/dest/crypto/random/randomness_singleton.d.ts +2 -2
  100. package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
  101. package/dest/crypto/random/randomness_singleton.js +3 -3
  102. package/dest/crypto/schnorr/index.d.ts +3 -2
  103. package/dest/crypto/schnorr/index.d.ts.map +1 -1
  104. package/dest/crypto/schnorr/index.js +4 -10
  105. package/dest/crypto/schnorr/signature.d.ts +2 -2
  106. package/dest/crypto/schnorr/signature.d.ts.map +1 -1
  107. package/dest/crypto/schnorr/signature.js +2 -2
  108. package/dest/crypto/secp256k1/index.d.ts +1 -1
  109. package/dest/crypto/secp256k1/index.d.ts.map +1 -1
  110. package/dest/crypto/secp256k1/index.js +3 -9
  111. package/dest/crypto/secp256k1-signer/index.d.ts +1 -1
  112. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +1 -1
  113. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -1
  114. package/dest/crypto/secp256k1-signer/utils.d.ts +1 -1
  115. package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
  116. package/dest/crypto/serialize.d.ts +1 -1
  117. package/dest/crypto/sha256/index.d.ts +2 -2
  118. package/dest/crypto/sha256/index.d.ts.map +1 -1
  119. package/dest/crypto/sha256/index.js +1 -1
  120. package/dest/crypto/sha512/index.d.ts +3 -3
  121. package/dest/crypto/sha512/index.d.ts.map +1 -1
  122. package/dest/crypto/sha512/index.js +1 -1
  123. package/dest/crypto/signature/index.d.ts +2 -2
  124. package/dest/crypto/signature/index.d.ts.map +1 -1
  125. package/dest/crypto/sync/index.d.ts +1 -1
  126. package/dest/crypto/sync/index.js +1 -3
  127. package/dest/crypto/sync/pedersen/index.d.ts +2 -2
  128. package/dest/crypto/sync/pedersen/index.d.ts.map +1 -1
  129. package/dest/crypto/sync/pedersen/index.js +1 -1
  130. package/dest/crypto/sync/poseidon/index.d.ts +2 -3
  131. package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
  132. package/dest/crypto/sync/poseidon/index.js +1 -9
  133. package/dest/{fields/bls12_fields.d.ts → curves/bls12/field.d.ts} +3 -3
  134. package/dest/curves/bls12/field.d.ts.map +1 -0
  135. package/dest/{fields/bls12_fields.js → curves/bls12/field.js} +12 -9
  136. package/dest/curves/bls12/index.d.ts +3 -0
  137. package/dest/curves/bls12/index.d.ts.map +1 -0
  138. package/dest/curves/bls12/index.js +2 -0
  139. package/dest/{fields/bls12_point.d.ts → curves/bls12/point.d.ts} +4 -4
  140. package/dest/curves/bls12/point.d.ts.map +1 -0
  141. package/dest/{fields/bls12_point.js → curves/bls12/point.js} +10 -8
  142. package/dest/{fields/fields.d.ts → curves/bn254/field.d.ts} +16 -15
  143. package/dest/curves/bn254/field.d.ts.map +1 -0
  144. package/dest/{fields/fields.js → curves/bn254/field.js} +49 -49
  145. package/dest/curves/bn254/index.d.ts +3 -0
  146. package/dest/curves/bn254/index.d.ts.map +1 -0
  147. package/dest/curves/bn254/index.js +2 -0
  148. package/dest/curves/bn254/point.d.ts +54 -0
  149. package/dest/curves/bn254/point.d.ts.map +1 -0
  150. package/dest/curves/bn254/point.js +143 -0
  151. package/dest/curves/grumpkin/index.d.ts +10 -0
  152. package/dest/curves/grumpkin/index.d.ts.map +1 -0
  153. package/dest/curves/grumpkin/index.js +3 -0
  154. package/dest/{fields → curves/grumpkin}/point.d.ts +12 -3
  155. package/dest/curves/grumpkin/point.d.ts.map +1 -0
  156. package/dest/{fields → curves/grumpkin}/point.js +24 -7
  157. package/dest/decorators/index.d.ts +1 -1
  158. package/dest/decorators/memoize.d.ts +1 -1
  159. package/dest/decorators/memoize.d.ts.map +1 -1
  160. package/dest/error/index.d.ts +1 -1
  161. package/dest/eth-address/index.d.ts +12 -2
  162. package/dest/eth-address/index.d.ts.map +1 -1
  163. package/dest/eth-address/index.js +27 -3
  164. package/dest/eth-signature/eth_signature.d.ts +1 -1
  165. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  166. package/dest/eth-signature/index.d.ts +1 -1
  167. package/dest/fs/index.d.ts +1 -1
  168. package/dest/fs/run_in_dir.d.ts +1 -1
  169. package/dest/fs/try_rm_dir.d.ts +1 -1
  170. package/dest/iterable/all.d.ts +1 -1
  171. package/dest/iterable/filter.d.ts +1 -1
  172. package/dest/iterable/index.d.ts +1 -1
  173. package/dest/iterable/isAsyncIt.d.ts +1 -1
  174. package/dest/iterable/map.d.ts +1 -1
  175. package/dest/iterable/peek.d.ts +1 -1
  176. package/dest/iterable/sort.d.ts +1 -1
  177. package/dest/iterable/take.d.ts +1 -1
  178. package/dest/iterable/toArray.d.ts +1 -1
  179. package/dest/iterator/filter.d.ts +3 -0
  180. package/dest/iterator/filter.d.ts.map +1 -0
  181. package/dest/iterator/filter.js +7 -0
  182. package/dest/iterator/index.d.ts +2 -0
  183. package/dest/iterator/index.d.ts.map +1 -0
  184. package/dest/iterator/index.js +1 -0
  185. package/dest/json-rpc/client/fetch.d.ts +1 -1
  186. package/dest/json-rpc/client/index.d.ts +1 -1
  187. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +1 -1
  188. package/dest/json-rpc/client/undici.d.ts +1 -1
  189. package/dest/json-rpc/client/undici.d.ts.map +1 -1
  190. package/dest/json-rpc/client/undici.js +21 -4
  191. package/dest/json-rpc/convert.d.ts +1 -1
  192. package/dest/json-rpc/errors.d.ts +1 -1
  193. package/dest/json-rpc/errors.d.ts.map +1 -1
  194. package/dest/json-rpc/fixtures/class_a.d.ts +1 -1
  195. package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
  196. package/dest/json-rpc/fixtures/class_b.d.ts +1 -1
  197. package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -1
  198. package/dest/json-rpc/fixtures/test_state.d.ts +1 -1
  199. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
  200. package/dest/json-rpc/index.d.ts +1 -1
  201. package/dest/json-rpc/js_utils.d.ts +1 -1
  202. package/dest/json-rpc/js_utils.d.ts.map +1 -1
  203. package/dest/json-rpc/server/index.d.ts +1 -1
  204. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +1 -1
  205. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
  206. package/dest/json-rpc/server/safe_json_rpc_server.js +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 +1 -1
  217. package/dest/log/noir_debug_log_util.d.ts +1 -1
  218. package/dest/log/pino-logger.d.ts +2 -2
  219. package/dest/log/pino-logger.d.ts.map +1 -1
  220. package/dest/log/pino-logger.js +1 -1
  221. package/dest/message/index.d.ts +1 -1
  222. package/dest/message/index.d.ts.map +1 -1
  223. package/dest/mutex/index.d.ts +1 -1
  224. package/dest/mutex/index.d.ts.map +1 -1
  225. package/dest/mutex/mutex_database.d.ts +1 -1
  226. package/dest/noir/index.d.ts +1 -1
  227. package/dest/noir/noir_package_config.d.ts +9 -9
  228. package/dest/number/index.d.ts +1 -1
  229. package/dest/profiler/index.d.ts +1 -1
  230. package/dest/profiler/profiler.d.ts +1 -1
  231. package/dest/promise/index.d.ts +1 -1
  232. package/dest/promise/running-promise.d.ts +1 -1
  233. package/dest/promise/running-promise.d.ts.map +1 -1
  234. package/dest/promise/utils.d.ts +1 -1
  235. package/dest/queue/base_memory_queue.d.ts +1 -1
  236. package/dest/queue/base_memory_queue.d.ts.map +1 -1
  237. package/dest/queue/batch_queue.d.ts +1 -1
  238. package/dest/queue/batch_queue.d.ts.map +1 -1
  239. package/dest/queue/bounded_serial_queue.d.ts +1 -1
  240. package/dest/queue/bounded_serial_queue.d.ts.map +1 -1
  241. package/dest/queue/fifo_memory_queue.d.ts +1 -1
  242. package/dest/queue/fifo_memory_queue.d.ts.map +1 -1
  243. package/dest/queue/index.d.ts +1 -1
  244. package/dest/queue/priority_memory_queue.d.ts +1 -1
  245. package/dest/queue/priority_memory_queue.d.ts.map +1 -1
  246. package/dest/queue/priority_queue.d.ts +1 -1
  247. package/dest/queue/priority_queue.d.ts.map +1 -1
  248. package/dest/queue/semaphore.d.ts +1 -1
  249. package/dest/queue/semaphore.d.ts.map +1 -1
  250. package/dest/queue/serial_queue.d.ts +1 -1
  251. package/dest/queue/serial_queue.d.ts.map +1 -1
  252. package/dest/retry/index.d.ts +11 -1
  253. package/dest/retry/index.d.ts.map +1 -1
  254. package/dest/retry/index.js +11 -0
  255. package/dest/running-promise/index.d.ts +1 -1
  256. package/dest/schemas/api.d.ts +1 -1
  257. package/dest/schemas/index.d.ts +1 -1
  258. package/dest/schemas/parse.d.ts +1 -1
  259. package/dest/schemas/schemas.d.ts +15 -17
  260. package/dest/schemas/schemas.d.ts.map +1 -1
  261. package/dest/schemas/schemas.js +14 -10
  262. package/dest/schemas/types.d.ts +31 -1
  263. package/dest/schemas/types.d.ts.map +1 -1
  264. package/dest/schemas/types.js +25 -1
  265. package/dest/schemas/utils.d.ts +4 -4
  266. package/dest/schemas/utils.d.ts.map +1 -1
  267. package/dest/schemas/utils.js +15 -5
  268. package/dest/serialize/buffer_reader.d.ts +7 -4
  269. package/dest/serialize/buffer_reader.d.ts.map +1 -1
  270. package/dest/serialize/buffer_reader.js +13 -4
  271. package/dest/serialize/field_reader.d.ts +2 -2
  272. package/dest/serialize/field_reader.d.ts.map +1 -1
  273. package/dest/serialize/field_reader.js +1 -1
  274. package/dest/serialize/free_funcs.d.ts +2 -2
  275. package/dest/serialize/free_funcs.d.ts.map +1 -1
  276. package/dest/serialize/free_funcs.js +1 -1
  277. package/dest/serialize/index.d.ts +1 -1
  278. package/dest/serialize/serialize.d.ts +2 -2
  279. package/dest/serialize/serialize.d.ts.map +1 -1
  280. package/dest/serialize/serialize.js +1 -1
  281. package/dest/serialize/type_registry.d.ts +1 -1
  282. package/dest/serialize/type_registry.d.ts.map +1 -1
  283. package/dest/serialize/types.d.ts +1 -1
  284. package/dest/sleep/index.d.ts +3 -1
  285. package/dest/sleep/index.d.ts.map +1 -1
  286. package/dest/sleep/index.js +4 -0
  287. package/dest/string/index.d.ts +1 -1
  288. package/dest/testing/files/index.d.ts +2 -1
  289. package/dest/testing/files/index.d.ts.map +1 -1
  290. package/dest/testing/files/index.js +1 -1
  291. package/dest/testing/formatting.d.ts +1 -1
  292. package/dest/testing/index.d.ts +1 -1
  293. package/dest/testing/port_allocator.d.ts +1 -1
  294. package/dest/testing/snapshot_serializer.d.ts +1 -1
  295. package/dest/testing/test_data.d.ts +1 -1
  296. package/dest/timer/date.d.ts +2 -1
  297. package/dest/timer/date.d.ts.map +1 -1
  298. package/dest/timer/date.js +3 -0
  299. package/dest/timer/elapsed.d.ts +1 -1
  300. package/dest/timer/index.d.ts +1 -1
  301. package/dest/timer/timeout.d.ts +1 -1
  302. package/dest/timer/timeout.d.ts.map +1 -1
  303. package/dest/timer/timer.d.ts +1 -1
  304. package/dest/timer/timer.d.ts.map +1 -1
  305. package/dest/transport/dispatch/create_dispatch_fn.d.ts +1 -1
  306. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
  307. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +1 -1
  308. package/dest/transport/dispatch/messages.d.ts +1 -1
  309. package/dest/transport/index.d.ts +1 -1
  310. package/dest/transport/interface/connector.d.ts +1 -1
  311. package/dest/transport/interface/listener.d.ts +1 -1
  312. package/dest/transport/interface/socket.d.ts +1 -1
  313. package/dest/transport/interface/transferable.d.ts +1 -1
  314. package/dest/transport/node/index.d.ts +1 -1
  315. package/dest/transport/node/node_connector.d.ts +1 -1
  316. package/dest/transport/node/node_connector.d.ts.map +1 -1
  317. package/dest/transport/node/node_connector_socket.d.ts +1 -1
  318. package/dest/transport/node/node_connector_socket.d.ts.map +1 -1
  319. package/dest/transport/node/node_listener.d.ts +1 -1
  320. package/dest/transport/node/node_listener.d.ts.map +1 -1
  321. package/dest/transport/node/node_listener_socket.d.ts +1 -1
  322. package/dest/transport/node/node_listener_socket.d.ts.map +1 -1
  323. package/dest/transport/transport_client.d.ts +1 -1
  324. package/dest/transport/transport_client.d.ts.map +1 -1
  325. package/dest/transport/transport_server.d.ts +1 -10
  326. package/dest/transport/transport_server.d.ts.map +1 -1
  327. package/dest/trees/balanced_merkle_tree_root.d.ts +17 -0
  328. package/dest/trees/balanced_merkle_tree_root.d.ts.map +1 -0
  329. package/dest/trees/balanced_merkle_tree_root.js +51 -0
  330. package/dest/trees/hasher.d.ts +3 -1
  331. package/dest/trees/hasher.d.ts.map +1 -1
  332. package/dest/trees/hasher.js +10 -5
  333. package/dest/trees/index.d.ts +4 -3
  334. package/dest/trees/index.d.ts.map +1 -1
  335. package/dest/trees/index.js +3 -2
  336. package/dest/trees/indexed_merkle_tree.d.ts +1 -1
  337. package/dest/trees/indexed_merkle_tree.d.ts.map +1 -1
  338. package/dest/trees/indexed_merkle_tree.js +1 -1
  339. package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -1
  340. package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
  341. package/dest/trees/indexed_tree_leaf.d.ts +1 -1
  342. package/dest/trees/membership_witness.d.ts +7 -18
  343. package/dest/trees/membership_witness.d.ts.map +1 -1
  344. package/dest/trees/membership_witness.js +10 -1
  345. package/dest/trees/merkle_tree.d.ts +1 -1
  346. package/dest/trees/merkle_tree.d.ts.map +1 -1
  347. package/dest/trees/merkle_tree_calculator.d.ts +2 -12
  348. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
  349. package/dest/trees/merkle_tree_calculator.js +2 -32
  350. package/dest/trees/sibling_path.d.ts +5 -38
  351. package/dest/trees/sibling_path.d.ts.map +1 -1
  352. package/dest/trees/sibling_path.js +3 -3
  353. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts +6 -6
  354. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -1
  355. package/dest/trees/unbalanced_merkle_tree_calculator.js +34 -42
  356. package/dest/trees/unbalanced_merkle_tree_root.d.ts +28 -0
  357. package/dest/trees/unbalanced_merkle_tree_root.d.ts.map +1 -0
  358. package/dest/trees/unbalanced_merkle_tree_root.js +84 -0
  359. package/dest/trees/unbalanced_tree_store.d.ts +5 -1
  360. package/dest/trees/unbalanced_tree_store.d.ts.map +1 -1
  361. package/dest/trees/unbalanced_tree_store.js +49 -1
  362. package/dest/types/index.d.ts +4 -2
  363. package/dest/types/index.d.ts.map +1 -1
  364. package/dest/types/index.js +3 -0
  365. package/dest/url/index.d.ts +1 -1
  366. package/dest/validation/index.d.ts +1 -1
  367. package/package.json +29 -9
  368. package/src/array/array.ts +0 -16
  369. package/src/array/index.ts +1 -0
  370. package/src/array/sorted_array.ts +133 -0
  371. package/src/branded-types/block_number.ts +117 -0
  372. package/src/branded-types/checkpoint_number.ts +115 -0
  373. package/src/branded-types/epoch.ts +88 -0
  374. package/src/branded-types/index.ts +7 -0
  375. package/src/branded-types/index_within_checkpoint.ts +88 -0
  376. package/src/branded-types/slot.ts +88 -0
  377. package/src/branded-types/types.ts +2 -0
  378. package/src/buffer/buffer16.ts +2 -2
  379. package/src/buffer/buffer32.ts +2 -2
  380. package/src/collection/array.ts +31 -0
  381. package/src/config/env_var.ts +44 -13
  382. package/src/config/index.ts +39 -6
  383. package/src/config/network_config.ts +2 -0
  384. package/src/config/parse-env.ts +4 -0
  385. package/src/crypto/aes128/index.ts +2 -2
  386. package/src/crypto/bls/bn254_keystore.ts +1 -1
  387. package/src/crypto/bls/index.ts +1 -1
  388. package/src/crypto/bn254/index.ts +50 -156
  389. package/src/crypto/ecdsa/index.ts +4 -4
  390. package/src/crypto/ecdsa/signature.ts +2 -2
  391. package/src/crypto/grumpkin/index.ts +8 -6
  392. package/src/crypto/keys/index.ts +2 -2
  393. package/src/crypto/pedersen/pedersen.wasm.ts +4 -4
  394. package/src/crypto/poseidon/index.ts +5 -15
  395. package/src/crypto/random/randomness_singleton.ts +2 -4
  396. package/src/crypto/schnorr/index.ts +5 -4
  397. package/src/crypto/schnorr/signature.ts +2 -2
  398. package/src/crypto/secp256k1/index.ts +3 -3
  399. package/src/crypto/sha256/index.ts +1 -1
  400. package/src/crypto/sha512/index.ts +1 -1
  401. package/src/crypto/signature/index.ts +1 -1
  402. package/src/crypto/sync/index.ts +1 -1
  403. package/src/crypto/sync/pedersen/index.ts +1 -1
  404. package/src/crypto/sync/poseidon/index.ts +1 -10
  405. package/src/{fields/bls12_fields.ts → curves/bls12/field.ts} +6 -6
  406. package/src/curves/bls12/index.ts +2 -0
  407. package/src/{fields/bls12_point.ts → curves/bls12/point.ts} +7 -7
  408. package/src/{fields/fields.ts → curves/bn254/field.ts} +49 -56
  409. package/src/curves/bn254/index.ts +2 -0
  410. package/src/curves/bn254/point.ts +170 -0
  411. package/src/curves/grumpkin/index.ts +11 -0
  412. package/src/{fields → curves/grumpkin}/point.ts +26 -7
  413. package/src/eth-address/index.ts +27 -2
  414. package/src/iterator/filter.ts +11 -0
  415. package/src/iterator/index.ts +1 -0
  416. package/src/json-rpc/client/undici.ts +21 -3
  417. package/src/json-rpc/server/safe_json_rpc_server.ts +1 -1
  418. package/src/log/pino-logger.ts +2 -1
  419. package/src/retry/index.ts +18 -0
  420. package/src/schemas/schemas.ts +24 -13
  421. package/src/schemas/types.ts +33 -0
  422. package/src/schemas/utils.ts +21 -8
  423. package/src/serialize/buffer_reader.ts +21 -9
  424. package/src/serialize/field_reader.ts +1 -1
  425. package/src/serialize/free_funcs.ts +1 -1
  426. package/src/serialize/serialize.ts +1 -1
  427. package/src/sleep/index.ts +6 -0
  428. package/src/testing/files/index.ts +1 -1
  429. package/src/timer/date.ts +4 -0
  430. package/src/trees/balanced_merkle_tree_root.ts +68 -0
  431. package/src/trees/hasher.ts +9 -0
  432. package/src/trees/index.ts +3 -2
  433. package/src/trees/indexed_merkle_tree.ts +1 -1
  434. package/src/trees/membership_witness.ts +9 -1
  435. package/src/trees/merkle_tree_calculator.ts +2 -35
  436. package/src/trees/sibling_path.ts +3 -3
  437. package/src/trees/unbalanced_merkle_tree_calculator.ts +32 -50
  438. package/src/trees/unbalanced_merkle_tree_root.ts +115 -0
  439. package/src/trees/unbalanced_tree_store.ts +57 -2
  440. package/src/types/index.ts +6 -1
  441. package/dest/crypto/bn254/bn254_utils.d.ts +0 -39
  442. package/dest/crypto/bn254/bn254_utils.d.ts.map +0 -1
  443. package/dest/crypto/bn254/bn254_utils.js +0 -56
  444. package/dest/crypto/index.d.ts +0 -17
  445. package/dest/crypto/index.d.ts.map +0 -1
  446. package/dest/crypto/index.js +0 -16
  447. package/dest/fields/bls12_fields.d.ts.map +0 -1
  448. package/dest/fields/bls12_point.d.ts.map +0 -1
  449. package/dest/fields/coordinate.d.ts +0 -66
  450. package/dest/fields/coordinate.d.ts.map +0 -1
  451. package/dest/fields/coordinate.js +0 -96
  452. package/dest/fields/fields.d.ts.map +0 -1
  453. package/dest/fields/index.d.ts +0 -6
  454. package/dest/fields/index.d.ts.map +0 -1
  455. package/dest/fields/index.js +0 -5
  456. package/dest/fields/point.d.ts.map +0 -1
  457. package/dest/index.d.ts +0 -30
  458. package/dest/index.d.ts.map +0 -1
  459. package/dest/index.js +0 -30
  460. package/dest/json-rpc/server/telemetry.d.ts +0 -2
  461. package/dest/json-rpc/server/telemetry.d.ts.map +0 -1
  462. package/dest/json-rpc/server/telemetry.js +0 -0
  463. package/dest/trees/unbalanced_merkle_tree.d.ts +0 -28
  464. package/dest/trees/unbalanced_merkle_tree.d.ts.map +0 -1
  465. package/dest/trees/unbalanced_merkle_tree.js +0 -99
  466. package/src/crypto/bn254/bn254_utils.ts +0 -64
  467. package/src/crypto/index.ts +0 -16
  468. package/src/fields/coordinate.ts +0 -104
  469. package/src/fields/index.ts +0 -5
  470. package/src/index.ts +0 -30
  471. package/src/json-rpc/server/telemetry.ts +0 -0
  472. package/src/trees/unbalanced_merkle_tree.ts +0 -111
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,68 @@
1
+ import { poseidonMerkleHash, shaMerkleHash } from './hasher.js';
2
+
3
+ export const computeBalancedShaRoot = (leaves: Buffer[]) => computeBalancedMerkleTreeRoot(leaves);
4
+
5
+ export const computeBalancedPoseidonRoot = async (leaves: Buffer[]) =>
6
+ await computeBalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash);
7
+
8
+ /**
9
+ * Computes the Merkle root with the provided leaves **synchronously**.
10
+ * This method uses a synchronous hash function (defaults to `sha256Trunc`).
11
+ *
12
+ * @throws If the number of leaves is not a power of two.
13
+ */
14
+ export function computeBalancedMerkleTreeRoot(leaves: Buffer[], hasher = shaMerkleHash): Buffer {
15
+ const height = getTreeHeight(leaves);
16
+ let nodes = leaves.slice();
17
+
18
+ for (let i = 0; i < height; ++i) {
19
+ let j = 0;
20
+ for (; j < nodes.length / 2; ++j) {
21
+ const l = nodes[j * 2];
22
+ const r = nodes[j * 2 + 1];
23
+ nodes[j] = hasher(l, r);
24
+ }
25
+ nodes = nodes.slice(0, j);
26
+ }
27
+
28
+ return nodes[0];
29
+ }
30
+
31
+ /**
32
+ * Computes the Merkle root with the provided leaves **asynchronously**.
33
+ * This method uses an asynchronous hash function (defaults to `poseidon2Hash`).
34
+ *
35
+ * @throws If the number of leaves is not a power of two.
36
+ */
37
+ export async function computeBalancedMerkleTreeRootAsync(
38
+ leaves: Buffer[],
39
+ hasher = poseidonMerkleHash,
40
+ ): Promise<Buffer> {
41
+ const height = getTreeHeight(leaves);
42
+ let nodes = leaves.slice();
43
+
44
+ for (let i = 0; i < height; ++i) {
45
+ let j = 0;
46
+ for (; j < nodes.length / 2; ++j) {
47
+ const l = nodes[j * 2];
48
+ const r = nodes[j * 2 + 1];
49
+ nodes[j] = await hasher(l, r);
50
+ }
51
+ nodes = nodes.slice(0, j);
52
+ }
53
+
54
+ return nodes[0];
55
+ }
56
+
57
+ function getTreeHeight(leaves: Buffer[]) {
58
+ if (leaves.length === 0) {
59
+ throw new Error('Cannot compute a Merkle root with no leaves');
60
+ }
61
+
62
+ const height = Math.log2(leaves.length);
63
+ if (!Number.isInteger(height)) {
64
+ throw new Error('Cannot compute a Merkle root with a non-power-of-two number of leaves');
65
+ }
66
+
67
+ return height;
68
+ }
@@ -1,3 +1,6 @@
1
+ import { poseidon2Hash } from '../crypto/poseidon/index.js';
2
+ import { sha256Trunc } from '../crypto/sha256/index.js';
3
+
1
4
  /**
2
5
  * Defines hasher interface used by Merkle trees.
3
6
  */
@@ -37,3 +40,9 @@ export interface AsyncHasher {
37
40
  */
38
41
  hashInputs(inputs: Buffer[]): Promise<Buffer<ArrayBuffer>>;
39
42
  }
43
+
44
+ export const shaMerkleHash: Hasher['hash'] = (left: Buffer, right: Buffer) =>
45
+ sha256Trunc(Buffer.concat([left, right])) as Buffer<ArrayBuffer>;
46
+
47
+ export const poseidonMerkleHash: AsyncHasher['hash'] = async (left: Buffer, right: Buffer) =>
48
+ (await poseidon2Hash([left, right])).toBuffer() as Buffer<ArrayBuffer>;
@@ -1,5 +1,4 @@
1
- export * from './unbalanced_merkle_tree.js';
2
- export * from './unbalanced_tree_store.js';
1
+ export * from './balanced_merkle_tree_root.js';
3
2
  export * from './merkle_tree_calculator.js';
4
3
  export * from './merkle_tree.js';
5
4
  export * from './indexed_merkle_tree_calculator.js';
@@ -9,3 +8,5 @@ export * from './membership_witness.js';
9
8
  export * from './hasher.js';
10
9
  export * from './indexed_tree_leaf.js';
11
10
  export * from './unbalanced_merkle_tree_calculator.js';
11
+ export * from './unbalanced_merkle_tree_root.js';
12
+ export * from './unbalanced_tree_store.js';
@@ -1,4 +1,4 @@
1
- import { Fr } from '../fields/index.js';
1
+ import { Fr } from '../curves/bn254/index.js';
2
2
  import { assertLength } from '../serialize/index.js';
3
3
  import type { IndexedTreeLeafPreimage } from './indexed_tree_leaf.js';
4
4
  import { MembershipWitness } from './membership_witness.js';
@@ -1,6 +1,6 @@
1
1
  import { assertMemberLength } from '../array/array.js';
2
2
  import { toBigIntBE, toBufferBE } from '../bigint-buffer/index.js';
3
- import { Fr } from '../fields/fields.js';
3
+ import { Fr } from '../curves/bn254/field.js';
4
4
  import { schemas } from '../schemas/schemas.js';
5
5
  import { BufferReader, type Tuple, serializeToBuffer } from '../serialize/index.js';
6
6
  import type { SiblingPath } from './sibling_path.js';
@@ -38,6 +38,14 @@ export class MembershipWitness<N extends number> {
38
38
  return [new Fr(this.leafIndex), ...this.siblingPath];
39
39
  }
40
40
 
41
+ /**
42
+ * Returns a representation of the membership witness as expected by intrinsic Noir deserialization.
43
+ */
44
+ public toNoirRepresentation(): (string | string[])[] {
45
+ // TODO(#12874): remove the stupid as string conversion by modifying ForeignCallOutput type in acvm.js
46
+ return [new Fr(this.leafIndex).toString() as string, this.siblingPath.map(fr => fr.toString()) as string[]];
47
+ }
48
+
41
49
  static schemaFor<N extends number>(size: N) {
42
50
  return schemas.Buffer.transform(b => MembershipWitness.fromBuffer(b, size));
43
51
  }
@@ -1,4 +1,4 @@
1
- import { pedersenHash, sha256Trunc } from '@aztec/foundation/crypto';
1
+ import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
2
2
 
3
3
  import type { AsyncHasher } from './hasher.js';
4
4
  import { MerkleTree } from './merkle_tree.js';
@@ -19,7 +19,7 @@ export class MerkleTreeCalculator {
19
19
  height: number,
20
20
  zeroLeaf: Buffer = Buffer.alloc(32),
21
21
  hasher = async (left: Buffer, right: Buffer) =>
22
- (await pedersenHash([left, right])).toBuffer() as Buffer<ArrayBuffer>,
22
+ (await poseidon2Hash([left, right])).toBuffer() as Buffer<ArrayBuffer>,
23
23
  ) {
24
24
  const zeroHashes = [zeroLeaf];
25
25
  for (let i = 0; i < height; i++) {
@@ -69,37 +69,4 @@ export class MerkleTreeCalculator {
69
69
 
70
70
  return leaves[0];
71
71
  }
72
-
73
- /**
74
- * Computes the Merkle root with the provided leaves **synchronously**.
75
- *
76
- * This method uses a synchronous hash function (defaults to `sha256Trunc`) and **does not** allow for padding.
77
- * If the number of leaves is not a power of two, it throws an error.
78
- * This contrasts with the above non-static async method `computeTreeRoot`, which can handle any number of leaves by
79
- * padding with zero hashes.
80
- */
81
- static computeTreeRootSync(leaves: Buffer[], hasher = sha256Trunc): Buffer {
82
- if (leaves.length === 0) {
83
- throw new Error('Cannot compute a Merkle root with no leaves');
84
- }
85
-
86
- const height = Math.log2(leaves.length);
87
- if (!Number.isInteger(height)) {
88
- throw new Error('Cannot compute a Merkle root with a non-power-of-two number of leaves');
89
- }
90
-
91
- let nodes = leaves.slice();
92
-
93
- for (let i = 0; i < height; ++i) {
94
- let j = 0;
95
- for (; j < nodes.length / 2; ++j) {
96
- const l = nodes[j * 2];
97
- const r = nodes[j * 2 + 1];
98
- nodes[j] = hasher(Buffer.concat([l, r]));
99
- }
100
- nodes = nodes.slice(0, j);
101
- }
102
-
103
- return nodes[0];
104
- }
105
72
  }
@@ -1,6 +1,6 @@
1
1
  import { makeTuple } from '../array/array.js';
2
- import { pedersenHash } from '../crypto/index.js';
3
- import { Fr } from '../fields/index.js';
2
+ import { poseidon2Hash } from '../crypto/poseidon/index.js';
3
+ import { Fr } from '../curves/bn254/index.js';
4
4
  import { schemas } from '../schemas/index.js';
5
5
  import {
6
6
  type Tuple,
@@ -172,7 +172,7 @@ export async function computeRootFromSiblingPath(
172
172
  leaf: Buffer,
173
173
  siblingPath: Buffer[],
174
174
  index: number,
175
- hasher = async (left: Buffer, right: Buffer) => (await pedersenHash([left, right])).toBuffer(),
175
+ hasher = async (left: Buffer, right: Buffer) => (await poseidon2Hash([left, right])).toBuffer(),
176
176
  ) {
177
177
  let result = leaf;
178
178
  for (const sibling of siblingPath) {
@@ -1,17 +1,7 @@
1
- import { sha256Trunc } from '../crypto/index.js';
2
- import type { Hasher } from './hasher.js';
1
+ import { type Hasher, shaMerkleHash } from './hasher.js';
3
2
  import { SiblingPath } from './sibling_path.js';
4
3
  import { type TreeNodeLocation, UnbalancedTreeStore } from './unbalanced_tree_store.js';
5
4
 
6
- export function computeCompressedUnbalancedMerkleTreeRoot(
7
- leaves: Buffer[],
8
- valueToCompress = Buffer.alloc(32),
9
- hasher?: Hasher['hash'],
10
- ): Buffer {
11
- const calculator = UnbalancedMerkleTreeCalculator.create(leaves, valueToCompress, hasher);
12
- return calculator.getRoot();
13
- }
14
-
15
5
  interface TreeNode {
16
6
  value: Buffer;
17
7
  leafIndex?: number;
@@ -32,12 +22,9 @@ export class UnbalancedMerkleTreeCalculator {
32
22
  public constructor(
33
23
  private readonly leaves: Buffer[],
34
24
  private readonly valueToCompress: Buffer,
25
+ private readonly emptyRoot: Buffer,
35
26
  private readonly hasher: Hasher['hash'],
36
27
  ) {
37
- if (leaves.length === 0) {
38
- throw Error('Cannot create a compressed unbalanced tree with 0 leaves.');
39
- }
40
-
41
28
  this.store = new UnbalancedTreeStore(leaves.length);
42
29
  this.buildTree();
43
30
  }
@@ -45,9 +32,10 @@ export class UnbalancedMerkleTreeCalculator {
45
32
  static create(
46
33
  leaves: Buffer[],
47
34
  valueToCompress = Buffer.alloc(0),
48
- hasher = (left: Buffer, right: Buffer) => sha256Trunc(Buffer.concat([left, right])) as Buffer<ArrayBuffer>,
35
+ emptyRoot = Buffer.alloc(32),
36
+ hasher = shaMerkleHash,
49
37
  ) {
50
- return new UnbalancedMerkleTreeCalculator(leaves, valueToCompress, hasher);
38
+ return new UnbalancedMerkleTreeCalculator(leaves, valueToCompress, emptyRoot, hasher);
51
39
  }
52
40
 
53
41
  /**
@@ -113,8 +101,8 @@ export class UnbalancedMerkleTreeCalculator {
113
101
  // Start with the leaves that are not compressed.
114
102
  let toProcess = this.leafLocations.filter((_, i) => !this.leaves[i].equals(this.valueToCompress));
115
103
  if (!toProcess.length) {
116
- // All leaves are compressed. Set 0 to the root.
117
- this.store.setNode({ level: 0, index: 0 }, { value: Buffer.alloc(32) });
104
+ // All leaves are compressed. Set empty root to the root.
105
+ this.store.setNode({ level: 0, index: 0 }, { value: this.emptyRoot });
118
106
  return;
119
107
  }
120
108
 
@@ -138,10 +126,7 @@ export class UnbalancedMerkleTreeCalculator {
138
126
  const shouldShiftUp = !sibling || sibling.value.equals(this.valueToCompress);
139
127
  if (shouldShiftUp) {
140
128
  // The node becomes the parent if the sibling is a compressed leaf.
141
- const isLeaf = this.shiftNodeUp(location, parentLocation);
142
- if (!isLeaf) {
143
- this.shiftChildrenUp(location);
144
- }
129
+ this.shiftNodeUp(location, parentLocation);
145
130
  } else {
146
131
  // Hash the value with the (right) sibling and update the parent node.
147
132
  const node = this.store.getNode(location)!;
@@ -157,38 +142,35 @@ export class UnbalancedMerkleTreeCalculator {
157
142
  }
158
143
  }
159
144
 
160
- private shiftNodeUp(fromLocation: TreeNodeLocation, toLocation: TreeNodeLocation): boolean {
161
- const node = this.store.getNode(fromLocation)!;
162
-
163
- this.store.setNode(toLocation, node);
164
-
165
- const isLeaf = node.leafIndex !== undefined;
166
- if (isLeaf) {
167
- // Update the location if the node is a leaf.
168
- this.leafLocations[node.leafIndex!] = toLocation;
145
+ private shiftNodeUp(from: TreeNodeLocation, to: TreeNodeLocation) {
146
+ // Collect all nodes that need to shift.
147
+ const nodesToShift = this.collectNodesToShift(from, to);
148
+ // Move all nodes to their new locations.
149
+ for (const { node, newLocation } of nodesToShift) {
150
+ this.store.setNode(newLocation, node);
151
+ if (node.leafIndex !== undefined) {
152
+ this.leafLocations[node.leafIndex] = newLocation;
153
+ }
169
154
  }
170
-
171
- return isLeaf;
172
155
  }
173
156
 
174
- private shiftChildrenUp(parent: TreeNodeLocation) {
175
- const [left, right] = this.store.getChildLocations(parent);
176
-
177
- const level = parent.level;
178
- const groupSize = 2 ** level;
179
- const computeNewLocation = (index: number) => ({
180
- level,
181
- index: Math.floor(index / (groupSize * 2)) * groupSize + (index % groupSize),
182
- });
157
+ private collectNodesToShift(from: TreeNodeLocation, to: TreeNodeLocation) {
158
+ const node = this.store.getNode(from);
159
+ if (!node) {
160
+ return [];
161
+ }
183
162
 
184
- const isLeftLeaf = this.shiftNodeUp(left, computeNewLocation(left.index));
185
- const isRightLeaf = this.shiftNodeUp(right, computeNewLocation(right.index));
163
+ let result = [{ node, newLocation: to }];
186
164
 
187
- if (!isLeftLeaf) {
188
- this.shiftChildrenUp(left);
189
- }
190
- if (!isRightLeaf) {
191
- this.shiftChildrenUp(right);
165
+ // If not a leaf, collect its children.
166
+ if (node.leafIndex === undefined) {
167
+ const [leftChild, rightChild] = this.store.getChildLocations(from);
168
+ const [leftChildNew, rightChildNew] = this.store.getChildLocations(to);
169
+ result = result
170
+ .concat(this.collectNodesToShift(leftChild, leftChildNew))
171
+ .concat(this.collectNodesToShift(rightChild, rightChildNew));
192
172
  }
173
+
174
+ return result;
193
175
  }
194
176
  }
@@ -0,0 +1,115 @@
1
+ import { computeBalancedMerkleTreeRoot, computeBalancedMerkleTreeRootAsync } from './balanced_merkle_tree_root.js';
2
+ import { poseidonMerkleHash, shaMerkleHash } from './hasher.js';
3
+ import { UnbalancedMerkleTreeCalculator } from './unbalanced_merkle_tree_calculator.js';
4
+
5
+ export const computeUnbalancedShaRoot = (leaves: Buffer[]) => computeUnbalancedMerkleTreeRoot(leaves, shaMerkleHash);
6
+
7
+ export const computeUnbalancedPoseidonRoot = async (leaves: Buffer[]) =>
8
+ await computeUnbalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash);
9
+
10
+ export const computeWonkyShaRoot = (leaves: Buffer[]) => computeWonkyMerkleTreeRoot(leaves);
11
+
12
+ /**
13
+ * Computes the Merkle root of an unbalanced tree.
14
+ *
15
+ * Unlike a balanced Merkle tree, which requires the number of leaves to be a power of two, an unbalanced tree can have
16
+ * any number of leaves.
17
+ *
18
+ * The tree is constructed by iteratively extracting the smallest power-of-two-sized subtrees from **right to left**.
19
+ * For each such subtree, it computes the subtree root and then combines all subtree roots (again from right to left)
20
+ * into a single root using the provided hash function.
21
+ *
22
+ * Note: We need the final tree to be as shallow as possible, to minimize the size of the sibling path required to prove
23
+ * membership of a leaf. Therefor, the computation proceeds from right to left - smaller subtrees must always be
24
+ * combined before being merged with a larger sibling on their left.
25
+ *
26
+ * For example, consider an unbalanced tree made of three subtrees of sizes 2, 4, and 8. If we combine the size-2 and
27
+ * size-4 subtrees first (producing a subtree of depth 3), and then merge it with the size-8 subtree (also depth 3), the
28
+ * resulting tree has a maximum depth of 4.
29
+ *
30
+ * But if we instead combine the size-4 and size-8 subtrees first (depth 4), and then merge with the size-2 subtree
31
+ * (depth 1), the final tree has a depth of 5.
32
+ */
33
+ export function computeUnbalancedMerkleTreeRoot(
34
+ leaves: Buffer[],
35
+ hasher = shaMerkleHash,
36
+ emptyRoot = Buffer.alloc(32),
37
+ ): Buffer {
38
+ if (!leaves.length) {
39
+ return emptyRoot;
40
+ }
41
+
42
+ if (leaves.length === 1) {
43
+ return leaves[0];
44
+ }
45
+
46
+ let numRemainingLeaves = leaves.length;
47
+ let subtreeSize = 1;
48
+ let root: Buffer | undefined;
49
+ while (numRemainingLeaves > 1) {
50
+ if ((numRemainingLeaves & subtreeSize) !== 0) {
51
+ const subtreeLeaves = leaves.slice(numRemainingLeaves - subtreeSize, numRemainingLeaves);
52
+ const subtreeRoot = computeBalancedMerkleTreeRoot(subtreeLeaves, hasher);
53
+ if (!root) {
54
+ root = subtreeRoot;
55
+ } else {
56
+ root = hasher(subtreeRoot, root);
57
+ }
58
+
59
+ numRemainingLeaves -= subtreeSize;
60
+ }
61
+
62
+ subtreeSize *= 2;
63
+ }
64
+
65
+ return root!;
66
+ }
67
+
68
+ export async function computeUnbalancedMerkleTreeRootAsync(
69
+ leaves: Buffer[],
70
+ hasher = poseidonMerkleHash,
71
+ emptyRoot = Buffer.alloc(32),
72
+ ): Promise<Buffer> {
73
+ if (!leaves.length) {
74
+ return emptyRoot;
75
+ }
76
+
77
+ if (leaves.length === 1) {
78
+ return leaves[0];
79
+ }
80
+
81
+ let numRemainingLeaves = leaves.length;
82
+ let subtreeSize = 1;
83
+ let root: Buffer | undefined;
84
+ while (numRemainingLeaves > 1) {
85
+ if ((numRemainingLeaves & subtreeSize) !== 0) {
86
+ const subtreeLeaves = leaves.slice(numRemainingLeaves - subtreeSize, numRemainingLeaves);
87
+ const subtreeRoot = await computeBalancedMerkleTreeRootAsync(subtreeLeaves, hasher);
88
+ if (!root) {
89
+ root = subtreeRoot;
90
+ } else {
91
+ root = await hasher(subtreeRoot, root);
92
+ }
93
+
94
+ numRemainingLeaves -= subtreeSize;
95
+ }
96
+
97
+ subtreeSize *= 2;
98
+ }
99
+
100
+ return root!;
101
+ }
102
+
103
+ // A **wonky** tree is a "compressed" unbalanced Merkle tree.
104
+ // It is constructed in the same way as an unbalanced tree: by first creating the largest possible left subtree, with
105
+ // the remaining leaves forming a right subtree that follows the same process recursively.
106
+ // During construction, leaves equal to `valueToCompress` are skipped (compressed) and do not contribute to the tree.
107
+ export function computeWonkyMerkleTreeRoot(
108
+ leaves: Buffer[],
109
+ valueToCompress = Buffer.alloc(32),
110
+ emptyRoot = Buffer.alloc(32),
111
+ hasher = shaMerkleHash,
112
+ ): Buffer {
113
+ const calculator = UnbalancedMerkleTreeCalculator.create(leaves, valueToCompress, emptyRoot, hasher);
114
+ return calculator.getRoot();
115
+ }
@@ -1,5 +1,3 @@
1
- import { findLeafLevelAndIndex } from './unbalanced_merkle_tree.js';
2
-
3
1
  export interface TreeNodeLocation {
4
2
  level: number;
5
3
  index: number;
@@ -104,3 +102,60 @@ export class UnbalancedTreeStore<T> {
104
102
  return `${location.level}-${location.index}`;
105
103
  }
106
104
  }
105
+
106
+ /// Get the depth of the maximum balanced tree that can be created with the given number of leaves. The subtree will be
107
+ /// the left most subtree of the unbalanced tree with a total of `numLeaves` leaves.
108
+ ///
109
+ /// Note: All the leaves may not be used to form the tree. For example, if there are 5 leaves, the maximum depth is 2,
110
+ /// only 4 leaves are used to form a balanced tree.
111
+ function getMaxBalancedSubtreeDepth(numLeaves: number) {
112
+ return Math.floor(Math.log2(numLeaves));
113
+ }
114
+
115
+ /// Get the maximum depth of an unbalanced tree that can be created with the given number of leaves.
116
+ function getMaxUnbalancedTreeDepth(numLeaves: number) {
117
+ return Math.ceil(Math.log2(numLeaves));
118
+ }
119
+
120
+ function findPosition(
121
+ rootLevel: number,
122
+ leafLevel: number,
123
+ numLeaves: number,
124
+ indexOffset: number,
125
+ targetIndex: number,
126
+ ): { level: number; indexAtLevel: number } {
127
+ if (numLeaves <= 1) {
128
+ // Single leaf.
129
+ return { level: rootLevel, indexAtLevel: indexOffset };
130
+ }
131
+
132
+ // The largest balanced tree that can be created with the given number of leaves.
133
+ const maxBalancedTreeDepth = getMaxBalancedSubtreeDepth(numLeaves);
134
+ const numBalancedLeaves = 2 ** maxBalancedTreeDepth;
135
+ const numRemainingLeaves = numLeaves - numBalancedLeaves;
136
+
137
+ if (targetIndex < numBalancedLeaves) {
138
+ // Target is in the balanced tree.
139
+
140
+ // - If numRemainingLeaves is 0: this balanced tree is grown from the current root.
141
+ // - If numRemainingLeaves is not 0: the remaining leaves will form another tree, which will become the right child of the root.
142
+ // And the balanced tree will be the left child of the root.
143
+ // There will be an extra level between the root of the balanced tree and the current root.
144
+ const extraLevel = numRemainingLeaves ? 1 : 0;
145
+
146
+ return { level: rootLevel + maxBalancedTreeDepth + extraLevel, indexAtLevel: indexOffset + targetIndex };
147
+ } else {
148
+ // Target is in the right branch.
149
+ const rightBranchMaxLevel = getMaxUnbalancedTreeDepth(numRemainingLeaves);
150
+ const shiftedUp = leafLevel - rootLevel - rightBranchMaxLevel - 1;
151
+ const nextLeafLevel = leafLevel - shiftedUp;
152
+ const newIndexOffset = (indexOffset + numBalancedLeaves) >> shiftedUp;
153
+ const shiftedTargetIndex = targetIndex - numBalancedLeaves;
154
+ return findPosition(rootLevel + 1, nextLeafLevel, numRemainingLeaves, newIndexOffset, shiftedTargetIndex);
155
+ }
156
+ }
157
+
158
+ export function findLeafLevelAndIndex(numLeaves: number, leafIndex: number) {
159
+ const maxLevel = getMaxUnbalancedTreeDepth(numLeaves);
160
+ return findPosition(0, maxLevel, numLeaves, 0, leafIndex);
161
+ }
@@ -19,6 +19,11 @@ export function unfreeze<T>(obj: T): Writeable<T> {
19
19
  return obj as Writeable<T>;
20
20
  }
21
21
 
22
+ /** Is defined type guard */
23
+ export function isDefined<T>(value: T | undefined): value is T {
24
+ return value !== undefined;
25
+ }
26
+
22
27
  /** Resolves a record-like type. Lifted from viem. */
23
28
  export type Prettify<T> = {
24
29
  [K in keyof T]: T[K];
@@ -28,7 +33,7 @@ export type Prettify<T> = {
28
33
  * Type-safe Event Emitter type
29
34
  * @example
30
35
  * export type ArchiverEmitter = TypedEventEmitter<{
31
- * [L2BlockSourceEvents.L2PruneDetected]: (args: L2BlockSourceEvent) => void;
36
+ * [L2BlockSourceEvents.L2PruneUnproven]: (args: L2BlockSourceEvent) => void;
32
37
  * [L2BlockSourceEvents.L2BlockProven]: (args: L2BlockSourceEvent) => void;
33
38
  * }>;
34
39
  * class Archiver extends (EventEmitter as new () => ArchiverEmitter) {
@@ -1,39 +0,0 @@
1
- /**
2
- * BN254 utility functions for point operations.
3
- * Provides compression, decompression, and public key generation for the BN254 curve.
4
- * Uses the bb.js Barretenberg backend for point operations.
5
- */
6
- /**
7
- * Generate a compressed BN254 G1 public key from a private key.
8
- *
9
- * @param privateKeyHex - Private key as 0x-prefixed hex string
10
- * @returns Compressed G1 point (32 bytes with sign bit in MSB)
11
- */
12
- export declare function computeBn254G1PublicKeyCompressed(privateKeyHex: string): Promise<string>;
13
- /**
14
- * Generate uncompressed BN254 G1 public key from a private key.
15
- *
16
- * @param privateKeyHex - Private key as 0x-prefixed hex string
17
- * @returns G1 point in affine coordinates
18
- */
19
- export declare function computeBn254G1PublicKey(privateKeyHex: string): Promise<{
20
- x: bigint;
21
- y: bigint;
22
- }>;
23
- /**
24
- * Generate BN254 G2 public key from a private key.
25
- *
26
- * @param privateKeyHex - Private key as 0x-prefixed hex string
27
- * @returns G2 point in affine coordinates
28
- */
29
- export declare function computeBn254G2PublicKey(privateKeyHex: string): Promise<{
30
- x: {
31
- c0: bigint;
32
- c1: bigint;
33
- };
34
- y: {
35
- c0: bigint;
36
- c1: bigint;
37
- };
38
- }>;
39
- //# sourceMappingURL=bn254_utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bn254_utils.d.ts","sourceRoot":"","sources":["../../../src/crypto/bn254/bn254_utils.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH;;;;;GAKG;AACH,wBAAsB,iCAAiC,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU9F;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAQtG;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5E,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/B,CAAC,CAWD"}
@@ -1,56 +0,0 @@
1
- import { Fr } from '../../fields/fields.js';
2
- import { Bn254G1Point, Bn254G2Point } from './index.js';
3
- /**
4
- * BN254 utility functions for point operations.
5
- * Provides compression, decompression, and public key generation for the BN254 curve.
6
- * Uses the bb.js Barretenberg backend for point operations.
7
- */ /**
8
- * Generate a compressed BN254 G1 public key from a private key.
9
- *
10
- * @param privateKeyHex - Private key as 0x-prefixed hex string
11
- * @returns Compressed G1 point (32 bytes with sign bit in MSB)
12
- */ export async function computeBn254G1PublicKeyCompressed(privateKeyHex) {
13
- const sk = BigInt(privateKeyHex);
14
- const skReduced = sk % Fr.MODULUS;
15
- // Generate G1 point on BN254 curve using bb.js
16
- const scalar = Fr.fromString(skReduced.toString());
17
- const pk1 = await Bn254G1Point.generator(scalar);
18
- // Compress the point using the primitive method
19
- return '0x' + pk1.compress().toString('hex');
20
- }
21
- /**
22
- * Generate uncompressed BN254 G1 public key from a private key.
23
- *
24
- * @param privateKeyHex - Private key as 0x-prefixed hex string
25
- * @returns G1 point in affine coordinates
26
- */ export async function computeBn254G1PublicKey(privateKeyHex) {
27
- const sk = BigInt(privateKeyHex);
28
- const skReduced = sk % Fr.MODULUS;
29
- const scalar = Fr.fromString(skReduced.toString());
30
- const pk1 = await Bn254G1Point.generator(scalar);
31
- return {
32
- x: pk1.x.toBigInt(),
33
- y: pk1.y.toBigInt()
34
- };
35
- }
36
- /**
37
- * Generate BN254 G2 public key from a private key.
38
- *
39
- * @param privateKeyHex - Private key as 0x-prefixed hex string
40
- * @returns G2 point in affine coordinates
41
- */ export async function computeBn254G2PublicKey(privateKeyHex) {
42
- const sk = BigInt(privateKeyHex);
43
- const skReduced = sk % Fr.MODULUS;
44
- const scalar = Fr.fromString(skReduced.toString());
45
- const pk2 = await Bn254G2Point.generator(scalar);
46
- return {
47
- x: {
48
- c0: pk2.x[0].toBigInt(),
49
- c1: pk2.x[1].toBigInt()
50
- },
51
- y: {
52
- c0: pk2.y[0].toBigInt(),
53
- c1: pk2.y[1].toBigInt()
54
- }
55
- };
56
- }
@@ -1,17 +0,0 @@
1
- export * from './keccak/index.js';
2
- export * from './random/index.js';
3
- export * from './sha256/index.js';
4
- export * from './sha512/index.js';
5
- export * from './pedersen/index.js';
6
- export * from './poseidon/index.js';
7
- export * from './secp256k1-signer/index.js';
8
- export * from './keys/index.js';
9
- export * from './aes128/index.js';
10
- export * from './bn254/index.js';
11
- export * from './grumpkin/index.js';
12
- export * from './ecdsa/index.js';
13
- export * from './secp256k1/index.js';
14
- export * from './schnorr/index.js';
15
- export * from './signature/index.js';
16
- export * from './bls/index.js';
17
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}