@aztec/foundation 0.0.0-test.1 → 0.0.1-commit.5476d83

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 (618) hide show
  1. package/dest/array/array.d.ts +6 -9
  2. package/dest/array/array.d.ts.map +1 -1
  3. package/dest/array/array.js +11 -11
  4. package/dest/array/index.d.ts +1 -1
  5. package/dest/async-map/index.d.ts +1 -1
  6. package/dest/async-pool/index.d.ts +1 -1
  7. package/dest/async-pool/index.d.ts.map +1 -1
  8. package/dest/async-pool/index.js +1 -0
  9. package/dest/bigint/index.d.ts +7 -0
  10. package/dest/bigint/index.d.ts.map +1 -0
  11. package/dest/bigint/index.js +15 -0
  12. package/dest/bigint-buffer/index.d.ts +1 -3
  13. package/dest/bigint-buffer/index.d.ts.map +1 -1
  14. package/dest/branded-types/epoch.d.ts +42 -0
  15. package/dest/branded-types/epoch.d.ts.map +1 -0
  16. package/dest/branded-types/epoch.js +59 -0
  17. package/dest/branded-types/index.d.ts +4 -0
  18. package/dest/branded-types/index.d.ts.map +1 -0
  19. package/dest/branded-types/index.js +2 -0
  20. package/dest/branded-types/slot.d.ts +42 -0
  21. package/dest/branded-types/slot.d.ts.map +1 -0
  22. package/dest/branded-types/slot.js +59 -0
  23. package/dest/branded-types/types.d.ts +5 -0
  24. package/dest/branded-types/types.d.ts.map +1 -0
  25. package/dest/branded-types/types.js +1 -0
  26. package/dest/buffer/buffer16.d.ts +77 -0
  27. package/dest/buffer/buffer16.d.ts.map +1 -0
  28. package/dest/buffer/buffer16.js +100 -0
  29. package/dest/buffer/buffer32.d.ts +4 -11
  30. package/dest/buffer/buffer32.d.ts.map +1 -1
  31. package/dest/buffer/buffer32.js +6 -6
  32. package/dest/buffer/index.d.ts +2 -1
  33. package/dest/buffer/index.d.ts.map +1 -1
  34. package/dest/buffer/index.js +1 -0
  35. package/dest/collection/array.d.ts +17 -4
  36. package/dest/collection/array.d.ts.map +1 -1
  37. package/dest/collection/array.js +57 -3
  38. package/dest/collection/index.d.ts +1 -1
  39. package/dest/collection/object.d.ts +17 -1
  40. package/dest/collection/object.d.ts.map +1 -1
  41. package/dest/collection/object.js +25 -0
  42. package/dest/committable/committable.d.ts +1 -1
  43. package/dest/committable/committable.d.ts.map +1 -1
  44. package/dest/committable/index.d.ts +1 -1
  45. package/dest/config/env_var.d.ts +2 -2
  46. package/dest/config/env_var.d.ts.map +1 -1
  47. package/dest/config/index.d.ts +49 -2
  48. package/dest/config/index.d.ts.map +1 -1
  49. package/dest/config/index.js +115 -7
  50. package/dest/config/network_config.d.ts +42 -0
  51. package/dest/config/network_config.d.ts.map +1 -0
  52. package/dest/config/network_config.js +9 -0
  53. package/dest/config/network_name.d.ts +3 -0
  54. package/dest/config/network_name.d.ts.map +1 -0
  55. package/dest/config/network_name.js +19 -0
  56. package/dest/config/secret_value.d.ts +28 -0
  57. package/dest/config/secret_value.d.ts.map +1 -0
  58. package/dest/config/secret_value.js +34 -0
  59. package/dest/crypto/aes128/index.d.ts +3 -5
  60. package/dest/crypto/aes128/index.d.ts.map +1 -1
  61. package/dest/crypto/aes128/index.js +19 -6
  62. package/dest/crypto/bls/bn254_keystore.d.ts +296 -0
  63. package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -0
  64. package/dest/crypto/bls/bn254_keystore.js +218 -0
  65. package/dest/crypto/bls/index.d.ts +13 -0
  66. package/dest/crypto/bls/index.d.ts.map +1 -0
  67. package/dest/crypto/bls/index.js +87 -0
  68. package/dest/crypto/bn254/bn254_utils.d.ts +39 -0
  69. package/dest/crypto/bn254/bn254_utils.d.ts.map +1 -0
  70. package/dest/crypto/bn254/bn254_utils.js +56 -0
  71. package/dest/crypto/bn254/index.d.ts +55 -0
  72. package/dest/crypto/bn254/index.d.ts.map +1 -0
  73. package/dest/crypto/bn254/index.js +145 -0
  74. package/dest/crypto/ecdsa/index.d.ts +3 -3
  75. package/dest/crypto/ecdsa/index.d.ts.map +1 -1
  76. package/dest/crypto/ecdsa/index.js +62 -48
  77. package/dest/crypto/ecdsa/signature.d.ts +2 -13
  78. package/dest/crypto/ecdsa/signature.d.ts.map +1 -1
  79. package/dest/crypto/grumpkin/index.d.ts +7 -14
  80. package/dest/crypto/grumpkin/index.d.ts.map +1 -1
  81. package/dest/crypto/grumpkin/index.js +59 -54
  82. package/dest/crypto/index.d.ts +3 -1
  83. package/dest/crypto/index.d.ts.map +1 -1
  84. package/dest/crypto/index.js +2 -0
  85. package/dest/crypto/keccak/index.d.ts +3 -5
  86. package/dest/crypto/keccak/index.d.ts.map +1 -1
  87. package/dest/crypto/keys/index.d.ts +1 -3
  88. package/dest/crypto/keys/index.d.ts.map +1 -1
  89. package/dest/crypto/keys/index.js +7 -4
  90. package/dest/crypto/pedersen/index.d.ts +1 -1
  91. package/dest/crypto/pedersen/pedersen.noble.d.ts +3 -5
  92. package/dest/crypto/pedersen/pedersen.noble.d.ts.map +1 -1
  93. package/dest/crypto/pedersen/pedersen.wasm.d.ts +3 -5
  94. package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
  95. package/dest/crypto/pedersen/pedersen.wasm.js +23 -13
  96. package/dest/crypto/poseidon/index.d.ts +1 -3
  97. package/dest/crypto/poseidon/index.d.ts.map +1 -1
  98. package/dest/crypto/poseidon/index.js +32 -17
  99. package/dest/crypto/random/index.d.ts +2 -4
  100. package/dest/crypto/random/index.d.ts.map +1 -1
  101. package/dest/crypto/random/index.js +2 -34
  102. package/dest/crypto/random/randomness_singleton.d.ts +1 -3
  103. package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
  104. package/dest/crypto/schnorr/index.d.ts +1 -1
  105. package/dest/crypto/schnorr/index.d.ts.map +1 -1
  106. package/dest/crypto/schnorr/index.js +29 -37
  107. package/dest/crypto/schnorr/signature.d.ts +4 -6
  108. package/dest/crypto/schnorr/signature.d.ts.map +1 -1
  109. package/dest/crypto/secp256k1/index.d.ts +5 -7
  110. package/dest/crypto/secp256k1/index.d.ts.map +1 -1
  111. package/dest/crypto/secp256k1/index.js +23 -18
  112. package/dest/crypto/secp256k1-signer/index.d.ts +1 -1
  113. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +1 -1
  114. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -1
  115. package/dest/crypto/secp256k1-signer/utils.d.ts +56 -5
  116. package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
  117. package/dest/crypto/secp256k1-signer/utils.js +92 -6
  118. package/dest/crypto/serialize.d.ts +5 -7
  119. package/dest/crypto/serialize.d.ts.map +1 -1
  120. package/dest/crypto/sha256/index.d.ts +22 -5
  121. package/dest/crypto/sha256/index.d.ts.map +1 -1
  122. package/dest/crypto/sha256/index.js +42 -0
  123. package/dest/crypto/sha512/index.d.ts +2 -4
  124. package/dest/crypto/sha512/index.d.ts.map +1 -1
  125. package/dest/crypto/signature/index.d.ts +1 -3
  126. package/dest/crypto/signature/index.d.ts.map +1 -1
  127. package/dest/crypto/sync/index.d.ts +1 -1
  128. package/dest/crypto/sync/index.js +1 -1
  129. package/dest/crypto/sync/pedersen/index.d.ts +3 -5
  130. package/dest/crypto/sync/pedersen/index.d.ts.map +1 -1
  131. package/dest/crypto/sync/pedersen/index.js +17 -10
  132. package/dest/crypto/sync/poseidon/index.d.ts +1 -3
  133. package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
  134. package/dest/crypto/sync/poseidon/index.js +27 -12
  135. package/dest/decorators/index.d.ts +1 -1
  136. package/dest/decorators/memoize.d.ts +1 -1
  137. package/dest/decorators/memoize.d.ts.map +1 -1
  138. package/dest/error/index.d.ts +4 -4
  139. package/dest/error/index.d.ts.map +1 -1
  140. package/dest/eth-address/index.d.ts +16 -8
  141. package/dest/eth-address/index.d.ts.map +1 -1
  142. package/dest/eth-address/index.js +22 -0
  143. package/dest/eth-signature/eth_signature.d.ts +17 -18
  144. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  145. package/dest/eth-signature/eth_signature.js +31 -17
  146. package/dest/eth-signature/index.d.ts +1 -1
  147. package/dest/fields/bls12_fields.d.ts +148 -0
  148. package/dest/fields/bls12_fields.d.ts.map +1 -0
  149. package/dest/fields/bls12_fields.js +359 -0
  150. package/dest/fields/bls12_point.d.ts +220 -0
  151. package/dest/fields/bls12_point.d.ts.map +1 -0
  152. package/dest/fields/bls12_point.js +398 -0
  153. package/dest/fields/coordinate.d.ts +1 -6
  154. package/dest/fields/coordinate.d.ts.map +1 -1
  155. package/dest/fields/fields.d.ts +16 -4
  156. package/dest/fields/fields.d.ts.map +1 -1
  157. package/dest/fields/fields.js +57 -15
  158. package/dest/fields/index.d.ts +3 -1
  159. package/dest/fields/index.d.ts.map +1 -1
  160. package/dest/fields/index.js +2 -0
  161. package/dest/fields/point.d.ts +13 -15
  162. package/dest/fields/point.d.ts.map +1 -1
  163. package/dest/fields/point.js +20 -3
  164. package/dest/fs/index.d.ts +2 -1
  165. package/dest/fs/index.d.ts.map +1 -1
  166. package/dest/fs/index.js +1 -0
  167. package/dest/fs/run_in_dir.d.ts +1 -1
  168. package/dest/fs/try_rm_dir.d.ts +3 -0
  169. package/dest/fs/try_rm_dir.d.ts.map +1 -0
  170. package/dest/fs/try_rm_dir.js +16 -0
  171. package/dest/index.d.ts +3 -3
  172. package/dest/index.d.ts.map +1 -1
  173. package/dest/index.js +2 -2
  174. package/dest/iterable/all.d.ts +1 -1
  175. package/dest/iterable/filter.d.ts +1 -1
  176. package/dest/iterable/filter.js +1 -1
  177. package/dest/iterable/index.d.ts +1 -1
  178. package/dest/iterable/isAsyncIt.d.ts +1 -1
  179. package/dest/iterable/map.d.ts +1 -1
  180. package/dest/iterable/map.js +1 -1
  181. package/dest/iterable/peek.d.ts +1 -1
  182. package/dest/iterable/sort.d.ts +1 -1
  183. package/dest/iterable/take.d.ts +1 -1
  184. package/dest/iterable/toArray.d.ts +1 -1
  185. package/dest/jest/env.js +48 -0
  186. package/dest/jest/setupAfterEnv.js +3 -0
  187. package/dest/json-rpc/client/fetch.d.ts +3 -3
  188. package/dest/json-rpc/client/fetch.d.ts.map +1 -1
  189. package/dest/json-rpc/client/fetch.js +16 -30
  190. package/dest/json-rpc/client/index.d.ts +1 -1
  191. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +10 -4
  192. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
  193. package/dest/json-rpc/client/safe_json_rpc_client.js +173 -13
  194. package/dest/json-rpc/client/undici.d.ts +1 -1
  195. package/dest/json-rpc/client/undici.d.ts.map +1 -1
  196. package/dest/json-rpc/client/undici.js +6 -7
  197. package/dest/json-rpc/convert.d.ts +3 -10
  198. package/dest/json-rpc/convert.d.ts.map +1 -1
  199. package/dest/json-rpc/convert.js +1 -9
  200. package/dest/json-rpc/errors.d.ts +4 -0
  201. package/dest/json-rpc/errors.d.ts.map +1 -0
  202. package/dest/json-rpc/errors.js +6 -0
  203. package/dest/json-rpc/fixtures/class_a.d.ts +4 -2
  204. package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
  205. package/dest/json-rpc/fixtures/class_b.d.ts +4 -2
  206. package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -1
  207. package/dest/json-rpc/fixtures/test_state.d.ts +1 -1
  208. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
  209. package/dest/json-rpc/index.d.ts +3 -2
  210. package/dest/json-rpc/index.d.ts.map +1 -1
  211. package/dest/json-rpc/index.js +2 -1
  212. package/dest/json-rpc/js_utils.d.ts +1 -1
  213. package/dest/json-rpc/js_utils.d.ts.map +1 -1
  214. package/dest/json-rpc/server/index.d.ts +1 -1
  215. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +22 -23
  216. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
  217. package/dest/json-rpc/server/safe_json_rpc_server.js +161 -56
  218. package/dest/json-rpc/server/telemetry.d.ts +1 -1
  219. package/dest/json-rpc/test/index.d.ts +1 -1
  220. package/dest/json-rpc/test/integration.d.ts +2 -3
  221. package/dest/json-rpc/test/integration.d.ts.map +1 -1
  222. package/dest/log/console.d.ts +1 -1
  223. package/dest/log/console.d.ts.map +1 -1
  224. package/dest/log/gcloud-logger-config.d.ts +1 -2
  225. package/dest/log/gcloud-logger-config.d.ts.map +1 -1
  226. package/dest/log/gcloud-logger-config.js +1 -9
  227. package/dest/log/index.d.ts +5 -5
  228. package/dest/log/index.d.ts.map +1 -1
  229. package/dest/log/index.js +4 -4
  230. package/dest/log/libp2p_logger.d.ts +1 -1
  231. package/dest/log/libp2p_logger.js +13 -2
  232. package/dest/log/log-filters.d.ts +1 -1
  233. package/dest/log/log-levels.d.ts +1 -1
  234. package/dest/log/log_fn.d.ts +2 -2
  235. package/dest/log/log_fn.d.ts.map +1 -1
  236. package/dest/log/noir_debug_log_util.d.ts +14 -0
  237. package/dest/log/noir_debug_log_util.d.ts.map +1 -0
  238. package/dest/log/noir_debug_log_util.js +14 -0
  239. package/dest/log/pino-logger.d.ts +4 -4
  240. package/dest/log/pino-logger.d.ts.map +1 -1
  241. package/dest/log/pino-logger.js +28 -2
  242. package/dest/message/index.d.ts +1 -1
  243. package/dest/message/index.d.ts.map +1 -1
  244. package/dest/mutex/index.d.ts +1 -1
  245. package/dest/mutex/index.d.ts.map +1 -1
  246. package/dest/mutex/mutex_database.d.ts +1 -1
  247. package/dest/mutex/mutex_database.d.ts.map +1 -1
  248. package/dest/noir/index.d.ts +1 -1
  249. package/dest/noir/noir_package_config.d.ts +9 -9
  250. package/dest/number/index.d.ts +3 -0
  251. package/dest/number/index.d.ts.map +1 -0
  252. package/dest/number/index.js +12 -0
  253. package/dest/profiler/index.d.ts +2 -0
  254. package/dest/profiler/index.d.ts.map +1 -0
  255. package/dest/profiler/index.js +1 -0
  256. package/dest/profiler/profiler.d.ts +8 -0
  257. package/dest/profiler/profiler.d.ts.map +1 -0
  258. package/dest/profiler/profiler.js +97 -0
  259. package/dest/promise/index.d.ts +1 -1
  260. package/dest/promise/running-promise.d.ts +2 -2
  261. package/dest/promise/running-promise.d.ts.map +1 -1
  262. package/dest/promise/running-promise.js +2 -2
  263. package/dest/promise/utils.d.ts +1 -1
  264. package/dest/queue/base_memory_queue.d.ts +1 -1
  265. package/dest/queue/base_memory_queue.d.ts.map +1 -1
  266. package/dest/queue/batch_queue.d.ts +2 -2
  267. package/dest/queue/batch_queue.d.ts.map +1 -1
  268. package/dest/queue/batch_queue.js +1 -1
  269. package/dest/queue/bounded_serial_queue.d.ts +1 -1
  270. package/dest/queue/bounded_serial_queue.d.ts.map +1 -1
  271. package/dest/queue/fifo_memory_queue.d.ts +1 -1
  272. package/dest/queue/fifo_memory_queue.d.ts.map +1 -1
  273. package/dest/queue/index.d.ts +1 -1
  274. package/dest/queue/priority_memory_queue.d.ts +1 -1
  275. package/dest/queue/priority_memory_queue.d.ts.map +1 -1
  276. package/dest/queue/priority_queue.d.ts +1 -1
  277. package/dest/queue/priority_queue.d.ts.map +1 -1
  278. package/dest/queue/semaphore.d.ts +1 -1
  279. package/dest/queue/semaphore.d.ts.map +1 -1
  280. package/dest/queue/serial_queue.d.ts +3 -3
  281. package/dest/queue/serial_queue.d.ts.map +1 -1
  282. package/dest/queue/serial_queue.js +7 -5
  283. package/dest/retry/index.d.ts +4 -3
  284. package/dest/retry/index.d.ts.map +1 -1
  285. package/dest/retry/index.js +2 -2
  286. package/dest/running-promise/index.d.ts +1 -1
  287. package/dest/schemas/api.d.ts +1 -1
  288. package/dest/schemas/api.d.ts.map +1 -1
  289. package/dest/schemas/index.d.ts +1 -1
  290. package/dest/schemas/parse.d.ts +1 -1
  291. package/dest/schemas/parse.js +1 -1
  292. package/dest/schemas/schemas.d.ts +15 -18
  293. package/dest/schemas/schemas.d.ts.map +1 -1
  294. package/dest/schemas/schemas.js +20 -8
  295. package/dest/schemas/types.d.ts +1 -1
  296. package/dest/schemas/utils.d.ts +4 -6
  297. package/dest/schemas/utils.d.ts.map +1 -1
  298. package/dest/schemas/utils.js +15 -5
  299. package/dest/serialize/buffer_reader.d.ts +28 -3
  300. package/dest/serialize/buffer_reader.d.ts.map +1 -1
  301. package/dest/serialize/buffer_reader.js +44 -2
  302. package/dest/serialize/field_reader.d.ts +11 -2
  303. package/dest/serialize/field_reader.d.ts.map +1 -1
  304. package/dest/serialize/field_reader.js +18 -1
  305. package/dest/serialize/free_funcs.d.ts +24 -22
  306. package/dest/serialize/free_funcs.d.ts.map +1 -1
  307. package/dest/serialize/free_funcs.js +21 -27
  308. package/dest/serialize/index.d.ts +1 -1
  309. package/dest/serialize/serialize.d.ts +5 -6
  310. package/dest/serialize/serialize.d.ts.map +1 -1
  311. package/dest/serialize/type_registry.d.ts +1 -1
  312. package/dest/serialize/type_registry.d.ts.map +1 -1
  313. package/dest/serialize/types.d.ts +1 -1
  314. package/dest/sleep/index.d.ts +1 -1
  315. package/dest/sleep/index.d.ts.map +1 -1
  316. package/dest/string/index.d.ts +8 -3
  317. package/dest/string/index.d.ts.map +1 -1
  318. package/dest/string/index.js +27 -1
  319. package/dest/testing/files/index.d.ts +2 -3
  320. package/dest/testing/files/index.d.ts.map +1 -1
  321. package/dest/testing/files/index.js +3 -3
  322. package/dest/testing/formatting.d.ts +4 -0
  323. package/dest/testing/formatting.d.ts.map +1 -0
  324. package/dest/testing/formatting.js +3 -0
  325. package/dest/testing/index.d.ts +2 -1
  326. package/dest/testing/index.d.ts.map +1 -1
  327. package/dest/testing/index.js +1 -0
  328. package/dest/testing/port_allocator.d.ts +1 -1
  329. package/dest/testing/snapshot_serializer.d.ts +1 -1
  330. package/dest/testing/test_data.d.ts +1 -1
  331. package/dest/timer/date.d.ts +3 -2
  332. package/dest/timer/date.d.ts.map +1 -1
  333. package/dest/timer/date.js +5 -3
  334. package/dest/timer/elapsed.d.ts +1 -1
  335. package/dest/timer/index.d.ts +2 -2
  336. package/dest/timer/index.d.ts.map +1 -1
  337. package/dest/timer/index.js +1 -1
  338. package/dest/timer/timeout.d.ts +19 -6
  339. package/dest/timer/timeout.d.ts.map +1 -1
  340. package/dest/timer/timeout.js +43 -22
  341. package/dest/timer/timer.d.ts +1 -1
  342. package/dest/timer/timer.d.ts.map +1 -1
  343. package/dest/transport/dispatch/create_dispatch_fn.d.ts +1 -1
  344. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
  345. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +1 -1
  346. package/dest/transport/dispatch/messages.d.ts +1 -1
  347. package/dest/transport/index.d.ts +1 -2
  348. package/dest/transport/index.d.ts.map +1 -1
  349. package/dest/transport/index.js +0 -1
  350. package/dest/transport/interface/connector.d.ts +1 -1
  351. package/dest/transport/interface/connector.d.ts.map +1 -1
  352. package/dest/transport/interface/listener.d.ts +1 -2
  353. package/dest/transport/interface/listener.d.ts.map +1 -1
  354. package/dest/transport/interface/socket.d.ts +1 -1
  355. package/dest/transport/interface/socket.d.ts.map +1 -1
  356. package/dest/transport/interface/transferable.d.ts +1 -1
  357. package/dest/transport/node/index.d.ts +1 -1
  358. package/dest/transport/node/node_connector.d.ts +1 -2
  359. package/dest/transport/node/node_connector.d.ts.map +1 -1
  360. package/dest/transport/node/node_connector_socket.d.ts +1 -2
  361. package/dest/transport/node/node_connector_socket.d.ts.map +1 -1
  362. package/dest/transport/node/node_listener.d.ts +1 -2
  363. package/dest/transport/node/node_listener.d.ts.map +1 -1
  364. package/dest/transport/node/node_listener_socket.d.ts +1 -2
  365. package/dest/transport/node/node_listener_socket.d.ts.map +1 -1
  366. package/dest/transport/transport_client.d.ts +1 -2
  367. package/dest/transport/transport_client.d.ts.map +1 -1
  368. package/dest/transport/transport_server.d.ts +1 -10
  369. package/dest/transport/transport_server.d.ts.map +1 -1
  370. package/dest/trees/balanced_merkle_tree.d.ts +22 -0
  371. package/dest/trees/balanced_merkle_tree.d.ts.map +1 -0
  372. package/dest/trees/balanced_merkle_tree.js +64 -0
  373. package/dest/trees/hasher.d.ts +5 -7
  374. package/dest/trees/hasher.d.ts.map +1 -1
  375. package/dest/trees/index.d.ts +3 -1
  376. package/dest/trees/index.d.ts.map +1 -1
  377. package/dest/trees/index.js +2 -0
  378. package/dest/trees/indexed_merkle_tree.d.ts +1 -3
  379. package/dest/trees/indexed_merkle_tree.d.ts.map +1 -1
  380. package/dest/trees/indexed_merkle_tree_calculator.d.ts +2 -4
  381. package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
  382. package/dest/trees/indexed_tree_leaf.d.ts +1 -3
  383. package/dest/trees/indexed_tree_leaf.d.ts.map +1 -1
  384. package/dest/trees/membership_witness.d.ts +5 -10
  385. package/dest/trees/membership_witness.d.ts.map +1 -1
  386. package/dest/trees/membership_witness.js +13 -0
  387. package/dest/trees/merkle_tree.d.ts +1 -3
  388. package/dest/trees/merkle_tree.d.ts.map +1 -1
  389. package/dest/trees/merkle_tree_calculator.d.ts +2 -4
  390. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
  391. package/dest/trees/sibling_path.d.ts +5 -41
  392. package/dest/trees/sibling_path.d.ts.map +1 -1
  393. package/dest/trees/unbalanced_merkle_tree.d.ts +23 -10
  394. package/dest/trees/unbalanced_merkle_tree.d.ts.map +1 -1
  395. package/dest/trees/unbalanced_merkle_tree.js +72 -50
  396. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts +49 -0
  397. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -0
  398. package/dest/trees/unbalanced_merkle_tree_calculator.js +158 -0
  399. package/dest/trees/unbalanced_tree_store.d.ts +2 -1
  400. package/dest/trees/unbalanced_tree_store.d.ts.map +1 -1
  401. package/dest/trees/unbalanced_tree_store.js +6 -0
  402. package/dest/types/index.d.ts +26 -3
  403. package/dest/types/index.d.ts.map +1 -1
  404. package/dest/url/index.d.ts +1 -1
  405. package/dest/url/index.d.ts.map +1 -1
  406. package/dest/url/index.js +1 -1
  407. package/dest/validation/index.d.ts +1 -1
  408. package/package.json +39 -43
  409. package/src/array/array.ts +13 -16
  410. package/src/async-pool/index.ts +1 -0
  411. package/src/bigint/index.ts +20 -0
  412. package/src/branded-types/epoch.ts +88 -0
  413. package/src/branded-types/index.ts +4 -0
  414. package/src/branded-types/slot.ts +88 -0
  415. package/src/branded-types/types.ts +2 -0
  416. package/src/buffer/buffer16.ts +133 -0
  417. package/src/buffer/buffer32.ts +8 -6
  418. package/src/buffer/index.ts +1 -0
  419. package/src/collection/array.ts +66 -4
  420. package/src/collection/object.ts +37 -0
  421. package/src/config/env_var.ts +152 -52
  422. package/src/config/index.ts +191 -8
  423. package/src/config/network_config.ts +16 -0
  424. package/src/config/network_name.ts +28 -0
  425. package/src/config/secret_value.ts +49 -0
  426. package/src/crypto/aes128/index.ts +19 -10
  427. package/src/crypto/bls/bn254_keystore.ts +287 -0
  428. package/src/crypto/bls/index.ts +77 -0
  429. package/src/crypto/bn254/bn254_utils.ts +64 -0
  430. package/src/crypto/bn254/index.ts +173 -0
  431. package/src/crypto/ecdsa/index.ts +41 -23
  432. package/src/crypto/grumpkin/index.ts +35 -45
  433. package/src/crypto/index.ts +2 -0
  434. package/src/crypto/keys/index.ts +5 -5
  435. package/src/crypto/pedersen/pedersen.wasm.ts +22 -18
  436. package/src/crypto/poseidon/index.ts +32 -24
  437. package/src/crypto/random/index.ts +2 -40
  438. package/src/crypto/schnorr/index.ts +20 -17
  439. package/src/crypto/secp256k1/index.ts +15 -11
  440. package/src/crypto/secp256k1-signer/utils.ts +120 -7
  441. package/src/crypto/sha256/index.ts +47 -0
  442. package/src/crypto/sync/index.ts +1 -1
  443. package/src/crypto/sync/pedersen/index.ts +16 -15
  444. package/src/crypto/sync/poseidon/index.ts +27 -22
  445. package/src/eth-address/index.ts +28 -2
  446. package/src/eth-signature/eth_signature.ts +44 -22
  447. package/src/fields/bls12_fields.ts +463 -0
  448. package/src/fields/bls12_point.ts +450 -0
  449. package/src/fields/fields.ts +53 -9
  450. package/src/fields/index.ts +2 -0
  451. package/src/fields/point.ts +20 -3
  452. package/src/fs/index.ts +1 -0
  453. package/src/fs/try_rm_dir.ts +15 -0
  454. package/src/index.ts +2 -2
  455. package/src/iterable/filter.ts +1 -1
  456. package/src/iterable/map.ts +1 -1
  457. package/src/jest/env.mjs +52 -0
  458. package/src/jest/setupAfterEnv.mjs +3 -0
  459. package/src/json-rpc/client/fetch.ts +14 -33
  460. package/src/json-rpc/client/safe_json_rpc_client.ts +226 -13
  461. package/src/json-rpc/client/undici.ts +8 -15
  462. package/src/json-rpc/convert.ts +3 -12
  463. package/src/json-rpc/errors.ts +6 -0
  464. package/src/json-rpc/fixtures/class_a.ts +4 -1
  465. package/src/json-rpc/fixtures/class_b.ts +4 -1
  466. package/src/json-rpc/index.ts +2 -1
  467. package/src/json-rpc/server/safe_json_rpc_server.ts +141 -48
  468. package/src/json-rpc/test/integration.ts +1 -1
  469. package/src/log/console.ts +4 -1
  470. package/src/log/gcloud-logger-config.ts +3 -7
  471. package/src/log/index.ts +4 -4
  472. package/src/log/libp2p_logger.ts +21 -2
  473. package/src/log/log_fn.ts +1 -1
  474. package/src/log/noir_debug_log_util.ts +21 -0
  475. package/src/log/pino-logger.ts +33 -2
  476. package/src/message/index.ts +5 -1
  477. package/src/mutex/mutex_database.ts +2 -3
  478. package/src/number/index.ts +14 -0
  479. package/src/profiler/index.ts +1 -0
  480. package/src/profiler/profiler.ts +125 -0
  481. package/src/promise/running-promise.ts +2 -2
  482. package/src/queue/batch_queue.ts +1 -1
  483. package/src/queue/bounded_serial_queue.ts +4 -1
  484. package/src/queue/serial_queue.ts +5 -5
  485. package/src/retry/index.ts +10 -5
  486. package/src/schemas/api.ts +4 -4
  487. package/src/schemas/parse.ts +1 -1
  488. package/src/schemas/schemas.ts +28 -10
  489. package/src/schemas/utils.ts +21 -8
  490. package/src/serialize/buffer_reader.ts +60 -3
  491. package/src/serialize/field_reader.ts +27 -3
  492. package/src/serialize/free_funcs.ts +25 -31
  493. package/src/serialize/serialize.ts +2 -0
  494. package/src/string/index.ts +36 -1
  495. package/src/testing/files/index.ts +7 -3
  496. package/src/testing/formatting.ts +3 -0
  497. package/src/testing/index.ts +1 -0
  498. package/src/timer/date.ts +9 -3
  499. package/src/timer/index.ts +1 -1
  500. package/src/timer/timeout.ts +54 -19
  501. package/src/transport/index.ts +0 -1
  502. package/src/transport/interface/connector.ts +0 -1
  503. package/src/transport/interface/listener.ts +2 -3
  504. package/src/transport/interface/socket.ts +2 -3
  505. package/src/transport/transport_client.ts +3 -4
  506. package/src/transport/transport_server.ts +4 -1
  507. package/src/trees/balanced_merkle_tree.ts +82 -0
  508. package/src/trees/hasher.ts +4 -4
  509. package/src/trees/index.ts +2 -0
  510. package/src/trees/indexed_merkle_tree.ts +5 -1
  511. package/src/trees/indexed_merkle_tree_calculator.ts +2 -2
  512. package/src/trees/membership_witness.ts +13 -0
  513. package/src/trees/merkle_tree.ts +4 -1
  514. package/src/trees/merkle_tree_calculator.ts +9 -4
  515. package/src/trees/unbalanced_merkle_tree.ts +98 -42
  516. package/src/trees/unbalanced_merkle_tree_calculator.ts +187 -0
  517. package/src/trees/unbalanced_tree_store.ts +5 -1
  518. package/src/types/index.ts +25 -4
  519. package/src/url/index.ts +0 -1
  520. package/dest/crypto/pedersen/pedersen.elliptic.d.ts +0 -13
  521. package/dest/crypto/pedersen/pedersen.elliptic.d.ts.map +0 -1
  522. package/dest/crypto/pedersen/pedersen.elliptic.js +0 -582
  523. package/dest/log/debug.d.ts +0 -56
  524. package/dest/log/debug.d.ts.map +0 -1
  525. package/dest/log/debug.js +0 -75
  526. package/dest/log/log_history.d.ts +0 -31
  527. package/dest/log/log_history.d.ts.map +0 -1
  528. package/dest/log/log_history.js +0 -38
  529. package/dest/transport/browser/index.d.ts +0 -5
  530. package/dest/transport/browser/index.d.ts.map +0 -1
  531. package/dest/transport/browser/index.js +0 -4
  532. package/dest/transport/browser/message_port_socket.d.ts +0 -37
  533. package/dest/transport/browser/message_port_socket.d.ts.map +0 -1
  534. package/dest/transport/browser/message_port_socket.js +0 -42
  535. package/dest/transport/browser/shared_worker_connector.d.ts +0 -19
  536. package/dest/transport/browser/shared_worker_connector.d.ts.map +0 -1
  537. package/dest/transport/browser/shared_worker_connector.js +0 -19
  538. package/dest/transport/browser/shared_worker_listener.d.ts +0 -38
  539. package/dest/transport/browser/shared_worker_listener.d.ts.map +0 -1
  540. package/dest/transport/browser/shared_worker_listener.js +0 -33
  541. package/dest/transport/browser/worker_connector.d.ts +0 -26
  542. package/dest/transport/browser/worker_connector.d.ts.map +0 -1
  543. package/dest/transport/browser/worker_connector.js +0 -30
  544. package/dest/transport/browser/worker_listener.d.ts +0 -39
  545. package/dest/transport/browser/worker_listener.d.ts.map +0 -1
  546. package/dest/transport/browser/worker_listener.js +0 -35
  547. package/dest/wasm/empty_wasi_sdk.d.ts +0 -130
  548. package/dest/wasm/empty_wasi_sdk.d.ts.map +0 -1
  549. package/dest/wasm/empty_wasi_sdk.js +0 -148
  550. package/dest/wasm/index.d.ts +0 -2
  551. package/dest/wasm/index.d.ts.map +0 -1
  552. package/dest/wasm/index.js +0 -1
  553. package/dest/wasm/wasm_module.d.ts +0 -136
  554. package/dest/wasm/wasm_module.d.ts.map +0 -1
  555. package/dest/wasm/wasm_module.js +0 -196
  556. package/dest/worker/browser/index.d.ts +0 -3
  557. package/dest/worker/browser/index.d.ts.map +0 -1
  558. package/dest/worker/browser/index.js +0 -2
  559. package/dest/worker/browser/start_web_module.d.ts +0 -7
  560. package/dest/worker/browser/start_web_module.d.ts.map +0 -1
  561. package/dest/worker/browser/start_web_module.js +0 -27
  562. package/dest/worker/browser/web_data_store.d.ts +0 -24
  563. package/dest/worker/browser/web_data_store.d.ts.map +0 -1
  564. package/dest/worker/browser/web_data_store.js +0 -29
  565. package/dest/worker/browser/web_worker.d.ts +0 -10
  566. package/dest/worker/browser/web_worker.d.ts.map +0 -1
  567. package/dest/worker/browser/web_worker.js +0 -25
  568. package/dest/worker/data_store.d.ts +0 -21
  569. package/dest/worker/data_store.d.ts.map +0 -1
  570. package/dest/worker/data_store.js +0 -3
  571. package/dest/worker/index.d.ts +0 -3
  572. package/dest/worker/index.d.ts.map +0 -1
  573. package/dest/worker/index.js +0 -1
  574. package/dest/worker/node/index.d.ts +0 -3
  575. package/dest/worker/node/index.d.ts.map +0 -1
  576. package/dest/worker/node/index.js +0 -2
  577. package/dest/worker/node/node_data_store.d.ts +0 -13
  578. package/dest/worker/node/node_data_store.d.ts.map +0 -1
  579. package/dest/worker/node/node_data_store.js +0 -20
  580. package/dest/worker/node/node_worker.d.ts +0 -6
  581. package/dest/worker/node/node_worker.d.ts.map +0 -1
  582. package/dest/worker/node/node_worker.js +0 -22
  583. package/dest/worker/node/start_node_module.d.ts +0 -7
  584. package/dest/worker/node/start_node_module.d.ts.map +0 -1
  585. package/dest/worker/node/start_node_module.js +0 -31
  586. package/dest/worker/wasm_worker.d.ts +0 -9
  587. package/dest/worker/wasm_worker.d.ts.map +0 -1
  588. package/dest/worker/wasm_worker.js +0 -3
  589. package/dest/worker/worker_pool.d.ts +0 -40
  590. package/dest/worker/worker_pool.d.ts.map +0 -1
  591. package/dest/worker/worker_pool.js +0 -51
  592. package/src/crypto/pedersen/pedersen.elliptic.ts +0 -584
  593. package/src/log/debug.ts +0 -104
  594. package/src/log/log_history.ts +0 -44
  595. package/src/transport/browser/index.ts +0 -4
  596. package/src/transport/browser/message_port_socket.ts +0 -48
  597. package/src/transport/browser/shared_worker_connector.ts +0 -21
  598. package/src/transport/browser/shared_worker_listener.ts +0 -53
  599. package/src/transport/browser/worker_connector.ts +0 -30
  600. package/src/transport/browser/worker_listener.ts +0 -54
  601. package/src/wasm/README.md +0 -6
  602. package/src/wasm/empty_wasi_sdk.ts +0 -166
  603. package/src/wasm/fixtures/gcd.wasm +0 -0
  604. package/src/wasm/fixtures/gcd.wat +0 -27
  605. package/src/wasm/index.ts +0 -1
  606. package/src/wasm/wasm_module.ts +0 -260
  607. package/src/worker/browser/index.ts +0 -2
  608. package/src/worker/browser/start_web_module.ts +0 -24
  609. package/src/worker/browser/web_data_store.ts +0 -38
  610. package/src/worker/browser/web_worker.ts +0 -25
  611. package/src/worker/data_store.ts +0 -19
  612. package/src/worker/index.ts +0 -2
  613. package/src/worker/node/index.ts +0 -2
  614. package/src/worker/node/node_data_store.ts +0 -27
  615. package/src/worker/node/node_worker.ts +0 -23
  616. package/src/worker/node/start_node_module.ts +0 -30
  617. package/src/worker/wasm_worker.ts +0 -7
  618. package/src/worker/worker_pool.ts +0 -73
