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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. package/dest/array/array.d.ts +1 -9
  2. package/dest/array/array.d.ts.map +1 -1
  3. package/dest/array/array.js +0 -11
  4. package/dest/array/index.d.ts +2 -1
  5. package/dest/array/index.d.ts.map +1 -1
  6. package/dest/array/index.js +1 -0
  7. package/dest/array/sorted_array.d.ts +10 -0
  8. package/dest/array/sorted_array.d.ts.map +1 -0
  9. package/dest/array/sorted_array.js +106 -0
  10. package/dest/async-map/index.d.ts +1 -1
  11. package/dest/async-pool/index.d.ts +1 -1
  12. package/dest/bigint/index.d.ts +1 -1
  13. package/dest/bigint-buffer/index.d.ts +1 -1
  14. package/dest/branded-types/block_number.d.ts +53 -0
  15. package/dest/branded-types/block_number.d.ts.map +1 -0
  16. package/dest/branded-types/block_number.js +75 -0
  17. package/dest/branded-types/checkpoint_number.d.ts +46 -0
  18. package/dest/branded-types/checkpoint_number.d.ts.map +1 -0
  19. package/dest/branded-types/checkpoint_number.js +68 -0
  20. package/dest/branded-types/epoch.d.ts +42 -0
  21. package/dest/branded-types/epoch.d.ts.map +1 -0
  22. package/dest/branded-types/epoch.js +59 -0
  23. package/dest/branded-types/index.d.ts +6 -0
  24. package/dest/branded-types/index.d.ts.map +1 -0
  25. package/dest/branded-types/index.js +4 -0
  26. package/dest/branded-types/slot.d.ts +42 -0
  27. package/dest/branded-types/slot.d.ts.map +1 -0
  28. package/dest/branded-types/slot.js +59 -0
  29. package/dest/branded-types/types.d.ts +5 -0
  30. package/dest/branded-types/types.d.ts.map +1 -0
  31. package/dest/branded-types/types.js +1 -0
  32. package/dest/buffer/buffer16.d.ts +2 -5
  33. package/dest/buffer/buffer16.d.ts.map +1 -1
  34. package/dest/buffer/buffer16.js +4 -2
  35. package/dest/buffer/buffer32.d.ts +2 -5
  36. package/dest/buffer/buffer32.d.ts.map +1 -1
  37. package/dest/buffer/buffer32.js +4 -2
  38. package/dest/buffer/index.d.ts +1 -1
  39. package/dest/collection/array.d.ts +3 -1
  40. package/dest/collection/array.d.ts.map +1 -1
  41. package/dest/collection/array.js +12 -3
  42. package/dest/collection/index.d.ts +1 -1
  43. package/dest/collection/object.d.ts +5 -1
  44. package/dest/collection/object.d.ts.map +1 -1
  45. package/dest/collection/object.js +6 -0
  46. package/dest/committable/committable.d.ts +1 -1
  47. package/dest/committable/committable.d.ts.map +1 -1
  48. package/dest/committable/index.d.ts +1 -1
  49. package/dest/config/env_var.d.ts +2 -2
  50. package/dest/config/env_var.d.ts.map +1 -1
  51. package/dest/config/index.d.ts +12 -2
  52. package/dest/config/index.d.ts.map +1 -1
  53. package/dest/config/index.js +17 -2
  54. package/dest/config/network_config.d.ts +54 -0
  55. package/dest/config/network_config.d.ts.map +1 -0
  56. package/dest/config/network_config.js +11 -0
  57. package/dest/config/network_name.d.ts +2 -2
  58. package/dest/config/network_name.d.ts.map +1 -1
  59. package/dest/config/network_name.js +10 -2
  60. package/dest/config/secret_value.d.ts +1 -1
  61. package/dest/config/secret_value.d.ts.map +1 -1
  62. package/dest/config/secret_value.js +3 -1
  63. package/dest/crypto/aes128/index.d.ts +1 -1
  64. package/dest/crypto/aes128/index.d.ts.map +1 -1
  65. package/dest/crypto/aes128/index.js +19 -6
  66. package/dest/crypto/bls/bn254_keystore.d.ts +296 -0
  67. package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -0
  68. package/dest/crypto/bls/bn254_keystore.js +218 -0
  69. package/dest/crypto/bls/index.d.ts +13 -0
  70. package/dest/crypto/bls/index.d.ts.map +1 -0
  71. package/dest/crypto/bls/index.js +87 -0
  72. package/dest/crypto/bn254/index.d.ts +39 -0
  73. package/dest/crypto/bn254/index.d.ts.map +1 -0
  74. package/dest/crypto/bn254/index.js +56 -0
  75. package/dest/crypto/ecdsa/index.d.ts +1 -1
  76. package/dest/crypto/ecdsa/index.d.ts.map +1 -1
  77. package/dest/crypto/ecdsa/index.js +58 -48
  78. package/dest/crypto/ecdsa/signature.d.ts +2 -11
  79. package/dest/crypto/ecdsa/signature.d.ts.map +1 -1
  80. package/dest/crypto/ecdsa/signature.js +2 -2
  81. package/dest/crypto/grumpkin/index.d.ts +10 -13
  82. package/dest/crypto/grumpkin/index.d.ts.map +1 -1
  83. package/dest/crypto/grumpkin/index.js +61 -55
  84. package/dest/crypto/keccak/index.d.ts +1 -1
  85. package/dest/crypto/keys/index.d.ts +2 -2
  86. package/dest/crypto/keys/index.d.ts.map +1 -1
  87. package/dest/crypto/keys/index.js +8 -5
  88. package/dest/crypto/pedersen/index.d.ts +1 -1
  89. package/dest/crypto/pedersen/pedersen.noble.d.ts +1 -1
  90. package/dest/crypto/pedersen/pedersen.wasm.d.ts +2 -2
  91. package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
  92. package/dest/crypto/pedersen/pedersen.wasm.js +24 -14
  93. package/dest/crypto/poseidon/index.d.ts +2 -2
  94. package/dest/crypto/poseidon/index.d.ts.map +1 -1
  95. package/dest/crypto/poseidon/index.js +33 -18
  96. package/dest/crypto/random/index.d.ts +1 -1
  97. package/dest/crypto/random/index.d.ts.map +1 -1
  98. package/dest/crypto/random/randomness_singleton.d.ts +1 -1
  99. package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
  100. package/dest/crypto/schnorr/index.d.ts +3 -2
  101. package/dest/crypto/schnorr/index.d.ts.map +1 -1
  102. package/dest/crypto/schnorr/index.js +30 -38
  103. package/dest/crypto/schnorr/signature.d.ts +2 -2
  104. package/dest/crypto/schnorr/signature.d.ts.map +1 -1
  105. package/dest/crypto/schnorr/signature.js +2 -2
  106. package/dest/crypto/secp256k1/index.d.ts +1 -1
  107. package/dest/crypto/secp256k1/index.d.ts.map +1 -1
  108. package/dest/crypto/secp256k1/index.js +23 -18
  109. package/dest/crypto/secp256k1-signer/index.d.ts +1 -1
  110. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +1 -1
  111. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -1
  112. package/dest/crypto/secp256k1-signer/utils.d.ts +49 -3
  113. package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
  114. package/dest/crypto/secp256k1-signer/utils.js +87 -5
  115. package/dest/crypto/serialize.d.ts +1 -1
  116. package/dest/crypto/sha256/index.d.ts +2 -2
  117. package/dest/crypto/sha256/index.d.ts.map +1 -1
  118. package/dest/crypto/sha256/index.js +1 -1
  119. package/dest/crypto/sha512/index.d.ts +3 -3
  120. package/dest/crypto/sha512/index.d.ts.map +1 -1
  121. package/dest/crypto/sha512/index.js +1 -1
  122. package/dest/crypto/signature/index.d.ts +2 -2
  123. package/dest/crypto/signature/index.d.ts.map +1 -1
  124. package/dest/crypto/sync/index.d.ts +1 -1
  125. package/dest/crypto/sync/index.js +1 -1
  126. package/dest/crypto/sync/pedersen/index.d.ts +2 -2
  127. package/dest/crypto/sync/pedersen/index.d.ts.map +1 -1
  128. package/dest/crypto/sync/pedersen/index.js +18 -11
  129. package/dest/crypto/sync/poseidon/index.d.ts +2 -2
  130. package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
  131. package/dest/crypto/sync/poseidon/index.js +28 -13
  132. package/dest/{fields/bls12_fields.d.ts → curves/bls12/field.d.ts} +3 -3
  133. package/dest/curves/bls12/field.d.ts.map +1 -0
  134. package/dest/{fields/bls12_fields.js → curves/bls12/field.js} +12 -9
  135. package/dest/curves/bls12/index.d.ts +3 -0
  136. package/dest/curves/bls12/index.d.ts.map +1 -0
  137. package/dest/curves/bls12/index.js +2 -0
  138. package/dest/{fields/bls12_point.d.ts → curves/bls12/point.d.ts} +11 -20
  139. package/dest/curves/bls12/point.d.ts.map +1 -0
  140. package/dest/{fields/bls12_point.js → curves/bls12/point.js} +17 -15
  141. package/dest/curves/bn254/field.d.ts +180 -0
  142. package/dest/curves/bn254/field.d.ts.map +1 -0
  143. package/dest/{fields/fields.js → curves/bn254/field.js} +71 -59
  144. package/dest/curves/bn254/index.d.ts +3 -0
  145. package/dest/curves/bn254/index.d.ts.map +1 -0
  146. package/dest/curves/bn254/index.js +2 -0
  147. package/dest/curves/bn254/point.d.ts +54 -0
  148. package/dest/curves/bn254/point.d.ts.map +1 -0
  149. package/dest/curves/bn254/point.js +143 -0
  150. package/dest/curves/grumpkin/index.d.ts +10 -0
  151. package/dest/curves/grumpkin/index.d.ts.map +1 -0
  152. package/dest/curves/grumpkin/index.js +3 -0
  153. package/dest/{fields → curves/grumpkin}/point.d.ts +13 -13
  154. package/dest/curves/grumpkin/point.d.ts.map +1 -0
  155. package/dest/{fields → curves/grumpkin}/point.js +24 -7
  156. package/dest/decorators/index.d.ts +1 -1
  157. package/dest/decorators/memoize.d.ts +1 -1
  158. package/dest/decorators/memoize.d.ts.map +1 -1
  159. package/dest/error/index.d.ts +4 -4
  160. package/dest/error/index.d.ts.map +1 -1
  161. package/dest/eth-address/index.d.ts +14 -4
  162. package/dest/eth-address/index.d.ts.map +1 -1
  163. package/dest/eth-address/index.js +26 -2
  164. package/dest/eth-signature/eth_signature.d.ts +1 -4
  165. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  166. package/dest/eth-signature/eth_signature.js +2 -4
  167. package/dest/eth-signature/index.d.ts +1 -1
  168. package/dest/fs/index.d.ts +1 -1
  169. package/dest/fs/run_in_dir.d.ts +1 -1
  170. package/dest/fs/try_rm_dir.d.ts +1 -1
  171. package/dest/iterable/all.d.ts +1 -1
  172. package/dest/iterable/filter.d.ts +1 -1
  173. package/dest/iterable/index.d.ts +1 -1
  174. package/dest/iterable/isAsyncIt.d.ts +1 -1
  175. package/dest/iterable/map.d.ts +1 -1
  176. package/dest/iterable/peek.d.ts +1 -1
  177. package/dest/iterable/sort.d.ts +1 -1
  178. package/dest/iterable/take.d.ts +1 -1
  179. package/dest/iterable/toArray.d.ts +1 -1
  180. package/dest/iterator/filter.d.ts +3 -0
  181. package/dest/iterator/filter.d.ts.map +1 -0
  182. package/dest/iterator/filter.js +7 -0
  183. package/dest/iterator/index.d.ts +2 -0
  184. package/dest/iterator/index.d.ts.map +1 -0
  185. package/dest/iterator/index.js +1 -0
  186. package/dest/json-rpc/client/fetch.d.ts +1 -1
  187. package/dest/json-rpc/client/index.d.ts +1 -1
  188. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +1 -1
  189. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
  190. package/dest/json-rpc/client/safe_json_rpc_client.js +9 -0
  191. package/dest/json-rpc/client/undici.d.ts +1 -1
  192. package/dest/json-rpc/convert.d.ts +1 -1
  193. package/dest/json-rpc/errors.d.ts +1 -1
  194. package/dest/json-rpc/errors.d.ts.map +1 -1
  195. package/dest/json-rpc/fixtures/class_a.d.ts +3 -3
  196. package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
  197. package/dest/json-rpc/fixtures/class_b.d.ts +3 -3
  198. package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -1
  199. package/dest/json-rpc/fixtures/test_state.d.ts +1 -1
  200. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
  201. package/dest/json-rpc/index.d.ts +1 -1
  202. package/dest/json-rpc/js_utils.d.ts +1 -1
  203. package/dest/json-rpc/js_utils.d.ts.map +1 -1
  204. package/dest/json-rpc/server/index.d.ts +1 -1
  205. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +1 -1
  206. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
  207. package/dest/json-rpc/test/index.d.ts +1 -1
  208. package/dest/json-rpc/test/integration.d.ts +1 -1
  209. package/dest/log/console.d.ts +1 -1
  210. package/dest/log/gcloud-logger-config.d.ts +1 -1
  211. package/dest/log/gcloud-logger-config.d.ts.map +1 -1
  212. package/dest/log/index.d.ts +1 -1
  213. package/dest/log/libp2p_logger.d.ts +1 -1
  214. package/dest/log/log-filters.d.ts +1 -1
  215. package/dest/log/log-levels.d.ts +1 -1
  216. package/dest/log/log_fn.d.ts +2 -2
  217. package/dest/log/log_fn.d.ts.map +1 -1
  218. package/dest/log/noir_debug_log_util.d.ts +1 -1
  219. package/dest/log/pino-logger.d.ts +2 -2
  220. package/dest/log/pino-logger.d.ts.map +1 -1
  221. package/dest/log/pino-logger.js +0 -1
  222. package/dest/message/index.d.ts +1 -1
  223. package/dest/message/index.d.ts.map +1 -1
  224. package/dest/mutex/index.d.ts +1 -1
  225. package/dest/mutex/index.d.ts.map +1 -1
  226. package/dest/mutex/mutex_database.d.ts +1 -1
  227. package/dest/noir/index.d.ts +1 -1
  228. package/dest/noir/noir_package_config.d.ts +9 -9
  229. package/dest/number/index.d.ts +1 -1
  230. package/dest/profiler/index.d.ts +2 -0
  231. package/dest/profiler/index.d.ts.map +1 -0
  232. package/dest/profiler/index.js +1 -0
  233. package/dest/profiler/profiler.d.ts +8 -0
  234. package/dest/profiler/profiler.d.ts.map +1 -0
  235. package/dest/profiler/profiler.js +97 -0
  236. package/dest/promise/index.d.ts +1 -1
  237. package/dest/promise/running-promise.d.ts +1 -1
  238. package/dest/promise/running-promise.d.ts.map +1 -1
  239. package/dest/promise/utils.d.ts +1 -1
  240. package/dest/queue/base_memory_queue.d.ts +1 -1
  241. package/dest/queue/base_memory_queue.d.ts.map +1 -1
  242. package/dest/queue/batch_queue.d.ts +1 -1
  243. package/dest/queue/batch_queue.d.ts.map +1 -1
  244. package/dest/queue/bounded_serial_queue.d.ts +1 -1
  245. package/dest/queue/bounded_serial_queue.d.ts.map +1 -1
  246. package/dest/queue/fifo_memory_queue.d.ts +1 -1
  247. package/dest/queue/fifo_memory_queue.d.ts.map +1 -1
  248. package/dest/queue/index.d.ts +1 -1
  249. package/dest/queue/priority_memory_queue.d.ts +1 -1
  250. package/dest/queue/priority_memory_queue.d.ts.map +1 -1
  251. package/dest/queue/priority_queue.d.ts +1 -1
  252. package/dest/queue/priority_queue.d.ts.map +1 -1
  253. package/dest/queue/semaphore.d.ts +1 -1
  254. package/dest/queue/semaphore.d.ts.map +1 -1
  255. package/dest/queue/serial_queue.d.ts +1 -1
  256. package/dest/queue/serial_queue.d.ts.map +1 -1
  257. package/dest/retry/index.d.ts +1 -1
  258. package/dest/running-promise/index.d.ts +1 -1
  259. package/dest/schemas/api.d.ts +1 -1
  260. package/dest/schemas/index.d.ts +1 -1
  261. package/dest/schemas/parse.d.ts +1 -1
  262. package/dest/schemas/schemas.d.ts +15 -17
  263. package/dest/schemas/schemas.d.ts.map +1 -1
  264. package/dest/schemas/schemas.js +14 -10
  265. package/dest/schemas/types.d.ts +31 -1
  266. package/dest/schemas/types.d.ts.map +1 -1
  267. package/dest/schemas/types.js +25 -1
  268. package/dest/schemas/utils.d.ts +4 -4
  269. package/dest/schemas/utils.d.ts.map +1 -1
  270. package/dest/schemas/utils.js +15 -5
  271. package/dest/serialize/buffer_reader.d.ts +3 -1
  272. package/dest/serialize/buffer_reader.d.ts.map +1 -1
  273. package/dest/serialize/buffer_reader.js +3 -0
  274. package/dest/serialize/field_reader.d.ts +2 -2
  275. package/dest/serialize/field_reader.d.ts.map +1 -1
  276. package/dest/serialize/field_reader.js +1 -1
  277. package/dest/serialize/free_funcs.d.ts +2 -2
  278. package/dest/serialize/free_funcs.d.ts.map +1 -1
  279. package/dest/serialize/free_funcs.js +1 -1
  280. package/dest/serialize/index.d.ts +1 -1
  281. package/dest/serialize/serialize.d.ts +2 -2
  282. package/dest/serialize/serialize.d.ts.map +1 -1
  283. package/dest/serialize/serialize.js +1 -1
  284. package/dest/serialize/type_registry.d.ts +1 -1
  285. package/dest/serialize/type_registry.d.ts.map +1 -1
  286. package/dest/serialize/types.d.ts +1 -1
  287. package/dest/sleep/index.d.ts +3 -1
  288. package/dest/sleep/index.d.ts.map +1 -1
  289. package/dest/sleep/index.js +4 -0
  290. package/dest/string/index.d.ts +5 -1
  291. package/dest/string/index.d.ts.map +1 -1
  292. package/dest/string/index.js +19 -2
  293. package/dest/testing/files/index.d.ts +2 -1
  294. package/dest/testing/files/index.d.ts.map +1 -1
  295. package/dest/testing/files/index.js +1 -1
  296. package/dest/testing/formatting.d.ts +4 -0
  297. package/dest/testing/formatting.d.ts.map +1 -0
  298. package/dest/testing/formatting.js +3 -0
  299. package/dest/testing/index.d.ts +2 -1
  300. package/dest/testing/index.d.ts.map +1 -1
  301. package/dest/testing/index.js +1 -0
  302. package/dest/testing/port_allocator.d.ts +1 -1
  303. package/dest/testing/snapshot_serializer.d.ts +1 -1
  304. package/dest/testing/test_data.d.ts +1 -1
  305. package/dest/timer/date.d.ts +2 -1
  306. package/dest/timer/date.d.ts.map +1 -1
  307. package/dest/timer/date.js +3 -0
  308. package/dest/timer/elapsed.d.ts +1 -1
  309. package/dest/timer/index.d.ts +1 -1
  310. package/dest/timer/timeout.d.ts +1 -1
  311. package/dest/timer/timeout.d.ts.map +1 -1
  312. package/dest/timer/timer.d.ts +1 -1
  313. package/dest/timer/timer.d.ts.map +1 -1
  314. package/dest/transport/dispatch/create_dispatch_fn.d.ts +1 -1
  315. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
  316. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +1 -1
  317. package/dest/transport/dispatch/messages.d.ts +1 -1
  318. package/dest/transport/index.d.ts +1 -1
  319. package/dest/transport/interface/connector.d.ts +1 -1
  320. package/dest/transport/interface/listener.d.ts +1 -1
  321. package/dest/transport/interface/socket.d.ts +1 -1
  322. package/dest/transport/interface/transferable.d.ts +1 -1
  323. package/dest/transport/node/index.d.ts +1 -1
  324. package/dest/transport/node/node_connector.d.ts +1 -1
  325. package/dest/transport/node/node_connector.d.ts.map +1 -1
  326. package/dest/transport/node/node_connector_socket.d.ts +1 -1
  327. package/dest/transport/node/node_connector_socket.d.ts.map +1 -1
  328. package/dest/transport/node/node_listener.d.ts +1 -1
  329. package/dest/transport/node/node_listener.d.ts.map +1 -1
  330. package/dest/transport/node/node_listener_socket.d.ts +1 -1
  331. package/dest/transport/node/node_listener_socket.d.ts.map +1 -1
  332. package/dest/transport/transport_client.d.ts +1 -1
  333. package/dest/transport/transport_client.d.ts.map +1 -1
  334. package/dest/transport/transport_server.d.ts +1 -10
  335. package/dest/transport/transport_server.d.ts.map +1 -1
  336. package/dest/trees/balanced_merkle_tree.d.ts +22 -0
  337. package/dest/trees/balanced_merkle_tree.d.ts.map +1 -0
  338. package/dest/trees/balanced_merkle_tree.js +66 -0
  339. package/dest/trees/hasher.d.ts +1 -1
  340. package/dest/trees/index.d.ts +2 -1
  341. package/dest/trees/index.d.ts.map +1 -1
  342. package/dest/trees/index.js +1 -0
  343. package/dest/trees/indexed_merkle_tree.d.ts +1 -1
  344. package/dest/trees/indexed_merkle_tree.d.ts.map +1 -1
  345. package/dest/trees/indexed_merkle_tree.js +1 -1
  346. package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -1
  347. package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
  348. package/dest/trees/indexed_tree_leaf.d.ts +1 -1
  349. package/dest/trees/membership_witness.d.ts +3 -24
  350. package/dest/trees/membership_witness.d.ts.map +1 -1
  351. package/dest/trees/membership_witness.js +1 -1
  352. package/dest/trees/merkle_tree.d.ts +1 -1
  353. package/dest/trees/merkle_tree.d.ts.map +1 -1
  354. package/dest/trees/merkle_tree_calculator.d.ts +2 -12
  355. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
  356. package/dest/trees/merkle_tree_calculator.js +1 -31
  357. package/dest/trees/sibling_path.d.ts +5 -39
  358. package/dest/trees/sibling_path.d.ts.map +1 -1
  359. package/dest/trees/sibling_path.js +2 -2
  360. package/dest/trees/unbalanced_merkle_tree.d.ts +5 -4
  361. package/dest/trees/unbalanced_merkle_tree.d.ts.map +1 -1
  362. package/dest/trees/unbalanced_merkle_tree.js +33 -10
  363. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts +27 -23
  364. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -1
  365. package/dest/trees/unbalanced_merkle_tree_calculator.js +123 -97
  366. package/dest/trees/unbalanced_tree_store.d.ts +2 -1
  367. package/dest/trees/unbalanced_tree_store.d.ts.map +1 -1
  368. package/dest/trees/unbalanced_tree_store.js +6 -0
  369. package/dest/types/index.d.ts +3 -1
  370. package/dest/types/index.d.ts.map +1 -1
  371. package/dest/types/index.js +3 -0
  372. package/dest/url/index.d.ts +1 -1
  373. package/dest/validation/index.d.ts +1 -1
  374. package/package.json +32 -8
  375. package/src/array/array.ts +0 -16
  376. package/src/array/index.ts +1 -0
  377. package/src/array/sorted_array.ts +133 -0
  378. package/src/branded-types/block_number.ts +112 -0
  379. package/src/branded-types/checkpoint_number.ts +100 -0
  380. package/src/branded-types/epoch.ts +88 -0
  381. package/src/branded-types/index.ts +6 -0
  382. package/src/branded-types/slot.ts +88 -0
  383. package/src/branded-types/types.ts +2 -0
  384. package/src/buffer/buffer16.ts +2 -2
  385. package/src/buffer/buffer32.ts +2 -2
  386. package/src/collection/array.ts +15 -3
  387. package/src/collection/object.ts +8 -0
  388. package/src/config/env_var.ts +44 -10
  389. package/src/config/index.ts +22 -2
  390. package/src/config/network_config.ts +18 -0
  391. package/src/config/network_name.ts +18 -3
  392. package/src/crypto/aes128/index.ts +19 -10
  393. package/src/crypto/bls/bn254_keystore.ts +287 -0
  394. package/src/crypto/bls/index.ts +77 -0
  395. package/src/crypto/bn254/index.ts +64 -0
  396. package/src/crypto/ecdsa/index.ts +40 -37
  397. package/src/crypto/ecdsa/signature.ts +2 -2
  398. package/src/crypto/grumpkin/index.ts +38 -46
  399. package/src/crypto/keys/index.ts +6 -6
  400. package/src/crypto/pedersen/pedersen.wasm.ts +23 -19
  401. package/src/crypto/poseidon/index.ts +33 -25
  402. package/src/crypto/schnorr/index.ts +22 -18
  403. package/src/crypto/schnorr/signature.ts +2 -2
  404. package/src/crypto/secp256k1/index.ts +15 -11
  405. package/src/crypto/secp256k1-signer/utils.ts +115 -7
  406. package/src/crypto/sha256/index.ts +1 -1
  407. package/src/crypto/sha512/index.ts +1 -1
  408. package/src/crypto/signature/index.ts +1 -1
  409. package/src/crypto/sync/index.ts +1 -1
  410. package/src/crypto/sync/pedersen/index.ts +17 -16
  411. package/src/crypto/sync/poseidon/index.ts +28 -23
  412. package/src/{fields/bls12_fields.ts → curves/bls12/field.ts} +6 -6
  413. package/src/curves/bls12/index.ts +2 -0
  414. package/src/{fields/bls12_point.ts → curves/bls12/point.ts} +14 -14
  415. package/src/{fields/fields.ts → curves/bn254/field.ts} +69 -62
  416. package/src/curves/bn254/index.ts +2 -0
  417. package/src/curves/bn254/point.ts +170 -0
  418. package/src/curves/grumpkin/index.ts +11 -0
  419. package/src/{fields → curves/grumpkin}/point.ts +26 -7
  420. package/src/eth-address/index.ts +28 -3
  421. package/src/eth-signature/eth_signature.ts +2 -4
  422. package/src/iterator/filter.ts +11 -0
  423. package/src/iterator/index.ts +1 -0
  424. package/src/json-rpc/client/safe_json_rpc_client.ts +9 -0
  425. package/src/log/log_fn.ts +1 -1
  426. package/src/log/pino-logger.ts +0 -1
  427. package/src/profiler/index.ts +1 -0
  428. package/src/profiler/profiler.ts +125 -0
  429. package/src/schemas/schemas.ts +24 -13
  430. package/src/schemas/types.ts +33 -0
  431. package/src/schemas/utils.ts +21 -8
  432. package/src/serialize/buffer_reader.ts +5 -0
  433. package/src/serialize/field_reader.ts +1 -1
  434. package/src/serialize/free_funcs.ts +1 -1
  435. package/src/serialize/serialize.ts +1 -1
  436. package/src/sleep/index.ts +6 -0
  437. package/src/string/index.ts +24 -1
  438. package/src/testing/files/index.ts +1 -1
  439. package/src/testing/formatting.ts +3 -0
  440. package/src/testing/index.ts +1 -0
  441. package/src/timer/date.ts +4 -0
  442. package/src/trees/balanced_merkle_tree.ts +84 -0
  443. package/src/trees/index.ts +1 -0
  444. package/src/trees/indexed_merkle_tree.ts +1 -1
  445. package/src/trees/membership_witness.ts +1 -1
  446. package/src/trees/merkle_tree_calculator.ts +1 -34
  447. package/src/trees/sibling_path.ts +2 -2
  448. package/src/trees/unbalanced_merkle_tree.ts +55 -7
  449. package/src/trees/unbalanced_merkle_tree_calculator.ts +134 -93
  450. package/src/trees/unbalanced_tree_store.ts +5 -1
  451. package/src/types/index.ts +5 -0
  452. package/dest/crypto/index.d.ts +0 -15
  453. package/dest/crypto/index.d.ts.map +0 -1
  454. package/dest/crypto/index.js +0 -14
  455. package/dest/fields/bls12_fields.d.ts.map +0 -1
  456. package/dest/fields/bls12_point.d.ts.map +0 -1
  457. package/dest/fields/coordinate.d.ts +0 -66
  458. package/dest/fields/coordinate.d.ts.map +0 -1
  459. package/dest/fields/coordinate.js +0 -96
  460. package/dest/fields/fields.d.ts +0 -174
  461. package/dest/fields/fields.d.ts.map +0 -1
  462. package/dest/fields/index.d.ts +0 -6
  463. package/dest/fields/index.d.ts.map +0 -1
  464. package/dest/fields/index.js +0 -5
  465. package/dest/fields/point.d.ts.map +0 -1
  466. package/dest/index.d.ts +0 -29
  467. package/dest/index.d.ts.map +0 -1
  468. package/dest/index.js +0 -29
  469. package/dest/json-rpc/server/telemetry.d.ts +0 -2
  470. package/dest/json-rpc/server/telemetry.d.ts.map +0 -1
  471. package/dest/json-rpc/server/telemetry.js +0 -0
  472. package/src/crypto/index.ts +0 -14
  473. package/src/fields/coordinate.ts +0 -104
  474. package/src/fields/index.ts +0 -5
  475. package/src/index.ts +0 -29
  476. package/src/json-rpc/server/telemetry.ts +0 -0
