@aztec/foundation 0.0.1-commit.03f7ef2 → 0.0.1-commit.04d373f

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 (367) hide show
  1. package/dest/array/index.d.ts +2 -1
  2. package/dest/array/index.d.ts.map +1 -1
  3. package/dest/array/index.js +1 -0
  4. package/dest/array/sorted_array.d.ts +15 -0
  5. package/dest/array/sorted_array.d.ts.map +1 -0
  6. package/dest/array/sorted_array.js +109 -0
  7. package/dest/bigint-buffer/index.d.ts +1 -1
  8. package/dest/bigint-buffer/index.d.ts.map +1 -1
  9. package/dest/bigint-buffer/index.js +6 -1
  10. package/dest/branded-types/block_number.d.ts +6 -3
  11. package/dest/branded-types/block_number.d.ts.map +1 -1
  12. package/dest/branded-types/block_number.js +18 -4
  13. package/dest/branded-types/buffer32_hash.d.ts +27 -0
  14. package/dest/branded-types/buffer32_hash.d.ts.map +1 -0
  15. package/dest/branded-types/buffer32_hash.js +12 -0
  16. package/dest/branded-types/checkpoint_number.d.ts +17 -3
  17. package/dest/branded-types/checkpoint_number.d.ts.map +1 -1
  18. package/dest/branded-types/checkpoint_number.js +28 -8
  19. package/dest/branded-types/epoch.d.ts +2 -2
  20. package/dest/branded-types/epoch.d.ts.map +1 -1
  21. package/dest/branded-types/index.d.ts +4 -2
  22. package/dest/branded-types/index.d.ts.map +1 -1
  23. package/dest/branded-types/index.js +3 -1
  24. package/dest/branded-types/index_within_checkpoint.d.ts +42 -0
  25. package/dest/branded-types/index_within_checkpoint.d.ts.map +1 -0
  26. package/dest/branded-types/index_within_checkpoint.js +59 -0
  27. package/dest/branded-types/slot.d.ts +5 -2
  28. package/dest/branded-types/slot.d.ts.map +1 -1
  29. package/dest/branded-types/slot.js +3 -0
  30. package/dest/buffer/buffer16.d.ts +6 -1
  31. package/dest/buffer/buffer16.d.ts.map +1 -1
  32. package/dest/buffer/buffer16.js +3 -1
  33. package/dest/buffer/buffer32.d.ts +28 -58
  34. package/dest/buffer/buffer32.d.ts.map +1 -1
  35. package/dest/buffer/buffer32.js +32 -64
  36. package/dest/buffer/index.d.ts +2 -1
  37. package/dest/buffer/index.d.ts.map +1 -1
  38. package/dest/buffer/index.js +1 -0
  39. package/dest/buffer/utils.d.ts +3 -0
  40. package/dest/buffer/utils.d.ts.map +1 -0
  41. package/dest/buffer/utils.js +7 -0
  42. package/dest/collection/array.d.ts +22 -1
  43. package/dest/collection/array.d.ts.map +1 -1
  44. package/dest/collection/array.js +84 -0
  45. package/dest/collection/index.d.ts +3 -1
  46. package/dest/collection/index.d.ts.map +1 -1
  47. package/dest/collection/index.js +2 -0
  48. package/dest/collection/lru_map.d.ts +41 -0
  49. package/dest/collection/lru_map.d.ts.map +1 -0
  50. package/dest/collection/lru_map.js +119 -0
  51. package/dest/collection/lru_set.d.ts +35 -0
  52. package/dest/collection/lru_set.d.ts.map +1 -0
  53. package/dest/collection/lru_set.js +95 -0
  54. package/dest/committable/committable.js +1 -1
  55. package/dest/config/env_var.d.ts +2 -2
  56. package/dest/config/env_var.d.ts.map +1 -1
  57. package/dest/config/index.d.ts +51 -31
  58. package/dest/config/index.d.ts.map +1 -1
  59. package/dest/config/index.js +59 -50
  60. package/dest/config/network_config.d.ts +15 -41
  61. package/dest/config/network_config.d.ts.map +1 -1
  62. package/dest/config/network_config.js +4 -1
  63. package/dest/config/network_name.d.ts +2 -2
  64. package/dest/config/network_name.d.ts.map +1 -1
  65. package/dest/config/network_name.js +2 -2
  66. package/dest/config/parse-env.d.ts +3 -0
  67. package/dest/config/parse-env.d.ts.map +1 -0
  68. package/dest/config/parse-env.js +7 -0
  69. package/dest/config/secret_value.d.ts +2 -2
  70. package/dest/config/secret_value.d.ts.map +1 -1
  71. package/dest/config/secret_value.js +3 -1
  72. package/dest/crypto/aes128/index.d.ts +2 -1
  73. package/dest/crypto/aes128/index.d.ts.map +1 -1
  74. package/dest/crypto/aes128/index.js +11 -2
  75. package/dest/crypto/bls/bn254_keystore.d.ts +9 -176
  76. package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -1
  77. package/dest/crypto/bls/bn254_keystore.js +0 -17
  78. package/dest/crypto/ecdsa/signature.d.ts +10 -1
  79. package/dest/crypto/ecdsa/signature.d.ts.map +1 -1
  80. package/dest/crypto/poseidon/index.d.ts +1 -2
  81. package/dest/crypto/poseidon/index.d.ts.map +1 -1
  82. package/dest/crypto/poseidon/index.js +40 -42
  83. package/dest/crypto/random/randomness_singleton.d.ts +4 -3
  84. package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
  85. package/dest/crypto/random/randomness_singleton.js +5 -5
  86. package/dest/crypto/schnorr/index.d.ts +8 -7
  87. package/dest/crypto/schnorr/index.d.ts.map +1 -1
  88. package/dest/crypto/schnorr/index.js +6 -6
  89. package/dest/crypto/schnorr/signature.d.ts +9 -29
  90. package/dest/crypto/schnorr/signature.d.ts.map +1 -1
  91. package/dest/crypto/schnorr/signature.js +20 -36
  92. package/dest/crypto/secp256k1-signer/utils.d.ts +12 -1
  93. package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
  94. package/dest/crypto/secp256k1-signer/utils.js +26 -0
  95. package/dest/crypto/sync/poseidon/index.d.ts +1 -2
  96. package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
  97. package/dest/crypto/sync/poseidon/index.js +0 -8
  98. package/dest/curves/bls12/field.d.ts +3 -3
  99. package/dest/curves/bls12/field.d.ts.map +1 -1
  100. package/dest/curves/bls12/field.js +6 -8
  101. package/dest/curves/bls12/point.d.ts +11 -2
  102. package/dest/curves/bls12/point.d.ts.map +1 -1
  103. package/dest/curves/bls12/point.js +3 -1
  104. package/dest/curves/bn254/field.d.ts +25 -19
  105. package/dest/curves/bn254/field.d.ts.map +1 -1
  106. package/dest/curves/bn254/field.js +36 -21
  107. package/dest/curves/grumpkin/point.d.ts +21 -26
  108. package/dest/curves/grumpkin/point.d.ts.map +1 -1
  109. package/dest/curves/grumpkin/point.js +29 -43
  110. package/dest/error/index.d.ts +4 -4
  111. package/dest/error/index.d.ts.map +1 -1
  112. package/dest/eth-address/index.d.ts +2 -2
  113. package/dest/eth-address/index.d.ts.map +1 -1
  114. package/dest/eth-address/index.js +4 -5
  115. package/dest/eth-signature/eth_signature.d.ts +6 -2
  116. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  117. package/dest/eth-signature/eth_signature.js +7 -2
  118. package/dest/fifo/fifo_frame_reader.d.ts +41 -0
  119. package/dest/fifo/fifo_frame_reader.d.ts.map +1 -0
  120. package/dest/fifo/fifo_frame_reader.js +74 -0
  121. package/dest/fifo/index.d.ts +2 -0
  122. package/dest/fifo/index.d.ts.map +1 -0
  123. package/dest/fifo/index.js +1 -0
  124. package/dest/fifo_set/fifo_set.d.ts +15 -0
  125. package/dest/fifo_set/fifo_set.d.ts.map +1 -0
  126. package/dest/fifo_set/fifo_set.js +39 -0
  127. package/dest/fifo_set/index.d.ts +2 -0
  128. package/dest/fifo_set/index.d.ts.map +1 -0
  129. package/dest/fifo_set/index.js +1 -0
  130. package/dest/jest/setup.js +28 -1
  131. package/dest/json-rpc/client/fetch.d.ts +1 -1
  132. package/dest/json-rpc/client/fetch.d.ts.map +1 -1
  133. package/dest/json-rpc/client/fetch.js +4 -3
  134. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +2 -1
  135. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
  136. package/dest/json-rpc/client/safe_json_rpc_client.js +3 -3
  137. package/dest/json-rpc/client/undici.d.ts +1 -1
  138. package/dest/json-rpc/client/undici.d.ts.map +1 -1
  139. package/dest/json-rpc/client/undici.js +23 -4
  140. package/dest/json-rpc/fixtures/class_a.d.ts +3 -3
  141. package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
  142. package/dest/json-rpc/fixtures/class_b.d.ts +3 -3
  143. package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -1
  144. package/dest/json-rpc/fixtures/test_state.d.ts +4 -8
  145. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
  146. package/dest/json-rpc/fixtures/test_state.js +57 -17
  147. package/dest/json-rpc/server/api_key_auth.d.ts +19 -0
  148. package/dest/json-rpc/server/api_key_auth.d.ts.map +1 -0
  149. package/dest/json-rpc/server/api_key_auth.js +57 -0
  150. package/dest/json-rpc/server/index.d.ts +2 -1
  151. package/dest/json-rpc/server/index.d.ts.map +1 -1
  152. package/dest/json-rpc/server/index.js +1 -0
  153. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +8 -3
  154. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
  155. package/dest/json-rpc/server/safe_json_rpc_server.js +28 -14
  156. package/dest/log/bigint-utils.d.ts +5 -0
  157. package/dest/log/bigint-utils.d.ts.map +1 -0
  158. package/dest/log/bigint-utils.js +21 -0
  159. package/dest/log/gcloud-logger-config.d.ts +1 -1
  160. package/dest/log/gcloud-logger-config.d.ts.map +1 -1
  161. package/dest/log/gcloud-logger-config.js +3 -0
  162. package/dest/log/libp2p_logger.d.ts +5 -2
  163. package/dest/log/libp2p_logger.d.ts.map +1 -1
  164. package/dest/log/libp2p_logger.js +14 -4
  165. package/dest/log/log-filters.d.ts +17 -4
  166. package/dest/log/log-filters.d.ts.map +1 -1
  167. package/dest/log/log-filters.js +26 -12
  168. package/dest/log/pino-logger-server.d.ts +9 -0
  169. package/dest/log/pino-logger-server.d.ts.map +1 -0
  170. package/dest/log/pino-logger-server.js +18 -0
  171. package/dest/log/pino-logger.d.ts +37 -8
  172. package/dest/log/pino-logger.d.ts.map +1 -1
  173. package/dest/log/pino-logger.js +138 -30
  174. package/dest/noir/noir_package_config.d.ts +19 -104
  175. package/dest/noir/noir_package_config.d.ts.map +1 -1
  176. package/dest/noir/noir_package_config.js +1 -1
  177. package/dest/queue/base_memory_queue.d.ts +2 -2
  178. package/dest/queue/base_memory_queue.d.ts.map +1 -1
  179. package/dest/queue/batch_queue.d.ts +1 -1
  180. package/dest/queue/batch_queue.d.ts.map +1 -1
  181. package/dest/queue/batch_queue.js +1 -0
  182. package/dest/queue/semaphore.d.ts +5 -1
  183. package/dest/queue/semaphore.d.ts.map +1 -1
  184. package/dest/retry/index.d.ts +22 -1
  185. package/dest/retry/index.d.ts.map +1 -1
  186. package/dest/retry/index.js +32 -0
  187. package/dest/schemas/api.d.ts +12 -10
  188. package/dest/schemas/api.d.ts.map +1 -1
  189. package/dest/schemas/api.js +7 -1
  190. package/dest/schemas/parse.d.ts +4 -4
  191. package/dest/schemas/parse.d.ts.map +1 -1
  192. package/dest/schemas/parse.js +6 -5
  193. package/dest/schemas/schemas.d.ts +15 -15
  194. package/dest/schemas/types.d.ts +3 -3
  195. package/dest/schemas/types.d.ts.map +1 -1
  196. package/dest/schemas/utils.d.ts +7 -11
  197. package/dest/schemas/utils.d.ts.map +1 -1
  198. package/dest/schemas/utils.js +2 -18
  199. package/dest/serialize/buffer_reader.d.ts +14 -4
  200. package/dest/serialize/buffer_reader.d.ts.map +1 -1
  201. package/dest/serialize/buffer_reader.js +26 -4
  202. package/dest/serialize/buffer_sink.d.ts +134 -0
  203. package/dest/serialize/buffer_sink.d.ts.map +1 -0
  204. package/dest/serialize/buffer_sink.js +297 -0
  205. package/dest/serialize/index.d.ts +2 -1
  206. package/dest/serialize/index.d.ts.map +1 -1
  207. package/dest/serialize/index.js +1 -0
  208. package/dest/serialize/serialize.d.ts +19 -1
  209. package/dest/serialize/serialize.d.ts.map +1 -1
  210. package/dest/serialize/serialize.js +31 -0
  211. package/dest/sleep/index.d.ts +2 -1
  212. package/dest/sleep/index.d.ts.map +1 -1
  213. package/dest/sleep/index.js +10 -1
  214. package/dest/string/index.js +1 -1
  215. package/dest/timer/date.d.ts +25 -1
  216. package/dest/timer/date.d.ts.map +1 -1
  217. package/dest/timer/date.js +33 -0
  218. package/dest/timer/index.d.ts +2 -2
  219. package/dest/timer/index.d.ts.map +1 -1
  220. package/dest/timer/index.js +1 -1
  221. package/dest/timer/timeout.d.ts +3 -1
  222. package/dest/timer/timeout.d.ts.map +1 -1
  223. package/dest/timer/timeout.js +26 -0
  224. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +11 -2
  225. package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -1
  226. package/dest/transport/index.d.ts +1 -2
  227. package/dest/transport/index.d.ts.map +1 -1
  228. package/dest/transport/index.js +0 -1
  229. package/dest/transport/transport_client.js +2 -2
  230. package/dest/trees/balanced_merkle_tree_root.d.ts +16 -0
  231. package/dest/trees/balanced_merkle_tree_root.d.ts.map +1 -0
  232. package/dest/trees/{balanced_merkle_tree.js → balanced_merkle_tree_root.js} +3 -19
  233. package/dest/trees/hasher.d.ts +4 -1
  234. package/dest/trees/hasher.d.ts.map +1 -1
  235. package/dest/trees/hasher.js +10 -5
  236. package/dest/trees/index.d.ts +4 -4
  237. package/dest/trees/index.d.ts.map +1 -1
  238. package/dest/trees/index.js +3 -3
  239. package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -1
  240. package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
  241. package/dest/trees/indexed_merkle_tree_calculator.js +5 -1
  242. package/dest/trees/membership_witness.d.ts +12 -2
  243. package/dest/trees/membership_witness.d.ts.map +1 -1
  244. package/dest/trees/membership_witness.js +9 -0
  245. package/dest/trees/merkle_tree_calculator.d.ts +4 -2
  246. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
  247. package/dest/trees/merkle_tree_calculator.js +1 -5
  248. package/dest/trees/sibling_path.d.ts +6 -4
  249. package/dest/trees/sibling_path.d.ts.map +1 -1
  250. package/dest/trees/sibling_path.js +10 -8
  251. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts +2 -3
  252. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -1
  253. package/dest/trees/unbalanced_merkle_tree_calculator.js +1 -5
  254. package/dest/trees/{unbalanced_merkle_tree.d.ts → unbalanced_merkle_tree_root.d.ts} +4 -7
  255. package/dest/trees/unbalanced_merkle_tree_root.d.ts.map +1 -0
  256. package/dest/trees/{unbalanced_merkle_tree.js → unbalanced_merkle_tree_root.js} +12 -51
  257. package/dest/trees/unbalanced_tree_store.d.ts +5 -1
  258. package/dest/trees/unbalanced_tree_store.d.ts.map +1 -1
  259. package/dest/trees/unbalanced_tree_store.js +49 -1
  260. package/dest/types/index.d.ts +12 -2
  261. package/dest/types/index.d.ts.map +1 -1
  262. package/dest/types/index.js +3 -0
  263. package/package.json +29 -6
  264. package/src/array/index.ts +1 -0
  265. package/src/array/sorted_array.ts +138 -0
  266. package/src/bigint-buffer/index.ts +6 -1
  267. package/src/branded-types/block_number.ts +25 -2
  268. package/src/branded-types/buffer32_hash.ts +38 -0
  269. package/src/branded-types/checkpoint_number.ts +37 -7
  270. package/src/branded-types/epoch.ts +1 -1
  271. package/src/branded-types/index.ts +3 -1
  272. package/src/branded-types/index_within_checkpoint.ts +88 -0
  273. package/src/branded-types/slot.ts +6 -1
  274. package/src/buffer/buffer16.ts +3 -0
  275. package/src/buffer/buffer32.ts +39 -68
  276. package/src/buffer/index.ts +1 -0
  277. package/src/buffer/utils.ts +8 -0
  278. package/src/collection/array.ts +86 -0
  279. package/src/collection/index.ts +2 -0
  280. package/src/collection/lru_map.ts +143 -0
  281. package/src/collection/lru_set.ts +115 -0
  282. package/src/committable/committable.ts +1 -1
  283. package/src/config/env_var.ts +96 -30
  284. package/src/config/index.ts +134 -99
  285. package/src/config/network_config.ts +3 -0
  286. package/src/config/network_name.ts +4 -4
  287. package/src/config/parse-env.ts +4 -0
  288. package/src/config/secret_value.ts +1 -1
  289. package/src/crypto/aes128/index.ts +11 -2
  290. package/src/crypto/bls/bn254_keystore.ts +0 -23
  291. package/src/crypto/poseidon/index.ts +42 -44
  292. package/src/crypto/random/randomness_singleton.ts +6 -4
  293. package/src/crypto/schnorr/index.ts +9 -8
  294. package/src/crypto/schnorr/signature.ts +17 -46
  295. package/src/crypto/secp256k1-signer/utils.ts +32 -0
  296. package/src/crypto/sync/poseidon/index.ts +0 -9
  297. package/src/curves/bls12/field.ts +0 -7
  298. package/src/curves/bn254/field.ts +45 -36
  299. package/src/curves/grumpkin/point.ts +23 -40
  300. package/src/eth-address/index.ts +1 -5
  301. package/src/eth-signature/eth_signature.ts +7 -1
  302. package/src/fifo/fifo_frame_reader.ts +98 -0
  303. package/src/fifo/index.ts +1 -0
  304. package/src/fifo_set/fifo_set.ts +52 -0
  305. package/src/fifo_set/index.ts +1 -0
  306. package/src/jest/setup.mjs +31 -1
  307. package/src/json-rpc/client/fetch.ts +4 -3
  308. package/src/json-rpc/client/safe_json_rpc_client.ts +4 -2
  309. package/src/json-rpc/client/undici.ts +23 -3
  310. package/src/json-rpc/fixtures/test_state.ts +10 -10
  311. package/src/json-rpc/server/api_key_auth.ts +63 -0
  312. package/src/json-rpc/server/index.ts +1 -0
  313. package/src/json-rpc/server/safe_json_rpc_server.ts +32 -14
  314. package/src/log/bigint-utils.ts +25 -0
  315. package/src/log/gcloud-logger-config.ts +5 -0
  316. package/src/log/libp2p_logger.ts +12 -5
  317. package/src/log/log-filters.ts +29 -11
  318. package/src/log/pino-logger-server.ts +25 -0
  319. package/src/log/pino-logger.ts +162 -40
  320. package/src/noir/noir_package_config.ts +32 -20
  321. package/src/queue/base_memory_queue.ts +1 -1
  322. package/src/queue/batch_queue.ts +1 -0
  323. package/src/queue/semaphore.ts +5 -0
  324. package/src/retry/index.ts +48 -0
  325. package/src/schemas/api.ts +25 -25
  326. package/src/schemas/parse.ts +9 -6
  327. package/src/schemas/schemas.ts +4 -4
  328. package/src/schemas/types.ts +2 -2
  329. package/src/schemas/utils.ts +4 -38
  330. package/src/serialize/buffer_reader.ts +36 -9
  331. package/src/serialize/buffer_sink.ts +350 -0
  332. package/src/serialize/index.ts +1 -0
  333. package/src/serialize/serialize.ts +32 -0
  334. package/src/sleep/index.ts +10 -1
  335. package/src/string/index.ts +1 -1
  336. package/src/timer/date.ts +48 -0
  337. package/src/timer/index.ts +1 -1
  338. package/src/timer/timeout.ts +31 -0
  339. package/src/transport/dispatch/create_dispatch_proxy.ts +11 -1
  340. package/src/transport/index.ts +0 -1
  341. package/src/transport/transport_client.ts +2 -2
  342. package/src/trees/{balanced_merkle_tree.ts → balanced_merkle_tree_root.ts} +3 -22
  343. package/src/trees/hasher.ts +12 -0
  344. package/src/trees/index.ts +3 -3
  345. package/src/trees/indexed_merkle_tree_calculator.ts +5 -1
  346. package/src/trees/membership_witness.ts +8 -0
  347. package/src/trees/merkle_tree_calculator.ts +4 -10
  348. package/src/trees/sibling_path.ts +11 -6
  349. package/src/trees/unbalanced_merkle_tree_calculator.ts +1 -12
  350. package/src/trees/{unbalanced_merkle_tree.ts → unbalanced_merkle_tree_root.ts} +17 -64
  351. package/src/trees/unbalanced_tree_store.ts +57 -2
  352. package/src/types/index.ts +20 -1
  353. package/dest/crypto/serialize.d.ts +0 -51
  354. package/dest/crypto/serialize.d.ts.map +0 -1
  355. package/dest/crypto/serialize.js +0 -68
  356. package/dest/json-rpc/server/telemetry.d.ts +0 -2
  357. package/dest/json-rpc/server/telemetry.d.ts.map +0 -1
  358. package/dest/json-rpc/server/telemetry.js +0 -0
  359. package/dest/transport/dispatch/create_dispatch_fn.d.ts +0 -25
  360. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +0 -1
  361. package/dest/transport/dispatch/create_dispatch_fn.js +0 -17
  362. package/dest/trees/balanced_merkle_tree.d.ts +0 -22
  363. package/dest/trees/balanced_merkle_tree.d.ts.map +0 -1
  364. package/dest/trees/unbalanced_merkle_tree.d.ts.map +0 -1
  365. package/src/crypto/serialize.ts +0 -85
  366. package/src/json-rpc/server/telemetry.ts +0 -0
  367. package/src/transport/dispatch/create_dispatch_fn.ts +0 -35