@@ -1,4 +1,5 @@
1
1
  import { TimeoutError } from '../error/index.js';
2
+ import { promiseWithResolvers } from '../promise/utils.js';
2
3
 
3
4
  /**
4
5
  * TimeoutTask class creates an instance for managing and executing a given asynchronous function with a specified timeout duration.
@@ -8,15 +9,15 @@ import { TimeoutError } from '../error/index.js';
8
9
  * @typeparam T - The return type of the asynchronous function to be executed.
9
10
  */
10
11
  export class TimeoutTask<T> {
11
- private interruptPromise!: Promise<any>;
12
- private interrupt = () => {};
13
12
  private totalTime = 0;
13
+ private timeoutPromise: Promise<never> | undefined;
14
14
 
15
- constructor(private fn: () => Promise<T>, private timeout: number, errorFn: () => any) {
16
- this.interruptPromise = new Promise<T>((_, reject) => {
17
- this.interrupt = () => reject(errorFn());
18
- });
19
- }
15
+ constructor(
16
+ private fn: (signal: AbortSignal) => Promise<T>,
17
+ private timeout: number,
18
+ private errorFn: () => Error,
19
+ private onAbort?: () => void,
20
+ ) {}
20
21
 
21
22
  /**
22
23
  * Executes the given function with a specified timeout.
@@ -27,15 +28,22 @@ export class TimeoutTask<T> {
27
28
  * @throws An error with a message indicating the function was interrupted due to exceeding the specified timeout.
28
29
  */
29
30
  public async exec() {
30
- const interruptTimeout = setTimeout(this.interrupt, this.timeout);
31
- try {
32
- const start = Date.now();
33
- const result = await Promise.race<T>([this.fn(), this.interruptPromise]);
34
- this.totalTime = Date.now() - start;
35
- return result;
36
- } finally {
37
- clearTimeout(interruptTimeout);
38
- }
31
+ const signal = AbortSignal.timeout(this.timeout);
32
+ this.timeoutPromise = new Promise<never>((_, reject) => {
33
+ signal!.addEventListener(
34
+ 'abort',
35
+ () => {
36
+ this.onAbort?.();
37
+ reject(this.errorFn());
38
+ },
39
+ { once: true },
40
+ );
41
+ });
42
+
43
+ const start = Date.now();
44
+ const result = await Promise.race<T>([this.fn(signal), this.timeoutPromise]);
45
+ this.totalTime = Date.now() - start;
46
+ return result;
39
47
  }
40
48
 
41
49
  /**
@@ -46,7 +54,7 @@ export class TimeoutTask<T> {
46
54
  * @returns The interrupt promise associated with the task.
47
55
  */
48
56
  public getInterruptPromise() {
49
- return this.interruptPromise;
57
+ return this.timeoutPromise;
50
58
  }
51
59
 
52
60
  /**
@@ -60,11 +68,38 @@ export class TimeoutTask<T> {
60
68
  }
61
69
  }
62
70
 
63
- export async function executeTimeout<T>(fn: () => Promise<T>, timeout: number, errorOrFnName?: string | (() => any)) {
71
+ /**
72
+ * Executes a function with a timeout.
73
+ * @param fn - The function to execute, accepts AbortSignal and returns a Promise.
74
+ * @param timeout - The maximum time in milliseconds to allow the function to run.
75
+ * @param errorOrFnName - Optional function name or a function that returns an Error to throw if the timeout is reached.
76
+ * @param onAbort - Optional callback to execute when the task is aborted.
77
+ *
78
+ * @returns A Promise that resolves with the result of the function fn if it completes within the timeout
79
+ *
80
+ * */
81
+ export async function executeTimeout<T>(
82
+ fn: (signal: AbortSignal) => Promise<T>,
83
+ timeout: number,
84
+ errorOrFnName?: string | (() => Error),
85
+ onAbort?: () => void,
86
+ ) {
64
87
  const errorFn =
65
88
  typeof errorOrFnName === 'function'
66
89
  ? errorOrFnName
67
90
  : () => new TimeoutError(`Timeout running ${errorOrFnName ?? 'function'} after ${timeout}ms.`);
68
- const task = new TimeoutTask(fn, timeout, errorFn);
91
+ const task = new TimeoutTask(fn, timeout, errorFn, onAbort);
69
92
  return await task.exec();
70
93
  }
94
+
95
+ /** Returns a promise that rejects after the given timeout */
96
+ export function timeoutPromise(timeoutMs: number, errorMessage?: string) {
97
+ const promise = promiseWithResolvers<never>();
98
+
99
+ const timer = setTimeout(() => {
100
+ promise.reject(new TimeoutError(errorMessage ?? `Operation timed out after ${timeoutMs}ms`));
101
+ }, timeoutMs);
102
+
103
+ const cleanup = () => clearTimeout(timer);
104
+ return promise.promise.finally(cleanup);
105
+ }
@@ -7,5 +7,4 @@ export * from './interface/socket.js';
7
7
  export * from './interface/transferable.js';
8
8
  export * from './transport_client.js';
9
9
  export * from './transport_server.js';
10
- export * from './browser/index.js';
11
10
  export * from './node/index.js';
@@ -4,6 +4,5 @@ import type { Socket } from './socket.js';
4
4
  * Opens a socket with corresponding TransportListener.
5
5
  */
6
6
  export interface Connector {
7
- // eslint-disable-next-line jsdoc/require-jsdoc
8
7
  createSocket(): Promise<Socket>;
9
8
  }
@@ -7,10 +7,9 @@ import type { Socket } from './socket.js';
7
7
  * Possible implementations could include MessageChannels or WebSockets.
8
8
  */
9
9
  export interface Listener extends EventEmitter {
10
- // eslint-disable-next-line jsdoc/require-jsdoc
11
10
  open(): void;
12
- // eslint-disable-next-line jsdoc/require-jsdoc
11
+
13
12
  close(): void;
14
- // eslint-disable-next-line jsdoc/require-jsdoc
13
+
15
14
  on(name: 'new_socket', cb: (client: Socket) => void): this;
16
15
  }
@@ -6,10 +6,9 @@
6
6
  * If `registerHandler` callback receives `undefined` that signals the other end closed.
7
7
  */
8
8
  export interface Socket {
9
- // eslint-disable-next-line jsdoc/require-jsdoc
10
9
  send(msg: any, transfer?: Transferable[]): Promise<void>;
11
- // eslint-disable-next-line jsdoc/require-jsdoc
10
+
12
11
  registerHandler(cb: (msg: any) => any): void;
13
- // eslint-disable-next-line jsdoc/require-jsdoc
12
+
14
13
  close(): void;
15
14
  }
@@ -18,9 +18,9 @@ interface PendingRequest {
18
18
  * The unique message identifier used for tracking and matching request/response pairs.
19
19
  */
20
20
  msgId: number;
21
- // eslint-disable-next-line jsdoc/require-jsdoc
21
+
22
22
  resolve(data: any): void;
23
- // eslint-disable-next-line jsdoc/require-jsdoc
23
+
24
24
  reject(error: Error): void;
25
25
  }
26
26
 
@@ -30,9 +30,8 @@ interface PendingRequest {
30
30
  * for efficient and concurrent communication with a corresponding TransportServer.
31
31
  */
32
32
  export interface ITransportClient<Payload> extends EventEmitter {
33
- // eslint-disable-next-line jsdoc/require-jsdoc
34
33
  on(name: 'event_msg', handler: (payload: Payload) => void): this;
35
- // eslint-disable-next-line jsdoc/require-jsdoc
34
+
36
35
  emit(name: 'event_msg', payload: Payload): boolean;
37
36
  }
38
37
 
@@ -9,7 +9,10 @@ import { isTransferDescriptor } from './interface/transferable.js';
9
9
  export class TransportServer<Payload> {
10
10
  private sockets: Socket[] = [];
11
11
 
12
- constructor(private listener: Listener, private msgHandlerFn: (msg: Payload) => Promise<any>) {}
12
+ constructor(
13
+ private listener: Listener,
14
+ private msgHandlerFn: (msg: Payload) => Promise<any>,
15
+ ) {}
13
16
 
14
17
  /**
15
18
  * Starts the TransportServer, allowing it to accept new connections and handle incoming messages.
@@ -0,0 +1,82 @@
1
+ import { pedersenHash as pedersenHashArray, poseidon2Hash, sha256Trunc } from '@aztec/foundation/crypto';
2
+
3
+ import type { AsyncHasher, Hasher } from './hasher.js';
4
+
5
+ export const shaMerkleHash: Hasher['hash'] = (left: Buffer, right: Buffer) =>
6
+ sha256Trunc(Buffer.concat([left, right])) as Buffer<ArrayBuffer>;
7
+
8
+ export const pedersenMerkleHash: AsyncHasher['hash'] = async (left: Buffer, right: Buffer) =>
9
+ (await pedersenHashArray([left, right])).toBuffer() as Buffer<ArrayBuffer>;
10
+
11
+ export const poseidonMerkleHash: AsyncHasher['hash'] = async (left: Buffer, right: Buffer) =>
12
+ (await poseidon2Hash([left, right])).toBuffer() as Buffer<ArrayBuffer>;
13
+
14
+ export const computeBalancedShaRoot = (leaves: Buffer[]) => computeBalancedMerkleTreeRoot(leaves);
15
+
16
+ export const computeBalancedPedersenRoot = async (leaves: Buffer[]) =>
17
+ await computeBalancedMerkleTreeRootAsync(leaves, pedersenMerkleHash);
18
+
19
+ export const computeBalancedPoseidonRoot = async (leaves: Buffer[]) =>
20
+ await computeBalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash);
21
+
22
+ /**
23
+ * Computes the Merkle root with the provided leaves **synchronously**.
24
+ * This method uses a synchronous hash function (defaults to `sha256Trunc`).
25
+ *
26
+ * @throws If the number of leaves is not a power of two.
27
+ */
28
+ export function computeBalancedMerkleTreeRoot(leaves: Buffer[], hasher = shaMerkleHash): Buffer {
29
+ const height = getTreeHeight(leaves);
30
+ let nodes = leaves.slice();
31
+
32
+ for (let i = 0; i < height; ++i) {
33
+ let j = 0;
34
+ for (; j < nodes.length / 2; ++j) {
35
+ const l = nodes[j * 2];
36
+ const r = nodes[j * 2 + 1];
37
+ nodes[j] = hasher(l, r);
38
+ }
39
+ nodes = nodes.slice(0, j);
40
+ }
41
+
42
+ return nodes[0];
43
+ }
44
+
45
+ /**
46
+ * Computes the Merkle root with the provided leaves **asynchronously**.
47
+ * This method uses an asynchronous hash function (defaults to `pedersenHash`).
48
+ *
49
+ * @throws If the number of leaves is not a power of two.
50
+ */
51
+ export async function computeBalancedMerkleTreeRootAsync(
52
+ leaves: Buffer[],
53
+ hasher = poseidonMerkleHash,
54
+ ): Promise<Buffer> {
55
+ const height = getTreeHeight(leaves);
56
+ let nodes = leaves.slice();
57
+
58
+ for (let i = 0; i < height; ++i) {
59
+ let j = 0;
60
+ for (; j < nodes.length / 2; ++j) {
61
+ const l = nodes[j * 2];
62
+ const r = nodes[j * 2 + 1];
63
+ nodes[j] = await hasher(l, r);
64
+ }
65
+ nodes = nodes.slice(0, j);
66
+ }
67
+
68
+ return nodes[0];
69
+ }
70
+
71
+ function getTreeHeight(leaves: Buffer[]) {
72
+ if (leaves.length === 0) {
73
+ throw new Error('Cannot compute a Merkle root with no leaves');
74
+ }
75
+
76
+ const height = Math.log2(leaves.length);
77
+ if (!Number.isInteger(height)) {
78
+ throw new Error('Cannot compute a Merkle root with a non-power-of-two number of leaves');
79
+ }
80
+
81
+ return height;
82
+ }
@@ -8,14 +8,14 @@ export interface Hasher {
8
8
  * @param rhs - The second array.
9
9
  * @returns The new 32-byte hash.
10
10
  */
11
- hash(lhs: Uint8Array, rhs: Uint8Array): Buffer;
11
+ hash(lhs: Uint8Array, rhs: Uint8Array): Buffer<ArrayBuffer>;
12
12
 
13
13
  /**
14
14
  * Hashes an array of buffers.
15
15
  * @param inputs - The array of buffers to hash.
16
16
  * @returns The resulting 32-byte hash.
17
17
  */
18
- hashInputs(inputs: Buffer[]): Buffer;
18
+ hashInputs(inputs: Buffer[]): Buffer<ArrayBuffer>;
19
19
  }
20
20
 
21
21
  /**
@@ -28,12 +28,12 @@ export interface AsyncHasher {
28
28
  * @param rhs - The second array.
29
29
  * @returns The new 32-byte hash.
30
30
  */
31
- hash(lhs: Uint8Array, rhs: Uint8Array): Promise<Buffer>;
31
+ hash(lhs: Uint8Array, rhs: Uint8Array): Promise<Buffer<ArrayBuffer>>;
32
32
 
33
33
  /**
34
34
  * Hashes an array of buffers.
35
35
  * @param inputs - The array of buffers to hash.
36
36
  * @returns The resulting 32-byte hash.
37
37
  */
38
- hashInputs(inputs: Buffer[]): Promise<Buffer>;
38
+ hashInputs(inputs: Buffer[]): Promise<Buffer<ArrayBuffer>>;
39
39
  }
@@ -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';
@@ -8,3 +9,4 @@ export * from './sibling_path.js';
8
9
  export * from './membership_witness.js';
9
10
  export * from './hasher.js';
10
11
  export * from './indexed_tree_leaf.js';
12
+ export * from './unbalanced_merkle_tree_calculator.js';
@@ -6,7 +6,11 @@ import { MerkleTree } from './merkle_tree.js';
6
6
 
7
7
  /** A simple immutable indexed merkle tree container. Use a IndexedMerkleTreeCalculator to create a new instance from a set of leaves. */
8
8
  export class IndexedMerkleTree<T extends IndexedTreeLeafPreimage, N extends number> extends MerkleTree {
9
- constructor(height: N, nodes: Buffer[], public readonly leafPreimages: T[]) {
9
+ constructor(
10
+ height: N,
11
+ nodes: Buffer[],
12
+ public readonly leafPreimages: T[],
13
+ ) {
10
14
  super(height, nodes);
11
15
  }
12
16
 
@@ -28,7 +28,7 @@ export class IndexedMerkleTreeCalculator<T extends IndexedTreeLeafPreimage, N ex
28
28
  ) {
29
29
  const zeroHashes = [zeroLeaf];
30
30
  for (let i = 0; i < height; i++) {
31
- zeroHashes.push(await hasher.hash(zeroHashes[i], zeroHashes[i]));
31
+ zeroHashes.push((await hasher.hash(zeroHashes[i], zeroHashes[i])) as Buffer<ArrayBuffer>);
32
32
  }
33
33
  return new IndexedMerkleTreeCalculator(height, zeroHashes, hasher, factory);
34
34
  }
@@ -59,7 +59,7 @@ export class IndexedMerkleTreeCalculator<T extends IndexedTreeLeafPreimage, N ex
59
59
 
60
60
  for (let i = 0; i < this.height; ++i) {
61
61
  const numLeaves = 2 ** (this.height - i);
62
- const newLeaves: Buffer[] = [];
62
+ const newLeaves: Buffer<ArrayBuffer>[] = [];
63
63
  for (let j = 0; j < leaves.length / 2; ++j) {
64
64
  const l = leaves[j * 2];
65
65
  const r = leaves[j * 2 + 1] || this.zeroHashes[i];
@@ -1,6 +1,7 @@
1
1
  import { assertMemberLength } from '../array/array.js';
2
2
  import { toBigIntBE, toBufferBE } from '../bigint-buffer/index.js';
3
3
  import { Fr } from '../fields/fields.js';
4
+ import { schemas } from '../schemas/schemas.js';
4
5
  import { BufferReader, type Tuple, serializeToBuffer } from '../serialize/index.js';
5
6
  import type { SiblingPath } from './sibling_path.js';
6
7
 
@@ -29,6 +30,18 @@ export class MembershipWitness<N extends number> {
29
30
  return serializeToBuffer(toBufferBE(this.leafIndex, 32), ...this.siblingPath);
30
31
  }
31
32
 
33
+ toJSON() {
34
+ return this.toBuffer();
35
+ }
36
+
37
+ toFields(): Fr[] {
38
+ return [new Fr(this.leafIndex), ...this.siblingPath];
39
+ }
40
+
41
+ static schemaFor<N extends number>(size: N) {
42
+ return schemas.Buffer.transform(b => MembershipWitness.fromBuffer(b, size));
43
+ }
44
+
32
45
  /**
33
46
  * Creates a random membership witness. Used for testing purposes.
34
47
  * @param pathSize - Number of fields in the sibling path.
@@ -1,6 +1,9 @@
1
1
  /** A simple immutable Merkle tree container. Use a MerkleTreeCalculator to create a new instance from a set of leaves. */
2
2
  export class MerkleTree {
3
- constructor(public readonly height: number, public readonly nodes: Buffer[]) {
3
+ constructor(
4
+ public readonly height: number,
5
+ public readonly nodes: Buffer[],
6
+ ) {
4
7
  const expectedNodeCount = 2 ** (height + 1) - 1;
5
8
  if (nodes.length !== expectedNodeCount) {
6
9
  throw new Error(`Invalid node count for Merkle tree: got ${nodes.length} but expected ${expectedNodeCount}`);
@@ -7,18 +7,23 @@ import { MerkleTree } from './merkle_tree.js';
7
7
  * Merkle tree calculator.
8
8
  */
9
9
  export class MerkleTreeCalculator {
10
- private constructor(private height: number, private zeroHashes: Buffer[], private hasher: AsyncHasher['hash']) {
10
+ private constructor(
11
+ private height: number,
12
+ private zeroHashes: Buffer[],
13
+ private hasher: AsyncHasher['hash'],
14
+ ) {
11
15
  this.hasher = hasher;
12
16
  }
13
17
 
14
18
  static async create(
15
19
  height: number,
16
- zeroLeaf = Buffer.alloc(32),
17
- hasher = async (left: Buffer, right: Buffer) => (await pedersenHash([left, right])).toBuffer(),
20
+ zeroLeaf: Buffer = Buffer.alloc(32),
21
+ hasher = async (left: Buffer, right: Buffer) =>
22
+ (await pedersenHash([left, right])).toBuffer() as Buffer<ArrayBuffer>,
18
23
  ) {
19
24
  const zeroHashes = [zeroLeaf];
20
25
  for (let i = 0; i < height; i++) {
21
- zeroHashes.push(await hasher(zeroHashes[i], zeroHashes[i]));
26
+ zeroHashes.push((await hasher(zeroHashes[i], zeroHashes[i])) as Buffer<ArrayBuffer>);
22
27
  }
23
28
  return new MerkleTreeCalculator(height, zeroHashes, hasher);
24
29
  }
@@ -1,60 +1,116 @@
1
- import { padArrayEnd } from '../collection/array.js';
2
- import { sha256Trunc } from '../crypto/sha256/index.js';
1
+ import {
2
+ computeBalancedMerkleTreeRoot,
3
+ computeBalancedMerkleTreeRootAsync,
4
+ poseidonMerkleHash,
5
+ shaMerkleHash,
6
+ } from './balanced_merkle_tree.js';
7
+
8
+ export const computeUnbalancedShaRoot = (leaves: Buffer[]) => computeUnbalancedMerkleTreeRoot(leaves, shaMerkleHash);
9
+
10
+ export const computeUnbalancedPoseidonRoot = async (leaves: Buffer[]) =>
11
+ await computeUnbalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash);
3
12
 
4
13
  /**
5
- * Computes the merkle root for an unbalanced tree.
14
+ * Computes the Merkle root of an unbalanced tree.
15
+ *
16
+ * Unlike a balanced Merkle tree, which requires the number of leaves to be a power of two, an unbalanced tree can have
17
+ * any number of leaves.
18
+ *
19
+ * The tree is constructed by iteratively extracting the smallest power-of-two-sized subtrees from **right to left**.
20
+ * For each such subtree, it computes the subtree root and then combines all subtree roots (again from right to left)
21
+ * into a single root using the provided hash function.
22
+ *
23
+ * Note: We need the final tree to be as shallow as possible, to minimize the size of the sibling path required to prove
24
+ * membership of a leaf. Therefor, the computation proceeds from right to left - smaller subtrees must always be
25
+ * combined before being merged with a larger sibling on their left.
26
+ *
27
+ * For example, consider an unbalanced tree made of three subtrees of sizes 2, 4, and 8. If we combine the size-2 and
28
+ * size-4 subtrees first (producing a subtree of depth 3), and then merge it with the size-8 subtree (also depth 3), the
29
+ * resulting tree has a maximum depth of 4.
6
30
  *
7
- * @dev Adapted from unbalanced_tree.ts.
8
- * Calculates the tree upwards layer by layer until we reach the root.
9
- * The L1 calculation instead computes the tree from right to left (slightly cheaper gas).
10
- * TODO: A more thorough investigation of which method is cheaper, then use that method everywhere.
31
+ * But if we instead combine the size-4 and size-8 subtrees first (depth 4), and then merge with the size-2 subtree
32
+ * (depth 1), the final tree has a depth of 5.
11
33
  */
12
- export function computeUnbalancedMerkleRoot(leaves: Buffer[], emptyLeaf?: Buffer, hasher = sha256Trunc): Buffer {
13
- // Pad leaves to 2
14
- if (leaves.length < 2) {
15
- if (emptyLeaf === undefined) {
16
- throw new Error('Cannot compute a Merkle root with less than 2 leaves');
17
- } else {
18
- leaves = padArrayEnd(leaves, emptyLeaf, 2);
19
- }
34
+ export function computeUnbalancedMerkleTreeRoot(
35
+ leaves: Buffer[],
36
+ hasher = shaMerkleHash,
37
+ emptyRoot = Buffer.alloc(32),
38
+ ): Buffer {
39
+ if (!leaves.length) {
40
+ return emptyRoot;
41
+ }
42
+
43
+ if (leaves.length === 1) {
44
+ return leaves[0];
20
45
  }
21
46
 
22
- const depth = Math.ceil(Math.log2(leaves.length));
23
- let [layerWidth, nodeToShift] =
24
- leaves.length & 1 ? [leaves.length - 1, leaves[leaves.length - 1]] : [leaves.length, Buffer.alloc(0)];
25
- // Allocate this layer's leaves and init the next layer up
26
- let thisLayer = leaves.slice(0, layerWidth);
27
- let nextLayer = [];
28
- for (let i = 0; i < depth; i++) {
29
- for (let j = 0; j < layerWidth; j += 2) {
30
- // Store the hash of each pair one layer up
31
- nextLayer[j / 2] = hasher(Buffer.concat([thisLayer[j], thisLayer[j + 1]]));
47
+ let numRemainingLeaves = leaves.length;
48
+ let subtreeSize = 1;
49
+ let root: Buffer | undefined;
50
+ while (numRemainingLeaves > 1) {
51
+ if ((numRemainingLeaves & subtreeSize) !== 0) {
52
+ const subtreeLeaves = leaves.slice(numRemainingLeaves - subtreeSize, numRemainingLeaves);
53
+ const subtreeRoot = computeBalancedMerkleTreeRoot(subtreeLeaves, hasher);
54
+ if (!root) {
55
+ root = subtreeRoot;
56
+ } else {
57
+ root = hasher(subtreeRoot, root);
58
+ }
59
+
60
+ numRemainingLeaves -= subtreeSize;
32
61
  }
33
- layerWidth /= 2;
34
- if (layerWidth & 1) {
35
- if (nodeToShift.length) {
36
- // If the next layer has odd length, and we have a node that needs to be shifted up, add it here
37
- nextLayer.push(nodeToShift);
38
- layerWidth += 1;
39
- nodeToShift = Buffer.alloc(0);
62
+
63
+ subtreeSize *= 2;
64
+ }
65
+
66
+ return root!;
67
+ }
68
+
69
+ export async function computeUnbalancedMerkleTreeRootAsync(
70
+ leaves: Buffer[],
71
+ hasher = poseidonMerkleHash,
72
+ emptyRoot = Buffer.alloc(32),
73
+ ): Promise<Buffer> {
74
+ if (!leaves.length) {
75
+ return emptyRoot;
76
+ }
77
+
78
+ if (leaves.length === 1) {
79
+ return leaves[0];
80
+ }
81
+
82
+ let numRemainingLeaves = leaves.length;
83
+ let subtreeSize = 1;
84
+ let root: Buffer | undefined;
85
+ while (numRemainingLeaves > 1) {
86
+ if ((numRemainingLeaves & subtreeSize) !== 0) {
87
+ const subtreeLeaves = leaves.slice(numRemainingLeaves - subtreeSize, numRemainingLeaves);
88
+ const subtreeRoot = await computeBalancedMerkleTreeRootAsync(subtreeLeaves, hasher);
89
+ if (!root) {
90
+ root = subtreeRoot;
40
91
  } else {
41
- // If we don't have a node waiting to be shifted, store the next layer's final node to be shifted
42
- layerWidth -= 1;
43
- nodeToShift = nextLayer[layerWidth];
92
+ root = await hasher(subtreeRoot, root);
44
93
  }
94
+
95
+ numRemainingLeaves -= subtreeSize;
45
96
  }
46
- // reset the layers
47
- thisLayer = nextLayer;
48
- nextLayer = [];
97
+
98
+ subtreeSize *= 2;
49
99
  }
50
- // return the root
51
- return thisLayer[0];
100
+
101
+ return root!;
52
102
  }
53
103
 
54
- function getMaxBalancedTreeDepth(numLeaves: number) {
104
+ /// Get the depth of the maximum balanced tree that can be created with the given number of leaves. The subtree will be
105
+ /// the left most subtree of the wonky tree with a total of `numLeaves` leaves.
106
+ ///
107
+ /// Note: All the leaves may not be used to form the tree. For example, if there are 5 leaves, the maximum depth is 2,
108
+ /// only 4 leaves are used to form a balanced tree.
109
+ function getMaxBalancedSubtreeDepth(numLeaves: number) {
55
110
  return Math.floor(Math.log2(numLeaves));
56
111
  }
57
112
 
113
+ /// Get the maximum depth of an unbalanced tree that can be created with the given number of leaves.
58
114
  function getMaxUnbalancedTreeDepth(numLeaves: number) {
59
115
  return Math.ceil(Math.log2(numLeaves));
60
116
  }
@@ -72,7 +128,7 @@ function findPosition(
72
128
  }
73
129
 
74
130
  // The largest balanced tree that can be created with the given number of leaves.
75
- const maxBalancedTreeDepth = getMaxBalancedTreeDepth(numLeaves);
131
+ const maxBalancedTreeDepth = getMaxBalancedSubtreeDepth(numLeaves);
76
132
  const numBalancedLeaves = 2 ** maxBalancedTreeDepth;
77
133
  const numRemainingLeaves = numLeaves - numBalancedLeaves;
78
134