@aztec/foundation 0.76.4 → 0.77.0-testnet-ignition.21

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 (459) hide show
  1. package/dest/array/array.d.ts +1 -1
  2. package/dest/array/array.d.ts.map +1 -1
  3. package/dest/array/array.js +19 -26
  4. package/dest/array/index.js +0 -1
  5. package/dest/async-map/index.js +2 -4
  6. package/dest/async-pool/index.js +6 -9
  7. package/dest/bigint-buffer/index.js +6 -13
  8. package/dest/buffer/buffer32.d.ts +1 -1
  9. package/dest/buffer/buffer32.d.ts.map +1 -1
  10. package/dest/buffer/buffer32.js +53 -66
  11. package/dest/buffer/index.js +0 -1
  12. package/dest/collection/array.d.ts +1 -1
  13. package/dest/collection/array.d.ts.map +1 -1
  14. package/dest/collection/array.js +47 -59
  15. package/dest/collection/index.js +0 -1
  16. package/dest/collection/object.js +9 -9
  17. package/dest/committable/committable.js +15 -20
  18. package/dest/committable/index.js +0 -1
  19. package/dest/config/env_var.d.ts +1 -1
  20. package/dest/config/env_var.d.ts.map +1 -1
  21. package/dest/config/env_var.js +1 -2
  22. package/dest/config/index.d.ts +1 -1
  23. package/dest/config/index.d.ts.map +1 -1
  24. package/dest/config/index.js +31 -36
  25. package/dest/crypto/aes128/index.d.ts +34 -0
  26. package/dest/crypto/aes128/index.d.ts.map +1 -0
  27. package/dest/crypto/aes128/index.js +49 -0
  28. package/dest/crypto/ecdsa/index.d.ts +39 -0
  29. package/dest/crypto/ecdsa/index.d.ts.map +1 -0
  30. package/dest/crypto/ecdsa/index.js +88 -0
  31. package/dest/crypto/ecdsa/signature.d.ts +71 -0
  32. package/dest/crypto/ecdsa/signature.d.ts.map +1 -0
  33. package/dest/crypto/ecdsa/signature.js +92 -0
  34. package/dest/crypto/grumpkin/index.d.ts +47 -0
  35. package/dest/crypto/grumpkin/index.d.ts.map +1 -0
  36. package/dest/crypto/grumpkin/index.js +154 -0
  37. package/dest/crypto/index.d.ts +6 -0
  38. package/dest/crypto/index.d.ts.map +1 -1
  39. package/dest/crypto/index.js +6 -1
  40. package/dest/crypto/keccak/index.js +60 -69
  41. package/dest/crypto/keys/index.js +2 -3
  42. package/dest/crypto/pedersen/index.js +0 -1
  43. package/dest/crypto/pedersen/pedersen.elliptic.js +153 -146
  44. package/dest/crypto/pedersen/pedersen.noble.js +140 -142
  45. package/dest/crypto/pedersen/pedersen.wasm.js +17 -16
  46. package/dest/crypto/poseidon/index.js +15 -19
  47. package/dest/crypto/random/index.js +7 -12
  48. package/dest/crypto/random/randomness_singleton.js +12 -12
  49. package/dest/crypto/schnorr/index.d.ts +30 -0
  50. package/dest/crypto/schnorr/index.d.ts.map +1 -0
  51. package/dest/crypto/schnorr/index.js +68 -0
  52. package/dest/crypto/schnorr/signature.d.ts +70 -0
  53. package/dest/crypto/schnorr/signature.d.ts.map +1 -0
  54. package/dest/crypto/schnorr/signature.js +93 -0
  55. package/dest/crypto/secp256k1/index.d.ts +32 -0
  56. package/dest/crypto/secp256k1/index.d.ts.map +1 -0
  57. package/dest/crypto/secp256k1/index.js +116 -0
  58. package/dest/crypto/secp256k1-signer/index.js +0 -1
  59. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +2 -2
  60. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -1
  61. package/dest/crypto/secp256k1-signer/secp256k1_signer.js +8 -9
  62. package/dest/crypto/secp256k1-signer/utils.js +11 -16
  63. package/dest/crypto/serialize.d.ts +53 -0
  64. package/dest/crypto/serialize.d.ts.map +1 -0
  65. package/dest/crypto/serialize.js +68 -0
  66. package/dest/crypto/sha256/index.js +80 -30
  67. package/dest/crypto/sha512/index.js +2 -4
  68. package/dest/crypto/signature/index.d.ts +19 -0
  69. package/dest/crypto/signature/index.d.ts.map +1 -0
  70. package/dest/crypto/signature/index.js +3 -0
  71. package/dest/crypto/sync/index.js +1 -2
  72. package/dest/crypto/sync/pedersen/index.js +14 -13
  73. package/dest/crypto/sync/poseidon/index.js +10 -14
  74. package/dest/decorators/index.js +0 -1
  75. package/dest/decorators/memoize.js +1 -2
  76. package/dest/error/index.js +6 -19
  77. package/dest/eth-address/index.js +92 -113
  78. package/dest/eth-signature/eth_signature.js +21 -27
  79. package/dest/eth-signature/index.js +0 -1
  80. package/dest/fields/coordinate.d.ts +1 -1
  81. package/dest/fields/coordinate.d.ts.map +1 -1
  82. package/dest/fields/coordinate.js +47 -46
  83. package/dest/fields/fields.d.ts.map +1 -1
  84. package/dest/fields/fields.js +112 -126
  85. package/dest/fields/index.js +0 -1
  86. package/dest/fields/point.js +119 -129
  87. package/dest/fs/index.js +0 -1
  88. package/dest/fs/run_in_dir.d.ts +1 -1
  89. package/dest/fs/run_in_dir.d.ts.map +1 -1
  90. package/dest/fs/run_in_dir.js +16 -7
  91. package/dest/index.d.ts +0 -2
  92. package/dest/index.d.ts.map +1 -1
  93. package/dest/index.js +0 -3
  94. package/dest/iterable/all.js +3 -4
  95. package/dest/iterable/filter.js +10 -11
  96. package/dest/iterable/index.js +0 -1
  97. package/dest/iterable/isAsyncIt.js +1 -3
  98. package/dest/iterable/map.js +10 -11
  99. package/dest/iterable/peek.js +14 -14
  100. package/dest/iterable/sort.js +4 -5
  101. package/dest/iterable/take.js +6 -7
  102. package/dest/iterable/toArray.js +1 -2
  103. package/dest/jest/setup.js +7 -0
  104. package/dest/json-rpc/client/fetch.js +25 -20
  105. package/dest/json-rpc/client/index.js +0 -1
  106. package/dest/json-rpc/client/safe_json_rpc_client.js +20 -9
  107. package/dest/json-rpc/client/undici.d.ts +1 -1
  108. package/dest/json-rpc/client/undici.d.ts.map +1 -1
  109. package/dest/json-rpc/client/undici.js +16 -17
  110. package/dest/json-rpc/convert.d.ts +1 -1
  111. package/dest/json-rpc/convert.d.ts.map +1 -1
  112. package/dest/json-rpc/convert.js +10 -20
  113. package/dest/json-rpc/fixtures/class_a.js +8 -5
  114. package/dest/json-rpc/fixtures/class_b.js +8 -5
  115. package/dest/json-rpc/fixtures/test_state.js +53 -40
  116. package/dest/json-rpc/index.js +0 -1
  117. package/dest/json-rpc/js_utils.js +2 -5
  118. package/dest/json-rpc/server/index.js +0 -1
  119. package/dest/json-rpc/server/safe_json_rpc_server.js +145 -101
  120. package/dest/json-rpc/server/telemetry.js +0 -2
  121. package/dest/json-rpc/test/index.js +0 -1
  122. package/dest/json-rpc/test/integration.d.ts +1 -1
  123. package/dest/json-rpc/test/integration.d.ts.map +1 -1
  124. package/dest/json-rpc/test/integration.js +11 -5
  125. package/dest/log/console.d.ts +1 -1
  126. package/dest/log/console.d.ts.map +1 -1
  127. package/dest/log/console.js +14 -16
  128. package/dest/log/debug.d.ts +1 -1
  129. package/dest/log/debug.d.ts.map +1 -1
  130. package/dest/log/debug.js +9 -18
  131. package/dest/log/gcloud-logger-config.js +17 -15
  132. package/dest/log/index.d.ts +1 -0
  133. package/dest/log/index.d.ts.map +1 -1
  134. package/dest/log/index.js +1 -1
  135. package/dest/log/libp2p_logger.d.ts +7 -0
  136. package/dest/log/libp2p_logger.d.ts.map +1 -0
  137. package/dest/log/libp2p_logger.js +55 -0
  138. package/dest/log/log-filters.js +14 -13
  139. package/dest/log/log-levels.js +10 -2
  140. package/dest/log/log_fn.js +1 -2
  141. package/dest/log/log_history.js +21 -25
  142. package/dest/log/pino-logger.d.ts +8 -4
  143. package/dest/log/pino-logger.d.ts.map +1 -1
  144. package/dest/log/pino-logger.js +92 -74
  145. package/dest/message/index.js +7 -3
  146. package/dest/mutex/index.d.ts +1 -1
  147. package/dest/mutex/index.d.ts.map +1 -1
  148. package/dest/mutex/index.js +34 -32
  149. package/dest/mutex/mutex_database.js +4 -2
  150. package/dest/noir/index.js +0 -1
  151. package/dest/noir/noir_package_config.js +13 -8
  152. package/dest/promise/index.js +0 -1
  153. package/dest/promise/running-promise.d.ts +8 -2
  154. package/dest/promise/running-promise.d.ts.map +1 -1
  155. package/dest/promise/running-promise.js +44 -31
  156. package/dest/promise/utils.js +3 -5
  157. package/dest/queue/base_memory_queue.js +51 -59
  158. package/dest/queue/batch_queue.js +34 -27
  159. package/dest/queue/bounded_serial_queue.js +41 -51
  160. package/dest/queue/fifo_memory_queue.d.ts +1 -1
  161. package/dest/queue/fifo_memory_queue.d.ts.map +1 -1
  162. package/dest/queue/fifo_memory_queue.js +4 -8
  163. package/dest/queue/index.js +0 -1
  164. package/dest/queue/priority_memory_queue.js +3 -4
  165. package/dest/queue/priority_queue.js +5 -5
  166. package/dest/queue/semaphore.js +15 -19
  167. package/dest/queue/serial_queue.js +37 -47
  168. package/dest/retry/index.js +21 -18
  169. package/dest/running-promise/index.js +0 -1
  170. package/dest/schemas/api.d.ts +2 -2
  171. package/dest/schemas/api.d.ts.map +1 -1
  172. package/dest/schemas/api.js +2 -7
  173. package/dest/schemas/index.d.ts +1 -1
  174. package/dest/schemas/index.d.ts.map +1 -1
  175. package/dest/schemas/index.js +1 -2
  176. package/dest/schemas/parse.js +4 -8
  177. package/dest/schemas/schemas.d.ts +1 -16
  178. package/dest/schemas/schemas.d.ts.map +1 -1
  179. package/dest/schemas/schemas.js +28 -56
  180. package/dest/schemas/types.d.ts +1 -1
  181. package/dest/schemas/types.d.ts.map +1 -1
  182. package/dest/schemas/types.js +1 -2
  183. package/dest/schemas/utils.d.ts +1 -1
  184. package/dest/schemas/utils.d.ts.map +1 -1
  185. package/dest/schemas/utils.js +18 -31
  186. package/dest/serialize/buffer_reader.d.ts +1 -1
  187. package/dest/serialize/buffer_reader.d.ts.map +1 -1
  188. package/dest/serialize/buffer_reader.js +164 -188
  189. package/dest/serialize/field_reader.d.ts +1 -1
  190. package/dest/serialize/field_reader.d.ts.map +1 -1
  191. package/dest/serialize/field_reader.js +70 -79
  192. package/dest/serialize/free_funcs.d.ts +1 -1
  193. package/dest/serialize/free_funcs.d.ts.map +1 -1
  194. package/dest/serialize/free_funcs.js +40 -37
  195. package/dest/serialize/index.js +0 -1
  196. package/dest/serialize/serialize.js +72 -83
  197. package/dest/serialize/type_registry.js +10 -14
  198. package/dest/serialize/types.js +4 -5
  199. package/dest/sleep/index.js +25 -29
  200. package/dest/string/index.js +0 -1
  201. package/dest/testing/files/index.js +3 -7
  202. package/dest/testing/index.js +0 -1
  203. package/dest/testing/port_allocator.js +7 -10
  204. package/dest/testing/snapshot_serializer.d.ts +1 -1
  205. package/dest/testing/snapshot_serializer.d.ts.map +1 -1
  206. package/dest/testing/snapshot_serializer.js +14 -9
  207. package/dest/testing/test_data.js +7 -8
  208. package/dest/timer/date.js +9 -7
  209. package/dest/timer/elapsed.js +10 -7
  210. package/dest/timer/index.js +0 -1
  211. package/dest/timer/timeout.js +34 -34
  212. package/dest/timer/timer.js +17 -21
  213. package/dest/transport/browser/index.js +0 -1
  214. package/dest/transport/browser/message_port_socket.d.ts +1 -1
  215. package/dest/transport/browser/message_port_socket.d.ts.map +1 -1
  216. package/dest/transport/browser/message_port_socket.js +26 -30
  217. package/dest/transport/browser/shared_worker_connector.d.ts +1 -1
  218. package/dest/transport/browser/shared_worker_connector.d.ts.map +1 -1
  219. package/dest/transport/browser/shared_worker_connector.js +8 -10
  220. package/dest/transport/browser/shared_worker_listener.d.ts +1 -1
  221. package/dest/transport/browser/shared_worker_listener.d.ts.map +1 -1
  222. package/dest/transport/browser/shared_worker_listener.js +13 -17
  223. package/dest/transport/browser/worker_connector.d.ts +1 -1
  224. package/dest/transport/browser/worker_connector.d.ts.map +1 -1
  225. package/dest/transport/browser/worker_connector.js +12 -12
  226. package/dest/transport/browser/worker_listener.d.ts +1 -1
  227. package/dest/transport/browser/worker_listener.d.ts.map +1 -1
  228. package/dest/transport/browser/worker_listener.js +13 -17
  229. package/dest/transport/dispatch/create_dispatch_fn.js +2 -4
  230. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +2 -2
  231. package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -1
  232. package/dest/transport/dispatch/create_dispatch_proxy.js +16 -13
  233. package/dest/transport/dispatch/messages.js +4 -3
  234. package/dest/transport/index.js +0 -1
  235. package/dest/transport/interface/connector.d.ts +1 -1
  236. package/dest/transport/interface/connector.d.ts.map +1 -1
  237. package/dest/transport/interface/connector.js +3 -2
  238. package/dest/transport/interface/listener.d.ts +1 -1
  239. package/dest/transport/interface/listener.d.ts.map +1 -1
  240. package/dest/transport/interface/listener.js +4 -2
  241. package/dest/transport/interface/socket.js +7 -2
  242. package/dest/transport/interface/transferable.js +7 -9
  243. package/dest/transport/node/index.js +0 -1
  244. package/dest/transport/node/node_connector.d.ts +2 -2
  245. package/dest/transport/node/node_connector.d.ts.map +1 -1
  246. package/dest/transport/node/node_connector.js +9 -11
  247. package/dest/transport/node/node_connector_socket.d.ts +2 -2
  248. package/dest/transport/node/node_connector_socket.d.ts.map +1 -1
  249. package/dest/transport/node/node_connector_socket.js +21 -25
  250. package/dest/transport/node/node_listener.d.ts +1 -1
  251. package/dest/transport/node/node_listener.d.ts.map +1 -1
  252. package/dest/transport/node/node_listener.js +11 -15
  253. package/dest/transport/node/node_listener_socket.d.ts +2 -2
  254. package/dest/transport/node/node_listener_socket.d.ts.map +1 -1
  255. package/dest/transport/node/node_listener_socket.js +23 -27
  256. package/dest/transport/transport_client.d.ts +1 -1
  257. package/dest/transport/transport_client.d.ts.map +1 -1
  258. package/dest/transport/transport_client.js +47 -46
  259. package/dest/transport/transport_server.d.ts +1 -1
  260. package/dest/transport/transport_server.d.ts.map +1 -1
  261. package/dest/transport/transport_server.js +68 -55
  262. package/dest/trees/hasher.d.ts +39 -0
  263. package/dest/trees/hasher.d.ts.map +1 -0
  264. package/dest/trees/hasher.js +5 -0
  265. package/dest/trees/index.d.ts +8 -56
  266. package/dest/trees/index.d.ts.map +1 -1
  267. package/dest/trees/index.js +8 -1
  268. package/dest/trees/indexed_merkle_tree.d.ts +13 -0
  269. package/dest/trees/indexed_merkle_tree.d.ts.map +1 -0
  270. package/dest/trees/indexed_merkle_tree.js +27 -0
  271. package/dest/trees/indexed_merkle_tree_calculator.d.ts +23 -0
  272. package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -0
  273. package/dest/trees/indexed_merkle_tree_calculator.js +83 -0
  274. package/dest/trees/indexed_tree_leaf.d.ts +57 -0
  275. package/dest/trees/indexed_tree_leaf.d.ts.map +1 -0
  276. package/dest/trees/indexed_tree_leaf.js +5 -0
  277. package/dest/trees/membership_witness.d.ts +62 -0
  278. package/dest/trees/membership_witness.d.ts.map +1 -0
  279. package/dest/trees/membership_witness.js +70 -0
  280. package/dest/trees/merkle_tree.d.ts +18 -0
  281. package/dest/trees/merkle_tree.d.ts.map +1 -0
  282. package/dest/trees/merkle_tree.js +58 -0
  283. package/dest/trees/merkle_tree_calculator.d.ts +16 -0
  284. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -0
  285. package/dest/trees/merkle_tree_calculator.js +61 -0
  286. package/dest/trees/sibling_path.d.ts +132 -0
  287. package/dest/trees/sibling_path.d.ts.map +1 -0
  288. package/dest/trees/sibling_path.js +144 -0
  289. package/dest/trees/unbalanced_merkle_tree.d.ts +1 -1
  290. package/dest/trees/unbalanced_merkle_tree.d.ts.map +1 -1
  291. package/dest/trees/unbalanced_merkle_tree.js +28 -18
  292. package/dest/trees/unbalanced_tree_store.js +43 -29
  293. package/dest/types/index.js +1 -3
  294. package/dest/url/index.js +4 -8
  295. package/dest/validation/index.js +2 -5
  296. package/dest/wasm/empty_wasi_sdk.js +142 -160
  297. package/dest/wasm/index.d.ts +1 -1
  298. package/dest/wasm/index.d.ts.map +1 -1
  299. package/dest/wasm/index.js +0 -1
  300. package/dest/wasm/wasm_module.js +80 -90
  301. package/dest/worker/browser/index.js +0 -1
  302. package/dest/worker/browser/start_web_module.d.ts +1 -1
  303. package/dest/worker/browser/start_web_module.d.ts.map +1 -1
  304. package/dest/worker/browser/start_web_module.js +9 -5
  305. package/dest/worker/browser/web_data_store.d.ts +1 -1
  306. package/dest/worker/browser/web_data_store.d.ts.map +1 -1
  307. package/dest/worker/browser/web_data_store.js +12 -15
  308. package/dest/worker/browser/web_worker.d.ts +1 -1
  309. package/dest/worker/browser/web_worker.d.ts.map +1 -1
  310. package/dest/worker/browser/web_worker.js +6 -5
  311. package/dest/worker/data_store.js +3 -2
  312. package/dest/worker/index.d.ts +1 -1
  313. package/dest/worker/index.d.ts.map +1 -1
  314. package/dest/worker/index.js +0 -1
  315. package/dest/worker/node/index.js +0 -1
  316. package/dest/worker/node/node_data_store.d.ts +1 -1
  317. package/dest/worker/node/node_data_store.d.ts.map +1 -1
  318. package/dest/worker/node/node_data_store.js +4 -5
  319. package/dest/worker/node/node_worker.d.ts +1 -1
  320. package/dest/worker/node/node_worker.d.ts.map +1 -1
  321. package/dest/worker/node/node_worker.js +6 -5
  322. package/dest/worker/node/start_node_module.d.ts +1 -1
  323. package/dest/worker/node/start_node_module.d.ts.map +1 -1
  324. package/dest/worker/node/start_node_module.js +9 -5
  325. package/dest/worker/wasm_worker.d.ts +2 -2
  326. package/dest/worker/wasm_worker.d.ts.map +1 -1
  327. package/dest/worker/wasm_worker.js +3 -2
  328. package/dest/worker/worker_pool.d.ts +1 -1
  329. package/dest/worker/worker_pool.d.ts.map +1 -1
  330. package/dest/worker/worker_pool.js +32 -43
  331. package/package.json +5 -5
  332. package/src/array/array.ts +1 -1
  333. package/src/buffer/buffer32.ts +1 -1
  334. package/src/collection/array.ts +1 -1
  335. package/src/config/env_var.ts +7 -5
  336. package/src/config/index.ts +1 -1
  337. package/src/crypto/aes128/index.ts +59 -0
  338. package/src/crypto/ecdsa/index.ts +70 -0
  339. package/src/crypto/ecdsa/signature.ts +100 -0
  340. package/src/crypto/grumpkin/index.ts +97 -0
  341. package/src/crypto/index.ts +6 -0
  342. package/src/crypto/keys/index.ts +1 -1
  343. package/src/crypto/pedersen/pedersen.wasm.ts +3 -3
  344. package/src/crypto/poseidon/index.ts +5 -5
  345. package/src/crypto/schnorr/index.ts +55 -0
  346. package/src/crypto/schnorr/signature.ts +116 -0
  347. package/src/crypto/secp256k1/index.ts +57 -0
  348. package/src/crypto/secp256k1-signer/secp256k1_signer.ts +2 -2
  349. package/src/crypto/serialize.ts +85 -0
  350. package/src/crypto/signature/index.ts +17 -0
  351. package/src/crypto/sync/index.ts +1 -1
  352. package/src/fields/coordinate.ts +1 -1
  353. package/src/fields/fields.ts +2 -1
  354. package/src/fs/run_in_dir.ts +8 -1
  355. package/src/index.ts +0 -2
  356. package/src/json-rpc/client/undici.ts +1 -1
  357. package/src/json-rpc/convert.ts +1 -1
  358. package/src/json-rpc/server/safe_json_rpc_server.ts +1 -1
  359. package/src/json-rpc/test/integration.ts +1 -1
  360. package/src/log/console.ts +1 -1
  361. package/src/log/debug.ts +1 -1
  362. package/src/log/gcloud-logger-config.ts +1 -1
  363. package/src/log/index.ts +1 -0
  364. package/src/log/libp2p_logger.ts +67 -0
  365. package/src/log/pino-logger.ts +16 -16
  366. package/src/mutex/index.ts +1 -1
  367. package/src/promise/running-promise.ts +24 -5
  368. package/src/queue/fifo_memory_queue.ts +1 -1
  369. package/src/schemas/api.ts +2 -2
  370. package/src/schemas/index.ts +1 -1
  371. package/src/schemas/schemas.ts +2 -26
  372. package/src/schemas/types.ts +1 -1
  373. package/src/schemas/utils.ts +1 -1
  374. package/src/serialize/buffer_reader.ts +1 -1
  375. package/src/serialize/field_reader.ts +1 -1
  376. package/src/serialize/free_funcs.ts +1 -1
  377. package/src/testing/snapshot_serializer.ts +1 -1
  378. package/src/transport/browser/message_port_socket.ts +1 -1
  379. package/src/transport/browser/shared_worker_connector.ts +1 -1
  380. package/src/transport/browser/shared_worker_listener.ts +1 -1
  381. package/src/transport/browser/worker_connector.ts +1 -1
  382. package/src/transport/browser/worker_listener.ts +1 -1
  383. package/src/transport/dispatch/create_dispatch_proxy.ts +2 -2
  384. package/src/transport/interface/connector.ts +1 -1
  385. package/src/transport/interface/listener.ts +1 -1
  386. package/src/transport/node/node_connector.ts +2 -2
  387. package/src/transport/node/node_connector_socket.ts +2 -2
  388. package/src/transport/node/node_listener.ts +1 -1
  389. package/src/transport/node/node_listener_socket.ts +2 -2
  390. package/src/transport/transport_client.ts +2 -2
  391. package/src/transport/transport_server.ts +3 -3
  392. package/src/trees/hasher.ts +39 -0
  393. package/src/trees/index.ts +8 -57
  394. package/src/trees/indexed_merkle_tree.ts +36 -0
  395. package/src/trees/indexed_merkle_tree_calculator.ts +94 -0
  396. package/src/trees/indexed_tree_leaf.ts +56 -0
  397. package/src/trees/membership_witness.ts +99 -0
  398. package/src/trees/merkle_tree.ts +72 -0
  399. package/src/trees/merkle_tree_calculator.ts +67 -0
  400. package/src/trees/sibling_path.ts +183 -0
  401. package/src/trees/unbalanced_merkle_tree.ts +2 -2
  402. package/src/wasm/index.ts +1 -1
  403. package/src/worker/browser/start_web_module.ts +1 -1
  404. package/src/worker/browser/web_data_store.ts +1 -1
  405. package/src/worker/browser/web_worker.ts +1 -1
  406. package/src/worker/index.ts +1 -1
  407. package/src/worker/node/node_data_store.ts +1 -1
  408. package/src/worker/node/node_worker.ts +1 -1
  409. package/src/worker/node/start_node_module.ts +1 -1
  410. package/src/worker/wasm_worker.ts +2 -2
  411. package/src/worker/worker_pool.ts +1 -1
  412. package/dest/abi/abi.d.ts +0 -853
  413. package/dest/abi/abi.d.ts.map +0 -1
  414. package/dest/abi/abi.js +0 -214
  415. package/dest/abi/buffer.d.ts +0 -18
  416. package/dest/abi/buffer.d.ts.map +0 -1
  417. package/dest/abi/buffer.js +0 -34
  418. package/dest/abi/decoder.d.ts +0 -58
  419. package/dest/abi/decoder.d.ts.map +0 -1
  420. package/dest/abi/decoder.js +0 -180
  421. package/dest/abi/encoder.d.ts +0 -16
  422. package/dest/abi/encoder.d.ts.map +0 -1
  423. package/dest/abi/encoder.js +0 -174
  424. package/dest/abi/event_selector.d.ts +0 -52
  425. package/dest/abi/event_selector.d.ts.map +0 -1
  426. package/dest/abi/event_selector.js +0 -76
  427. package/dest/abi/function_selector.d.ts +0 -65
  428. package/dest/abi/function_selector.d.ts.map +0 -1
  429. package/dest/abi/function_selector.js +0 -92
  430. package/dest/abi/index.d.ts +0 -10
  431. package/dest/abi/index.d.ts.map +0 -1
  432. package/dest/abi/index.js +0 -10
  433. package/dest/abi/note_selector.d.ts +0 -42
  434. package/dest/abi/note_selector.d.ts.map +0 -1
  435. package/dest/abi/note_selector.js +0 -63
  436. package/dest/abi/selector.d.ts +0 -42
  437. package/dest/abi/selector.d.ts.map +0 -1
  438. package/dest/abi/selector.js +0 -57
  439. package/dest/abi/u128.d.ts +0 -13
  440. package/dest/abi/u128.d.ts.map +0 -1
  441. package/dest/abi/u128.js +0 -58
  442. package/dest/abi/utils.d.ts +0 -44
  443. package/dest/abi/utils.d.ts.map +0 -1
  444. package/dest/abi/utils.js +0 -72
  445. package/dest/aztec-address/index.d.ts +0 -57
  446. package/dest/aztec-address/index.d.ts.map +0 -1
  447. package/dest/aztec-address/index.js +0 -114
  448. package/src/abi/abi.ts +0 -504
  449. package/src/abi/buffer.ts +0 -36
  450. package/src/abi/decoder.ts +0 -195
  451. package/src/abi/encoder.ts +0 -170
  452. package/src/abi/event_selector.ts +0 -92
  453. package/src/abi/function_selector.ts +0 -124
  454. package/src/abi/index.ts +0 -9
  455. package/src/abi/note_selector.ts +0 -78
  456. package/src/abi/selector.ts +0 -64
  457. package/src/abi/u128.ts +0 -71
  458. package/src/abi/utils.ts +0 -86
  459. package/src/aztec-address/index.ts +0 -146