@@ -2,6 +2,7 @@ import { Fq, Fr } from '../curves/bn254/field.js';
2
2
  import { createConsoleLogger } from '../log/console.js';
3
3
  import type { EnvVar } from './env_var.js';
4
4
  import { type NetworkNames, getActiveNetworkName } from './network_name.js';
5
+ import { parseBooleanEnv } from './parse-env.js';
5
6
  import { SecretValue } from './secret_value.js';
6
7
 
7
8
  export { SecretValue, getActiveNetworkName };
@@ -9,14 +10,14 @@ export type { EnvVar, NetworkNames };
9
10
  export type { NetworkConfig, NetworkConfigMap } from './network_config.js';
10
11
  export { NetworkConfigMapSchema, NetworkConfigSchema } from './network_config.js';
11
12
 
12
- export interface ConfigMapping {
13
+ export interface ConfigMapping<T> {
13
14
  env?: EnvVar;
14
- parseEnv?: (val: string) => any;
15
- defaultValue?: any;
15
+ /** Parse an env-var string into `T`. Throws on invalid input. */
16
+ parseEnv?: (val: string) => T;
17
+ defaultValue?: T;
16
18
  printDefault?: (val: any) => string;
17
19
  description: string;
18
20
  isBoolean?: boolean;
19
- nested?: Record<string, ConfigMapping>;
20
21
  fallback?: EnvVar[];
21
22
  /**
22
23
  * List of deprecated env vars that are still supported but will log a warning.
@@ -29,7 +30,9 @@ export function isBooleanConfigValue<T>(obj: T, key: keyof T): boolean {
29
30
  return typeof obj[key] === 'boolean';
30
31
  }
31
32
 
32
- export type ConfigMappingsType<T> = Record<keyof T, ConfigMapping>;
33
+ export type ConfigMappingsType<T> = {
34
+ [K in keyof T]-?: ConfigMapping<Required<T>[K]>;
35
+ };
33
36
 
34
37
  /**
35
38
  * Shared utility function to get a value from environment variables with fallback support.
@@ -65,8 +68,8 @@ export function getValueFromEnvWithFallback<T>(
65
68
  }
66
69
  }
67
70
 
68
- // Parse the value if needed
69
- if (value !== undefined) {
71
+ // Parse the value if needed. Empty strings are treated as "not set".
72
+ if (value !== undefined && value !== '') {
70
73
  return parseFunc ? parseFunc(value) : (value as unknown as T);
71
74
  }
72
75
 
@@ -78,22 +81,20 @@ export function getConfigFromMappings<T>(configMappings: ConfigMappingsType<T>):
78
81
  const config = {} as T;
79
82
 
80
83
  for (const key in configMappings) {
81
- const { env, parseEnv, defaultValue, nested, fallback, deprecatedFallback } = configMappings[key];
82
- if (nested) {
83
- (config as any)[key] = getConfigFromMappings(nested);
84
- } else {
85
- // Use the shared utility function
84
+ const { env, parseEnv, defaultValue, fallback, deprecatedFallback } = configMappings[key];
85
+ try {
86
86
  (config as any)[key] = getValueFromEnvWithFallback(env, parseEnv, defaultValue, fallback);
87
+ } catch (e: any) {
88
+ throw new Error(`Failed to parse config '${key}' (env: ${env ?? 'none'}): ${e.message}`);
89
+ }
87
90
 
88
- // Check for deprecated env vars and warn if logger is set
89
- if (deprecatedFallback?.length) {
90
- const userLog = createConsoleLogger('[DEPRECATED]');
91
- for (const { env: deprecatedEnv, message } of deprecatedFallback) {
92
- if (process.env[deprecatedEnv]) {
93
- const warningMessage =
94
- message ?? `Environment variable ${deprecatedEnv} is deprecated. Please use ${env} instead.`;
95
- userLog(warningMessage, { deprecatedEnvVar: deprecatedEnv, newEnvVar: env });
96
- }
91
+ if (deprecatedFallback?.length) {
92
+ const userLog = createConsoleLogger('[DEPRECATED]');
93
+ for (const { env: deprecatedEnv, message } of deprecatedFallback) {
94
+ if (process.env[deprecatedEnv]) {
95
+ const warningMessage =
96
+ message ?? `Environment variable ${deprecatedEnv} is deprecated. Please use ${env} instead.`;
97
+ userLog(warningMessage, { deprecatedEnvVar: deprecatedEnv, newEnvVar: env });
97
98
  }
98
99
  }
99
100
  }
@@ -122,7 +123,7 @@ export function omitConfigMappings<T, K extends keyof T>(
122
123
  * @param defaultVal - The default numerical value to use if the environment variable is not set or is invalid
123
124
  * @returns Object with parseEnv and default values for a numerical config value
124
125
  */
125
- export function numberConfigHelper(defaultVal: number): Pick<ConfigMapping, 'parseEnv' | 'defaultValue'> {
126
+ export function numberConfigHelper(defaultVal: number): Pick<ConfigMapping<number>, 'parseEnv' | 'defaultValue'> {
126
127
  return {
127
128
  parseEnv: (val: string) => safeParseNumber(val, defaultVal),
128
129
  defaultValue: defaultVal,
@@ -137,7 +138,7 @@ export function numberConfigHelper(defaultVal: number): Pick<ConfigMapping, 'par
137
138
  export function floatConfigHelper(
138
139
  defaultVal: number,
139
140
  validationFn?: (val: number) => void,
140
- ): Pick<ConfigMapping, 'parseEnv' | 'defaultValue'> {
141
+ ): Pick<ConfigMapping<number>, 'parseEnv' | 'defaultValue'> {
141
142
  return {
142
143
  parseEnv: (val: string): number => {
143
144
  const parsed = safeParseFloat(val, defaultVal);
@@ -148,16 +149,49 @@ export function floatConfigHelper(
148
149
  };
149
150
  }
150
151
 
152
+ /**
153
+ * Parses an environment variable to a 0-1 percentage value
154
+ */
155
+ export function percentageConfigHelper(defaultVal: number): Pick<ConfigMapping<number>, 'parseEnv' | 'defaultValue'> {
156
+ return {
157
+ parseEnv: (val: string): number => {
158
+ const parsed = safeParseFloat(val, defaultVal);
159
+ if (parsed < 0 || parsed > 1) {
160
+ throw new TypeError(`Invalid percentage value: ${parsed} should be between 0 and 1`);
161
+ }
162
+
163
+ return parsed;
164
+ },
165
+ defaultValue: defaultVal,
166
+ };
167
+ }
168
+
151
169
  /**
152
170
  * Generates parseEnv and default values for a numerical config value.
153
171
  * @param defaultVal - The default numerical value to use if the environment variable is not set or is invalid
154
172
  * @returns Object with parseEnv and default values for a numerical config value
155
173
  */
156
- export function bigintConfigHelper(defaultVal?: bigint): Pick<ConfigMapping, 'parseEnv' | 'defaultValue'> {
174
+ export function bigintConfigHelper(defaultVal: bigint): Pick<ConfigMapping<bigint>, 'parseEnv' | 'defaultValue'>;
175
+ export function bigintConfigHelper(): Pick<ConfigMapping<bigint | undefined>, 'parseEnv' | 'defaultValue'>;
176
+ export function bigintConfigHelper(
177
+ defaultVal?: bigint,
178
+ ): Pick<ConfigMapping<bigint | undefined>, 'parseEnv' | 'defaultValue'> {
157
179
  return {
158
180
  parseEnv: (val: string) => {
159
- if (val === '') {
160
- return defaultVal;
181
+ // Handle scientific notation (e.g. "1e+23", "2E23") which BigInt() doesn't accept directly.
182
+ // We parse it losslessly using bigint arithmetic instead of going through float64.
183
+ if (/[eE]/.test(val)) {
184
+ const match = val.match(/^(-?\d+(?:\.(\d+))?)[eE]([+-]?\d+)$/);
185
+ if (!match) {
186
+ throw new Error(`Cannot convert '${val}' to a BigInt`);
187
+ }
188
+ const digits = match[1].replace('.', '');
189
+ const decimalPlaces = match[2]?.length ?? 0;
190
+ const exponent = parseInt(match[3], 10) - decimalPlaces;
191
+ if (exponent < 0) {
192
+ throw new Error(`Cannot convert '${val}' to a BigInt: result is not an integer`);
193
+ }
194
+ return BigInt(digits) * 10n ** BigInt(exponent);
161
195
  }
162
196
  return BigInt(val);
163
197
  },
@@ -167,32 +201,37 @@ export function bigintConfigHelper(defaultVal?: bigint): Pick<ConfigMapping, 'pa
167
201
 
168
202
  /**
169
203
  * Generates parseEnv for an optional numerical config value.
204
+ * Empty strings are already handled by getValueFromEnvWithFallback.
170
205
  */
171
- export function optionalNumberConfigHelper(): Pick<ConfigMapping, 'parseEnv'> {
206
+ export function optionalNumberConfigHelper(): Pick<ConfigMapping<number>, 'parseEnv'> {
172
207
  return {
173
- parseEnv: (val: string | undefined) => {
174
- if (val !== undefined && val.length > 0) {
175
- const parsedValue = parseInt(val);
176
- return Number.isSafeInteger(parsedValue) ? parsedValue : undefined;
208
+ parseEnv: (val: string) => {
209
+ const parsedValue = parseInt(val);
210
+ if (!Number.isSafeInteger(parsedValue)) {
211
+ throw new Error(`Invalid number: ${val}`);
177
212
  }
178
- return undefined;
213
+ return parsedValue;
179
214
  },
180
215
  };
181
216
  }
182
217
 
183
218
  /** Generates parseEnv for an enum-like config value. */
219
+ export function enumConfigHelper<T extends string>(
220
+ values: T[],
221
+ defaultValue: NoInfer<T>,
222
+ ): Pick<ConfigMapping<T>, 'parseEnv' | 'defaultValue'>;
223
+ export function enumConfigHelper<T extends string>(
224
+ values: T[],
225
+ ): Pick<ConfigMapping<T | undefined>, 'parseEnv' | 'defaultValue'>;
184
226
  export function enumConfigHelper<T extends string>(
185
227
  values: T[],
186
228
  defaultValue?: NoInfer<T>,
187
- ): Pick<ConfigMapping, 'parseEnv' | 'defaultValue'> {
229
+ ): Pick<ConfigMapping<T | undefined>, 'parseEnv' | 'defaultValue'> {
188
230
  return {
189
231
  parseEnv: (val: string) => {
190
- const sanitizedVal = (val ?? '').trim().toLowerCase();
191
- if (values.includes(sanitizedVal as T)) {
192
- return sanitizedVal as T;
193
- }
194
- if (!val && defaultValue) {
195
- return defaultValue;
232
+ const sanitizedVal = val.trim().toLowerCase();
233
+ if (values.some(v => v.toLowerCase() === sanitizedVal)) {
234
+ return values.find(v => v.toLowerCase() === sanitizedVal)!;
196
235
  }
197
236
  throw new Error(`Invalid config value '${val}' (must be one of ${values.join(', ')})`);
198
237
  },
@@ -207,7 +246,9 @@ export function enumConfigHelper<T extends string>(
207
246
  */
208
247
  export function booleanConfigHelper(
209
248
  defaultVal = false,
210
- ): Required<Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & { parseVal: (val: string) => boolean }> {
249
+ ): Required<
250
+ Pick<ConfigMapping<boolean>, 'parseEnv' | 'defaultValue' | 'isBoolean'> & { parseVal: (val: string) => boolean }
251
+ > {
211
252
  const parse = (val: string | boolean) => (typeof val === 'boolean' ? val : parseBooleanEnv(val));
212
253
  return {
213
254
  parseEnv: parse,
@@ -217,94 +258,88 @@ export function booleanConfigHelper(
217
258
  };
218
259
  }
219
260
 
220
- export function secretValueConfigHelper<T>(parse: (val: string | undefined) => T): Required<
221
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
222
- parseVal: (val: string) => SecretValue<T>;
223
- }
224
- > {
261
+ export function secretValueConfigHelper<T>(parse: (val: string | undefined) => T): Pick<
262
+ ConfigMapping<SecretValue<T>>,
263
+ 'parseEnv' | 'defaultValue'
264
+ > & {
265
+ parseVal: (val: string) => SecretValue<T>;
266
+ } {
225
267
  const wrap = (val: string) => new SecretValue(parse(val));
226
268
  return {
227
269
  parseEnv: wrap,
228
270
  parseVal: wrap,
229
271
  defaultValue: new SecretValue(parse(undefined)),
230
- isBoolean: true,
231
272
  };
232
273
  }
233
274
 
234
- /** Parses an env var as boolean. Returns true only if value is 1, true, or TRUE. */
235
- export function parseBooleanEnv(val: string | undefined): boolean {
236
- return val !== undefined && ['1', 'true', 'TRUE'].includes(val);
237
- }
275
+ export { parseBooleanEnv } from './parse-env.js';
238
276
 
239
- export function secretStringConfigHelper(): Required<
240
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
241
- parseVal: (val: string) => SecretValue<string | undefined>;
242
- }
243
- >;
244
- export function secretStringConfigHelper(defaultValue: string): Required<
245
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
246
- parseVal: (val: string) => SecretValue<string>;
247
- }
248
- >;
249
- export function secretStringConfigHelper(defaultValue?: string): Required<
250
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
251
- parseVal: (val: string) => SecretValue<string | typeof defaultValue>;
252
- }
253
- > {
277
+ export function secretStringConfigHelper(): {
278
+ parseEnv: (val: string) => SecretValue<string>;
279
+ parseVal: (val: string) => SecretValue<string>;
280
+ defaultValue: undefined;
281
+ };
282
+ export function secretStringConfigHelper(defaultValue: string): {
283
+ parseEnv: (val: string) => SecretValue<string>;
284
+ parseVal: (val: string) => SecretValue<string>;
285
+ defaultValue: SecretValue<string>;
286
+ };
287
+ export function secretStringConfigHelper(defaultValue?: string): {
288
+ parseEnv: (val: string) => SecretValue<string>;
289
+ parseVal: (val: string) => SecretValue<string>;
290
+ defaultValue: SecretValue<string> | undefined;
291
+ } {
254
292
  const parse = (val: string) => new SecretValue(val);
255
293
  return {
256
294
  parseEnv: parse,
257
295
  parseVal: parse,
258
296
  defaultValue: defaultValue !== undefined ? new SecretValue(defaultValue) : undefined,
259
- isBoolean: true,
260
297
  };
261
298
  }
262
299
 
263
- export function secretFrConfigHelper(): Required<
264
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
265
- parseVal: (val: string) => SecretValue<Fr | undefined>;
266
- }
267
- >;
268
- export function secretFrConfigHelper(defaultValue: Fr): Required<
269
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
270
- parseVal: (val: string) => SecretValue<Fr>;
271
- }
272
- >;
273
- export function secretFrConfigHelper(defaultValue?: Fr): Required<
274
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
275
- parseVal: (val: string) => SecretValue<Fr | typeof defaultValue>;
276
- }
277
- > {
300
+ export function secretFrConfigHelper(): {
301
+ parseEnv: (val: string) => SecretValue<Fr>;
302
+ parseVal: (val: string) => SecretValue<Fr>;
303
+ defaultValue: undefined;
304
+ };
305
+ export function secretFrConfigHelper(defaultValue: Fr): {
306
+ parseEnv: (val: string) => SecretValue<Fr>;
307
+ parseVal: (val: string) => SecretValue<Fr>;
308
+ defaultValue: SecretValue<Fr>;
309
+ };
310
+ export function secretFrConfigHelper(defaultValue?: Fr): {
311
+ parseEnv: (val: string) => SecretValue<Fr>;
312
+ parseVal: (val: string) => SecretValue<Fr>;
313
+ defaultValue: SecretValue<Fr> | undefined;
314
+ } {
278
315
  const parse = (val: string) => new SecretValue(Fr.fromHexString(val));
279
316
  return {
280
317
  parseEnv: parse,
281
318
  parseVal: parse,
282
319
  defaultValue: defaultValue !== undefined ? new SecretValue(defaultValue) : undefined,
283
- isBoolean: true,
284
320
  };
285
321
  }
286
322
 
287
- export function secretFqConfigHelper(defaultValue: Fq): Required<
288
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
289
- parseVal: (val: string) => SecretValue<Fq>;
290
- }
291
- >;
292
- export function secretFqConfigHelper(): Required<
293
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
294
- parseVal: (val: string) => SecretValue<Fq | undefined>;
295
- }
296
- >;
297
- export function secretFqConfigHelper(defaultValue?: Fq): Required<
298
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
299
- parseVal: (val: string) => SecretValue<Fq | typeof defaultValue>;
300
- }
301
- > {
323
+ export function secretFqConfigHelper(): {
324
+ parseEnv: (val: string) => SecretValue<Fq>;
325
+ parseVal: (val: string) => SecretValue<Fq>;
326
+ defaultValue: undefined;
327
+ };
328
+ export function secretFqConfigHelper(defaultValue: Fq): {
329
+ parseEnv: (val: string) => SecretValue<Fq>;
330
+ parseVal: (val: string) => SecretValue<Fq>;
331
+ defaultValue: SecretValue<Fq>;
332
+ };
333
+ export function secretFqConfigHelper(defaultValue?: Fq): {
334
+ parseEnv: (val: string) => SecretValue<Fq>;
335
+ parseVal: (val: string) => SecretValue<Fq>;
336
+ defaultValue: SecretValue<Fq> | undefined;
337
+ } {
302
338
  const parse = (val: string) => new SecretValue(Fq.fromHexString(val));
303
339
  return {
304
340
  parseEnv: parse,
305
341
  parseVal: parse,
306
- defaultValue: typeof defaultValue !== 'undefined' ? new SecretValue(defaultValue) : undefined,
307
- isBoolean: true,
342
+ defaultValue: defaultValue !== undefined ? new SecretValue(defaultValue) : undefined,
308
343
  };
309
344
  }
310
345
 
@@ -5,10 +5,13 @@ export const NetworkConfigSchema = z
5
5
  bootnodes: z.array(z.string()),
6
6
  snapshots: z.array(z.string()),
7
7
  blobFileStoreUrls: z.array(z.string()).optional(),
8
+ txCollectionFileStoreUrls: z.array(z.string()).optional(),
8
9
  registryAddress: z.string(),
9
10
  feeAssetHandlerAddress: z.string().optional(),
10
11
  l1ChainId: z.number(),
11
12
  blockDurationMs: z.number().positive().optional(),
13
+ txPublicSetupAllowListExtend: z.string().optional(),
14
+ nodeVersion: z.string().optional(),
12
15
  })
13
16
  .passthrough(); // Allow additional unknown fields to pass through
14
17
 
@@ -1,18 +1,16 @@
1
1
  export type NetworkNames =
2
2
  | 'local'
3
- | 'staging-ignition'
4
3
  | 'staging-public'
5
4
  | 'testnet'
6
5
  | 'mainnet'
7
6
  | 'next-net'
8
- | 'devnet';
7
+ | 'devnet'
8
+ | `v${number}-devnet-${number}`;
9
9
 
10
10
  export function getActiveNetworkName(name?: string): NetworkNames {
11
11
  const network = name || process.env.NETWORK;
12
12
  if (!network || network === '' || network === 'local') {
13
13
  return 'local';
14
- } else if (network === 'staging-ignition') {
15
- return network;
16
14
  } else if (network === 'staging-public') {
17
15
  return network;
18
16
  } else if (network === 'testnet' || network === 'alpha-testnet') {
@@ -23,6 +21,8 @@ export function getActiveNetworkName(name?: string): NetworkNames {
23
21
  return 'next-net';
24
22
  } else if (network === 'devnet') {
25
23
  return 'devnet';
24
+ } else if (/^v\d+-devnet-\d+$/.test(network)) {
25
+ return network as `v${number}-devnet-${number}`;
26
26
  }
27
27
  throw new Error(`Unknown network: ${network}`);
28
28
  }
@@ -0,0 +1,4 @@
1
+ /** Parses an env var as boolean. Returns true only if value is 1, true, or TRUE. */
2
+ export function parseBooleanEnv(val: string | undefined): boolean {
3
+ return val !== undefined && ['1', 'true', 'TRUE'].includes(val);
4
+ }
@@ -43,7 +43,7 @@ export class SecretValue<T> {
43
43
  /**
44
44
  * Returns a Zod schema
45
45
  */
46
- static schema<O>(valueSchema: ZodType<O, any, any>): ZodType<SecretValue<O>, any, any> {
46
+ static schema<O>(valueSchema: ZodType<O, any>): ZodType<SecretValue<O>, any> {
47
47
  return valueSchema.transform(value => new SecretValue<O>(value));
48
48
  }
49
49
  }
@@ -59,10 +59,19 @@ export class Aes128 {
59
59
  * @param iv - AES initialization vector.
60
60
  * @param key - Key to decrypt with.
61
61
  * @returns Decrypted data.
62
+ * @throws If the decrypted buffer has invalid PKCS#7 padding.
62
63
  */
63
64
  public async decryptBufferCBC(data: Uint8Array, iv: Uint8Array, key: Uint8Array) {
64
65
  const paddedBuffer = await this.decryptBufferCBCKeepPadding(data, iv, key);
65
- const paddingToRemove = paddedBuffer[paddedBuffer.length - 1];
66
- return paddedBuffer.subarray(0, paddedBuffer.length - paddingToRemove);
66
+ const paddingLen = paddedBuffer[paddedBuffer.length - 1];
67
+ if (paddingLen === 0 || paddingLen > 16) {
68
+ throw new Error(`Invalid PKCS#7 padding length: ${paddingLen}`);
69
+ }
70
+ for (let i = paddedBuffer.length - paddingLen; i < paddedBuffer.length; i++) {
71
+ if (paddedBuffer[i] !== paddingLen) {
72
+ throw new Error('Invalid PKCS#7 padding');
73
+ }
74
+ }
75
+ return paddedBuffer.subarray(0, paddedBuffer.length - paddingLen);
67
76
  }
68
77
  }
@@ -262,26 +262,3 @@ export function decryptBn254KeystoreFromObject(keystore: Bn254Keystore, password
262
262
  throw new Bn254KeystoreError(`Failed to decrypt keystore: ${String(error)}`, error as Error);
263
263
  }
264
264
  }
265
-
266
- /**
267
- * Validates that a decrypted private key matches the public key in the keystore.
268
- *
269
- * @param privateKeyHex - Decrypted private key (0x-prefixed)
270
- * @param expectedPubkey - Expected public key from keystore
271
- * @param computePublicKey - Function to compute public key from private key
272
- * @returns true if keys match, false otherwise
273
- */
274
- export function verifyBn254Keypair(
275
- privateKeyHex: string,
276
- expectedPubkey: string,
277
- computePublicKey: (privateKey: string) => string,
278
- ): boolean {
279
- try {
280
- const computedPubkey = computePublicKey(privateKeyHex);
281
- const normalizedExpected = expectedPubkey.toLowerCase().replace(/^0x/i, '');
282
- const normalizedComputed = computedPubkey.toLowerCase().replace(/^0x/i, '');
283
- return normalizedExpected === normalizedComputed;
284
- } catch {
285
- return false;
286
- }
287
- }
@@ -1,21 +1,35 @@
1
- import { BarretenbergSync } from '@aztec/bb.js';
1
+ import { Barretenberg, BarretenbergSync } from '@aztec/bb.js';
2
2
 
3
3
  import { Fr } from '../../curves/bn254/field.js';
4
4
  import { type Fieldable, serializeToFields } from '../../serialize/serialize.js';
5
5
 
6
+ const IS_BROWSER = typeof self !== 'undefined';
7
+
8
+ async function poseidon2HashFields(inputFields: Fr[]): Promise<Fr> {
9
+ if (IS_BROWSER) {
10
+ await BarretenbergSync.initSingleton();
11
+ const api = BarretenbergSync.getSingleton();
12
+ const response = api.poseidon2Hash({
13
+ inputs: inputFields.map(i => i.toBuffer()),
14
+ });
15
+ return Fr.fromBuffer(Buffer.from(response.hash));
16
+ } else {
17
+ await Barretenberg.initSingleton();
18
+ const api = Barretenberg.getSingleton();
19
+ const response = await api.poseidon2Hash({
20
+ inputs: inputFields.map(i => i.toBuffer()),
21
+ });
22
+ return Fr.fromBuffer(Buffer.from(response.hash));
23
+ }
24
+ }
25
+
6
26
  /**
7
27
  * Create a poseidon hash (field) from an array of input fields.
8
28
  * @param input - The input fields to hash.
9
29
  * @returns The poseidon hash.
10
30
  */
11
- export async function poseidon2Hash(input: Fieldable[]): Promise<Fr> {
12
- const inputFields = serializeToFields(input);
13
- await BarretenbergSync.initSingleton();
14
- const api = BarretenbergSync.getSingleton();
15
- const response = api.poseidon2Hash({
16
- inputs: inputFields.map(i => i.toBuffer()),
17
- });
18
- return Fr.fromBuffer(Buffer.from(response.hash));
31
+ export function poseidon2Hash(input: Fieldable[]): Promise<Fr> {
32
+ return poseidon2HashFields(serializeToFields(input));
19
33
  }
20
34
 
21
35
  /**
@@ -24,25 +38,10 @@ export async function poseidon2Hash(input: Fieldable[]): Promise<Fr> {
24
38
  * @param separator - The domain separator.
25
39
  * @returns The poseidon hash.
26
40
  */
27
- export async function poseidon2HashWithSeparator(input: Fieldable[], separator: number): Promise<Fr> {
41
+ export function poseidon2HashWithSeparator(input: Fieldable[], separator: number): Promise<Fr> {
28
42
  const inputFields = serializeToFields(input);
29
43
  inputFields.unshift(new Fr(separator));
30
- await BarretenbergSync.initSingleton();
31
- const api = BarretenbergSync.getSingleton();
32
- const response = api.poseidon2Hash({
33
- inputs: inputFields.map(i => i.toBuffer()),
34
- });
35
- return Fr.fromBuffer(Buffer.from(response.hash));
36
- }
37
-
38
- export async function poseidon2HashAccumulate(input: Fieldable[]): Promise<Fr> {
39
- const inputFields = serializeToFields(input);
40
- await BarretenbergSync.initSingleton();
41
- const api = BarretenbergSync.getSingleton();
42
- const response = api.poseidon2HashAccumulate({
43
- inputs: inputFields.map(i => i.toBuffer()),
44
- });
45
- return Fr.fromBuffer(Buffer.from(response.hash));
44
+ return poseidon2HashFields(inputFields);
46
45
  }
47
46
 
48
47
  /**
@@ -52,19 +51,24 @@ export async function poseidon2HashAccumulate(input: Fieldable[]): Promise<Fr> {
52
51
  */
53
52
  export async function poseidon2Permutation(input: Fieldable[]): Promise<Fr[]> {
54
53
  const inputFields = serializeToFields(input);
55
- // We'd like this assertion but it's not possible to use it in the browser.
56
- // assert(input.length === 4, 'Input state must be of size 4');
57
- await BarretenbergSync.initSingleton();
58
- const api = BarretenbergSync.getSingleton();
59
- const response = api.poseidon2Permutation({
60
- inputs: inputFields.map(i => i.toBuffer()),
61
- });
62
- // We'd like this assertion but it's not possible to use it in the browser.
63
- // assert(response.outputs.length === 4, 'Output state must be of size 4');
64
- return response.outputs.map(o => Fr.fromBuffer(Buffer.from(o)));
54
+ if (IS_BROWSER) {
55
+ await BarretenbergSync.initSingleton();
56
+ const api = BarretenbergSync.getSingleton();
57
+ const response = api.poseidon2Permutation({
58
+ inputs: inputFields.map(i => i.toBuffer()),
59
+ });
60
+ return response.outputs.map(o => Fr.fromBuffer(Buffer.from(o)));
61
+ } else {
62
+ await Barretenberg.initSingleton();
63
+ const api = Barretenberg.getSingleton();
64
+ const response = await api.poseidon2Permutation({
65
+ inputs: inputFields.map(i => i.toBuffer()),
66
+ });
67
+ return response.outputs.map(o => Fr.fromBuffer(Buffer.from(o)));
68
+ }
65
69
  }
66
70
 
67
- export async function poseidon2HashBytes(input: Buffer): Promise<Fr> {
71
+ export function poseidon2HashBytes(input: Buffer): Promise<Fr> {
68
72
  const inputFields = [];
69
73
  for (let i = 0; i < input.length; i += 31) {
70
74
  const fieldBytes = Buffer.alloc(32, 0);
@@ -75,11 +79,5 @@ export async function poseidon2HashBytes(input: Buffer): Promise<Fr> {
75
79
  inputFields.push(Fr.fromBuffer(fieldBytes));
76
80
  }
77
81
 
78
- await BarretenbergSync.initSingleton();
79
- const api = BarretenbergSync.getSingleton();
80
- const response = api.poseidon2Hash({
81
- inputs: inputFields.map(i => i.toBuffer()),
82
- });
83
-
84
- return Fr.fromBuffer(Buffer.from(response.hash));
82
+ return poseidon2HashFields(inputFields);
85
83
  }
@@ -1,4 +1,4 @@
1
- import { createLogger } from '../../log/pino-logger.js';
1
+ import { type Logger, type LoggerBindings, createLogger } from '../../log/pino-logger.js';
2
2
 
3
3
  /**
4
4
  * A number generator which is used as a source of randomness in the system. If the SEED env variable is set, the
@@ -12,11 +12,13 @@ export class RandomnessSingleton {
12
12
  private static instance: RandomnessSingleton;
13
13
 
14
14
  private counter = 0;
15
+ private log: Logger;
15
16
 
16
17
  private constructor(
17
18
  private readonly seed?: number,
18
- private readonly log = createLogger('foundation:randomness_singleton'),
19
+ bindings?: LoggerBindings,
19
20
  ) {
21
+ this.log = createLogger('foundation:randomness_singleton', bindings);
20
22
  if (seed !== undefined) {
21
23
  this.log.debug(`Using pseudo-randomness with seed: ${seed}`);
22
24
  this.counter = seed;
@@ -25,10 +27,10 @@ export class RandomnessSingleton {
25
27
  }
26
28
  }
27
29
 
28
- public static getInstance(): RandomnessSingleton {
30
+ public static getInstance(bindings?: LoggerBindings): RandomnessSingleton {
29
31
  if (!RandomnessSingleton.instance) {
30
32
  const seed = process.env.SEED ? Number(process.env.SEED) : undefined;
31
- RandomnessSingleton.instance = new RandomnessSingleton(seed);
33
+ RandomnessSingleton.instance = new RandomnessSingleton(seed, bindings);
32
34
  }
33
35
 
34
36
  return RandomnessSingleton.instance;