@aztec/bb.js 3.0.0-canary.a9708bd → 3.0.0-manual.20251030

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 (410) hide show
  1. package/README.md +13 -79
  2. package/dest/browser/barretenberg/backend.d.ts +2 -2
  3. package/dest/browser/barretenberg/backend.d.ts.map +1 -1
  4. package/dest/browser/barretenberg/backend.js +40 -25
  5. package/dest/browser/barretenberg/index.d.ts +45 -44
  6. package/dest/browser/barretenberg/index.d.ts.map +1 -1
  7. package/dest/browser/barretenberg/index.js +131 -80
  8. package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +1 -1
  9. package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
  10. package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.js +2 -2
  11. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +4 -4
  12. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
  13. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +18 -10
  14. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +3 -0
  15. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
  16. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.js +55 -14
  17. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +1 -1
  18. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.js +1 -1
  19. package/dest/browser/bb_backends/browser/index.d.ts +11 -0
  20. package/dest/browser/bb_backends/browser/index.d.ts.map +1 -0
  21. package/dest/browser/bb_backends/browser/index.js +39 -0
  22. package/dest/browser/bb_backends/index.d.ts +45 -0
  23. package/dest/browser/bb_backends/index.d.ts.map +1 -0
  24. package/dest/browser/bb_backends/index.js +15 -0
  25. package/dest/browser/bb_backends/interface.d.ts +33 -0
  26. package/dest/browser/bb_backends/interface.d.ts.map +1 -0
  27. package/dest/browser/bb_backends/interface.js +2 -0
  28. package/dest/browser/bb_backends/sync_to_async_adapter.d.ts +15 -0
  29. package/dest/browser/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
  30. package/dest/browser/bb_backends/sync_to_async_adapter.js +20 -0
  31. package/dest/browser/bb_backends/wasm.d.ts +49 -0
  32. package/dest/browser/bb_backends/wasm.d.ts.map +1 -0
  33. package/dest/browser/bb_backends/wasm.js +83 -0
  34. package/dest/browser/bbapi_exception.d.ts +7 -0
  35. package/dest/browser/bbapi_exception.d.ts.map +1 -0
  36. package/dest/browser/bbapi_exception.js +14 -0
  37. package/dest/browser/cbind/generate.js +94 -7
  38. package/dest/browser/cbind/generated/api_types.d.ts +1640 -227
  39. package/dest/browser/cbind/generated/api_types.d.ts.map +1 -1
  40. package/dest/browser/cbind/generated/api_types.js +2366 -478
  41. package/dest/browser/cbind/generated/async.d.ts +52 -13
  42. package/dest/browser/cbind/generated/async.d.ts.map +1 -1
  43. package/dest/browser/cbind/generated/async.js +586 -72
  44. package/dest/browser/cbind/generated/curve_constants.d.ts +45 -0
  45. package/dest/browser/cbind/generated/curve_constants.d.ts.map +1 -0
  46. package/dest/browser/cbind/generated/curve_constants.js +45 -0
  47. package/dest/browser/cbind/generated/sync.d.ts +53 -14
  48. package/dest/browser/cbind/generated/sync.d.ts.map +1 -1
  49. package/dest/browser/cbind/generated/sync.js +548 -72
  50. package/dest/browser/cbind/schema_compiler.d.ts +2 -4
  51. package/dest/browser/cbind/schema_compiler.d.ts.map +1 -1
  52. package/dest/browser/cbind/schema_compiler.js +97 -181
  53. package/dest/browser/index.d.ts +4 -2
  54. package/dest/browser/index.d.ts.map +1 -1
  55. package/dest/browser/index.js +5 -3
  56. package/dest/browser/serialize/index.d.ts +0 -2
  57. package/dest/browser/serialize/index.d.ts.map +1 -1
  58. package/dest/browser/serialize/index.js +1 -3
  59. package/dest/browser/serialize/serialize.d.ts +0 -35
  60. package/dest/browser/serialize/serialize.d.ts.map +1 -1
  61. package/dest/browser/serialize/serialize.js +1 -68
  62. package/dest/browser/types/fields.d.ts +6 -26
  63. package/dest/browser/types/fields.d.ts.map +1 -1
  64. package/dest/browser/types/fields.js +16 -57
  65. package/dest/browser/types/index.d.ts +0 -3
  66. package/dest/browser/types/index.d.ts.map +1 -1
  67. package/dest/browser/types/index.js +1 -4
  68. package/dest/browser/types/point.d.ts +8 -6
  69. package/dest/browser/types/point.d.ts.map +1 -1
  70. package/dest/browser/types/point.js +12 -15
  71. package/dest/node/barretenberg/__snapshots__/pedersen.test.js.snap +2 -2
  72. package/dest/node/barretenberg/__snapshots__/poseidon.test.js.snap +3 -3
  73. package/dest/node/barretenberg/backend.d.ts +2 -2
  74. package/dest/node/barretenberg/backend.d.ts.map +1 -1
  75. package/dest/node/barretenberg/backend.js +40 -25
  76. package/dest/node/barretenberg/blake2s.test.js +21 -18
  77. package/dest/node/barretenberg/index.d.ts +45 -44
  78. package/dest/node/barretenberg/index.d.ts.map +1 -1
  79. package/dest/node/barretenberg/index.js +131 -80
  80. package/dest/node/barretenberg/pedersen.test.js +24 -17
  81. package/dest/node/barretenberg/poseidon.bench.test.d.ts +2 -0
  82. package/dest/node/barretenberg/poseidon.bench.test.d.ts.map +1 -0
  83. package/dest/node/barretenberg/poseidon.bench.test.js +217 -0
  84. package/dest/node/barretenberg/poseidon.test.js +15 -15
  85. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  86. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +1 -1
  87. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
  88. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.js +2 -2
  89. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +4 -4
  90. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
  91. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +18 -10
  92. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +3 -0
  93. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
  94. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js +55 -14
  95. package/dest/node/barretenberg_wasm/index.test.js +11 -10
  96. package/dest/node/bb_backends/browser/index.d.ts +11 -0
  97. package/dest/node/bb_backends/browser/index.d.ts.map +1 -0
  98. package/dest/node/bb_backends/browser/index.js +39 -0
  99. package/dest/node/bb_backends/index.d.ts +45 -0
  100. package/dest/node/bb_backends/index.d.ts.map +1 -0
  101. package/dest/node/bb_backends/index.js +15 -0
  102. package/dest/node/bb_backends/interface.d.ts +33 -0
  103. package/dest/node/bb_backends/interface.d.ts.map +1 -0
  104. package/dest/node/bb_backends/interface.js +2 -0
  105. package/dest/node/bb_backends/node/index.d.ts +11 -0
  106. package/dest/node/bb_backends/node/index.d.ts.map +1 -0
  107. package/dest/node/bb_backends/node/index.js +80 -0
  108. package/dest/node/bb_backends/node/native_pipe.d.ts +25 -0
  109. package/dest/node/bb_backends/node/native_pipe.d.ts.map +1 -0
  110. package/dest/node/bb_backends/node/native_pipe.js +113 -0
  111. package/dest/node/bb_backends/node/native_shm.d.ts +28 -0
  112. package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -0
  113. package/dest/node/bb_backends/node/native_shm.js +150 -0
  114. package/dest/node/bb_backends/node/native_socket.d.ts +34 -0
  115. package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -0
  116. package/dest/node/bb_backends/node/native_socket.js +269 -0
  117. package/dest/node/bb_backends/node/platform.d.ts +27 -0
  118. package/dest/node/bb_backends/node/platform.d.ts.map +1 -0
  119. package/dest/node/bb_backends/node/platform.js +124 -0
  120. package/dest/node/bb_backends/sync_to_async_adapter.d.ts +15 -0
  121. package/dest/node/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
  122. package/dest/node/bb_backends/sync_to_async_adapter.js +20 -0
  123. package/dest/node/bb_backends/wasm.d.ts +49 -0
  124. package/dest/node/bb_backends/wasm.d.ts.map +1 -0
  125. package/dest/node/bb_backends/wasm.js +83 -0
  126. package/dest/node/bbapi_exception.d.ts +7 -0
  127. package/dest/node/bbapi_exception.d.ts.map +1 -0
  128. package/dest/node/bbapi_exception.js +14 -0
  129. package/dest/node/cbind/generate.js +94 -7
  130. package/dest/node/cbind/generated/api_types.d.ts +1640 -227
  131. package/dest/node/cbind/generated/api_types.d.ts.map +1 -1
  132. package/dest/node/cbind/generated/api_types.js +2366 -478
  133. package/dest/node/cbind/generated/async.d.ts +52 -13
  134. package/dest/node/cbind/generated/async.d.ts.map +1 -1
  135. package/dest/node/cbind/generated/async.js +586 -72
  136. package/dest/node/cbind/generated/curve_constants.d.ts +45 -0
  137. package/dest/node/cbind/generated/curve_constants.d.ts.map +1 -0
  138. package/dest/node/cbind/generated/curve_constants.js +45 -0
  139. package/dest/node/cbind/generated/sync.d.ts +53 -14
  140. package/dest/node/cbind/generated/sync.d.ts.map +1 -1
  141. package/dest/node/cbind/generated/sync.js +548 -72
  142. package/dest/node/cbind/schema_compiler.d.ts +2 -4
  143. package/dest/node/cbind/schema_compiler.d.ts.map +1 -1
  144. package/dest/node/cbind/schema_compiler.js +97 -181
  145. package/dest/node/index.d.ts +4 -2
  146. package/dest/node/index.d.ts.map +1 -1
  147. package/dest/node/index.js +5 -3
  148. package/dest/node/serialize/index.d.ts +0 -2
  149. package/dest/node/serialize/index.d.ts.map +1 -1
  150. package/dest/node/serialize/index.js +1 -3
  151. package/dest/node/serialize/serialize.d.ts +0 -35
  152. package/dest/node/serialize/serialize.d.ts.map +1 -1
  153. package/dest/node/serialize/serialize.js +1 -68
  154. package/dest/node/types/fields.d.ts +6 -26
  155. package/dest/node/types/fields.d.ts.map +1 -1
  156. package/dest/node/types/fields.js +16 -57
  157. package/dest/node/types/index.d.ts +0 -3
  158. package/dest/node/types/index.d.ts.map +1 -1
  159. package/dest/node/types/index.js +1 -4
  160. package/dest/node/types/point.d.ts +8 -6
  161. package/dest/node/types/point.d.ts.map +1 -1
  162. package/dest/node/types/point.js +12 -15
  163. package/dest/node-cjs/barretenberg/backend.d.ts +2 -2
  164. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
  165. package/dest/node-cjs/barretenberg/backend.js +38 -23
  166. package/dest/node-cjs/barretenberg/blake2s.test.js +19 -16
  167. package/dest/node-cjs/barretenberg/index.d.ts +45 -44
  168. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
  169. package/dest/node-cjs/barretenberg/index.js +137 -85
  170. package/dest/node-cjs/barretenberg/pedersen.test.js +24 -17
  171. package/dest/node-cjs/barretenberg/poseidon.bench.test.d.ts +2 -0
  172. package/dest/node-cjs/barretenberg/poseidon.bench.test.d.ts.map +1 -0
  173. package/dest/node-cjs/barretenberg/poseidon.bench.test.js +219 -0
  174. package/dest/node-cjs/barretenberg/poseidon.test.js +15 -15
  175. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  176. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +1 -1
  177. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
  178. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.js +2 -2
  179. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +4 -4
  180. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
  181. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +18 -10
  182. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +3 -0
  183. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
  184. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +55 -14
  185. package/dest/node-cjs/barretenberg_wasm/index.test.js +11 -10
  186. package/dest/node-cjs/bb_backends/browser/index.d.ts +11 -0
  187. package/dest/node-cjs/bb_backends/browser/index.d.ts.map +1 -0
  188. package/dest/node-cjs/bb_backends/browser/index.js +43 -0
  189. package/dest/node-cjs/bb_backends/index.d.ts +45 -0
  190. package/dest/node-cjs/bb_backends/index.d.ts.map +1 -0
  191. package/dest/node-cjs/bb_backends/index.js +18 -0
  192. package/dest/node-cjs/bb_backends/interface.d.ts +33 -0
  193. package/dest/node-cjs/bb_backends/interface.d.ts.map +1 -0
  194. package/dest/node-cjs/bb_backends/interface.js +3 -0
  195. package/dest/node-cjs/bb_backends/node/index.d.ts +11 -0
  196. package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -0
  197. package/dest/node-cjs/bb_backends/node/index.js +84 -0
  198. package/dest/node-cjs/bb_backends/node/native_pipe.d.ts +25 -0
  199. package/dest/node-cjs/bb_backends/node/native_pipe.d.ts.map +1 -0
  200. package/dest/node-cjs/bb_backends/node/native_pipe.js +117 -0
  201. package/dest/node-cjs/bb_backends/node/native_shm.d.ts +28 -0
  202. package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -0
  203. package/dest/node-cjs/bb_backends/node/native_shm.js +154 -0
  204. package/dest/node-cjs/bb_backends/node/native_socket.d.ts +34 -0
  205. package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -0
  206. package/dest/node-cjs/bb_backends/node/native_socket.js +274 -0
  207. package/dest/node-cjs/bb_backends/node/platform.d.ts +27 -0
  208. package/dest/node-cjs/bb_backends/node/platform.d.ts.map +1 -0
  209. package/dest/node-cjs/bb_backends/node/platform.js +131 -0
  210. package/dest/node-cjs/bb_backends/sync_to_async_adapter.d.ts +15 -0
  211. package/dest/node-cjs/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
  212. package/dest/node-cjs/bb_backends/sync_to_async_adapter.js +24 -0
  213. package/dest/node-cjs/bb_backends/wasm.d.ts +49 -0
  214. package/dest/node-cjs/bb_backends/wasm.d.ts.map +1 -0
  215. package/dest/node-cjs/bb_backends/wasm.js +88 -0
  216. package/dest/node-cjs/bbapi_exception.d.ts +7 -0
  217. package/dest/node-cjs/bbapi_exception.d.ts.map +1 -0
  218. package/dest/node-cjs/bbapi_exception.js +18 -0
  219. package/dest/node-cjs/cbind/generate.js +93 -6
  220. package/dest/node-cjs/cbind/generated/api_types.d.ts +1640 -227
  221. package/dest/node-cjs/cbind/generated/api_types.d.ts.map +1 -1
  222. package/dest/node-cjs/cbind/generated/api_types.js +2572 -516
  223. package/dest/node-cjs/cbind/generated/async.d.ts +52 -13
  224. package/dest/node-cjs/cbind/generated/async.d.ts.map +1 -1
  225. package/dest/node-cjs/cbind/generated/async.js +585 -71
  226. package/dest/node-cjs/cbind/generated/curve_constants.d.ts +45 -0
  227. package/dest/node-cjs/cbind/generated/curve_constants.d.ts.map +1 -0
  228. package/dest/node-cjs/cbind/generated/curve_constants.js +48 -0
  229. package/dest/node-cjs/cbind/generated/sync.d.ts +53 -14
  230. package/dest/node-cjs/cbind/generated/sync.d.ts.map +1 -1
  231. package/dest/node-cjs/cbind/generated/sync.js +547 -71
  232. package/dest/node-cjs/cbind/schema_compiler.d.ts +2 -4
  233. package/dest/node-cjs/cbind/schema_compiler.d.ts.map +1 -1
  234. package/dest/node-cjs/cbind/schema_compiler.js +97 -182
  235. package/dest/node-cjs/index.d.ts +4 -2
  236. package/dest/node-cjs/index.d.ts.map +1 -1
  237. package/dest/node-cjs/index.js +24 -9
  238. package/dest/node-cjs/serialize/index.d.ts +0 -2
  239. package/dest/node-cjs/serialize/index.d.ts.map +1 -1
  240. package/dest/node-cjs/serialize/index.js +1 -3
  241. package/dest/node-cjs/serialize/serialize.d.ts +0 -35
  242. package/dest/node-cjs/serialize/serialize.d.ts.map +1 -1
  243. package/dest/node-cjs/serialize/serialize.js +1 -79
  244. package/dest/node-cjs/types/fields.d.ts +6 -26
  245. package/dest/node-cjs/types/fields.d.ts.map +1 -1
  246. package/dest/node-cjs/types/fields.js +16 -58
  247. package/dest/node-cjs/types/index.d.ts +0 -3
  248. package/dest/node-cjs/types/index.d.ts.map +1 -1
  249. package/dest/node-cjs/types/index.js +1 -4
  250. package/dest/node-cjs/types/point.d.ts +8 -6
  251. package/dest/node-cjs/types/point.d.ts.map +1 -1
  252. package/dest/node-cjs/types/point.js +13 -16
  253. package/package.json +6 -6
  254. package/src/barretenberg/__snapshots__/pedersen.test.ts.snap +2 -2
  255. package/src/barretenberg/__snapshots__/poseidon.test.ts.snap +3 -3
  256. package/src/barretenberg/backend.ts +54 -42
  257. package/src/barretenberg/blake2s.test.ts +20 -21
  258. package/src/barretenberg/index.ts +137 -118
  259. package/src/barretenberg/pedersen.test.ts +23 -16
  260. package/src/barretenberg/poseidon.bench.test.ts +268 -0
  261. package/src/barretenberg/poseidon.test.ts +14 -14
  262. package/src/barretenberg_wasm/barretenberg_wasm_base/index.ts +3 -3
  263. package/src/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.ts +17 -9
  264. package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +67 -16
  265. package/src/barretenberg_wasm/index.test.ts +12 -11
  266. package/src/bb_backends/browser/index.ts +50 -0
  267. package/src/bb_backends/index.ts +49 -0
  268. package/src/bb_backends/interface.ts +35 -0
  269. package/src/bb_backends/node/index.ts +94 -0
  270. package/src/bb_backends/node/native_pipe.ts +127 -0
  271. package/src/bb_backends/node/native_shm.ts +171 -0
  272. package/src/bb_backends/node/native_socket.ts +312 -0
  273. package/src/bb_backends/node/platform.ts +151 -0
  274. package/src/bb_backends/sync_to_async_adapter.ts +21 -0
  275. package/src/bb_backends/wasm.ts +103 -0
  276. package/src/bbapi_exception.ts +13 -0
  277. package/src/cbind/README.md +1 -1
  278. package/src/cbind/generate.ts +99 -6
  279. package/src/cbind/schema_compiler.ts +156 -244
  280. package/src/index.ts +29 -1
  281. package/src/serialize/index.ts +0 -2
  282. package/src/serialize/serialize.ts +0 -82
  283. package/src/types/fields.ts +15 -64
  284. package/src/types/index.ts +0 -3
  285. package/src/types/point.ts +13 -19
  286. package/dest/browser/barretenberg_api/index.d.ts +0 -109
  287. package/dest/browser/barretenberg_api/index.d.ts.map +0 -1
  288. package/dest/browser/barretenberg_api/index.js +0 -699
  289. package/dest/browser/cbind/generated/native.d.ts +0 -31
  290. package/dest/browser/cbind/generated/native.d.ts.map +0 -1
  291. package/dest/browser/cbind/generated/native.js +0 -234
  292. package/dest/browser/serialize/buffer_reader.d.ts +0 -28
  293. package/dest/browser/serialize/buffer_reader.d.ts.map +0 -1
  294. package/dest/browser/serialize/buffer_reader.js +0 -66
  295. package/dest/browser/serialize/output_type.d.ts +0 -11
  296. package/dest/browser/serialize/output_type.d.ts.map +0 -1
  297. package/dest/browser/serialize/output_type.js +0 -44
  298. package/dest/browser/types/fixed_size_buffer.d.ts +0 -26
  299. package/dest/browser/types/fixed_size_buffer.d.ts.map +0 -1
  300. package/dest/browser/types/fixed_size_buffer.js +0 -51
  301. package/dest/browser/types/ptr.d.ts +0 -13
  302. package/dest/browser/types/ptr.d.ts.map +0 -1
  303. package/dest/browser/types/ptr.js +0 -19
  304. package/dest/browser/types/raw_buffer.d.ts +0 -3
  305. package/dest/browser/types/raw_buffer.d.ts.map +0 -1
  306. package/dest/browser/types/raw_buffer.js +0 -5
  307. package/dest/node/barretenberg/common.test.d.ts +0 -2
  308. package/dest/node/barretenberg/common.test.d.ts.map +0 -1
  309. package/dest/node/barretenberg/common.test.js +0 -20
  310. package/dest/node/barretenberg_api/index.d.ts +0 -109
  311. package/dest/node/barretenberg_api/index.d.ts.map +0 -1
  312. package/dest/node/barretenberg_api/index.js +0 -699
  313. package/dest/node/bindgen/function_declaration.d.ts +0 -11
  314. package/dest/node/bindgen/function_declaration.d.ts.map +0 -1
  315. package/dest/node/bindgen/function_declaration.js +0 -2
  316. package/dest/node/bindgen/index.d.ts +0 -2
  317. package/dest/node/bindgen/index.d.ts.map +0 -1
  318. package/dest/node/bindgen/index.js +0 -15
  319. package/dest/node/bindgen/mappings.d.ts +0 -4
  320. package/dest/node/bindgen/mappings.d.ts.map +0 -1
  321. package/dest/node/bindgen/mappings.js +0 -64
  322. package/dest/node/bindgen/rust.d.ts +0 -2
  323. package/dest/node/bindgen/rust.d.ts.map +0 -1
  324. package/dest/node/bindgen/rust.js +0 -43
  325. package/dest/node/bindgen/to_camel_case.d.ts +0 -2
  326. package/dest/node/bindgen/to_camel_case.d.ts.map +0 -1
  327. package/dest/node/bindgen/to_camel_case.js +0 -11
  328. package/dest/node/bindgen/typescript.d.ts +0 -2
  329. package/dest/node/bindgen/typescript.d.ts.map +0 -1
  330. package/dest/node/bindgen/typescript.js +0 -100
  331. package/dest/node/cbind/generated/native.d.ts +0 -31
  332. package/dest/node/cbind/generated/native.d.ts.map +0 -1
  333. package/dest/node/cbind/generated/native.js +0 -234
  334. package/dest/node/main.d.ts +0 -13
  335. package/dest/node/main.d.ts.map +0 -1
  336. package/dest/node/main.js +0 -459
  337. package/dest/node/serialize/buffer_reader.d.ts +0 -28
  338. package/dest/node/serialize/buffer_reader.d.ts.map +0 -1
  339. package/dest/node/serialize/buffer_reader.js +0 -66
  340. package/dest/node/serialize/output_type.d.ts +0 -11
  341. package/dest/node/serialize/output_type.d.ts.map +0 -1
  342. package/dest/node/serialize/output_type.js +0 -44
  343. package/dest/node/types/fixed_size_buffer.d.ts +0 -26
  344. package/dest/node/types/fixed_size_buffer.d.ts.map +0 -1
  345. package/dest/node/types/fixed_size_buffer.js +0 -51
  346. package/dest/node/types/ptr.d.ts +0 -13
  347. package/dest/node/types/ptr.d.ts.map +0 -1
  348. package/dest/node/types/ptr.js +0 -19
  349. package/dest/node/types/raw_buffer.d.ts +0 -3
  350. package/dest/node/types/raw_buffer.d.ts.map +0 -1
  351. package/dest/node/types/raw_buffer.js +0 -5
  352. package/dest/node-cjs/barretenberg/common.test.d.ts +0 -2
  353. package/dest/node-cjs/barretenberg/common.test.d.ts.map +0 -1
  354. package/dest/node-cjs/barretenberg/common.test.js +0 -22
  355. package/dest/node-cjs/barretenberg_api/index.d.ts +0 -109
  356. package/dest/node-cjs/barretenberg_api/index.d.ts.map +0 -1
  357. package/dest/node-cjs/barretenberg_api/index.js +0 -704
  358. package/dest/node-cjs/bindgen/function_declaration.d.ts +0 -11
  359. package/dest/node-cjs/bindgen/function_declaration.d.ts.map +0 -1
  360. package/dest/node-cjs/bindgen/function_declaration.js +0 -3
  361. package/dest/node-cjs/bindgen/index.d.ts +0 -2
  362. package/dest/node-cjs/bindgen/index.d.ts.map +0 -1
  363. package/dest/node-cjs/bindgen/index.js +0 -17
  364. package/dest/node-cjs/bindgen/mappings.d.ts +0 -4
  365. package/dest/node-cjs/bindgen/mappings.d.ts.map +0 -1
  366. package/dest/node-cjs/bindgen/mappings.js +0 -69
  367. package/dest/node-cjs/bindgen/rust.d.ts +0 -2
  368. package/dest/node-cjs/bindgen/rust.d.ts.map +0 -1
  369. package/dest/node-cjs/bindgen/rust.js +0 -47
  370. package/dest/node-cjs/bindgen/to_camel_case.d.ts +0 -2
  371. package/dest/node-cjs/bindgen/to_camel_case.d.ts.map +0 -1
  372. package/dest/node-cjs/bindgen/to_camel_case.js +0 -14
  373. package/dest/node-cjs/bindgen/typescript.d.ts +0 -2
  374. package/dest/node-cjs/bindgen/typescript.d.ts.map +0 -1
  375. package/dest/node-cjs/bindgen/typescript.js +0 -104
  376. package/dest/node-cjs/cbind/generated/native.d.ts +0 -31
  377. package/dest/node-cjs/cbind/generated/native.d.ts.map +0 -1
  378. package/dest/node-cjs/cbind/generated/native.js +0 -238
  379. package/dest/node-cjs/main.d.ts +0 -13
  380. package/dest/node-cjs/main.d.ts.map +0 -1
  381. package/dest/node-cjs/main.js +0 -470
  382. package/dest/node-cjs/serialize/buffer_reader.d.ts +0 -28
  383. package/dest/node-cjs/serialize/buffer_reader.d.ts.map +0 -1
  384. package/dest/node-cjs/serialize/buffer_reader.js +0 -70
  385. package/dest/node-cjs/serialize/output_type.d.ts +0 -11
  386. package/dest/node-cjs/serialize/output_type.d.ts.map +0 -1
  387. package/dest/node-cjs/serialize/output_type.js +0 -51
  388. package/dest/node-cjs/types/fixed_size_buffer.d.ts +0 -26
  389. package/dest/node-cjs/types/fixed_size_buffer.d.ts.map +0 -1
  390. package/dest/node-cjs/types/fixed_size_buffer.js +0 -57
  391. package/dest/node-cjs/types/ptr.d.ts +0 -13
  392. package/dest/node-cjs/types/ptr.d.ts.map +0 -1
  393. package/dest/node-cjs/types/ptr.js +0 -23
  394. package/dest/node-cjs/types/raw_buffer.d.ts +0 -3
  395. package/dest/node-cjs/types/raw_buffer.d.ts.map +0 -1
  396. package/dest/node-cjs/types/raw_buffer.js +0 -9
  397. package/src/barretenberg/common.test.ts +0 -23
  398. package/src/barretenberg_api/index.ts +0 -1216
  399. package/src/bindgen/function_declaration.ts +0 -11
  400. package/src/bindgen/index.ts +0 -17
  401. package/src/bindgen/mappings.ts +0 -67
  402. package/src/bindgen/rust.ts +0 -52
  403. package/src/bindgen/to_camel_case.ts +0 -10
  404. package/src/bindgen/typescript.ts +0 -116
  405. package/src/main.ts +0 -534
  406. package/src/serialize/buffer_reader.ts +0 -85
  407. package/src/serialize/output_type.ts +0 -53
  408. package/src/types/fixed_size_buffer.ts +0 -59
  409. package/src/types/ptr.ts +0 -20
  410. package/src/types/raw_buffer.ts +0 -3