@@ -1,4 +1,4 @@
1
- import { Fr } from '../fields/index.js';
1
+ import { Fr } from '../curves/bn254/index.js';
2
2
  import { assertLength } from '../serialize/index.js';
3
3
  import type { IndexedTreeLeafPreimage } from './indexed_tree_leaf.js';
4
4
  import { MembershipWitness } from './membership_witness.js';
@@ -1,6 +1,6 @@
1
1
  import { assertMemberLength } from '../array/array.js';
2
2
  import { toBigIntBE, toBufferBE } from '../bigint-buffer/index.js';
3
- import { Fr } from '../fields/fields.js';
3
+ import { Fr } from '../curves/bn254/field.js';
4
4
  import { schemas } from '../schemas/schemas.js';
5
5
  import { BufferReader, type Tuple, serializeToBuffer } from '../serialize/index.js';
6
6
  import type { SiblingPath } from './sibling_path.js';
@@ -1,4 +1,4 @@
1
- import { pedersenHash, sha256Trunc } from '@aztec/foundation/crypto';
1
+ import { pedersenHash } from '@aztec/foundation/crypto/pedersen';
2
2
 
3
3
  import type { AsyncHasher } from './hasher.js';
4
4
  import { MerkleTree } from './merkle_tree.js';
@@ -69,37 +69,4 @@ export class MerkleTreeCalculator {
69
69
 
70
70
  return leaves[0];
71
71
  }