@@ -1,7 +1,22 @@
1
- import { createLogger } from '../log/pino-logger.js';
1
+ import { type Logger, createLogger } from '../log/pino-logger.js';
2
2
  import { InterruptibleSleep } from '../sleep/index.js';
3
3
  import { type PromiseWithResolvers, promiseWithResolvers } from './utils.js';
4
4
 
5
+ const EXIT = Symbol.for('RunningPromise.EXIT');
6
+
7
+ export type ErrorHandler = (err: unknown) => typeof EXIT | void | Promise<typeof EXIT | void>;
8
+
9
+ export function makeLoggingErrorHandler(
10
+ logger: Logger,
11
+ ...ignoredErrors: (new (...args: any[]) => Error)[]
12
+ ): ErrorHandler {
13
+ return err => {
14
+ if (err instanceof Error && !ignoredErrors.some(ErrorType => err instanceof ErrorType)) {
15
+ logger.error('Error in running promise', err);
16
+ }
17
+ };
18
+ }
19
+
5
20
  /**
6
21
  * RunningPromise is a utility class that helps manage the execution of an asynchronous function
7
22
  * at a specified polling interval. It allows starting, stopping, and checking the status of the
@@ -13,11 +28,13 @@ export class RunningPromise {
13
28
  private interruptibleSleep = new InterruptibleSleep();
14
29
  private requested: PromiseWithResolvers<void> | undefined = undefined;
15
30
 
31
+ public static readonly EXIT: typeof EXIT = EXIT;
32
+
16
33
  constructor(
17
34
  private fn: () => void | Promise<void>,
18
35
  private logger = createLogger('running-promise'),
19
36
  private pollingIntervalMS = 10000,
20
- private ignoredErrors: (new (...args: any[]) => Error)[] = [],
37
+ private handleError: ErrorHandler = makeLoggingErrorHandler(logger),
21
38
  ) {}
22
39
 
23
40
  /**
@@ -36,8 +53,10 @@ export class RunningPromise {
36
53
  try {
37
54
  await this.fn();
38
55
  } catch (err) {
39
- if (err instanceof Error && !this.ignoredErrors.some(ErrorType => err instanceof ErrorType)) {
40
- this.logger.error('Error in running promise', err);
56
+ const code = await this.handleError(err);
57
+ if (code === RunningPromise.EXIT) {
58
+ this.logger.warn('Error handler has requested to exit', { err });
59
+ this.running = false;
41
60
  }
42
61
  }
43
62
 
@@ -48,7 +67,7 @@ export class RunningPromise {
48
67
  }
49
68
 
50
69
  // If no immediate run was requested, sleep for the polling interval.
51
- if (this.requested === undefined) {
70
+ if (this.requested === undefined && this.running) {
52
71
  await this.interruptibleSleep.sleep(this.pollingIntervalMS);
53
72
  }
54
73
  }
@@ -1,4 +1,4 @@
1
- import { type Logger } from '../log/index.js';
1
+ import type { Logger } from '../log/index.js';
2
2
  import { BaseMemoryQueue } from './base_memory_queue.js';
3
3
 
4
4
  /**
@@ -1,6 +1,6 @@
1
- import { type z } from 'zod';
1
+ import type { z } from 'zod';
2
2
 
3
- import { type ZodNullableOptional } from './utils.js';
3
+ import type { ZodNullableOptional } from './utils.js';
4
4
 
5
5
  // Forces usage of ZodNullableOptional in parameters schemas so we properly accept nulls for optional parameters.
6
6
  type ZodParameterTypeFor<T> = undefined extends T
@@ -1,5 +1,5 @@
1
1
  export * from './api.js';
2
2
  export * from './parse.js';
3
- export * from './schemas.js';
4
3
  export * from './utils.js';
5
4
  export * from './types.js';
5
+ export * from './schemas.js';
@@ -1,35 +1,16 @@
1
1
  import { z } from 'zod';
2
2
 
3
- import { type AbiDecoded } from '../abi/decoder.js';
4
- import { EventSelector } from '../abi/event_selector.js';
5
- import { FunctionSelector } from '../abi/function_selector.js';
6
- import { NoteSelector } from '../abi/note_selector.js';
7
- import { AztecAddress } from '../aztec-address/index.js';
8
3
  import { Buffer32 } from '../buffer/buffer32.js';
9
4
  import { EthAddress } from '../eth-address/index.js';
10
5
  import { Fq, Fr } from '../fields/fields.js';
11
6
  import { Point } from '../fields/point.js';
12
7
  import { isHex, withoutHexPrefix } from '../string/index.js';
13
- import { type ZodFor } from './types.js';
14
8
  import { bufferSchema, hexSchema } from './utils.js';
15
9
 
16
- /** Validation schemas for common types. Every schema must match its toJSON. */
17
10
  export const schemas = {
18
11
  /** Accepts a hex string. */
19
12
  EthAddress: EthAddress.schema,
20
13
 
21
- /** Accepts a hex string. */
22
- AztecAddress: AztecAddress.schema,
23
-
24
- /** Accepts a hex string. */
25
- FunctionSelector: FunctionSelector.schema,
26
-
27
- /** Accepts a hex string. */
28
- NoteSelector: NoteSelector.schema,
29
-
30
- /** Accepts a hex string. */
31
- EventSelector: EventSelector.schema,
32
-
33
14
  /** Accepts a hex string. */
34
15
  Fr: Fr.schema,
35
16
 
@@ -79,10 +60,5 @@ export const schemas = {
79
60
  HexString: hexSchema,
80
61
  };
81
62
 
82
- export const AbiDecodedSchema: ZodFor<AbiDecoded> = z.union([
83
- schemas.BigInt,
84
- z.boolean(),
85
- schemas.AztecAddress,
86
- z.array(z.lazy(() => AbiDecodedSchema)),
87
- z.record(z.lazy(() => AbiDecodedSchema)),
88
- ]);
63
+ // These are needed to avoid errors such as: "The inferred type of 'YourClassSchema' cannot be named without a reference to..."
64
+ export { EthAddress, Point, Fr, Fq };
@@ -1,3 +1,3 @@
1
- import { type ZodType } from 'zod';
1
+ import type { ZodType } from 'zod';
2
2
 
3
3
  export type ZodFor<T> = ZodType<T, any, any>;
@@ -14,7 +14,7 @@ import {
14
14
 
15
15
  import { pick } from '../collection/object.js';
16
16
  import { isHex, withoutHexPrefix } from '../string/index.js';
17
- import { type ZodFor } from './types.js';
17
+ import type { ZodFor } from './types.js';
18
18
 
19
19
  export const hexSchema = z.string().refine(isHex, 'Not a valid hex string').transform(withoutHexPrefix);
20
20
 
@@ -1,4 +1,4 @@
1
- import { type Tuple } from './types.js';
1
+ import type { Tuple } from './types.js';
2
2
 
3
3
  /**
4
4
  * The BufferReader class provides a utility for reading various data types from a buffer.
@@ -1,5 +1,5 @@
1
1
  import { Fq, type Fr } from '../fields/fields.js';
2
- import { type Tuple } from './types.js';
2
+ import type { Tuple } from './types.js';
3
3
 
4
4
  /**
5
5
  * The FieldReader class provides a utility for reading various data types from a field array.
@@ -1,5 +1,5 @@
1
1
  import { Fr } from '../fields/fields.js';
2
- import { type Tuple } from './types.js';
2
+ import type { Tuple } from './types.js';
3
3
 
4
4
  /**
5
5
  * Convert a boolean value to its corresponding byte representation in a Buffer of size 1.
@@ -1,4 +1,4 @@
1
- import { type NewPlugin } from 'pretty-format';
1
+ import type { NewPlugin } from 'pretty-format';
2
2
  import { inspect } from 'util';
3
3
 
4
4
  function makeSerializerForCustomInspect(prefix: string): NewPlugin {
@@ -1,4 +1,4 @@
1
- import { type Socket } from '../interface/socket.js';
1
+ import type { Socket } from '../interface/socket.js';
2
2
 
3
3
  /**
4
4
  * An implementation of a TransportSocket using MessagePorts.
@@ -1,4 +1,4 @@
1
- import { type Connector } from '../interface/connector.js';
1
+ import type { Connector } from '../interface/connector.js';
2
2
  import { MessagePortSocket } from './message_port_socket.js';
3
3
 
4
4
  /**
@@ -1,6 +1,6 @@
1
1
  import EventEmitter from 'events';
2
2
 
3
- import { type Listener } from '../interface/listener.js';
3
+ import type { Listener } from '../interface/listener.js';
4
4
  import { MessagePortSocket } from './message_port_socket.js';
5
5
 
6
6
  /**
@@ -1,4 +1,4 @@
1
- import { type Connector } from '../interface/connector.js';
1
+ import type { Connector } from '../interface/connector.js';
2
2
  import { MessagePortSocket } from './message_port_socket.js';
3
3
 
4
4
  /**
@@ -1,6 +1,6 @@
1
1
  import EventEmitter from 'events';
2
2
 
3
- import { type Listener } from '../interface/listener.js';
3
+ import type { Listener } from '../interface/listener.js';
4
4
  import { MessagePortSocket } from './message_port_socket.js';
5
5
 
6
6
  /**
@@ -1,8 +1,8 @@
1
1
  import { EventEmitter } from 'events';
2
2
 
3
3
  import { type TransferDescriptor, isTransferDescriptor } from '../interface/transferable.js';
4
- import { type TransportClient } from '../transport_client.js';
5
- import { type DispatchMsg } from './create_dispatch_fn.js';
4
+ import type { TransportClient } from '../transport_client.js';
5
+ import type { DispatchMsg } from './create_dispatch_fn.js';
6
6
 
7
7
  /**
8
8
  * FilterOutAttributes type filters out all non-method properties of an object, leaving only the attributes
@@ -1,4 +1,4 @@
1
- import { type Socket } from './socket.js';
1
+ import type { Socket } from './socket.js';
2
2
 
3
3
  /**
4
4
  * Opens a socket with corresponding TransportListener.
@@ -1,6 +1,6 @@
1
1
  import type EventEmitter from 'events';
2
2
 
3
- import { type Socket } from './socket.js';
3
+ import type { Socket } from './socket.js';
4
4
 
5
5
  /**
6
6
  * Once opened, an implementation of a TransportListener will emit `new_socket` events as new clients connect.
@@ -1,6 +1,6 @@
1
- import { type Worker } from 'worker_threads';
1
+ import type { Worker } from 'worker_threads';
2
2
 
3
- import { type Connector } from '../interface/connector.js';
3
+ import type { Connector } from '../interface/connector.js';
4
4
  import { NodeConnectorSocket } from './node_connector_socket.js';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
- import { type TransferListItem, type Worker } from 'worker_threads';
1
+ import type { TransferListItem, Worker } from 'worker_threads';
2
2
 
3
- import { type Socket } from '../interface/socket.js';
3
+ import type { Socket } from '../interface/socket.js';
4
4
 
5
5
  /**
6
6
  * NodeConnectorSocket is a wrapper class that implements the Socket interface for messaging between
@@ -1,7 +1,7 @@
1
1
  import EventEmitter from 'events';
2
2
  import { parentPort } from 'worker_threads';
3
3
 
4
- import { type Listener } from '../interface/listener.js';
4
+ import type { Listener } from '../interface/listener.js';
5
5
  import { NodeListenerSocket } from './node_listener_socket.js';
6
6
 
7
7
  /**
@@ -1,6 +1,6 @@
1
- import { type MessagePort, type TransferListItem } from 'worker_threads';
1
+ import type { MessagePort, TransferListItem } from 'worker_threads';
2
2
 
3
- import { type Socket } from '../interface/socket.js';
3
+ import type { Socket } from '../interface/socket.js';
4
4
 
5
5
  /**
6
6
  * An implementation of a TransportSocket using MessagePorts.
@@ -3,8 +3,8 @@ import { format } from 'util';
3
3
 
4
4
  import { createLogger } from '../log/index.js';
5
5
  import { type EventMessage, type ResponseMessage, isEventMessage } from './dispatch/messages.js';
6
- import { type Connector } from './interface/connector.js';
7
- import { type Socket } from './interface/socket.js';
6
+ import type { Connector } from './interface/connector.js';
7
+ import type { Socket } from './interface/socket.js';
8
8
 
9
9
  const log = createLogger('foundation:transport_client');
10
10
 
@@ -1,6 +1,6 @@
1
- import { type RequestMessage, type ResponseMessage } from './dispatch/messages.js';
2
- import { type Listener } from './interface/listener.js';
3
- import { type Socket } from './interface/socket.js';
1
+ import type { RequestMessage, ResponseMessage } from './dispatch/messages.js';
2
+ import type { Listener } from './interface/listener.js';
3
+ import type { Socket } from './interface/socket.js';
4
4
  import { isTransferDescriptor } from './interface/transferable.js';
5
5
 
6
6
  /**
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Defines hasher interface used by Merkle trees.
3
+ */
4
+ export interface Hasher {
5
+ /**
6
+ * Hash two arrays.
7
+ * @param lhs - The first array.
8
+ * @param rhs - The second array.
9
+ * @returns The new 32-byte hash.
10
+ */
11
+ hash(lhs: Uint8Array, rhs: Uint8Array): Buffer;
12
+
13
+ /**
14
+ * Hashes an array of buffers.
15
+ * @param inputs - The array of buffers to hash.
16
+ * @returns The resulting 32-byte hash.
17
+ */
18
+ hashInputs(inputs: Buffer[]): Buffer;
19
+ }
20
+
21
+ /**
22
+ * Defines an async hasher interface used by Merkle trees.
23
+ */
24
+ export interface AsyncHasher {
25
+ /**
26
+ * Hash two arrays.
27
+ * @param lhs - The first array.
28
+ * @param rhs - The second array.
29
+ * @returns The new 32-byte hash.
30
+ */
31
+ hash(lhs: Uint8Array, rhs: Uint8Array): Promise<Buffer>;
32
+
33
+ /**
34
+ * Hashes an array of buffers.
35
+ * @param inputs - The array of buffers to hash.
36
+ * @returns The resulting 32-byte hash.
37
+ */
38
+ hashInputs(inputs: Buffer[]): Promise<Buffer>;
39
+ }
@@ -1,59 +1,10 @@
1
1
  export * from './unbalanced_merkle_tree.js';
2
2
  export * from './unbalanced_tree_store.js';
3
-
4
- /**
5
- * A leaf of an indexed merkle tree.
6
- */
7
- export interface IndexedTreeLeaf {
8
- /**
9
- * Returns key of the leaf. It's used for indexing.
10
- */
11
- getKey(): bigint;
12
- /**
13
- * Serializes the leaf into a buffer.
14
- */
15
- toBuffer(): Buffer;
16
- /**
17
- * Returns true if the leaf is empty.
18
- */
19
- isEmpty(): boolean;
20
- /**
21
- * Updates the leaf with the data of another leaf.
22
- * @param another - The leaf to update to.
23
- * @returns The updated leaf.
24
- */
25
- updateTo(another: IndexedTreeLeaf): IndexedTreeLeaf;
26
- }
27
-
28
- /**
29
- * Preimage of a merkle tree leaf.
30
- */
31
- export interface TreeLeafPreimage {
32
- /**
33
- * Returns key of the leaf corresponding to this preimage.
34
- */
35
- getKey(): bigint;
36
- /**
37
- * Returns the preimage as a leaf.
38
- */
39
- asLeaf(): IndexedTreeLeaf;
40
- /**
41
- * Serializes the preimage into a buffer.
42
- */
43
- toBuffer(): Buffer;
44
- /**
45
- * Serializes the preimage to an array of buffers for hashing.
46
- */
47
- toHashInputs(): Buffer[];
48
- }
49
-
50
- /**
51
- * Preimage of an indexed merkle tree leaf.
52
- */
53
- export interface IndexedTreeLeafPreimage extends TreeLeafPreimage {
54
- getNextKey(): bigint;
55
- /**
56
- * Returns the index of the next leaf.
57
- */
58
- getNextIndex(): bigint;
59
- }
3
+ export * from './merkle_tree_calculator.js';
4
+ export * from './merkle_tree.js';
5
+ export * from './indexed_merkle_tree_calculator.js';
6
+ export * from './indexed_merkle_tree.js';
7
+ export * from './sibling_path.js';
8
+ export * from './membership_witness.js';
9
+ export * from './hasher.js';
10
+ export * from './indexed_tree_leaf.js';
@@ -0,0 +1,36 @@
1
+ import { Fr } from '../fields/index.js';
2
+ import { assertLength } from '../serialize/index.js';
3
+ import type { IndexedTreeLeafPreimage } from './indexed_tree_leaf.js';
4
+ import { MembershipWitness } from './membership_witness.js';
5
+ import { MerkleTree } from './merkle_tree.js';
6
+
7
+ /** A simple immutable indexed merkle tree container. Use a IndexedMerkleTreeCalculator to create a new instance from a set of leaves. */
8
+ export class IndexedMerkleTree<T extends IndexedTreeLeafPreimage, N extends number> extends MerkleTree {
9
+ constructor(height: N, nodes: Buffer[], public readonly leafPreimages: T[]) {
10
+ super(height, nodes);
11
+ }
12
+
13
+ public getLowLeaf(value: bigint): T {
14
+ let lowLeaf: T | undefined;
15
+ this.leafPreimages.forEach(leaf => {
16
+ if (leaf.getKey() < value && (leaf.getNextKey() > value || leaf.getNextKey() == BigInt(0))) {
17
+ lowLeaf = leaf;
18
+ }
19
+ });
20
+ if (!lowLeaf) {
21
+ throw new Error(`Couldn't find low leaf for ${value}`);
22
+ }
23
+
24
+ return lowLeaf;
25
+ }
26
+
27
+ public getMembershipWitness(leafIndexOrLeaf: number | Buffer): MembershipWitness<N> {
28
+ const index = Buffer.isBuffer(leafIndexOrLeaf) ? this.getIndex(leafIndexOrLeaf) : leafIndexOrLeaf;
29
+ const siblingPath = this.getSiblingPath(index);
30
+ return new MembershipWitness<N>(
31
+ this.height as N,
32
+ BigInt(index),
33
+ assertLength<Fr, N>(siblingPath.map(Fr.fromBuffer), this.height as N),
34
+ );
35
+ }
36
+ }
@@ -0,0 +1,94 @@
1
+ import { toBigIntBE } from '@aztec/foundation/bigint-buffer';
2
+ import { numToUInt32BE } from '@aztec/foundation/serialize';
3
+ import type { IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
4
+
5
+ import type { AsyncHasher } from './hasher.js';
6
+ import { IndexedMerkleTree } from './indexed_merkle_tree.js';
7
+
8
+ interface LeafPreimageFactory<T extends IndexedTreeLeafPreimage> {
9
+ fromBuffer(buffer: Buffer): T;
10
+ }
11
+
12
+ /**
13
+ * Indexed merkle tree calculator.
14
+ */
15
+ export class IndexedMerkleTreeCalculator<T extends IndexedTreeLeafPreimage, N extends number> {
16
+ private constructor(
17
+ private height: N,
18
+ private zeroHashes: Buffer[],
19
+ private hasher: AsyncHasher,
20
+ private factory: LeafPreimageFactory<T>,
21
+ ) {}
22
+
23
+ static async create<T extends IndexedTreeLeafPreimage, N extends number>(
24
+ height: N,
25
+ hasher: AsyncHasher,
26
+ factory: LeafPreimageFactory<T>,
27
+ zeroLeaf = Buffer.alloc(32),
28
+ ) {
29
+ const zeroHashes = [zeroLeaf];
30
+ for (let i = 0; i < height; i++) {
31
+ zeroHashes.push(await hasher.hash(zeroHashes[i], zeroHashes[i]));
32
+ }
33
+ return new IndexedMerkleTreeCalculator(height, zeroHashes, hasher, factory);
34
+ }
35
+
36
+ async computeTree(values: Buffer[]): Promise<IndexedMerkleTree<T, N>> {
37
+ if (!values.find(v => toBigIntBE(v) == BigInt(0))) {
38
+ // If we have no zero value, add one to form the zero leaf
39
+ values = [Buffer.alloc(32), ...values];
40
+ }
41
+ const sorted = values
42
+ .map((v, i) => ({ value: v, index: i }))
43
+ .sort((a, b) => Number(toBigIntBE(b.value) - toBigIntBE(a.value)));
44
+ const indexedLeaves = sorted.map((item, i) => ({
45
+ leaf: this.factory.fromBuffer(
46
+ Buffer.concat([
47
+ item.value,
48
+ ...(i == 0
49
+ ? [Buffer.alloc(32), Buffer.alloc(32)]
50
+ : [sorted[i - 1].value, numToUInt32BE(sorted[i - 1].index, 32)]),
51
+ ]),
52
+ ),
53
+ index: item.index,
54
+ }));
55
+ const resortedIndexedLeaves = indexedLeaves.sort((a, b) => a.index - b.index).map(item => item.leaf);
56
+ let leaves = await Promise.all(resortedIndexedLeaves.map(l => this.hasher.hashInputs(l.toHashInputs())));
57
+
58
+ let result = leaves.slice();
59
+
60
+ for (let i = 0; i < this.height; ++i) {
61
+ const numLeaves = 2 ** (this.height - i);
62
+ const newLeaves: Buffer[] = [];
63
+ for (let j = 0; j < leaves.length / 2; ++j) {
64
+ const l = leaves[j * 2];
65
+ const r = leaves[j * 2 + 1] || this.zeroHashes[i];
66
+ newLeaves[j] = await this.hasher.hash(l, r);
67
+ }
68
+ result = result.concat(new Array(numLeaves - leaves.length).fill(this.zeroHashes[i]), newLeaves);
69
+ leaves = newLeaves;
70
+ }
71
+
72
+ return new IndexedMerkleTree(this.height, result, resortedIndexedLeaves);
73
+ }
74
+
75
+ async computeTreeRoot(leaves: Buffer[] = []): Promise<Buffer> {
76
+ if (leaves.length === 0) {
77
+ return this.zeroHashes[this.zeroHashes.length - 1];
78
+ }
79
+
80
+ leaves = leaves.slice();
81
+
82
+ for (let i = 0; i < this.height; ++i) {
83
+ let j = 0;
84
+ for (; j < leaves.length / 2; ++j) {
85
+ const l = leaves[j * 2];
86
+ const r = leaves[j * 2 + 1] || this.zeroHashes[i];
87
+ leaves[j] = await this.hasher.hash(l, r);
88
+ }
89
+ leaves = leaves.slice(0, j);
90
+ }
91
+
92
+ return leaves[0];
93
+ }
94
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * A leaf of an indexed merkle tree.
3
+ */
4
+ export interface IndexedTreeLeaf {
5
+ /**
6
+ * Returns key of the leaf. It's used for indexing.
7
+ */
8
+ getKey(): bigint;
9
+ /**
10
+ * Serializes the leaf into a buffer.
11
+ */
12
+ toBuffer(): Buffer;
13
+ /**
14
+ * Returns true if the leaf is empty.
15
+ */
16
+ isEmpty(): boolean;
17
+ /**
18
+ * Updates the leaf with the data of another leaf.
19
+ * @param another - The leaf to update to.
20
+ * @returns The updated leaf.
21
+ */
22
+ updateTo(another: IndexedTreeLeaf): IndexedTreeLeaf;
23
+ }
24
+
25
+ /**
26
+ * Preimage of a merkle tree leaf.
27
+ */
28
+ export interface TreeLeafPreimage {
29
+ /**
30
+ * Returns key of the leaf corresponding to this preimage.
31
+ */
32
+ getKey(): bigint;
33
+ /**
34
+ * Returns the preimage as a leaf.
35
+ */
36
+ asLeaf(): IndexedTreeLeaf;
37
+ /**
38
+ * Serializes the preimage into a buffer.
39
+ */
40
+ toBuffer(): Buffer;
41
+ /**
42
+ * Serializes the preimage to an array of buffers for hashing.
43
+ */
44
+ toHashInputs(): Buffer[];
45
+ }
46
+
47
+ /**
48
+ * Preimage of an indexed merkle tree leaf.
49
+ */
50
+ export interface IndexedTreeLeafPreimage extends TreeLeafPreimage {
51
+ getNextKey(): bigint;
52
+ /**
53
+ * Returns the index of the next leaf.
54
+ */
55
+ getNextIndex(): bigint;
56
+ }