@@ -10,7 +10,8 @@ describe('pedersen sync', () => {
10
10
  });
11
11
 
12
12
  it('pedersenHash', () => {
13
- const result = api.pedersenHash([new Fr(4n), new Fr(8n)], 7);
13
+ const response = api.pedersenHash({ inputs: [new Fr(4n).toBuffer(), new Fr(8n).toBuffer()], hashIndex: 7 });
14
+ const result = Fr.fromBuffer(response.hash);
14
15
  expect(result).toMatchSnapshot();
15
16
  });
16
17
 
@@ -19,34 +20,40 @@ describe('pedersen sync', () => {
19
20
  const fields = Array.from({ length: loops * 2 }).map(() => Fr.random());
20
21
  const t = new Timer();
21
22
  for (let i = 0; i < loops; ++i) {
22
- api.pedersenHash([fields[i * 2], fields[i * 2 + 1]], 0);
23
+ api.pedersenHash({ inputs: [fields[i * 2].toBuffer(), fields[i * 2 + 1].toBuffer()], hashIndex: 0 });
23
24
  }
24
25
  const us = t.us() / loops;
25
26
  console.log(`Executed ${loops} hashes at an average ${us}us / hash`);
26
27
  });
27
28
 
28
- it('pedersenHashes perf test', () => {
29
- const loops = 10;
30
- const numHashesPerLoop = 1024;
31
- const fields = Array.from({ length: numHashesPerLoop * 2 }).map(() => Fr.random());
32
- const t = new Timer();
33
- for (let i = 0; i < loops; ++i) {
34
- api.pedersenHashes(fields, 0);
35
- }
36
- const us = t.us() / (numHashesPerLoop * loops);
37
- console.log(`Executed ${numHashesPerLoop * loops} hashes at an average ${us}us / hash`);
38
- });
29
+ // TODO: pedersenHashes not yet in new msgpack API
30
+ // it.skip('pedersenHashes perf test', () => {
31
+ // const loops = 10;
32
+ // const numHashesPerLoop = 1024;
33
+ // const fields = Array.from({ length: numHashesPerLoop * 2 }).map(() => Fr.random());
34
+ // const t = new Timer();
35
+ // for (let i = 0; i < loops; ++i) {
36
+ // // api.pedersenHashes(fields, 0); // Not in new API yet
37
+ // }
38
+ // const us = t.us() / (numHashesPerLoop * loops);
39
+ // console.log(`Executed ${numHashesPerLoop * loops} hashes at an average ${us}us / hash`);
40
+ // });
39
41
 