72
-
73
- /**
74
- * Computes the Merkle root with the provided leaves **synchronously**.
75
- *
76
- * This method uses a synchronous hash function (defaults to `sha256Trunc`) and **does not** allow for padding.
77
- * If the number of leaves is not a power of two, it throws an error.
78
- * This contrasts with the above non-static async method `computeTreeRoot`, which can handle any number of leaves by
79
- * padding with zero hashes.
80
- */
81
- static computeTreeRootSync(leaves: Buffer[], hasher = sha256Trunc): Buffer {
82
- if (leaves.length === 0) {
83
- throw new Error('Cannot compute a Merkle root with no leaves');
84
- }
85
-
86
- const height = Math.log2(leaves.length);
87
- if (!Number.isInteger(height)) {
88
- throw new Error('Cannot compute a Merkle root with a non-power-of-two number of leaves');
89
- }
90
-
91
- let nodes = leaves.slice();
92
-
93
- for (let i = 0; i < height; ++i) {
94
- let j = 0;
95
- for (; j < nodes.length / 2; ++j) {
96
- const l = nodes[j * 2];
97
- const r = nodes[j * 2 + 1];
98
- nodes[j] = hasher(Buffer.concat([l, r]));
99
- }
100
- nodes = nodes.slice(0, j);
101
- }
102
-
103
- return nodes[0];
104
- }
105
72
  }
