@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,5 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
1
  import { Fr } from '../fields/fields.js';
4
2
  import { BufferReader, type Tuple } from '../serialize/index.js';
5
3
  import type { SiblingPath } from './sibling_path.js';
@@ -7,13 +5,7 @@ import type { SiblingPath } from './sibling_path.js';
7
5
  * Contains information which can be used to prove that a leaf is a member of a Merkle tree.
8
6
  */
9
7
  export declare class MembershipWitness<N extends number> {
10
- /**
11
- * Index of a leaf in the Merkle tree.
12
- */
13
8
  leafIndex: bigint;
14
- /**
15
- * Sibling path of the leaf in the Merkle tree.
16
- */
17
9
  siblingPath: Tuple<Fr, N>;
18
10
  constructor(
19
11
  /**
@@ -28,7 +20,10 @@ export declare class MembershipWitness<N extends number> {
28
20
  * Sibling path of the leaf in the Merkle tree.
29
21
  */
30
22
  siblingPath: Tuple<Fr, N>);
31
- toBuffer(): Buffer;
23
+ toBuffer(): Buffer<ArrayBufferLike>;
24
+ toJSON(): Buffer<ArrayBufferLike>;
25
+ toFields(): Fr[];
26
+ static schemaFor<N extends number>(size: N): import("zod").ZodEffects<import("../schemas/types.js").ZodFor<Buffer<ArrayBufferLike>>, MembershipWitness<N>, any>;
32
27
  /**
33
28
  * Creates a random membership witness. Used for testing purposes.
34
29
  * @param pathSize - Number of fields in the sibling path.
@@ -59,4 +54,4 @@ export declare class MembershipWitness<N extends number> {
59
54
  };
60
55
  static fromSiblingPath<N extends number>(leafIndex: bigint, siblingPath: SiblingPath<N>): MembershipWitness<N>;
61
56
  }
62
- //# sourceMappingURL=membership_witness.d.ts.map
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyc2hpcF93aXRuZXNzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJlZXMvbWVtYmVyc2hpcF93aXRuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssS0FBSyxFQUFxQixNQUFNLHVCQUF1QixDQUFDO0FBQ3BGLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJEOztHQUVHO0FBQ0gscUJBQWEsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLE1BQU07SUFTcEMsU0FBUyxFQUFFLE1BQU07SUFJakIsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBWmxDO0lBQ0U7O09BRUc7SUFDSCxRQUFRLEVBQUUsQ0FBQztJQUNYOztPQUVHO0lBQ0ksU0FBUyxFQUFFLE1BQU07SUFDeEI7O09BRUc7SUFDSSxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFHakM7SUFFRCxRQUFRLDRCQUVQO0lBRUQsTUFBTSw0QkFFTDtJQUVELFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FFZjtJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxzSEFFekM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBYyxNQUFNLENBQUMsQ0FBQyxTQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyx3QkFRakQ7SUFFRDs7Ozs7T0FLRztJQUNILE9BQWMsS0FBSyxDQUFDLENBQUMsU0FBUyxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTLFNBQUssR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FLdkY7SUFFRCxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FNL0c7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBS2hHO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHO1FBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsWUFBWSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQUUsQ0FTbEg7SUFFRCxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUU3RztDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"membership_witness.d.ts","sourceRoot":"","sources":["../../src/trees/membership_witness.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,KAAK,KAAK,EAAqB,MAAM,uBAAuB,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,MAAM;IAM3C;;OAEG;IACI,SAAS,EAAE,MAAM;IACxB;;OAEG;IACI,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;;IAXhC;;OAEG;IACH,QAAQ,EAAE,CAAC;IACX;;OAEG;IACI,SAAS,EAAE,MAAM;IACxB;;OAEG;IACI,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAKlC,QAAQ;IAIR;;;;OAIG;WACW,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC;IAUlD;;;;;OAKG;WACW,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,SAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAOxF,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAQhH;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAOjG;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG;QAAE,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;KAAE;IAWnH,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;CAG/G"}
1
+ {"version":3,"file":"membership_witness.d.ts","sourceRoot":"","sources":["../../src/trees/membership_witness.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,KAAK,KAAK,EAAqB,MAAM,uBAAuB,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,MAAM;IASpC,SAAS,EAAE,MAAM;IAIjB,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAZlC;IACE;;OAEG;IACH,QAAQ,EAAE,CAAC;IACX;;OAEG;IACI,SAAS,EAAE,MAAM;IACxB;;OAEG;IACI,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAGjC;IAED,QAAQ,4BAEP;IAED,MAAM,4BAEL;IAED,QAAQ,IAAI,EAAE,EAAE,CAEf;IAED,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,sHAEzC;IAED;;;;OAIG;IACH,OAAc,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,wBAQjD;IAED;;;;;OAKG;IACH,OAAc,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,SAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAKvF;IAED,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAM/G;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAKhG;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG;QAAE,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;KAAE,CASlH;IAED,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAE7G;CACF"}
@@ -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, serializeToBuffer } from '../serialize/index.js';
5
6
  /**
6
7
  * Contains information which can be used to prove that a leaf is a member of a Merkle tree.
@@ -21,6 +22,18 @@ import { BufferReader, serializeToBuffer } from '../serialize/index.js';
21
22
  toBuffer() {
22
23
  return serializeToBuffer(toBufferBE(this.leafIndex, 32), ...this.siblingPath);
23
24
  }
25
+ toJSON() {
26
+ return this.toBuffer();
27
+ }
28
+ toFields() {
29
+ return [
30
+ new Fr(this.leafIndex),
31
+ ...this.siblingPath
32
+ ];
33
+ }
34
+ static schemaFor(size) {
35
+ return schemas.Buffer.transform((b)=>MembershipWitness.fromBuffer(b, size));
36
+ }
24
37
  /**
25
38
  * Creates a random membership witness. Used for testing purposes.
26
39
  * @param pathSize - Number of fields in the sibling path.
@@ -1,5 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
1
  /** A simple immutable Merkle tree container. Use a MerkleTreeCalculator to create a new instance from a set of leaves. */
4
2
  export declare class MerkleTree {
5
3
  readonly height: number;
@@ -15,4 +13,4 @@ export declare class MerkleTree {
15
13
  /** Returns a nice string representation of the tree, useful for debugging purposes. */
16
14
  drawTree(elemSize?: number): string;
17
15
  }
18
- //# sourceMappingURL=merkle_tree.d.ts.map
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVya2xlX3RyZWUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmVlcy9tZXJrbGVfdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwSEFBMEg7QUFDMUgscUJBQWEsVUFBVTthQUVILE1BQU0sRUFBRSxNQUFNO2FBQ2QsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUZqQyxZQUNrQixNQUFNLEVBQUUsTUFBTSxFQUNkLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFNaEM7SUFFRCxJQUFJLElBQUksSUFBSSxNQUFNLENBRWpCO0lBRUQsSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFLENBRXJCO0lBRUQsd0ZBQXdGO0lBQ2pGLGNBQWMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQzVDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBd0I5QyxrREFBa0Q7SUFDM0MsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLFVBRTlCO0lBRUQsdUZBQXVGO0lBQ2hGLFFBQVEsQ0FBQyxRQUFRLFNBQUksVUFxQjNCO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"merkle_tree.d.ts","sourceRoot":"","sources":["../../src/trees/merkle_tree.ts"],"names":[],"mappings":";;AAAA,0HAA0H;AAC1H,qBAAa,UAAU;aACO,MAAM,EAAE,MAAM;aAAkB,KAAK,EAAE,MAAM,EAAE;gBAA/C,MAAM,EAAE,MAAM,EAAkB,KAAK,EAAE,MAAM,EAAE;IAO3E,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;IAED,wFAAwF;IACjF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAC3C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAwB7C,kDAAkD;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM;IAI/B,uFAAuF;IAChF,QAAQ,CAAC,QAAQ,SAAI;CAsB7B"}
1
+ {"version":3,"file":"merkle_tree.d.ts","sourceRoot":"","sources":["../../src/trees/merkle_tree.ts"],"names":[],"mappings":"AAAA,0HAA0H;AAC1H,qBAAa,UAAU;aAEH,MAAM,EAAE,MAAM;aACd,KAAK,EAAE,MAAM,EAAE;IAFjC,YACkB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAAE,EAMhC;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;IAED,wFAAwF;IACjF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAwB9C,kDAAkD;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,UAE9B;IAED,uFAAuF;IAChF,QAAQ,CAAC,QAAQ,SAAI,UAqB3B;CACF"}
@@ -1,5 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
1
  import { MerkleTree } from './merkle_tree.js';
4
2
  /**
5
3
  * Merkle tree calculator.
@@ -9,8 +7,8 @@ export declare class MerkleTreeCalculator {
9
7
  private zeroHashes;
10
8
  private hasher;
11
9
  private constructor();
12
- static create(height: number, zeroLeaf?: Buffer, hasher?: (left: Buffer, right: Buffer) => Promise<Buffer>): Promise<MerkleTreeCalculator>;
10
+ static create(height: number, zeroLeaf?: Buffer, hasher?: (left: Buffer<ArrayBufferLike>, right: Buffer<ArrayBufferLike>) => Promise<Buffer<ArrayBuffer>>): Promise<MerkleTreeCalculator>;
13
11
  computeTree(leaves?: Buffer[]): Promise<MerkleTree>;
14
12
  computeTreeRoot(leaves?: Buffer[]): Promise<Buffer>;
15
13
  }
16
- //# sourceMappingURL=merkle_tree_calculator.d.ts.map
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVya2xlX3RyZWVfY2FsY3VsYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyZWVzL21lcmtsZV90cmVlX2NhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDOztHQUVHO0FBQ0gscUJBQWEsb0JBQW9CO0lBRTdCLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLFVBQVU7SUFDbEIsT0FBTyxDQUFDLE1BQU07SUFIaEIsT0FBTyxlQU1OO0lBRUQsT0FBYSxNQUFNLENBQ2pCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsUUFBUSxHQUFFLE1BQXlCLEVBQ25DLE1BQU0sa0dBQ2lFLGlDQU94RTtJQUVLLFdBQVcsQ0FBQyxNQUFNLEdBQUUsTUFBTSxFQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQW9CNUQ7SUFFSyxlQUFlLENBQUMsTUFBTSxHQUFFLE1BQU0sRUFBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FrQjVEO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"merkle_tree_calculator.d.ts","sourceRoot":"","sources":["../../src/trees/merkle_tree_calculator.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,qBAAa,oBAAoB;IACX,OAAO,CAAC,MAAM;IAAU,OAAO,CAAC,UAAU;IAAY,OAAO,CAAC,MAAM;IAAxF,OAAO;WAIM,MAAM,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,SAAmB,EAC3B,MAAM,UAAgB,MAAM,SAAS,MAAM,oBAAmD;IAS1F,WAAW,CAAC,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAsBvD,eAAe,CAAC,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAmB9D"}
1
+ {"version":3,"file":"merkle_tree_calculator.d.ts","sourceRoot":"","sources":["../../src/trees/merkle_tree_calculator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IAHhB,OAAO,eAMN;IAED,OAAa,MAAM,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAyB,EACnC,MAAM,kGACiE,iCAOxE;IAEK,WAAW,CAAC,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAoB5D;IAEK,eAAe,CAAC,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB5D;CACF"}
@@ -1,5 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
1
  import { Fr } from '../fields/index.js';
4
2
  import { type Tuple } from '../serialize/index.js';
5
3
  import type { Hasher } from './hasher.js';
@@ -14,7 +12,6 @@ import type { Hasher } from './hasher.js';
14
12
  * And the elements would be ordered as: [ leaf_at_index_2, node_at_level_2_index_0, node_at_level_1_index_1 ].
15
13
  */
16
14
  export declare class SiblingPath<N extends number> {
17
- /** Size of the sibling path (number of fields it contains). */
18
15
  pathSize: N;
19
16
  private data;
20
17
  /**
@@ -27,42 +24,9 @@ export declare class SiblingPath<N extends number> {
27
24
  pathSize: N,
28
25
  /** The sibling path data. */
29
26
  path: Buffer[]);
30
- static get schema(): import("zod").ZodEffects<import("zod").ZodUnion<[import("zod").ZodEffects<import("zod").ZodEffects<import("zod").ZodString, string, string>, Buffer, string>, import("zod").ZodEffects<import("zod").ZodObject<{
31
- type: import("zod").ZodLiteral<"Buffer">;
32
- data: import("zod").ZodArray<import("zod").ZodNumber, "many">;
33
- }, "strip", import("zod").ZodTypeAny, {
34
- type: "Buffer";
35
- data: number[];
36
- }, {
37
- type: "Buffer";
38
- data: number[];
39
- }>, Buffer, {
40
- type: "Buffer";
41
- data: number[];
42
- }>]>, SiblingPath<number>, string | {
43
- type: "Buffer";
44
- data: number[];
45
- }>;
46
- static schemaFor<N extends number>(size: N): import("zod").ZodEffects<import("zod").ZodEffects<import("zod").ZodUnion<[import("zod").ZodEffects<import("zod").ZodEffects<import("zod").ZodString, string, string>, Buffer, string>, import("zod").ZodEffects<import("zod").ZodObject<{
47
- type: import("zod").ZodLiteral<"Buffer">;
48
- data: import("zod").ZodArray<import("zod").ZodNumber, "many">;
49
- }, "strip", import("zod").ZodTypeAny, {
50
- type: "Buffer";
51
- data: number[];
52
- }, {
53
- type: "Buffer";
54
- data: number[];
55
- }>, Buffer, {
56
- type: "Buffer";
57
- data: number[];
58
- }>]>, SiblingPath<N>, string | {
59
- type: "Buffer";
60
- data: number[];
61
- }>, SiblingPath<N>, string | {
62
- type: "Buffer";
63
- data: number[];
64
- }>;
65
- toJSON(): Buffer;
27
+ static get schema(): import("zod").ZodEffects<import("../schemas/types.js").ZodFor<Buffer<ArrayBufferLike>>, SiblingPath<number>, any>;
28
+ static schemaFor<N extends number>(size: N): import("zod").ZodEffects<import("zod").ZodEffects<import("../schemas/types.js").ZodFor<Buffer<ArrayBufferLike>>, SiblingPath<N>, any>, SiblingPath<N>, any>;
29
+ toJSON(): Buffer<ArrayBufferLike>;
66
30
  /**
67
31
  * Returns sibling path hashed up from the a element.
68
32
  * @param size - The number of elements in a given path.
@@ -128,5 +92,5 @@ export declare class SiblingPath<N extends number> {
128
92
  getSubtreeSiblingPath<SubtreeHeight extends number, SubtreeSiblingPathHeight extends number>(subtreeHeight: SubtreeHeight): SiblingPath<SubtreeSiblingPathHeight>;
129
93
  }
130
94
  /** Computes the expected root of a merkle tree given a leaf and its sibling path. */
131
- export declare function computeRootFromSiblingPath(leaf: Buffer, siblingPath: Buffer[], index: number, hasher?: (left: Buffer, right: Buffer) => Promise<Buffer>): Promise<Buffer>;
132
- //# sourceMappingURL=sibling_path.d.ts.map
95
+ export declare function computeRootFromSiblingPath(leaf: Buffer, siblingPath: Buffer[], index: number, hasher?: (left: Buffer<ArrayBufferLike>, right: Buffer<ArrayBufferLike>) => Promise<Buffer<ArrayBufferLike>>): Promise<Buffer<ArrayBufferLike>>;
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2libGluZ19wYXRoLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJlZXMvc2libGluZ19wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4QyxPQUFPLEVBQ0wsS0FBSyxLQUFLLEVBSVgsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUM7Ozs7Ozs7OztHQVNHO0FBQ0gscUJBQWEsV0FBVyxDQUFDLENBQUMsU0FBUyxNQUFNO0lBVTlCLFFBQVEsRUFBRSxDQUFDO0lBVHBCLE9BQU8sQ0FBQyxJQUFJLENBQW1CO0lBRS9COzs7O09BSUc7SUFDSDtJQUNFLCtEQUErRDtJQUN4RCxRQUFRLEVBQUUsQ0FBQztJQUNsQiw2QkFBNkI7SUFDN0IsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUdmO0lBRUQsTUFBTSxLQUFLLE1BQU0sc0hBRWhCO0lBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLCtKQUt6QztJQUVELE1BQU0sNEJBRUw7SUFFRDs7Ozs7O09BTUc7SUFDSCxPQUFjLElBQUksQ0FBQyxDQUFDLFNBQVMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FRakc7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsa0JBR3hDO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUSxJQUFJLE1BQU0sQ0FFeEI7SUFFRDs7O09BR0c7SUFDSSxhQUFhLElBQUksTUFBTSxFQUFFLENBRS9CO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUV0QjtJQUVEOzs7T0FHRztJQUNJLE9BQU8sSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUc3QjtJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUczRTtJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFJOzs7TUFRM0Q7SUFFRDs7O09BR0c7SUFDSSxRQUFRLElBQUksTUFBTSxDQUV4QjtJQUVEOzs7O09BSUc7SUFDSCxPQUFjLFVBQVUsQ0FBQyxDQUFDLFNBQVMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUV2RTtJQUVEOzs7O09BSUc7SUFDSSxxQkFBcUIsQ0FBQyxhQUFhLFNBQVMsTUFBTSxFQUFFLHdCQUF3QixTQUFTLE1BQU0sRUFDaEcsYUFBYSxFQUFFLGFBQWEsR0FDM0IsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBS3ZDO0NBQ0Y7QUFFRCxxRkFBcUY7QUFDckYsd0JBQXNCLDBCQUEwQixDQUM5QyxJQUFJLEVBQUUsTUFBTSxFQUNaLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFDckIsS0FBSyxFQUFFLE1BQU0sRUFDYixNQUFNLHNHQUF3RixvQ0FRL0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"sibling_path.d.ts","sourceRoot":"","sources":["../../src/trees/sibling_path.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,OAAO,EACL,KAAK,KAAK,EAIX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;;;;;GASG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM;IASrC,+DAA+D;IACxD,QAAQ,EAAE,CAAC;IATpB,OAAO,CAAC,IAAI,CAAmB;IAE/B;;;;OAIG;;IAED,+DAA+D;IACxD,QAAQ,EAAE,CAAC;IAClB,6BAA6B;IAC7B,IAAI,EAAE,MAAM,EAAE;IAKhB,MAAM,KAAK,MAAM;;;;;;;;;;;;;;;OAEhB;IAED,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC;;;;;;;;;;;;;;;;;;;IAO1C,MAAM;IAIN;;;;;;OAMG;WACW,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAUlG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC;IAKzC;;;OAGG;IACI,QAAQ,IAAI,MAAM;IAIzB;;;OAGG;IACI,aAAa,IAAI,MAAM,EAAE;IAIhC;;;OAGG;IACI,QAAQ,IAAI,EAAE,EAAE;IAIvB;;;OAGG;IACI,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAK9B;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,WAAW,CAAC,CAAC,CAAC;IAK5E;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI;;;;IAU5D;;;OAGG;IACI,QAAQ,IAAI,MAAM;IAIzB;;;;OAIG;WACW,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAIxE;;;;OAIG;IACI,qBAAqB,CAAC,aAAa,SAAS,MAAM,EAAE,wBAAwB,SAAS,MAAM,EAChG,aAAa,EAAE,aAAa,GAC3B,WAAW,CAAC,wBAAwB,CAAC;CAMzC;AAED,qFAAqF;AACrF,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,UAAgB,MAAM,SAAS,MAAM,oBAAmD,mBAQ/F"}
1
+ {"version":3,"file":"sibling_path.d.ts","sourceRoot":"","sources":["../../src/trees/sibling_path.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,OAAO,EACL,KAAK,KAAK,EAIX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;;;;;GASG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM;IAU9B,QAAQ,EAAE,CAAC;IATpB,OAAO,CAAC,IAAI,CAAmB;IAE/B;;;;OAIG;IACH;IACE,+DAA+D;IACxD,QAAQ,EAAE,CAAC;IAClB,6BAA6B;IAC7B,IAAI,EAAE,MAAM,EAAE,EAGf;IAED,MAAM,KAAK,MAAM,sHAEhB;IAED,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,+JAKzC;IAED,MAAM,4BAEL;IAED;;;;;;OAMG;IACH,OAAc,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAQjG;IAED,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,kBAGxC;IAED;;;OAGG;IACI,QAAQ,IAAI,MAAM,CAExB;IAED;;;OAGG;IACI,aAAa,IAAI,MAAM,EAAE,CAE/B;IAED;;;OAGG;IACI,QAAQ,IAAI,EAAE,EAAE,CAEtB;IAED;;;OAGG;IACI,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAG7B;IAED;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAG3E;IAED;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI;;;MAQ3D;IAED;;;OAGG;IACI,QAAQ,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACH,OAAc,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAEvE;IAED;;;;OAIG;IACI,qBAAqB,CAAC,aAAa,SAAS,MAAM,EAAE,wBAAwB,SAAS,MAAM,EAChG,aAAa,EAAE,aAAa,GAC3B,WAAW,CAAC,wBAAwB,CAAC,CAKvC;CACF;AAED,qFAAqF;AACrF,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,sGAAwF,oCAQ/F"}
@@ -1,17 +1,30 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
- import { sha256Trunc } from '../crypto/sha256/index.js';
1
+ export declare const computeUnbalancedShaRoot: (leaves: Buffer<ArrayBufferLike>[]) => Buffer<ArrayBufferLike>;
2
+ export declare const computeUnbalancedPoseidonRoot: (leaves: Buffer<ArrayBufferLike>[]) => Promise<Buffer<ArrayBufferLike>>;
4
3
  /**
5
- * Computes the merkle root for an unbalanced tree.
4
+ * Computes the Merkle root of an unbalanced tree.
6
5
  *
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.
6
+ * Unlike a balanced Merkle tree, which requires the number of leaves to be a power of two, an unbalanced tree can have
7
+ * any number of leaves.
8
+ *
9
+ * The tree is constructed by iteratively extracting the smallest power-of-two-sized subtrees from **right to left**.
10
+ * For each such subtree, it computes the subtree root and then combines all subtree roots (again from right to left)
11
+ * into a single root using the provided hash function.
12
+ *
13
+ * Note: We need the final tree to be as shallow as possible, to minimize the size of the sibling path required to prove
14
+ * membership of a leaf. Therefor, the computation proceeds from right to left - smaller subtrees must always be
15
+ * combined before being merged with a larger sibling on their left.
16
+ *
17
+ * For example, consider an unbalanced tree made of three subtrees of sizes 2, 4, and 8. If we combine the size-2 and
18
+ * size-4 subtrees first (producing a subtree of depth 3), and then merge it with the size-8 subtree (also depth 3), the
19
+ * resulting tree has a maximum depth of 4.
20
+ *
21
+ * But if we instead combine the size-4 and size-8 subtrees first (depth 4), and then merge with the size-2 subtree
22
+ * (depth 1), the final tree has a depth of 5.
11
23
  */
12
- export declare function computeUnbalancedMerkleRoot(leaves: Buffer[], emptyLeaf?: Buffer, hasher?: typeof sha256Trunc): Buffer;
24
+ export declare function computeUnbalancedMerkleTreeRoot(leaves: Buffer[], hasher?: (lhs: Uint8Array<ArrayBufferLike>, rhs: Uint8Array<ArrayBufferLike>) => Buffer<ArrayBuffer>, emptyRoot?: Buffer<ArrayBuffer>): Buffer;
25
+ export declare function computeUnbalancedMerkleTreeRootAsync(leaves: Buffer[], hasher?: (lhs: Uint8Array<ArrayBufferLike>, rhs: Uint8Array<ArrayBufferLike>) => Promise<Buffer<ArrayBuffer>>, emptyRoot?: Buffer<ArrayBuffer>): Promise<Buffer>;
13
26
  export declare function findLeafLevelAndIndex(numLeaves: number, leafIndex: number): {
14
27
  level: number;
15
28
  indexAtLevel: number;
16
29
  };
17
- //# sourceMappingURL=unbalanced_merkle_tree.d.ts.map
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iYWxhbmNlZF9tZXJrbGVfdHJlZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyZWVzL3VuYmFsYW5jZWRfbWVya2xlX3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsZUFBTyxNQUFNLHdCQUF3QixnRUFBK0UsQ0FBQztBQUVySCxlQUFPLE1BQU0sNkJBQTZCLHlFQUM4QixDQUFDO0FBRXpFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILHdCQUFnQiwrQkFBK0IsQ0FDN0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUNoQixNQUFNLDhGQUFnQixFQUN0QixTQUFTLHNCQUFtQixHQUMzQixNQUFNLENBNkJSO0FBRUQsd0JBQXNCLG9DQUFvQyxDQUN4RCxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQ2hCLE1BQU0sdUdBQXFCLEVBQzNCLFNBQVMsc0JBQW1CLEdBQzNCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0E2QmpCO0FBc0RELHdCQUFnQixxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNOzs7RUFHekUifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"unbalanced_merkle_tree.d.ts","sourceRoot":"","sources":["../../src/trees/unbalanced_merkle_tree.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,qBAAc,GAAG,MAAM,CAwC9G;AAgDD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;EAGzE"}
1
+ {"version":3,"file":"unbalanced_merkle_tree.d.ts","sourceRoot":"","sources":["../../src/trees/unbalanced_merkle_tree.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,wBAAwB,gEAA+E,CAAC;AAErH,eAAO,MAAM,6BAA6B,yEAC8B,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,8FAAgB,EACtB,SAAS,sBAAmB,GAC3B,MAAM,CA6BR;AAED,wBAAsB,oCAAoC,CACxD,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,uGAAqB,EAC3B,SAAS,sBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA6BjB;AAsDD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;EAGzE"}
@@ -1,63 +1,85 @@
1
- import { padArrayEnd } from '../collection/array.js';
2
- import { sha256Trunc } from '../crypto/sha256/index.js';
1
+ import { computeBalancedMerkleTreeRoot, computeBalancedMerkleTreeRootAsync, poseidonMerkleHash, shaMerkleHash } from './balanced_merkle_tree.js';
2
+ export const computeUnbalancedShaRoot = (leaves)=>computeUnbalancedMerkleTreeRoot(leaves, shaMerkleHash);
3
+ export const computeUnbalancedPoseidonRoot = async (leaves)=>await computeUnbalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash);
3
4
  /**
4
- * Computes the merkle root for an unbalanced tree.
5
+ * Computes the Merkle root of an unbalanced tree.
5
6
  *
6
- * @dev Adapted from unbalanced_tree.ts.
7
- * Calculates the tree upwards layer by layer until we reach the root.
8
- * The L1 calculation instead computes the tree from right to left (slightly cheaper gas).
9
- * TODO: A more thorough investigation of which method is cheaper, then use that method everywhere.
10
- */ export function computeUnbalancedMerkleRoot(leaves, emptyLeaf, hasher = sha256Trunc) {
11
- // Pad leaves to 2
12
- if (leaves.length < 2) {
13
- if (emptyLeaf === undefined) {
14
- throw new Error('Cannot compute a Merkle root with less than 2 leaves');
15
- } else {
16
- leaves = padArrayEnd(leaves, emptyLeaf, 2);
17
- }
7
+ * Unlike a balanced Merkle tree, which requires the number of leaves to be a power of two, an unbalanced tree can have
8
+ * any number of leaves.
9
+ *
10
+ * The tree is constructed by iteratively extracting the smallest power-of-two-sized subtrees from **right to left**.
11
+ * For each such subtree, it computes the subtree root and then combines all subtree roots (again from right to left)
12
+ * into a single root using the provided hash function.
13
+ *
14
+ * Note: We need the final tree to be as shallow as possible, to minimize the size of the sibling path required to prove
15
+ * membership of a leaf. Therefor, the computation proceeds from right to left - smaller subtrees must always be
16
+ * combined before being merged with a larger sibling on their left.
17
+ *
18
+ * For example, consider an unbalanced tree made of three subtrees of sizes 2, 4, and 8. If we combine the size-2 and
19
+ * size-4 subtrees first (producing a subtree of depth 3), and then merge it with the size-8 subtree (also depth 3), the
20
+ * resulting tree has a maximum depth of 4.
21
+ *
22
+ * But if we instead combine the size-4 and size-8 subtrees first (depth 4), and then merge with the size-2 subtree
23
+ * (depth 1), the final tree has a depth of 5.
24
+ */ export function computeUnbalancedMerkleTreeRoot(leaves, hasher = shaMerkleHash, emptyRoot = Buffer.alloc(32)) {
25
+ if (!leaves.length) {
26
+ return emptyRoot;
27
+ }
28
+ if (leaves.length === 1) {
29
+ return leaves[0];
18
30
  }
19
- const depth = Math.ceil(Math.log2(leaves.length));
20
- let [layerWidth, nodeToShift] = leaves.length & 1 ? [
21
- leaves.length - 1,
22
- leaves[leaves.length - 1]
23
- ] : [
24
- leaves.length,
25
- Buffer.alloc(0)
26
- ];
27
- // Allocate this layer's leaves and init the next layer up
28
- let thisLayer = leaves.slice(0, layerWidth);
29
- let nextLayer = [];
30
- for(let i = 0; i < depth; i++){
31
- for(let j = 0; j < layerWidth; j += 2){
32
- // Store the hash of each pair one layer up
33
- nextLayer[j / 2] = hasher(Buffer.concat([
34
- thisLayer[j],
35
- thisLayer[j + 1]
36
- ]));
31
+ let numRemainingLeaves = leaves.length;
32
+ let subtreeSize = 1;
33
+ let root;
34
+ while(numRemainingLeaves > 1){
35
+ if ((numRemainingLeaves & subtreeSize) !== 0) {
36
+ const subtreeLeaves = leaves.slice(numRemainingLeaves - subtreeSize, numRemainingLeaves);
37
+ const subtreeRoot = computeBalancedMerkleTreeRoot(subtreeLeaves, hasher);
38
+ if (!root) {
39
+ root = subtreeRoot;
40
+ } else {
41
+ root = hasher(subtreeRoot, root);
42
+ }
43
+ numRemainingLeaves -= subtreeSize;
37
44
  }
38
- layerWidth /= 2;
39
- if (layerWidth & 1) {
40
- if (nodeToShift.length) {
41
- // If the next layer has odd length, and we have a node that needs to be shifted up, add it here
42
- nextLayer.push(nodeToShift);
43
- layerWidth += 1;
44
- nodeToShift = Buffer.alloc(0);
45
+ subtreeSize *= 2;
46
+ }
47
+ return root;
48
+ }
49
+ export async function computeUnbalancedMerkleTreeRootAsync(leaves, hasher = poseidonMerkleHash, emptyRoot = Buffer.alloc(32)) {
50
+ if (!leaves.length) {
51
+ return emptyRoot;
52
+ }
53
+ if (leaves.length === 1) {
54
+ return leaves[0];
55
+ }
56
+ let numRemainingLeaves = leaves.length;
57
+ let subtreeSize = 1;
58
+ let root;
59
+ while(numRemainingLeaves > 1){
60
+ if ((numRemainingLeaves & subtreeSize) !== 0) {
61
+ const subtreeLeaves = leaves.slice(numRemainingLeaves - subtreeSize, numRemainingLeaves);
62
+ const subtreeRoot = await computeBalancedMerkleTreeRootAsync(subtreeLeaves, hasher);
63
+ if (!root) {
64
+ root = subtreeRoot;
45
65
  } else {
46
- // If we don't have a node waiting to be shifted, store the next layer's final node to be shifted
47
- layerWidth -= 1;
48
- nodeToShift = nextLayer[layerWidth];
66
+ root = await hasher(subtreeRoot, root);
49
67
  }
68
+ numRemainingLeaves -= subtreeSize;
50
69
  }
51
- // reset the layers
52
- thisLayer = nextLayer;
53
- nextLayer = [];
70
+ subtreeSize *= 2;
54
71
  }
55
- // return the root
56
- return thisLayer[0];
72
+ return root;
57
73
  }
58
- function getMaxBalancedTreeDepth(numLeaves) {
74
+ /// Get the depth of the maximum balanced tree that can be created with the given number of leaves. The subtree will be
75
+ /// the left most subtree of the wonky tree with a total of `numLeaves` leaves.
76
+ ///
77
+ /// Note: All the leaves may not be used to form the tree. For example, if there are 5 leaves, the maximum depth is 2,
78
+ /// only 4 leaves are used to form a balanced tree.
79
+ function getMaxBalancedSubtreeDepth(numLeaves) {
59
80
  return Math.floor(Math.log2(numLeaves));
60
81
  }
82
+ /// Get the maximum depth of an unbalanced tree that can be created with the given number of leaves.
61
83
  function getMaxUnbalancedTreeDepth(numLeaves) {
62
84
  return Math.ceil(Math.log2(numLeaves));
63
85
  }
@@ -70,7 +92,7 @@ function findPosition(rootLevel, leafLevel, numLeaves, indexOffset, targetIndex)
70
92
  };
71
93
  }
72
94
  // The largest balanced tree that can be created with the given number of leaves.
73
- const maxBalancedTreeDepth = getMaxBalancedTreeDepth(numLeaves);
95
+ const maxBalancedTreeDepth = getMaxBalancedSubtreeDepth(numLeaves);
74
96
  const numBalancedLeaves = 2 ** maxBalancedTreeDepth;
75
97
  const numRemainingLeaves = numLeaves - numBalancedLeaves;
76
98
  if (targetIndex < numBalancedLeaves) {
@@ -0,0 +1,49 @@
1
+ import type { Hasher } from './hasher.js';
2
+ import { SiblingPath } from './sibling_path.js';
3
+ import { type TreeNodeLocation } from './unbalanced_tree_store.js';
4
+ export declare function computeCompressedUnbalancedMerkleTreeRoot(leaves: Buffer[], valueToCompress?: Buffer<ArrayBuffer>, emptyRoot?: Buffer<ArrayBuffer>, hasher?: Hasher['hash']): Buffer;
5
+ /**
6
+ * An ephemeral unbalanced Merkle tree implementation.
7
+ * Follows the rollup implementation which greedily hashes pairs of nodes up the tree.
8
+ * Remaining rightmost nodes are shifted up until they can be paired.
9
+ * The values that match the `valueToCompress` are skipped and the sibling of the compressed leaf are shifted up until
10
+ * they can be paired.
11
+ * If there is only one leaf, the root is the leaf.
12
+ */
13
+ export declare class UnbalancedMerkleTreeCalculator {
14
+ private readonly leaves;
15
+ private readonly valueToCompress;
16
+ private readonly emptyRoot;
17
+ private readonly hasher;
18
+ private store;
19
+ private leafLocations;
20
+ constructor(leaves: Buffer[], valueToCompress: Buffer, emptyRoot: Buffer, hasher: Hasher['hash']);
21
+ static create(leaves: Buffer[], valueToCompress?: Buffer<ArrayBuffer>, emptyRoot?: Buffer<ArrayBuffer>, hasher?: (lhs: Uint8Array<ArrayBufferLike>, rhs: Uint8Array<ArrayBufferLike>) => Buffer<ArrayBuffer>): UnbalancedMerkleTreeCalculator;
22
+ /**
23
+ * Returns the root of the tree.
24
+ * @returns The root of the tree.
25
+ */
26
+ getRoot(): Buffer;
27
+ /**
28
+ * Returns a sibling path for the element.
29
+ * @param value - The value of the element.
30
+ * @returns A sibling path for the element.
31
+ * Note: The sibling path is an array of sibling hashes, with the lowest hash (leaf hash) first, and the highest hash last.
32
+ */
33
+ getSiblingPath<N extends number>(value: Buffer): SiblingPath<N>;
34
+ /**
35
+ * Returns a sibling path for the leaf at the given index.
36
+ * @param leafIndex - The index of the leaf.
37
+ * @returns A sibling path for the leaf.
38
+ */
39
+ getSiblingPathByLeafIndex<N extends number>(leafIndex: number): SiblingPath<N>;
40
+ getLeafLocation(leafIndex: number): TreeNodeLocation;
41
+ /**
42
+ * Adds leaves and nodes to the store. Updates the leafLocations.
43
+ * @param leaves - The leaves of the tree.
44
+ */
45
+ private buildTree;
46
+ private shiftNodeUp;
47
+ private collectNodesToShift;
48
+ }
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iYWxhbmNlZF9tZXJrbGVfdHJlZV9jYWxjdWxhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJlZXMvdW5iYWxhbmNlZF9tZXJrbGVfdHJlZV9jYWxjdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQXVCLE1BQU0sNEJBQTRCLENBQUM7QUFFeEYsd0JBQWdCLHlDQUF5QyxDQUN2RCxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQ2hCLGVBQWUsc0JBQW1CLEVBQ2xDLFNBQVMsc0JBQW1CLEVBQzVCLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FDdEIsTUFBTSxDQUdSO0FBT0Q7Ozs7Ozs7R0FPRztBQUNILHFCQUFhLDhCQUE4QjtJQUt2QyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlO0lBQ2hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUMxQixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFQekIsT0FBTyxDQUFDLEtBQUssQ0FBZ0M7SUFDN0MsT0FBTyxDQUFDLGFBQWEsQ0FBMEI7SUFFL0MsWUFDbUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUNoQixlQUFlLEVBQUUsTUFBTSxFQUN2QixTQUFTLEVBQUUsTUFBTSxFQUNqQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUl4QztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQ1gsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUNoQixlQUFlLHNCQUFrQixFQUNqQyxTQUFTLHNCQUFtQixFQUM1QixNQUFNLDhGQUFnQixrQ0FHdkI7SUFFRDs7O09BR0c7SUFDSSxPQUFPLElBQUksTUFBTSxDQUV2QjtJQUVEOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFDLENBQUMsU0FBUyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBT3JFO0lBRUQ7Ozs7T0FJRztJQUNJLHlCQUF5QixDQUFDLENBQUMsU0FBUyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBbUJwRjtJQUVNLGVBQWUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxvQkFFdkM7SUFFRDs7O09BR0c7SUFDSCxPQUFPLENBQUMsU0FBUztJQStDakIsT0FBTyxDQUFDLFdBQVc7SUFZbkIsT0FBTyxDQUFDLG1CQUFtQjtDQW1CNUIifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unbalanced_merkle_tree_calculator.d.ts","sourceRoot":"","sources":["../../src/trees/unbalanced_merkle_tree_calculator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,gBAAgB,EAAuB,MAAM,4BAA4B,CAAC;AAExF,wBAAgB,yCAAyC,CACvD,MAAM,EAAE,MAAM,EAAE,EAChB,eAAe,sBAAmB,EAClC,SAAS,sBAAmB,EAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,GACtB,MAAM,CAGR;AAOD;;;;;;;GAOG;AACH,qBAAa,8BAA8B;IAKvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,aAAa,CAA0B;IAE/C,YACmB,MAAM,EAAE,MAAM,EAAE,EAChB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAIxC;IAED,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,MAAM,EAAE,EAChB,eAAe,sBAAkB,EACjC,SAAS,sBAAmB,EAC5B,MAAM,8FAAgB,kCAGvB;IAED;;;OAGG;IACI,OAAO,IAAI,MAAM,CAEvB;IAED;;;;;OAKG;IACI,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAOrE;IAED;;;;OAIG;IACI,yBAAyB,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAmBpF;IAEM,eAAe,CAAC,SAAS,EAAE,MAAM,oBAEvC;IAED;;;OAGG;IACH,OAAO,CAAC,SAAS;IA+CjB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,mBAAmB;CAmB5B"}
@@ -0,0 +1,158 @@
1
+ import { shaMerkleHash } from './balanced_merkle_tree.js';
2
+ import { SiblingPath } from './sibling_path.js';
3
+ import { UnbalancedTreeStore } from './unbalanced_tree_store.js';
4
+ export function computeCompressedUnbalancedMerkleTreeRoot(leaves, valueToCompress = Buffer.alloc(32), emptyRoot = Buffer.alloc(32), hasher) {
5
+ const calculator = UnbalancedMerkleTreeCalculator.create(leaves, valueToCompress, emptyRoot, hasher);
6
+ return calculator.getRoot();
7
+ }
8
+ /**
9
+ * An ephemeral unbalanced Merkle tree implementation.
10
+ * Follows the rollup implementation which greedily hashes pairs of nodes up the tree.
11
+ * Remaining rightmost nodes are shifted up until they can be paired.
12
+ * The values that match the `valueToCompress` are skipped and the sibling of the compressed leaf are shifted up until
13
+ * they can be paired.
14
+ * If there is only one leaf, the root is the leaf.
15
+ */ export class UnbalancedMerkleTreeCalculator {
16
+ leaves;
17
+ valueToCompress;
18
+ emptyRoot;
19
+ hasher;
20
+ store;
21
+ leafLocations;
22
+ constructor(leaves, valueToCompress, emptyRoot, hasher){
23
+ this.leaves = leaves;
24
+ this.valueToCompress = valueToCompress;
25
+ this.emptyRoot = emptyRoot;
26
+ this.hasher = hasher;
27
+ this.leafLocations = [];
28
+ this.store = new UnbalancedTreeStore(leaves.length);
29
+ this.buildTree();
30
+ }
31
+ static create(leaves, valueToCompress = Buffer.alloc(0), emptyRoot = Buffer.alloc(32), hasher = shaMerkleHash) {
32
+ return new UnbalancedMerkleTreeCalculator(leaves, valueToCompress, emptyRoot, hasher);
33
+ }
34
+ /**
35
+ * Returns the root of the tree.
36
+ * @returns The root of the tree.
37
+ */ getRoot() {
38
+ return this.store.getRoot().value;
39
+ }
40
+ /**
41
+ * Returns a sibling path for the element.
42
+ * @param value - The value of the element.
43
+ * @returns A sibling path for the element.
44
+ * Note: The sibling path is an array of sibling hashes, with the lowest hash (leaf hash) first, and the highest hash last.
45
+ */ getSiblingPath(value) {
46
+ const leafIndex = this.leaves.findIndex((leaf)=>leaf.equals(value));
47
+ if (leafIndex === -1) {
48
+ throw Error(`Leaf value ${value.toString('hex')} not found in tree.`);
49
+ }
50
+ return this.getSiblingPathByLeafIndex(leafIndex);
51
+ }
52
+ /**
53
+ * Returns a sibling path for the leaf at the given index.
54
+ * @param leafIndex - The index of the leaf.
55
+ * @returns A sibling path for the leaf.
56
+ */ getSiblingPathByLeafIndex(leafIndex) {
57
+ if (leafIndex >= this.leaves.length) {
58
+ throw Error(`Leaf index ${leafIndex} out of bounds. Tree has ${this.leaves.length} leaves.`);
59
+ }
60
+ const leaf = this.leaves[leafIndex];
61
+ if (leaf.equals(this.valueToCompress)) {
62
+ throw Error(`Leaf at index ${leafIndex} has been compressed.`);
63
+ }
64
+ const path = [];
65
+ let location = this.leafLocations[leafIndex];
66
+ while(location.level > 0){
67
+ const sibling = this.store.getSibling(location);
68
+ path.push(sibling.value);
69
+ location = this.store.getParentLocation(location);
70
+ }
71
+ return new SiblingPath(path.length, path);
72
+ }
73
+ getLeafLocation(leafIndex) {
74
+ return this.leafLocations[leafIndex];
75
+ }
76
+ /**
77
+ * Adds leaves and nodes to the store. Updates the leafLocations.
78
+ * @param leaves - The leaves of the tree.
79
+ */ buildTree() {
80
+ this.leafLocations = this.leaves.map((value, i)=>this.store.setLeaf(i, {
81
+ value,
82
+ leafIndex: i
83
+ }));
84
+ // Start with the leaves that are not compressed.
85
+ let toProcess = this.leafLocations.filter((_, i)=>!this.leaves[i].equals(this.valueToCompress));
86
+ if (!toProcess.length) {
87
+ // All leaves are compressed. Set empty root to the root.
88
+ this.store.setNode({
89
+ level: 0,
90
+ index: 0
91
+ }, {
92
+ value: this.emptyRoot
93
+ });
94
+ return;
95
+ }
96
+ const level = toProcess[0].level;
97
+ for(let i = level; i > 0; i--){
98
+ const toProcessNext = [];
99
+ for (const location of toProcess){
100
+ if (location.level !== i) {
101
+ toProcessNext.push(location);
102
+ continue;
103
+ }
104
+ const parentLocation = this.store.getParentLocation(location);
105
+ if (this.store.getNode(parentLocation)) {
106
+ continue;
107
+ }
108
+ const sibling = this.store.getSibling(location);
109
+ // If sibling is undefined, all its children are compressed.
110
+ const shouldShiftUp = !sibling || sibling.value.equals(this.valueToCompress);
111
+ if (shouldShiftUp) {
112
+ // The node becomes the parent if the sibling is a compressed leaf.
113
+ this.shiftNodeUp(location, parentLocation);
114
+ } else {
115
+ // Hash the value with the (right) sibling and update the parent node.
116
+ const node = this.store.getNode(location);
117
+ const parentValue = this.hasher(node.value, sibling.value);
118
+ this.store.setNode(parentLocation, {
119
+ value: parentValue
120
+ });
121
+ }
122
+ // Add the parent location to be processed next.
123
+ toProcessNext.push(parentLocation);
124
+ }
125
+ toProcess = toProcessNext;
126
+ }
127
+ }
128
+ shiftNodeUp(from, to) {
129
+ // Collect all nodes that need to shift.
130
+ const nodesToShift = this.collectNodesToShift(from, to);
131
+ // Move all nodes to their new locations.
132
+ for (const { node, newLocation } of nodesToShift){
133
+ this.store.setNode(newLocation, node);
134
+ if (node.leafIndex !== undefined) {
135
+ this.leafLocations[node.leafIndex] = newLocation;
136
+ }
137
+ }
138
+ }
139
+ collectNodesToShift(from, to) {
140
+ const node = this.store.getNode(from);
141
+ if (!node) {
142
+ return [];
143
+ }
144
+ let result = [
145
+ {
146
+ node,
147
+ newLocation: to
148
+ }
149
+ ];
150
+ // If not a leaf, collect its children.
151
+ if (node.leafIndex === undefined) {
152
+ const [leftChild, rightChild] = this.store.getChildLocations(from);
153
+ const [leftChildNew, rightChildNew] = this.store.getChildLocations(to);
154
+ result = result.concat(this.collectNodesToShift(leftChild, leftChildNew)).concat(this.collectNodesToShift(rightChild, rightChildNew));
155
+ }
156
+ return result;
157
+ }
158
+ }