40
42
  it('pedersenHashBuffer', () => {
41
43
  const input = Buffer.alloc(123);
42
44
  input.writeUint32BE(321, 0);
43
45
  input.writeUint32BE(456, 119);
44
- const r = api.pedersenHashBuffer(input, 0);
46
+ const response = api.pedersenHashBuffer({ input, hashIndex: 0 });
47
+ const r = Fr.fromBuffer(response.hash);
45
48
  expect(r).toMatchSnapshot();
46
49
  });
47
50
 
48
51
  it('pedersenCommit', () => {
49
- const result = api.pedersenCommit([new Fr(4n), new Fr(8n), new Fr(12n)], 0);
52
+ const response = api.pedersenCommit({
53
+ inputs: [new Fr(4n).toBuffer(), new Fr(8n).toBuffer(), new Fr(12n).toBuffer()],
54
+ hashIndex: 0,
55
+ });
56
+ const result = { x: Fr.fromBuffer(response.point.x), y: Fr.fromBuffer(response.point.y) };
50
57
  expect(result).toMatchSnapshot();
51
58
  });
52
59
 
@@ -55,7 +62,7 @@ describe('pedersen sync', () => {
55
62
  const fields = Array.from({ length: loops * 2 }).map(() => Fr.random());
56
63
  const t = new Timer();
57
64
  for (let i = 0; i < loops; ++i) {
58
- api.pedersenCommit([fields[i * 2], fields[i * 2 + 1]], 0);
65
+ api.pedersenCommit({ inputs: [fields[i * 2].toBuffer(), fields[i * 2 + 1].toBuffer()], hashIndex: 0 });
59
66
  }
60
67
  console.log(t.us() / loops);
61
68
  });