@@ -1,6 +1,6 @@
1
1
  import { makeTuple } from '../array/array.js';
2
- import { pedersenHash } from '../crypto/index.js';
3
- import { Fr } from '../fields/index.js';
2
+ import { pedersenHash } from '../crypto/pedersen/index.js';
3
+ import { Fr } from '../curves/bn254/index.js';
4
4
  import { schemas } from '../schemas/index.js';
5
5
  import {
6
6
  type Tuple,
@@ -1,5 +1,14 @@
1
- import { sha256Trunc } from '../crypto/sha256/index.js';
2
- import { MerkleTreeCalculator } from './merkle_tree_calculator.js';
1
+ import {
2
+ computeBalancedMerkleTreeRoot,
3
+ computeBalancedMerkleTreeRootAsync,
4
+ poseidonMerkleHash,
5
+ shaMerkleHash,
6
+ } from './balanced_merkle_tree.js';
7
+
8
+ export const computeUnbalancedShaRoot = (leaves: Buffer[]) => computeUnbalancedMerkleTreeRoot(leaves, shaMerkleHash);
9
+
10
+ export const computeUnbalancedPoseidonRoot = async (leaves: Buffer[]) =>
11
+ await computeUnbalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash);
3
12
 
4
13
  /**
5
14
  * Computes the Merkle root of an unbalanced tree.
@@ -22,9 +31,48 @@ import { MerkleTreeCalculator } from './merkle_tree_calculator.js';
22
31
  * But if we instead combine the size-4 and size-8 subtrees first (depth 4), and then merge with the size-2 subtree
23
32
  * (depth 1), the final tree has a depth of 5.
24
33
  */