@@ -0,0 +1,268 @@
1
+ import { Barretenberg, BarretenbergSync } from '../index.js';
2
+ import { Fr } from '../types/fields.js';
3
+ import { serializeBufferable } from '../serialize/index.js';
4
+ import { BarretenbergWasmMain } from '../barretenberg_wasm/barretenberg_wasm_main/index.js';
5
+ import { fetchModuleAndThreads } from '../barretenberg_wasm/index.js';
6
+ import { BackendType } from './index.js';
7
+
8
+ /**
9
+ * Async API benchmark test: WASM vs Native backends with proper non-blocking I/O
10
+ *
11
+ * This test uses the async Barretenberg API which properly handles:
12
+ * - Non-blocking I/O for native backend (event-based)
13
+ * - Concurrent operations via promises
14
+ * - Better performance for native backend compared to sync API
15
+ */
16
+ describe('poseidon2Hash benchmark (Async API): WASM vs Native', () => {
17
+ const ITERATIONS = 10000;
18
+ const SIZES = [2, 4, 8];
19
+
20
+ let wasmApi: Barretenberg | null = null;
21
+ let nativeSocketApi: Barretenberg | null = null;
22
+ let nativeShmApi: Barretenberg | null = null;
23
+ let nativeShmSyncApi: BarretenbergSync | null = null;
24
+ let wasm: BarretenbergWasmMain;
25
+
26
+ beforeAll(async () => {
27
+ // Setup direct WASM access for baseline benchmark (always required)
28
+ wasm = new BarretenbergWasmMain();
29
+ const { module } = await fetchModuleAndThreads(1);
30
+ await wasm.init(module, 1);
31
+
32
+ // Setup WASM API
33
+ try {
34
+ wasmApi = await Barretenberg.new({ backend: BackendType.Wasm, threads: 1 });
35
+ } catch (error) {
36
+ console.warn('Failed to initialize WASM backend:', error instanceof Error ? error.message : String(error));
37
+ }
38
+
39
+ // Setup native socket API
40
+ try {
41
+ nativeSocketApi = await Barretenberg.new({ backend: BackendType.NativeUnixSocket, threads: 1 });
42
+ } catch (error) {
43
+ console.warn(
44
+ 'Failed to initialize Native Socket backend:',
45
+ error instanceof Error ? error.message : String(error),
46
+ );
47
+ }
48
+
49
+ // Setup native shared memory API (async)
50
+ try {
51
+ nativeShmApi = await Barretenberg.new({ backend: BackendType.NativeSharedMemory, threads: 1 });
52
+ } catch (error) {
53
+ console.warn(
54
+ 'Failed to initialize Native Shared Memory (async) backend:',
55
+ error instanceof Error ? error.message : String(error),
56
+ );
57
+ }
58
+
59
+ // Setup native shared memory API (sync)
60
+ try {
61
+ nativeShmSyncApi = await BarretenbergSync.new({ backend: BackendType.NativeSharedMemory, threads: 1 });
62
+ } catch (error) {
63
+ console.warn(
64
+ 'Failed to initialize Native Shared Memory (sync) backend:',
65
+ error instanceof Error ? error.message : String(error),
66
+ );
67
+ }
68
+ }, 20000);
69
+
70
+ afterAll(async () => {
71
+ await wasm.destroy();
72
+ if (wasmApi) {
73
+ await wasmApi.destroy();
74
+ }
75
+ if (nativeSocketApi) {
76
+ await nativeSocketApi.destroy();
77
+ }
78
+ if (nativeShmApi) {
79
+ await nativeShmApi.destroy();
80
+ }
81
+ if (nativeShmSyncApi) {
82
+ nativeShmSyncApi.destroy();
83
+ }
84
+ });
85
+
86
+ async function directPoseidon2Hash(inputsBuffer: Fr[]): Promise<Fr> {
87
+ const inArgs = [inputsBuffer].map(serializeBufferable);
88
+ const outTypes = [Fr];
89
+ const result = wasm.callWasmExport(
90
+ 'poseidon2_hash',
91
+ inArgs,
92
+ outTypes.map(t => t.SIZE_IN_BYTES),
93
+ );
94
+ const out = result.map((r, i) => outTypes[i].fromBuffer(r));
95
+ return Promise.resolve(out[0]);
96
+ }
97
+
98
+ it.each(SIZES)('benchmark with %p field elements', async size => {
99
+ // Generate random inputs
100
+ const inputs = Array(size)
101
+ .fill(0)
102
+ .map(() => Fr.random());
103
+
104
+ // Benchmark 1: Direct WASM (baseline - always available)
105
+ const directStart = performance.now();
106
+ for (let i = 0; i < ITERATIONS; i++) {
107
+ await directPoseidon2Hash(inputs);
108
+ }
109
+ const directTime = performance.now() - directStart;
110
+
111
+ // Benchmark 2: WASM (async)
112
+ let wasmTime = 0;
113
+ if (wasmApi) {
114
+ const wasmStart = performance.now();
115
+ for (let i = 0; i < ITERATIONS; i++) {
116
+ await wasmApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
117
+ }
118
+ wasmTime = performance.now() - wasmStart;
119
+ }
120
+
121
+ // Benchmark 3: Native Socket (async with non-blocking I/O)
122
+ let nativeSocketTime = 0;
123
+ if (nativeSocketApi) {
124
+ const nativeSocketStart = performance.now();
125
+ for (let i = 0; i < ITERATIONS; i++) {
126
+ await nativeSocketApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
127
+ }
128
+ nativeSocketTime = performance.now() - nativeSocketStart;
129
+ }
130
+
131
+ // Benchmark 4: Native Shared Memory (async)
132
+ let nativeShmTime = 0;
133
+ if (nativeShmApi) {
134
+ const nativeShmStart = performance.now();
135
+ for (let i = 0; i < ITERATIONS; i++) {
136
+ await nativeShmApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
137
+ }
138
+ nativeShmTime = performance.now() - nativeShmStart;
139
+ }
140
+
141
+ // Benchmark 5: Native Shared Memory (sync)
142
+ let nativeShmSyncTime = 0;
143
+ if (nativeShmSyncApi) {
144
+ const nativeShmSyncStart = performance.now();
145
+ for (let i = 0; i < ITERATIONS; i++) {
146
+ nativeShmSyncApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
147
+ }
148
+ nativeShmSyncTime = performance.now() - nativeShmSyncStart;
149
+ }
150
+
151
+ // Calculate metrics (all relative to WASM baseline)
152
+ const directOverhead = ((directTime - wasmTime) / wasmTime) * 100;
153
+ const nativeSocketOverhead = ((nativeSocketTime - wasmTime) / wasmTime) * 100;
154
+ const nativeShmOverhead = ((nativeShmTime - wasmTime) / wasmTime) * 100;
155
+ const nativeShmSyncOverhead = ((nativeShmSyncTime - wasmTime) / wasmTime) * 100;
156
+
157
+ const avgDirectTimeUs = (directTime / ITERATIONS) * 1000; // microseconds
158
+ const avgWasmTimeUs = (wasmTime / ITERATIONS) * 1000;
159
+ const avgNativeSocketTimeUs = (nativeSocketTime / ITERATIONS) * 1000;
160
+ const avgNativeShmTimeUs = (nativeShmTime / ITERATIONS) * 1000;
161
+ const avgNativeShmSyncTimeUs = (nativeShmSyncTime / ITERATIONS) * 1000;
162
+
163
+ process.stdout.write(`┌─ Size ${size.toString().padStart(3)} field elements ──────────────────────────────────┐\n`);
164
+ const formatOverhead = (overhead: number): string => {
165
+ const sign = overhead >= 0 ? '+' : '-';
166
+ const value = Math.abs(overhead).toFixed(1).padStart(6);
167
+ return `${sign}${value}%`;
168
+ };
169
+
170
+ if (wasmApi) {
171
+ process.stdout.write(
172
+ `│ WASM: ${wasmTime.toFixed(2).padStart(8)}ms (${avgWasmTimeUs.toFixed(2).padStart(7)}µs/call) [baseline] │\n`,
173
+ );
174
+ } else {
175
+ process.stdout.write(`│ WASM: unavailable │\n`);
176
+ }
177
+
178
+ process.stdout.write(
179
+ `│ Direct WASM: ${directTime.toFixed(2).padStart(8)}ms (${avgDirectTimeUs.toFixed(2).padStart(7)}µs/call) ${formatOverhead(directOverhead)} │\n`,
180
+ );
181
+
182
+ if (nativeSocketApi) {
183
+ process.stdout.write(
184
+ `│ Native Socket: ${nativeSocketTime.toFixed(2).padStart(8)}ms (${avgNativeSocketTimeUs.toFixed(2).padStart(7)}µs/call) ${formatOverhead(nativeSocketOverhead)} │\n`,
185
+ );
186
+ } else {
187
+ process.stdout.write(`│ Native Socket: unavailable │\n`);
188
+ }
189
+
190
+ if (nativeShmApi) {
191
+ process.stdout.write(
192
+ `│ Native Shared: ${nativeShmTime.toFixed(2).padStart(8)}ms (${avgNativeShmTimeUs.toFixed(2).padStart(7)}µs/call) ${formatOverhead(nativeShmOverhead)} │\n`,
193
+ );
194
+ } else {
195
+ process.stdout.write(`│ Native Shared: unavailable │\n`);
196
+ }
197
+
198
+ if (nativeShmSyncApi) {
199
+ process.stdout.write(
200
+ `│ Native Shared Sync: ${nativeShmSyncTime.toFixed(2).padStart(8)}ms (${avgNativeShmSyncTimeUs.toFixed(2).padStart(7)}µs/call) ${formatOverhead(nativeShmSyncOverhead)} │\n`,
201
+ );
202
+ } else {
203
+ process.stdout.write(`│ Native Shared Sync: unavailable │\n`);
204
+ }
205
+
206
+ process.stdout.write(`└────────────────────────────────────────────────────────────┘\n`);
207
+
208
+ // Sanity check: verify all backends produce same result as direct WASM
209
+ const directResult = await directPoseidon2Hash(inputs);
210
+
211
+ if (wasmApi) {
212
+ const wasmResult = await wasmApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
213
+ expect(Buffer.from(wasmResult.hash)).toEqual(directResult.toBuffer());
214
+ }
215
+
216
+ if (nativeSocketApi) {
217
+ const nativeSocketResult = await nativeSocketApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
218
+ expect(Buffer.from(nativeSocketResult.hash)).toEqual(directResult.toBuffer());
219
+ }
220
+
221
+ if (nativeShmApi) {
222
+ const nativeShmResult = await nativeShmApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
223
+ expect(Buffer.from(nativeShmResult.hash)).toEqual(directResult.toBuffer());
224
+ }
225
+
226
+ if (nativeShmSyncApi) {
227
+ const nativeShmSyncResult = nativeShmSyncApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
228
+ expect(Buffer.from(nativeShmSyncResult.hash)).toEqual(directResult.toBuffer());
229
+ }
230
+
231
+ // Test always passes, this is just for measuring performance
232
+ expect(true).toBe(true);
233
+ });
234
+
235
+ const TEST_VECTORS = [1, 2, 3, 5, 10, 50, 100];
236
+ const NUM_RANDOM_TESTS = 10;
237
+
238
+ it.each(TEST_VECTORS)('produces identical results for %p field elements', async size => {
239
+ // Test with multiple random input vectors
240
+ for (let test = 0; test < NUM_RANDOM_TESTS; test++) {
241
+ const inputs = Array(size)
242
+ .fill(0)
243
+ .map(() => Fr.random());
244
+
245
+ const directResult = await directPoseidon2Hash(inputs);
246
+
247
+ if (wasmApi) {
248
+ const wasmResult = await wasmApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
249
+ expect(Buffer.from(wasmResult.hash)).toEqual(directResult.toBuffer());
250
+ }
251
+
252
+ if (nativeSocketApi) {
253
+ const nativeSocketResult = await nativeSocketApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
254
+ expect(Buffer.from(nativeSocketResult.hash)).toEqual(directResult.toBuffer());
255
+ }
256
+
257
+ if (nativeShmApi) {
258
+ const nativeShmResult = await nativeShmApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
259
+ expect(Buffer.from(nativeShmResult.hash)).toEqual(directResult.toBuffer());
260
+ }
261
+
262
+ if (nativeShmSyncApi) {
263
+ const nativeShmSyncResult = nativeShmSyncApi.poseidon2Hash({ inputs: inputs.map(fr => fr.toBuffer()) });
264
+ expect(Buffer.from(nativeShmSyncResult.hash)).toEqual(directResult.toBuffer());
265
+ }
266
+ }
267
+ });
268
+ });
@@ -10,30 +10,30 @@ describe('poseidon sync', () => {
10
10
  });
11
11
 
12
12
  it('poseidonHash', () => {
13
- const result = api.poseidon2Hash([new Fr(4n), new Fr(8n)]);
13
+ const result = api.poseidon2Hash({ inputs: [new Fr(4n).toBuffer(), new Fr(8n).toBuffer()] });
14
14
  expect(result).toMatchSnapshot();
15
15
  });
16
16
 
17
17
  it('poseidonHash perf test', () => {
18
18
  const loops = 1000;
19
- const fields = Array.from({ length: loops * 2 }).map(() => Fr.random());
19
+ const fields = Array.from({ length: loops * 2 }).map(() => Fr.random().toBuffer());
20
20
  const t = new Timer();
21
21
  for (let i = 0; i < loops; ++i) {
22
- api.poseidon2Hash([fields[i * 2], fields[i * 2 + 1]]);
22
+ api.poseidon2Hash({ inputs: [fields[i * 2], fields[i * 2 + 1]] });
23
23
  }
24
24
  const us = t.us() / loops;
25
25
  console.log(`Executed ${loops} hashes at an average ${us}us / hash`);
26
26
  });
27
27
 
28
- it('poseidonHashes perf test', () => {
29
- const loops = 10;
30
- const numHashesPerLoop = 1024;
31
- const fields = Array.from({ length: numHashesPerLoop * 2 }).map(() => Fr.random());
32
- const t = new Timer();
33
- for (let i = 0; i < loops; ++i) {
34
- api.poseidon2Hashes(fields);
35
- }
36
- const us = t.us() / (numHashesPerLoop * loops);
37
- console.log(`Executed ${numHashesPerLoop * loops} hashes at an average ${us}us / hash`);
38
- });
28
+ // it('poseidonHashes perf test', () => {
29
+ // const loops = 10;
30
+ // const numHashesPerLoop = 1024;
31
+ // const fields = Array.from({ length: numHashesPerLoop * 2 }).map(() => Fr.random());
32
+ // const t = new Timer();
33
+ // for (let i = 0; i < loops; ++i) {
34
+ // api.poseidon2Hashes(fields);
35
+ // }
36
+ // const us = t.us() / (numHashesPerLoop * loops);
37
+ // console.log(`Executed ${numHashesPerLoop * loops} hashes at an average ${us}us / hash`);
38
+ // });
39
39
  });