25
- export function computeUnbalancedMerkleTreeRoot(leaves: Buffer[], hasher = sha256Trunc): Buffer {
34
+ export function computeUnbalancedMerkleTreeRoot(
35
+ leaves: Buffer[],
36
+ hasher = shaMerkleHash,
37
+ emptyRoot = Buffer.alloc(32),
38
+ ): Buffer {
39
+ if (!leaves.length) {
40
+ return emptyRoot;
41
+ }
42
+
43
+ if (leaves.length === 1) {
44
+ return leaves[0];
45
+ }
46
+
47
+ let numRemainingLeaves = leaves.length;
48
+ let subtreeSize = 1;
49
+ let root: Buffer | undefined;
50
+ while (numRemainingLeaves > 1) {
51
+ if ((numRemainingLeaves & subtreeSize) !== 0) {
52
+ const subtreeLeaves = leaves.slice(numRemainingLeaves - subtreeSize, numRemainingLeaves);
53
+ const subtreeRoot = computeBalancedMerkleTreeRoot(subtreeLeaves, hasher);
54
+ if (!root) {
55
+ root = subtreeRoot;
56
+ } else {
57
+ root = hasher(subtreeRoot, root);
58
+ }
59
+
60
+ numRemainingLeaves -= subtreeSize;
61
+ }
62
+
63
+ subtreeSize *= 2;
64
+ }
65
+
66
+ return root!;
67
+ }
68
+
69
+ export async function computeUnbalancedMerkleTreeRootAsync(
70
+ leaves: Buffer[],
71
+ hasher = poseidonMerkleHash,
72
+ emptyRoot = Buffer.alloc(32),
73
+ ): Promise<Buffer> {
26
74
  if (!leaves.length) {
27
- throw new Error('Cannot compute a Merkle root with no leaves');
75
+ return emptyRoot;
28
76
  }
29
77
 
30
78
  if (leaves.length === 1) {
@@ -37,11 +85,11 @@ export function computeUnbalancedMerkleTreeRoot(leaves: Buffer[], hasher = sha25
37
85
  while (numRemainingLeaves > 1) {
38
86
  if ((numRemainingLeaves & subtreeSize) !== 0) {
39
87
  const subtreeLeaves = leaves.slice(numRemainingLeaves - subtreeSize, numRemainingLeaves);
40
- const subtreeRoot = MerkleTreeCalculator.computeTreeRootSync(subtreeLeaves, hasher);
88
+ const subtreeRoot = await computeBalancedMerkleTreeRootAsync(subtreeLeaves, hasher);
41
89
  if (!root) {
42
90
  root = subtreeRoot;
43
91
  } else {
44
- root = hasher(Buffer.concat([subtreeRoot, root]));
92
+ root = await hasher(subtreeRoot, root);
45
93
  }
46
94
 
47
95
  numRemainingLeaves -= subtreeSize;
@@ -63,7 +111,7 @@ function getMaxBalancedSubtreeDepth(numLeaves: number) {
63
111
  }
64
112
 
65
113
  /// Get the maximum depth of an unbalanced tree that can be created with the given number of leaves.
66
- export function getMaxUnbalancedTreeDepth(numLeaves: number) {
114
+ function getMaxUnbalancedTreeDepth(numLeaves: number) {
67
115
  return Math.ceil(Math.log2(numLeaves));
68
116
  }
69
117
 
@@ -1,37 +1,52 @@
1
- import { type Bufferable, serializeToBuffer } from '@aztec/foundation/serialize';
2
- import type { AsyncHasher } from '@aztec/foundation/trees';
3
- import { SiblingPath } from '@aztec/foundation/trees';
4
-
5
- import { sha256Trunc } from '../crypto/index.js';
1
+ import { shaMerkleHash } from './balanced_merkle_tree.js';
2
+ import type { Hasher } from './hasher.js';
3
+ import { SiblingPath } from './sibling_path.js';
4
+ import { type TreeNodeLocation, UnbalancedTreeStore } from './unbalanced_tree_store.js';
5
+
6
+ export function computeCompressedUnbalancedMerkleTreeRoot(
7
+ leaves: Buffer[],
8
+ valueToCompress = Buffer.alloc(32),
9
+ emptyRoot = Buffer.alloc(32),
10
+ hasher?: Hasher['hash'],
11
+ ): Buffer {
12
+ const calculator = UnbalancedMerkleTreeCalculator.create(leaves, valueToCompress, emptyRoot, hasher);
13
+ return calculator.getRoot();
14
+ }
6
15
 
7
- const indexToKeyHash = (level: number, index: bigint) => `${level}:${index}`;
16
+ interface TreeNode {
17
+ value: Buffer;
18
+ leafIndex?: number;
19
+ }
8
20
 
9
21
  /**
10
22
  * An ephemeral unbalanced Merkle tree implementation.
11
23
  * Follows the rollup implementation which greedily hashes pairs of nodes up the tree.
12
24
  * Remaining rightmost nodes are shifted up until they can be paired.
25
+ * The values that match the `valueToCompress` are skipped and the sibling of the compressed leaf are shifted up until
26
+ * they can be paired.
13
27
  * If there is only one leaf, the root is the leaf.
14
28
  */
15
29
  export class UnbalancedMerkleTreeCalculator {
16
- // This map stores index and depth -> value
17
- private cache: { [key: string]: Buffer } = {};
18
- // This map stores value -> index and depth, since we have variable depth
19
- private valueCache: { [key: string]: string } = {};
20
- protected size: bigint = 0n;
21
-
22
- root: Buffer = Buffer.alloc(32);
30
+ private store: UnbalancedTreeStore<TreeNode>;
31
+ private leafLocations: TreeNodeLocation[] = [];
23
32
 
24
33
  public constructor(
25
- private maxDepth: number,
26
- private hasher: AsyncHasher['hash'],
27
- ) {}
34
+ private readonly leaves: Buffer[],
35
+ private readonly valueToCompress: Buffer,
36
+ private readonly emptyRoot: Buffer,
37
+ private readonly hasher: Hasher['hash'],
38
+ ) {
39
+ this.store = new UnbalancedTreeStore(leaves.length);
40
+ this.buildTree();
41
+ }
28
42
 
29
43
  static create(
30
- height: number,
31
- hasher = (left: Buffer, right: Buffer) =>
32
- Promise.resolve(sha256Trunc(Buffer.concat([left, right])) as Buffer<ArrayBuffer>),
44
+ leaves: Buffer[],
45
+ valueToCompress = Buffer.alloc(0),
46
+ emptyRoot = Buffer.alloc(32),
47
+ hasher = shaMerkleHash,
33
48
  ) {
34
- return new UnbalancedMerkleTreeCalculator(height, hasher);
49
+ return new UnbalancedMerkleTreeCalculator(leaves, valueToCompress, emptyRoot, hasher);
35
50
  }
36
51
 
37
52
  /**
@@ -39,108 +54,134 @@ export class UnbalancedMerkleTreeCalculator {
39
54
  * @returns The root of the tree.
40
55
  */
41
56
  public getRoot(): Buffer {
42
- return this.root;
57
+ return this.store.getRoot()!.value;
43
58
  }
44
59
 
45
60
  /**
46
- * Returns a sibling path for the element at the given index.
61
+ * Returns a sibling path for the element.
47
62
  * @param value - The value of the element.
48
63
  * @returns A sibling path for the element.
49
64
  * Note: The sibling path is an array of sibling hashes, with the lowest hash (leaf hash) first, and the highest hash last.
50
65
  */
51
- public getSiblingPath<N extends number>(value: Bufferable): Promise<SiblingPath<N>> {
52
- if (this.size === 1n) {
53
- return Promise.resolve(new SiblingPath<N>(0 as N, []));
66
+ public getSiblingPath<N extends number>(value: Buffer): SiblingPath<N> {
67
+ const leafIndex = this.leaves.findIndex(leaf => leaf.equals(value));
68
+ if (leafIndex === -1) {
69
+ throw Error(`Leaf value ${value.toString('hex')} not found in tree.`);
54
70
  }
55
71
 
56
- const path: Buffer[] = [];
57
- const [depth, _index] = this.valueCache[serializeToBuffer(value).toString('hex')].split(':');
58
- let level = parseInt(depth, 10);
59
- let index = BigInt(_index);
60
- while (level > 0) {
61
- const isRight = index & 0x01n;
62
- const key = indexToKeyHash(level, isRight ? index - 1n : index + 1n);
63
- const sibling = this.cache[key];
64
- path.push(sibling);
65
- level -= 1;
66
- index >>= 1n;
67
- }
68
- return Promise.resolve(new SiblingPath<N>(parseInt(depth, 10) as N, path));
72
+ return this.getSiblingPathByLeafIndex(leafIndex);
69
73
  }
70
74
 
71
75
  /**
72
- * Appends the given leaves to the tree.
73
- * @param leaves - The leaves to append.
74
- * @returns Empty promise.
76
+ * Returns a sibling path for the leaf at the given index.
77
+ * @param leafIndex - The index of the leaf.
78
+ * @returns A sibling path for the leaf.
75
79
  */
76
- public async appendLeaves(leaves: Buffer[]): Promise<void> {
77
- if (this.size != BigInt(0)) {
78
- throw Error(`Can't re-append to an unbalanced tree. Current has ${this.size} leaves.`);
80
+ public getSiblingPathByLeafIndex<N extends number>(leafIndex: number): SiblingPath<N> {
81
+ if (leafIndex >= this.leaves.length) {
82
+ throw Error(`Leaf index ${leafIndex} out of bounds. Tree has ${this.leaves.length} leaves.`);
79
83
  }
80
- if (leaves.length === 0) {
81
- throw Error(`Can't append 0 leaves to an unbalanced tree.`);
84
+
85
+ const leaf = this.leaves[leafIndex];
86
+ if (leaf.equals(this.valueToCompress)) {
87
+ throw Error(`Leaf at index ${leafIndex} has been compressed.`);
82
88
  }
83
89
 
84
- if (leaves.length === 1) {
85
- this.root = leaves[0];
86
- } else {
87
- this.root = await this.batchInsert(leaves);
90
+ const path: Buffer[] = [];
91
+ let location = this.leafLocations[leafIndex];
92
+ while (location.level > 0) {
93
+ const sibling = this.store.getSibling(location)!;
94
+ path.push(sibling.value);
95
+ location = this.store.getParentLocation(location);
88
96
  }
89
97
 
90
- this.size = BigInt(leaves.length);
98
+ return new SiblingPath<N>(path.length as N, path);
99
+ }
91
100
 
92
- return Promise.resolve();
101
+ public getLeafLocation(leafIndex: number) {
102
+ return this.leafLocations[leafIndex];
93
103
  }
94
104
 
95
105
  /**
96
- * Calculates root while adding leaves and nodes to the cache.
97
- * @param leaves - The leaves to append.
98
- * @returns Resulting root of the tree.
106
+ * Adds leaves and nodes to the store. Updates the leafLocations.
107
+ * @param leaves - The leaves of the tree.
99
108
  */
100
- private async batchInsert(_leaves: Buffer[]): Promise<Buffer> {
101
- // If we have an even number of leaves, hash them all in pairs
102
- // Otherwise, store the final leaf to be shifted up to the next odd sized level
103
- let [layerWidth, nodeToShift] =
104
- _leaves.length & 1
105
- ? [_leaves.length - 1, serializeToBuffer(_leaves[_leaves.length - 1])]
106
- : [_leaves.length, Buffer.alloc(0)];
107
- // Allocate this layer's leaves and init the next layer up
108
- let thisLayer = _leaves.slice(0, layerWidth).map(l => serializeToBuffer(l));
109
- let nextLayer = [];
110
- // Store the bottom level leaves
111
- thisLayer.forEach((leaf, i) => this.storeNode(leaf, this.maxDepth, BigInt(i)));
112
- for (let i = 0; i < this.maxDepth; i++) {
113
- for (let j = 0; j < layerWidth; j += 2) {
114
- // Store the hash of each pair one layer up
115
- nextLayer[j / 2] = await this.hasher(serializeToBuffer(thisLayer[j]), serializeToBuffer(thisLayer[j + 1]));
116
- this.storeNode(nextLayer[j / 2], this.maxDepth - i - 1, BigInt(j >> 1));
117
- }
118
- layerWidth /= 2;
119
- if (layerWidth & 1) {
120
- if (nodeToShift.length) {
121
- // If the next layer has odd length, and we have a node that needs to be shifted up, add it here
122
- nextLayer.push(serializeToBuffer(nodeToShift));
123
- this.storeNode(nodeToShift, this.maxDepth - i - 1, BigInt((layerWidth * 2) >> 1));
124
- layerWidth += 1;
125
- nodeToShift = Buffer.alloc(0);
109
+ private buildTree() {
110
+ this.leafLocations = this.leaves.map((value, i) => this.store.setLeaf(i, { value, leafIndex: i }));
111
+
112
+ // Start with the leaves that are not compressed.
113
+ let toProcess = this.leafLocations.filter((_, i) => !this.leaves[i].equals(this.valueToCompress));
114
+ if (!toProcess.length) {
115
+ // All leaves are compressed. Set empty root to the root.
116
+ this.store.setNode({ level: 0, index: 0 }, { value: this.emptyRoot });
117
+ return;
118
+ }
119
+
120
+ const level = toProcess[0].level;
121
+ for (let i = level; i > 0; i--) {
122
+ const toProcessNext = [];
123
+ for (const location of toProcess) {
124
+ if (location.level !== i) {
125
+ toProcessNext.push(location);
126
+ continue;
127
+ }
128
+
129
+ const parentLocation = this.store.getParentLocation(location);
130
+ if (this.store.getNode(parentLocation)) {
131
+ // Parent has been updated by its (left) sibling.
132
+ continue;
133
+ }
134
+
135
+ const sibling = this.store.getSibling(location);
136
+ // If sibling is undefined, all its children are compressed.
137
+ const shouldShiftUp = !sibling || sibling.value.equals(this.valueToCompress);
138
+ if (shouldShiftUp) {
139
+ // The node becomes the parent if the sibling is a compressed leaf.
140
+ this.shiftNodeUp(location, parentLocation);
126
141
  } else {
127
- // If we don't have a node waiting to be shifted, store the next layer's final node to be shifted
128
- layerWidth -= 1;
129
- nodeToShift = nextLayer[layerWidth];
142
+ // Hash the value with the (right) sibling and update the parent node.
143
+ const node = this.store.getNode(location)!;
144
+ const parentValue = this.hasher(node.value, sibling.value);
145
+ this.store.setNode(parentLocation, { value: parentValue });
130
146
  }
147
+
148
+ // Add the parent location to be processed next.
149
+ toProcessNext.push(parentLocation);
131
150
  }
132
- // reset the layers
133
- thisLayer = nextLayer;
134
- nextLayer = [];
151
+
152
+ toProcess = toProcessNext;
135
153
  }
154
+ }
136
155
 
137
- // return the root
138
- return thisLayer[0];
156
+ private shiftNodeUp(from: TreeNodeLocation, to: TreeNodeLocation) {
157
+ // Collect all nodes that need to shift.
158
+ const nodesToShift = this.collectNodesToShift(from, to);
159
+ // Move all nodes to their new locations.
160
+ for (const { node, newLocation } of nodesToShift) {
161
+ this.store.setNode(newLocation, node);
162
+ if (node.leafIndex !== undefined) {
163
+ this.leafLocations[node.leafIndex] = newLocation;
164
+ }
165
+ }
139
166
  }
140
167
 
141
- private storeNode(value: Buffer, depth: number, index: bigint) {
142
- const key = indexToKeyHash(depth, index);
143
- this.cache[key] = value;
144
- this.valueCache[value.toString('hex')] = key;
168
+ private collectNodesToShift(from: TreeNodeLocation, to: TreeNodeLocation) {
169
+ const node = this.store.getNode(from);
170
+ if (!node) {
171
+ return [];
172
+ }
173
+
174
+ let result = [{ node, newLocation: to }];
175
+
176
+ // If not a leaf, collect its children.
177
+ if (node.leafIndex === undefined) {
178
+ const [leftChild, rightChild] = this.store.getChildLocations(from);
179
+ const [leftChildNew, rightChildNew] = this.store.getChildLocations(to);
180
+ result = result
181
+ .concat(this.collectNodesToShift(leftChild, leftChildNew))
182
+ .concat(this.collectNodesToShift(rightChild, rightChildNew));
183
+ }
184
+
185
+ return result;
145
186
  }
146
187
  }
@@ -68,7 +68,7 @@ export class UnbalancedTreeStore<T> {
68
68
  return [left, right];
69
69
  }
70
70
 
71
- getLeaf(leafIndex: number) {
71
+ getLeaf(leafIndex: number): T | undefined {
72
72
  const { level, indexAtLevel } = findLeafLevelAndIndex(this.#numLeaves, leafIndex);
73
73
  const location = {
74
74
  level,
@@ -81,6 +81,10 @@ export class UnbalancedTreeStore<T> {
81
81
  return this.#nodeMapping.get(this.#getKey(location))?.value;
82
82
  }
83
83
 
84
+ getRoot(): T | undefined {
85
+ return this.getNode({ level: 0, index: 0 });
86
+ }
87
+
84
88
  getParent(location: TreeNodeLocation): T | undefined {
85
89
  const parentLocation = this.getParentLocation(location);
86
90
  return this.getNode(parentLocation);
@@ -19,6 +19,11 @@ export function unfreeze<T>(obj: T): Writeable<T> {
19
19
  return obj as Writeable<T>;
20
20
  }
21
21
 
22
+ /** Is defined type guard */
23
+ export function isDefined<T>(value: T | undefined): value is T {
24
+ return value !== undefined;
25
+ }
26
+
22
27
  /** Resolves a record-like type. Lifted from viem. */
23
28
  export type Prettify<T> = {
24
29
  [K in keyof T]: T[K];
@@ -1,15 +0,0 @@
1
- export * from './keccak/index.js';
2
- export * from './random/index.js';
3
- export * from './sha256/index.js';
4
- export * from './sha512/index.js';
5
- export * from './pedersen/index.js';
6
- export * from './poseidon/index.js';
7
- export * from './secp256k1-signer/index.js';
8
- export * from './keys/index.js';
9
- export * from './aes128/index.js';
10
- export * from './grumpkin/index.js';
11
- export * from './ecdsa/index.js';
12
- export * from './secp256k1/index.js';
13
- export * from './schnorr/index.js';
14
- export * from './signature/index.js';
15
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
@@ -1,14 +0,0 @@
1
- export * from './keccak/index.js';
2
- export * from './random/index.js';
3
- export * from './sha256/index.js';
4
- export * from './sha512/index.js';
5
- export * from './pedersen/index.js';
6
- export * from './poseidon/index.js';
7
- export * from './secp256k1-signer/index.js';
8
- export * from './keys/index.js';
9
- export * from './aes128/index.js';
10
- export * from './grumpkin/index.js';
11
- export * from './ecdsa/index.js';
12
- export * from './secp256k1/index.js';
13
- export * from './schnorr/index.js';
14
- export * from './signature/index.js';
@@ -1 +0,0 @@
1
- {"version":3,"file":"bls12_fields.d.ts","sourceRoot":"","sources":["../../src/fields/bls12_fields.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bls12_point.d.ts","sourceRoot":"","sources":["../../src/fields/bls12_point.ts"],"names":[],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- import type { Tuple } from '../serialize/types.js';
2
- import { Fr } from './fields.js';
3
- /**
4
- * Class to wrap a single point coordinate.
5
- * This class handles the complexities of representing point coordinates as 32 byte buffers as well as fields.
6
- * The coordinate value is split across 2 fields to ensure that the max size of a field is not breached.
7
- * This is achieved by placing the most significant byte of the lower field into the least significant byte of the higher field.
8
- * Calls to 'toBuffer' or 'toBigInt' undo this change and simply return the original 32 byte value.
9
- * Calls to 'toFieldsBuffer' will return a 64 bytes buffer containing the serialized fields.
10
- */
11
- export declare class Coordinate {
12
- /**
13
- * The fields of the coordinate value. Least significant limb at index 0.
14
- */
15
- fields: Tuple<Fr, 2>;
16
- static ZERO: Coordinate;
17
- constructor(
18
- /**
19
- * The fields of the coordinate value. Least significant limb at index 0.
20
- */
21
- fields: Tuple<Fr, 2>);
22
- /**
23
- * Converts the coordinate data into a tuple of fields
24
- * @returns A tuple of the coordinate fields
25
- */
26
- toFields(): Tuple<Fr, 2>;
27
- /**
28
- * Generates a random coordinate value
29
- * @returns The random coordinate
30
- */
31
- static random(): Coordinate;
32
- /**
33
- * serializes the object to buffer of 2 fields.
34
- * @returns A buffer serialization of the object.
35
- */
36
- toFieldsBuffer(): Buffer;
37
- /**
38
- * serializes the coordinate to a single 32 byte buffer.
39
- * @returns A buffer serialization of the object.
40
- */
41
- toBuffer(): Buffer;
42
- /**
43
- * Returns true if this coordinate is equal to the one provided
44
- * @param other - The coordinate against which to compare
45
- * @returns True if the coordinates are the same, false otherwise
46
- */
47
- equals(other: Coordinate): boolean;
48
- /**
49
- * Returns the coordinate's value as a bigint
50
- * @returns The coordinate value as a bigint
51
- */
52
- toBigInt(): bigint;
53
- /**
54
- * Creates a coordinate object from a 32 byte coordinate value
55
- * @param coordinate - A buffer containing the 32 byte coordinate value
56
- * @returns The new coordinate object
57
- */
58
- static fromBuffer(coordinate: Buffer): Coordinate;
59
- /**
60
- * Creates a coordinate object from a field
61
- * @param coordinate - The field containing the coordinate
62
- * @returns The new coordinate object
63
- */
64
- static fromField(coordinate: Fr): Coordinate;
65
- }
66
- //# sourceMappingURL=coordinate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coordinate.d.ts","sourceRoot":"","sources":["../../src/fields/coordinate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC;;;;;;;GAOG;AACH,qBAAa,UAAU;IAInB;;OAEG;IACI,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAN7B,MAAM,CAAC,IAAI,aAAsC;;IAG/C;;OAEG;IACI,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAG7B;;;OAGG;IACH,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAIxB;;;OAGG;IACH,MAAM,CAAC,MAAM,IAAI,UAAU;IAI3B;;;OAGG;IACH,cAAc,IAAI,MAAM;IAIxB;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAOlB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAIlC;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM;IAYpC;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE;CAOhC"}