@@ -121,12 +121,12 @@ export class BarretenbergWasmBase {
121
121
  mem.set(arr, offset);
122
122
  }
123
123
 
124
- // PRIVATE METHODS
125
-
126
- private getMemory() {
124
+ public getMemory() {
127
125
  return new Uint8Array(this.memory.buffer);
128
126
  }
129
127
 
128
+ // PRIVATE METHODS
129
+
130
130
  private stringFromAddress(addr: number) {
131
131
  addr = addr >>> 0;
132
132
  const m = this.getMemory();
@@ -5,25 +5,29 @@ import { type BarretenbergWasmMain } from './index.js';
5
5
  * The WASM memory layout has 1024 bytes of unused "scratch" space at the start (addresses 0-1023).
6
6
  * We can leverage this for IO rather than making expensive bb_malloc bb_free calls.
7
7
  * Heap allocations will be created for input/output args that don't fit into the scratch space.
8
- * Input and output args can use the same scratch space as it's assume all input reads will be performed before any
9
- * output writes are performed.
8
+ * Input scratch grows UP from 0, output scratch grows DOWN from 1024, meeting in the middle.
9
+ * This maximizes space utilization while preventing overlap.
10
10
  */
11
11
  export class HeapAllocator {
12
12
  private allocs: number[] = [];
13
- private inScratchRemaining = 1024;
14
- private outScratchRemaining = 1024;
13
+ private inScratchPtr = 0; // Next input starts here, grows UP
14
+ private outScratchPtr = 1024; // Next output ends here, grows DOWN
15
15
 
16
16
  constructor(private wasm: BarretenbergWasmMain) {}
17
17
 
18
18
  getInputs(buffers: (Uint8Array | number)[]) {
19
19
  return buffers.map(bufOrNum => {
20
20
  if (typeof bufOrNum === 'object') {
21
- if (bufOrNum.length <= this.inScratchRemaining) {
22
- const ptr = (this.inScratchRemaining -= bufOrNum.length);
21
+ const size = bufOrNum.length;
22
+ // Check if there's room in scratch space (inputs grow up, outputs grow down)
23
+ if (this.inScratchPtr + size <= this.outScratchPtr) {
24
+ const ptr = this.inScratchPtr;
25
+ this.inScratchPtr += size; // Grow UP
23
26
  this.wasm.writeMemory(ptr, bufOrNum);
24
27
  return ptr;
25
28
  } else {
26
- const ptr = this.wasm.call('bbmalloc', bufOrNum.length);
29
+ // Fall back to heap allocation
30
+ const ptr = this.wasm.call('bbmalloc', size);
27
31
  this.wasm.writeMemory(ptr, bufOrNum);
28
32
  this.allocs.push(ptr);
29
33
  return ptr;
@@ -40,9 +44,12 @@ export class HeapAllocator {
40
44
  // WARNING: 4 only works with WASM as it has 32 bit memory.
41
45
  const size = len || 4;
42
46
 
43
- if (size <= this.outScratchRemaining) {
44
- return (this.outScratchRemaining -= size);
47
+ // Check if there's room in scratch space (inputs grow up, outputs grow down)
48
+ if (this.inScratchPtr + size <= this.outScratchPtr) {
49
+ this.outScratchPtr -= size; // Grow DOWN
50
+ return this.outScratchPtr;
45
51
  } else {
52
+ // Fall back to heap allocation
46
53
  const ptr = this.wasm.call('bbmalloc', size);
47
54
  this.allocs.push(ptr);
48
55
  return ptr;
@@ -51,6 +58,7 @@ export class HeapAllocator {
51
58
  }
52
59
 
53
60
  addOutputPtr(ptr: number) {
61
+ // Only add to dealloc list if it's a heap allocation (not in scratch space 0-1023)
54
62
  if (ptr >= 1024) {
55
63
  this.allocs.push(ptr);
56
64
  }
@@ -19,6 +19,11 @@ export class BarretenbergWasmMain extends BarretenbergWasmBase {
19
19
  private nextWorker = 0;
20
20
  private nextThreadId = 1;
21
21
 
22
+ // Pre-allocated scratch buffers for msgpack I/O to avoid malloc/free overhead
23
+ private msgpackInputScratch: number = 0; // 8MB input buffer
24
+ private msgpackOutputScratch: number = 0; // 8MB output buffer
25
+ private readonly MSGPACK_SCRATCH_SIZE = 1024 * 1024 * 8; // 8MB
26
+
22
27
  public getNumThreads() {
23
28
  return this.workers.length + 1;
24
29
  }
@@ -30,7 +35,7 @@ export class BarretenbergWasmMain extends BarretenbergWasmBase {
30
35
  module: WebAssembly.Module,
31
36
  threads = Math.min(getNumCpu(), BarretenbergWasmMain.MAX_THREADS),
32
37
  logger: (msg: string) => void = createDebugLogger('bb_wasm'),
33
- initial = 32,
38
+ initial = 33,
34
39
  maximum = this.getDefaultMaximumMemoryPages(),
35
40
  ) {
36
41
  this.logger = logger;
@@ -54,6 +59,14 @@ export class BarretenbergWasmMain extends BarretenbergWasmBase {
54
59
  // Init all global/static data.
55
60
  this.call('_initialize');
56
61
 
62
+ // Allocate dedicated msgpack scratch buffers (never freed, reused for all msgpack calls)
63
+ this.msgpackInputScratch = this.call('bbmalloc', this.MSGPACK_SCRATCH_SIZE);
64
+ this.msgpackOutputScratch = this.call('bbmalloc', this.MSGPACK_SCRATCH_SIZE);
65
+ this.logger(
66
+ `Allocated msgpack scratch buffers: ` +
67
+ `input @ ${this.msgpackInputScratch}, output @ ${this.msgpackOutputScratch} (${this.MSGPACK_SCRATCH_SIZE} bytes each)`,
68
+ );
69
+
57
70
  // Create worker threads. Create 1 less than requested, as main thread counts as a thread.
58
71
  if (threads > 1) {
59
72
  this.logger(`Creating ${threads} worker threads`);
@@ -138,25 +151,63 @@ export class BarretenbergWasmMain extends BarretenbergWasmBase {
138
151
  }
139
152
 
140
153
  cbindCall(cbind: string, inputBuffer: Uint8Array): any {
141
- const outputSizePtr = this.call('bbmalloc', 4);
142
- const outputMsgpackPtr = this.call('bbmalloc', 4);
154
+ const needsCustomInputBuffer = inputBuffer.length > this.MSGPACK_SCRATCH_SIZE;
155
+ let inputPtr: number;
156
+
157
+ if (needsCustomInputBuffer) {
158
+ // Allocate temporary buffer for oversized input
159
+ inputPtr = this.call('bbmalloc', inputBuffer.length);
160
+ } else {
161
+ // Use pre-allocated scratch buffer
162
+ inputPtr = this.msgpackInputScratch;
163
+ }
143
164
 
144
- const inputPtr = this.call('bbmalloc', inputBuffer.length);
165
+ // Write input to buffer
145
166
  this.writeMemory(inputPtr, inputBuffer);
146
- this.call(cbind, inputPtr, inputBuffer.length, outputMsgpackPtr, outputSizePtr);
147
167
 
148
- const readPtr32 = (ptr32: number) => {
149
- const dataView = new DataView(this.getMemorySlice(ptr32, ptr32 + 4).buffer);
150
- return dataView.getUint32(0, true);
151
- };
168
+ // Setup output scratch buffer with IN-OUT parameter pattern:
169
+ // Reserve 8 bytes for metadata (pointer + size), rest is scratch data space
170
+ const METADATA_SIZE = 8;
171
+ const outputPtrLocation = this.msgpackOutputScratch;
172
+ const outputSizeLocation = this.msgpackOutputScratch + 4;
173
+ const scratchDataPtr = this.msgpackOutputScratch + METADATA_SIZE;
174
+ const scratchDataSize = this.MSGPACK_SCRATCH_SIZE - METADATA_SIZE;
175
+
176
+ // Get memory and create DataView for writing IN values
177
+ let mem = this.getMemory();
178
+ let view = new DataView(mem.buffer);
179
+
180
+ // Write IN values: provide scratch buffer pointer and size to C++
181
+ view.setUint32(outputPtrLocation, scratchDataPtr, true);
182
+ view.setUint32(outputSizeLocation, scratchDataSize, true);
183
+
184
+ // Call WASM
185
+ this.call(cbind, inputPtr, inputBuffer.length, outputPtrLocation, outputSizeLocation);
186
+
187
+ // Free custom input buffer if allocated
188
+ if (needsCustomInputBuffer) {
189
+ this.call('bbfree', inputPtr);
190
+ }
191
+
192
+ // Re-fetch memory after WASM call, as the buffer may have been detached if memory grew
193
+ mem = this.getMemory();
194
+ view = new DataView(mem.buffer);
195
+
196
+ // Read OUT values: C++ returns actual buffer pointer and size
197
+ const outputDataPtr = view.getUint32(outputPtrLocation, true);
198
+ const outputSize = view.getUint32(outputSizeLocation, true);
199
+
200
+ // Check if C++ used scratch (pointer unchanged) or allocated (pointer changed)
201
+ const usedScratch = outputDataPtr === scratchDataPtr;
202
+
203
+ // Copy output data from WASM memory
204
+ const encodedResult = this.getMemorySlice(outputDataPtr, outputDataPtr + outputSize);
205
+
206
+ // Only free if C++ allocated beyond scratch
207
+ if (!usedScratch) {
208
+ this.call('bbfree', outputDataPtr);
209
+ }
152
210
 
153
- const encodedResult = this.getMemorySlice(
154
- readPtr32(outputMsgpackPtr),
155
- readPtr32(outputMsgpackPtr) + readPtr32(outputSizePtr),
156
- );
157
- this.call('bbfree', inputPtr);
158
- this.call('bbfree', outputSizePtr);
159
- this.call('bbfree', outputMsgpackPtr);
160
211
  return encodedResult;
161
212
  }
162
213
  }
@@ -1,17 +1,23 @@
1
- import { BarretenbergWasmMain, BarretenbergWasmMainWorker } from './barretenberg_wasm_main/index.js';
2
- import { Barretenberg } from '../index.js';
1
+ import { createMainWorker } from '../barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js';
2
+ import { BarretenbergWasmMainWorker } from '../barretenberg_wasm/barretenberg_wasm_main/index.js';
3
+ import { getRemoteBarretenbergWasm } from '../barretenberg_wasm/helpers/index.js';
4
+ import { fetchModuleAndThreads } from '../barretenberg_wasm/index.js';
5
+ import { Worker } from 'worker_threads';
3
6
 
4
7
  describe('barretenberg wasm', () => {
5
- let api: Barretenberg;
6
8
  let wasm: BarretenbergWasmMainWorker;
9
+ let worker: Worker;
7
10
 
8
11
  beforeAll(async () => {
9
- api = await Barretenberg.new({ threads: 2 });
10
- wasm = api.getWasm();
12
+ worker = await createMainWorker();
13
+ wasm = getRemoteBarretenbergWasm<BarretenbergWasmMainWorker>(worker);
14
+ const { module, threads } = await fetchModuleAndThreads(2);
15
+ await wasm.init(module, threads);
11
16
  }, 20000);
12
17
 
13
18
  afterAll(async () => {
14
- await api.destroy();
19
+ await wasm.destroy();
20
+ await worker.terminate();
15
21
  });
16
22
 
17
23
  it('should new malloc, transfer and slice mem', async () => {
@@ -28,11 +34,6 @@ describe('barretenberg wasm', () => {
28
34
  await expect(() => wasm.call('test_abort')).rejects.toThrow();
29
35
  });
30
36
 
31
- it('test c/c++ stdout/stderr', async () => {
32
- // We're checking we don't crash, but you can manually confirm you see log lines handled by logstr.
33
- await wasm.call('test_stdout_stderr');
34
- });
35
-
36
37
  it('should new malloc, transfer and slice mem', async () => {
37
38
  const length = 1024;
38
39
  const ptr = await wasm.call('bbmalloc', length);
@@ -0,0 +1,50 @@
1
+ import { BarretenbergWasmSyncBackend, BarretenbergWasmAsyncBackend } from '../wasm.js';
2
+ import { Barretenberg, BarretenbergSync } from '../../barretenberg/index.js';
3
+ import { BackendOptions, BackendType } from '../index.js';
4
+
5
+ /**
6
+ * Create backend of specific type (no fallback)
7
+ */
8
+ export async function createAsyncBackend(
9
+ type: BackendType,
10
+ options: BackendOptions,
11
+ logger: (msg: string) => void,
12
+ ): Promise<Barretenberg> {
13
+ switch (type) {
14
+ case BackendType.Wasm:
15
+ case BackendType.WasmWorker: {
16
+ const useWorker = type === BackendType.WasmWorker;
17
+ logger(`Using WASM backend (worker: ${useWorker})`);
18
+ const wasm = await BarretenbergWasmAsyncBackend.new({
19
+ threads: options.threads,
20
+ wasmPath: options.wasmPath,
21
+ logger,
22
+ memory: options.memory,
23
+ useWorker,
24
+ });
25
+ return new Barretenberg(wasm, options);
26
+ }
27
+
28
+ default:
29
+ throw new Error(`Unknown backend type: ${type}`);
30
+ }
31
+ }
32
+
33
+ /**
34
+ * Create backend of specific type (no fallback)
35
+ */
36
+ export async function createSyncBackend(
37
+ type: BackendType,
38
+ options: BackendOptions,
39
+ logger: (msg: string) => void,
40
+ ): Promise<BarretenbergSync> {
41
+ switch (type) {
42
+ case BackendType.Wasm:
43
+ logger('Using WASM backend');
44
+ const wasm = await BarretenbergWasmSyncBackend.new(options.wasmPath, logger);
45
+ return new BarretenbergSync(wasm);
46
+
47
+ default:
48
+ throw new Error(`Backend ${type} not supported for BarretenbergSync`);
49
+ }
50
+ }