@aztec/bb.js 3.0.0-nightly.20251015 → 3.0.0-nightly.20251022

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 (368) hide show
  1. package/README.md +12 -78
  2. package/dest/browser/barretenberg/backend.d.ts +1 -1
  3. package/dest/browser/barretenberg/backend.d.ts.map +1 -1
  4. package/dest/browser/barretenberg/backend.js +21 -13
  5. package/dest/browser/barretenberg/index.d.ts +44 -43
  6. package/dest/browser/barretenberg/index.d.ts.map +1 -1
  7. package/dest/browser/barretenberg/index.js +130 -79
  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 +51 -13
  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 +56 -0
  32. package/dest/browser/bb_backends/wasm.d.ts.map +1 -0
  33. package/dest/browser/bb_backends/wasm.js +90 -0
  34. package/dest/browser/cbind/generate.js +2 -7
  35. package/dest/browser/cbind/generated/api_types.d.ts +1167 -0
  36. package/dest/browser/cbind/generated/api_types.d.ts.map +1 -1
  37. package/dest/browser/cbind/generated/api_types.js +1609 -47
  38. package/dest/browser/cbind/generated/async.d.ts +38 -4
  39. package/dest/browser/cbind/generated/async.d.ts.map +1 -1
  40. package/dest/browser/cbind/generated/async.js +327 -21
  41. package/dest/browser/cbind/generated/sync.d.ts +39 -5
  42. package/dest/browser/cbind/generated/sync.d.ts.map +1 -1
  43. package/dest/browser/cbind/generated/sync.js +294 -21
  44. package/dest/browser/cbind/schema_compiler.d.ts +2 -4
  45. package/dest/browser/cbind/schema_compiler.d.ts.map +1 -1
  46. package/dest/browser/cbind/schema_compiler.js +74 -178
  47. package/dest/browser/index.d.ts +2 -2
  48. package/dest/browser/index.d.ts.map +1 -1
  49. package/dest/browser/index.js +3 -3
  50. package/dest/browser/serialize/index.d.ts +0 -1
  51. package/dest/browser/serialize/index.d.ts.map +1 -1
  52. package/dest/browser/serialize/index.js +1 -2
  53. package/dest/browser/serialize/serialize.d.ts +0 -35
  54. package/dest/browser/serialize/serialize.d.ts.map +1 -1
  55. package/dest/browser/serialize/serialize.js +1 -68
  56. package/dest/browser/types/fields.d.ts.map +1 -1
  57. package/dest/browser/types/fields.js +3 -3
  58. package/dest/browser/types/index.d.ts +0 -3
  59. package/dest/browser/types/index.d.ts.map +1 -1
  60. package/dest/browser/types/index.js +1 -4
  61. package/dest/node/barretenberg/__snapshots__/pedersen.test.js.snap +2 -2
  62. package/dest/node/barretenberg/__snapshots__/poseidon.test.js.snap +3 -3
  63. package/dest/node/barretenberg/backend.d.ts +1 -1
  64. package/dest/node/barretenberg/backend.d.ts.map +1 -1
  65. package/dest/node/barretenberg/backend.js +21 -13
  66. package/dest/node/barretenberg/blake2s.test.js +21 -18
  67. package/dest/node/barretenberg/index.d.ts +44 -43
  68. package/dest/node/barretenberg/index.d.ts.map +1 -1
  69. package/dest/node/barretenberg/index.js +130 -79
  70. package/dest/node/barretenberg/pedersen.test.js +24 -17
  71. package/dest/node/barretenberg/poseidon.bench.test.d.ts +2 -0
  72. package/dest/node/barretenberg/poseidon.bench.test.d.ts.map +1 -0
  73. package/dest/node/barretenberg/poseidon.bench.test.js +216 -0
  74. package/dest/node/barretenberg/poseidon.test.js +15 -15
  75. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  76. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +1 -1
  77. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
  78. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.js +2 -2
  79. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +4 -4
  80. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
  81. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +18 -10
  82. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +3 -0
  83. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
  84. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js +51 -13
  85. package/dest/node/barretenberg_wasm/index.test.js +11 -10
  86. package/dest/node/bb_backends/browser/index.d.ts +11 -0
  87. package/dest/node/bb_backends/browser/index.d.ts.map +1 -0
  88. package/dest/node/bb_backends/browser/index.js +39 -0
  89. package/dest/node/bb_backends/index.d.ts +45 -0
  90. package/dest/node/bb_backends/index.d.ts.map +1 -0
  91. package/dest/node/bb_backends/index.js +15 -0
  92. package/dest/node/bb_backends/interface.d.ts +33 -0
  93. package/dest/node/bb_backends/interface.d.ts.map +1 -0
  94. package/dest/node/bb_backends/interface.js +2 -0
  95. package/dest/node/bb_backends/node/index.d.ts +11 -0
  96. package/dest/node/bb_backends/node/index.d.ts.map +1 -0
  97. package/dest/node/bb_backends/node/index.js +80 -0
  98. package/dest/node/bb_backends/node/native_pipe.d.ts +25 -0
  99. package/dest/node/bb_backends/node/native_pipe.d.ts.map +1 -0
  100. package/dest/node/bb_backends/node/native_pipe.js +113 -0
  101. package/dest/node/bb_backends/node/native_shm.d.ts +28 -0
  102. package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -0
  103. package/dest/node/bb_backends/node/native_shm.js +150 -0
  104. package/dest/node/bb_backends/node/native_socket.d.ts +34 -0
  105. package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -0
  106. package/dest/node/bb_backends/node/native_socket.js +269 -0
  107. package/dest/node/bb_backends/node/platform.d.ts +27 -0
  108. package/dest/node/bb_backends/node/platform.d.ts.map +1 -0
  109. package/dest/node/bb_backends/node/platform.js +124 -0
  110. package/dest/node/bb_backends/sync_to_async_adapter.d.ts +15 -0
  111. package/dest/node/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
  112. package/dest/node/bb_backends/sync_to_async_adapter.js +20 -0
  113. package/dest/node/bb_backends/wasm.d.ts +56 -0
  114. package/dest/node/bb_backends/wasm.d.ts.map +1 -0
  115. package/dest/node/bb_backends/wasm.js +90 -0
  116. package/dest/node/cbind/generate.js +2 -7
  117. package/dest/node/cbind/generated/api_types.d.ts +1167 -0
  118. package/dest/node/cbind/generated/api_types.d.ts.map +1 -1
  119. package/dest/node/cbind/generated/api_types.js +1609 -47
  120. package/dest/node/cbind/generated/async.d.ts +38 -4
  121. package/dest/node/cbind/generated/async.d.ts.map +1 -1
  122. package/dest/node/cbind/generated/async.js +327 -21
  123. package/dest/node/cbind/generated/sync.d.ts +39 -5
  124. package/dest/node/cbind/generated/sync.d.ts.map +1 -1
  125. package/dest/node/cbind/generated/sync.js +294 -21
  126. package/dest/node/cbind/schema_compiler.d.ts +2 -4
  127. package/dest/node/cbind/schema_compiler.d.ts.map +1 -1
  128. package/dest/node/cbind/schema_compiler.js +74 -178
  129. package/dest/node/index.d.ts +2 -2
  130. package/dest/node/index.d.ts.map +1 -1
  131. package/dest/node/index.js +3 -3
  132. package/dest/node/serialize/index.d.ts +0 -1
  133. package/dest/node/serialize/index.d.ts.map +1 -1
  134. package/dest/node/serialize/index.js +1 -2
  135. package/dest/node/serialize/serialize.d.ts +0 -35
  136. package/dest/node/serialize/serialize.d.ts.map +1 -1
  137. package/dest/node/serialize/serialize.js +1 -68
  138. package/dest/node/types/fields.d.ts.map +1 -1
  139. package/dest/node/types/fields.js +3 -3
  140. package/dest/node/types/index.d.ts +0 -3
  141. package/dest/node/types/index.d.ts.map +1 -1
  142. package/dest/node/types/index.js +1 -4
  143. package/dest/node-cjs/barretenberg/backend.d.ts +1 -1
  144. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
  145. package/dest/node-cjs/barretenberg/backend.js +20 -12
  146. package/dest/node-cjs/barretenberg/blake2s.test.js +19 -16
  147. package/dest/node-cjs/barretenberg/index.d.ts +44 -43
  148. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
  149. package/dest/node-cjs/barretenberg/index.js +136 -84
  150. package/dest/node-cjs/barretenberg/pedersen.test.js +24 -17
  151. package/dest/node-cjs/barretenberg/poseidon.bench.test.d.ts +2 -0
  152. package/dest/node-cjs/barretenberg/poseidon.bench.test.d.ts.map +1 -0
  153. package/dest/node-cjs/barretenberg/poseidon.bench.test.js +218 -0
  154. package/dest/node-cjs/barretenberg/poseidon.test.js +15 -15
  155. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  156. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +1 -1
  157. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
  158. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.js +2 -2
  159. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +4 -4
  160. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
  161. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +18 -10
  162. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +3 -0
  163. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
  164. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +51 -13
  165. package/dest/node-cjs/barretenberg_wasm/index.test.js +11 -10
  166. package/dest/node-cjs/bb_backends/browser/index.d.ts +11 -0
  167. package/dest/node-cjs/bb_backends/browser/index.d.ts.map +1 -0
  168. package/dest/node-cjs/bb_backends/browser/index.js +43 -0
  169. package/dest/node-cjs/bb_backends/index.d.ts +45 -0
  170. package/dest/node-cjs/bb_backends/index.d.ts.map +1 -0
  171. package/dest/node-cjs/bb_backends/index.js +18 -0
  172. package/dest/node-cjs/bb_backends/interface.d.ts +33 -0
  173. package/dest/node-cjs/bb_backends/interface.d.ts.map +1 -0
  174. package/dest/node-cjs/bb_backends/interface.js +3 -0
  175. package/dest/node-cjs/bb_backends/node/index.d.ts +11 -0
  176. package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -0
  177. package/dest/node-cjs/bb_backends/node/index.js +84 -0
  178. package/dest/node-cjs/bb_backends/node/native_pipe.d.ts +25 -0
  179. package/dest/node-cjs/bb_backends/node/native_pipe.d.ts.map +1 -0
  180. package/dest/node-cjs/bb_backends/node/native_pipe.js +117 -0
  181. package/dest/node-cjs/bb_backends/node/native_shm.d.ts +28 -0
  182. package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -0
  183. package/dest/node-cjs/bb_backends/node/native_shm.js +154 -0
  184. package/dest/node-cjs/bb_backends/node/native_socket.d.ts +34 -0
  185. package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -0
  186. package/dest/node-cjs/bb_backends/node/native_socket.js +274 -0
  187. package/dest/node-cjs/bb_backends/node/platform.d.ts +27 -0
  188. package/dest/node-cjs/bb_backends/node/platform.d.ts.map +1 -0
  189. package/dest/node-cjs/bb_backends/node/platform.js +131 -0
  190. package/dest/node-cjs/bb_backends/sync_to_async_adapter.d.ts +15 -0
  191. package/dest/node-cjs/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
  192. package/dest/node-cjs/bb_backends/sync_to_async_adapter.js +24 -0
  193. package/dest/node-cjs/bb_backends/wasm.d.ts +56 -0
  194. package/dest/node-cjs/bb_backends/wasm.d.ts.map +1 -0
  195. package/dest/node-cjs/bb_backends/wasm.js +95 -0
  196. package/dest/node-cjs/cbind/generate.js +1 -6
  197. package/dest/node-cjs/cbind/generated/api_types.d.ts +1167 -0
  198. package/dest/node-cjs/cbind/generated/api_types.d.ts.map +1 -1
  199. package/dest/node-cjs/cbind/generated/api_types.js +1747 -47
  200. package/dest/node-cjs/cbind/generated/async.d.ts +38 -4
  201. package/dest/node-cjs/cbind/generated/async.d.ts.map +1 -1
  202. package/dest/node-cjs/cbind/generated/async.js +326 -20
  203. package/dest/node-cjs/cbind/generated/sync.d.ts +39 -5
  204. package/dest/node-cjs/cbind/generated/sync.d.ts.map +1 -1
  205. package/dest/node-cjs/cbind/generated/sync.js +293 -20
  206. package/dest/node-cjs/cbind/schema_compiler.d.ts +2 -4
  207. package/dest/node-cjs/cbind/schema_compiler.d.ts.map +1 -1
  208. package/dest/node-cjs/cbind/schema_compiler.js +74 -179
  209. package/dest/node-cjs/index.d.ts +2 -2
  210. package/dest/node-cjs/index.d.ts.map +1 -1
  211. package/dest/node-cjs/index.js +3 -3
  212. package/dest/node-cjs/serialize/index.d.ts +0 -1
  213. package/dest/node-cjs/serialize/index.d.ts.map +1 -1
  214. package/dest/node-cjs/serialize/index.js +1 -2
  215. package/dest/node-cjs/serialize/serialize.d.ts +0 -35
  216. package/dest/node-cjs/serialize/serialize.d.ts.map +1 -1
  217. package/dest/node-cjs/serialize/serialize.js +1 -79
  218. package/dest/node-cjs/types/fields.d.ts.map +1 -1
  219. package/dest/node-cjs/types/fields.js +2 -2
  220. package/dest/node-cjs/types/index.d.ts +0 -3
  221. package/dest/node-cjs/types/index.d.ts.map +1 -1
  222. package/dest/node-cjs/types/index.js +1 -4
  223. package/package.json +3 -4
  224. package/src/barretenberg/__snapshots__/pedersen.test.ts.snap +2 -2
  225. package/src/barretenberg/__snapshots__/poseidon.test.ts.snap +3 -3
  226. package/src/barretenberg/backend.ts +37 -32
  227. package/src/barretenberg/blake2s.test.ts +20 -21
  228. package/src/barretenberg/index.ts +136 -117
  229. package/src/barretenberg/pedersen.test.ts +23 -16
  230. package/src/barretenberg/poseidon.bench.test.ts +267 -0
  231. package/src/barretenberg/poseidon.test.ts +14 -14
  232. package/src/barretenberg_wasm/barretenberg_wasm_base/index.ts +3 -3
  233. package/src/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.ts +17 -9
  234. package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +62 -15
  235. package/src/barretenberg_wasm/index.test.ts +12 -11
  236. package/src/bb_backends/browser/index.ts +50 -0
  237. package/src/bb_backends/index.ts +49 -0
  238. package/src/bb_backends/interface.ts +35 -0
  239. package/src/bb_backends/node/index.ts +94 -0
  240. package/src/bb_backends/node/native_pipe.ts +127 -0
  241. package/src/bb_backends/node/native_shm.ts +171 -0
  242. package/src/bb_backends/node/native_socket.ts +312 -0
  243. package/src/bb_backends/node/platform.ts +151 -0
  244. package/src/bb_backends/sync_to_async_adapter.ts +21 -0
  245. package/src/bb_backends/wasm.ts +110 -0
  246. package/src/cbind/README.md +1 -1
  247. package/src/cbind/generate.ts +0 -6
  248. package/src/cbind/schema_compiler.ts +131 -241
  249. package/src/index.ts +2 -1
  250. package/src/serialize/index.ts +0 -1
  251. package/src/serialize/serialize.ts +0 -82
  252. package/src/types/fields.ts +2 -2
  253. package/src/types/index.ts +0 -3
  254. package/dest/browser/barretenberg_api/index.d.ts +0 -109
  255. package/dest/browser/barretenberg_api/index.d.ts.map +0 -1
  256. package/dest/browser/barretenberg_api/index.js +0 -699
  257. package/dest/browser/cbind/generated/native.d.ts +0 -31
  258. package/dest/browser/cbind/generated/native.d.ts.map +0 -1
  259. package/dest/browser/cbind/generated/native.js +0 -234
  260. package/dest/browser/serialize/output_type.d.ts +0 -11
  261. package/dest/browser/serialize/output_type.d.ts.map +0 -1
  262. package/dest/browser/serialize/output_type.js +0 -44
  263. package/dest/browser/types/fixed_size_buffer.d.ts +0 -26
  264. package/dest/browser/types/fixed_size_buffer.d.ts.map +0 -1
  265. package/dest/browser/types/fixed_size_buffer.js +0 -51
  266. package/dest/browser/types/ptr.d.ts +0 -13
  267. package/dest/browser/types/ptr.d.ts.map +0 -1
  268. package/dest/browser/types/ptr.js +0 -19
  269. package/dest/browser/types/raw_buffer.d.ts +0 -3
  270. package/dest/browser/types/raw_buffer.d.ts.map +0 -1
  271. package/dest/browser/types/raw_buffer.js +0 -5
  272. package/dest/node/barretenberg/common.test.d.ts +0 -2
  273. package/dest/node/barretenberg/common.test.d.ts.map +0 -1
  274. package/dest/node/barretenberg/common.test.js +0 -20
  275. package/dest/node/barretenberg_api/index.d.ts +0 -109
  276. package/dest/node/barretenberg_api/index.d.ts.map +0 -1
  277. package/dest/node/barretenberg_api/index.js +0 -699
  278. package/dest/node/bindgen/function_declaration.d.ts +0 -11
  279. package/dest/node/bindgen/function_declaration.d.ts.map +0 -1
  280. package/dest/node/bindgen/function_declaration.js +0 -2
  281. package/dest/node/bindgen/index.d.ts +0 -2
  282. package/dest/node/bindgen/index.d.ts.map +0 -1
  283. package/dest/node/bindgen/index.js +0 -15
  284. package/dest/node/bindgen/mappings.d.ts +0 -4
  285. package/dest/node/bindgen/mappings.d.ts.map +0 -1
  286. package/dest/node/bindgen/mappings.js +0 -64
  287. package/dest/node/bindgen/rust.d.ts +0 -2
  288. package/dest/node/bindgen/rust.d.ts.map +0 -1
  289. package/dest/node/bindgen/rust.js +0 -43
  290. package/dest/node/bindgen/to_camel_case.d.ts +0 -2
  291. package/dest/node/bindgen/to_camel_case.d.ts.map +0 -1
  292. package/dest/node/bindgen/to_camel_case.js +0 -11
  293. package/dest/node/bindgen/typescript.d.ts +0 -2
  294. package/dest/node/bindgen/typescript.d.ts.map +0 -1
  295. package/dest/node/bindgen/typescript.js +0 -100
  296. package/dest/node/cbind/generated/native.d.ts +0 -31
  297. package/dest/node/cbind/generated/native.d.ts.map +0 -1
  298. package/dest/node/cbind/generated/native.js +0 -234
  299. package/dest/node/main.d.ts +0 -13
  300. package/dest/node/main.d.ts.map +0 -1
  301. package/dest/node/main.js +0 -459
  302. package/dest/node/serialize/output_type.d.ts +0 -11
  303. package/dest/node/serialize/output_type.d.ts.map +0 -1
  304. package/dest/node/serialize/output_type.js +0 -44
  305. package/dest/node/types/fixed_size_buffer.d.ts +0 -26
  306. package/dest/node/types/fixed_size_buffer.d.ts.map +0 -1
  307. package/dest/node/types/fixed_size_buffer.js +0 -51
  308. package/dest/node/types/ptr.d.ts +0 -13
  309. package/dest/node/types/ptr.d.ts.map +0 -1
  310. package/dest/node/types/ptr.js +0 -19
  311. package/dest/node/types/raw_buffer.d.ts +0 -3
  312. package/dest/node/types/raw_buffer.d.ts.map +0 -1
  313. package/dest/node/types/raw_buffer.js +0 -5
  314. package/dest/node-cjs/barretenberg/common.test.d.ts +0 -2
  315. package/dest/node-cjs/barretenberg/common.test.d.ts.map +0 -1
  316. package/dest/node-cjs/barretenberg/common.test.js +0 -22
  317. package/dest/node-cjs/barretenberg_api/index.d.ts +0 -109
  318. package/dest/node-cjs/barretenberg_api/index.d.ts.map +0 -1
  319. package/dest/node-cjs/barretenberg_api/index.js +0 -704
  320. package/dest/node-cjs/bindgen/function_declaration.d.ts +0 -11
  321. package/dest/node-cjs/bindgen/function_declaration.d.ts.map +0 -1
  322. package/dest/node-cjs/bindgen/function_declaration.js +0 -3
  323. package/dest/node-cjs/bindgen/index.d.ts +0 -2
  324. package/dest/node-cjs/bindgen/index.d.ts.map +0 -1
  325. package/dest/node-cjs/bindgen/index.js +0 -17
  326. package/dest/node-cjs/bindgen/mappings.d.ts +0 -4
  327. package/dest/node-cjs/bindgen/mappings.d.ts.map +0 -1
  328. package/dest/node-cjs/bindgen/mappings.js +0 -69
  329. package/dest/node-cjs/bindgen/rust.d.ts +0 -2
  330. package/dest/node-cjs/bindgen/rust.d.ts.map +0 -1
  331. package/dest/node-cjs/bindgen/rust.js +0 -47
  332. package/dest/node-cjs/bindgen/to_camel_case.d.ts +0 -2
  333. package/dest/node-cjs/bindgen/to_camel_case.d.ts.map +0 -1
  334. package/dest/node-cjs/bindgen/to_camel_case.js +0 -14
  335. package/dest/node-cjs/bindgen/typescript.d.ts +0 -2
  336. package/dest/node-cjs/bindgen/typescript.d.ts.map +0 -1
  337. package/dest/node-cjs/bindgen/typescript.js +0 -104
  338. package/dest/node-cjs/cbind/generated/native.d.ts +0 -31
  339. package/dest/node-cjs/cbind/generated/native.d.ts.map +0 -1
  340. package/dest/node-cjs/cbind/generated/native.js +0 -238
  341. package/dest/node-cjs/main.d.ts +0 -13
  342. package/dest/node-cjs/main.d.ts.map +0 -1
  343. package/dest/node-cjs/main.js +0 -470
  344. package/dest/node-cjs/serialize/output_type.d.ts +0 -11
  345. package/dest/node-cjs/serialize/output_type.d.ts.map +0 -1
  346. package/dest/node-cjs/serialize/output_type.js +0 -51
  347. package/dest/node-cjs/types/fixed_size_buffer.d.ts +0 -26
  348. package/dest/node-cjs/types/fixed_size_buffer.d.ts.map +0 -1
  349. package/dest/node-cjs/types/fixed_size_buffer.js +0 -57
  350. package/dest/node-cjs/types/ptr.d.ts +0 -13
  351. package/dest/node-cjs/types/ptr.d.ts.map +0 -1
  352. package/dest/node-cjs/types/ptr.js +0 -23
  353. package/dest/node-cjs/types/raw_buffer.d.ts +0 -3
  354. package/dest/node-cjs/types/raw_buffer.d.ts.map +0 -1
  355. package/dest/node-cjs/types/raw_buffer.js +0 -9
  356. package/src/barretenberg/common.test.ts +0 -23
  357. package/src/barretenberg_api/index.ts +0 -1216
  358. package/src/bindgen/function_declaration.ts +0 -11
  359. package/src/bindgen/index.ts +0 -17
  360. package/src/bindgen/mappings.ts +0 -67
  361. package/src/bindgen/rust.ts +0 -52
  362. package/src/bindgen/to_camel_case.ts +0 -10
  363. package/src/bindgen/typescript.ts +0 -116
  364. package/src/main.ts +0 -534
  365. package/src/serialize/output_type.ts +0 -53
  366. package/src/types/fixed_size_buffer.ts +0 -59
  367. package/src/types/ptr.ts +0 -20
  368. package/src/types/raw_buffer.ts +0 -3
@@ -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
  }
@@ -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,59 @@ 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 once and create DataView for all reads/writes (avoids creating multiple typed arrays)
177
+ const mem = this.getMemory();
178
+ const 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
+ // Read OUT values: C++ returns actual buffer pointer and size
193
+ const outputDataPtr = view.getUint32(outputPtrLocation, true);
194
+ const outputSize = view.getUint32(outputSizeLocation, true);
195
+
196
+ // Check if C++ used scratch (pointer unchanged) or allocated (pointer changed)
197
+ const usedScratch = outputDataPtr === scratchDataPtr;
198
+
199
+ // Copy output data from WASM memory
200
+ const encodedResult = this.getMemorySlice(outputDataPtr, outputDataPtr + outputSize);
201
+
202
+ // Only free if C++ allocated beyond scratch
203
+ if (!usedScratch) {
204
+ this.call('bbfree', outputDataPtr);
205
+ }
152
206
 
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
207
  return encodedResult;
161
208
  }
162
209
  }
@@ -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
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Backend types for Barretenberg
3
+ */
4
+ export enum BackendType {
5
+ /** WASM direct execution (no worker) */
6
+ Wasm = 'wasm',
7
+ /** WASM with worker threads */
8
+ WasmWorker = 'wasm-worker',
9
+ /** Native via Unix domain socket (async only) */
10
+ NativeUnixSocket = 'native-unix-socket',
11
+ /** Native via shared memory (sync only currently) */
12
+ NativeSharedMemory = 'native-shared-mem',
13
+ }
14
+
15
+ export type BackendOptions = {
16
+ /** @description Number of threads to run the backend worker on */
17
+ threads?: number;
18
+
19
+ /** @description Initial and Maximum memory to be alloted to the backend worker */
20
+ memory?: { initial?: number; maximum?: number };
21
+
22
+ /** @description Path to download CRS files */
23
+ crsPath?: string;
24
+
25
+ /** @description Path to download WASM files */
26
+ wasmPath?: string;
27
+
28
+ /** @description Custom path to bb binary for native backend (overrides automatic detection) */
29
+ bbPath?: string;
30
+
31
+ /** @description Logging function */
32
+ logger?: (msg: string) => void;
33
+
34
+ /**
35
+ * @description Maximum concurrent clients for shared memory IPC server (default: 1)
36
+ * Only applies to NativeSharedMemory backend
37
+ */
38
+ maxClients?: number;
39
+
40
+ /**
41
+ * @description Specify exact backend to use
42
+ * - If unset: tries backends in default order with fallback
43
+ * - If set: must succeed with specified backend or throw error (no fallback)
44
+ *
45
+ * Barretenberg (async) supports: all types
46
+ * BarretenbergSync supports: Wasm, NativeSharedMem only
47
+ */
48
+ backend?: BackendType;
49
+ };
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Generic interface for msgpack backend implementations.
3
+ * Both WASM and native binary backends implement this interface.
4
+ */
5
+ export interface IMsgpackBackend {
6
+ /**
7
+ * Execute a msgpack command and return the msgpack response.
8
+ * @param inputBuffer The msgpack-encoded input buffer
9
+ * @returns The msgpack-encoded response buffer (sync or async)
10
+ */
11
+ call(inputBuffer: Uint8Array): Uint8Array | Promise<Uint8Array>;
12
+
13
+ /**
14
+ * Clean up resources.
15
+ */
16
+ destroy(): void | Promise<void>;
17
+ }
18
+
19
+ /**
20
+ * Synchronous variant of IMsgpackBackend.
21
+ * Used by BarretenbergSync and SyncApi.
22
+ */
23
+ export interface IMsgpackBackendSync extends IMsgpackBackend {
24
+ call(inputBuffer: Uint8Array): Uint8Array;
25
+ destroy(): void;
26
+ }
27
+
28
+ /**
29
+ * Asynchronous variant of IMsgpackBackend.
30
+ * Used by Barretenberg and AsyncApi.
31
+ */
32
+ export interface IMsgpackBackendAsync extends IMsgpackBackend {
33
+ call(inputBuffer: Uint8Array): Promise<Uint8Array>;
34
+ destroy(): Promise<void>;
35
+ }
@@ -0,0 +1,94 @@
1
+ import { BarretenbergNativeSocketAsyncBackend } from './native_socket.js';
2
+ import { BarretenbergWasmSyncBackend, BarretenbergWasmAsyncBackend } from '../wasm.js';
3
+ import { BarretenbergNativeShmSyncBackend } from './native_shm.js';
4
+ import { SyncToAsyncAdapter } from '../sync_to_async_adapter.js';
5
+ import { findBbBinary, findNapiBinary } from './platform.js';
6
+ import { Barretenberg, BarretenbergSync } from '../../barretenberg/index.js';
7
+ import { BackendOptions, BackendType } from '../index.js';
8
+
9
+ /**
10
+ * Create backend of specific type (no fallback)
11
+ */
12
+ export async function createAsyncBackend(
13
+ type: BackendType,
14
+ options: BackendOptions,
15
+ logger: (msg: string) => void,
16
+ ): Promise<Barretenberg> {
17
+ switch (type) {
18
+ case BackendType.NativeUnixSocket: {
19
+ const bbPath = findBbBinary(options.bbPath);
20
+ if (!bbPath) {
21
+ throw new Error('Native backend requires bb binary.');
22
+ }
23
+ logger(`Using native Unix socket backend: ${bbPath}`);
24
+ const socket = new BarretenbergNativeSocketAsyncBackend(bbPath, options.threads);
25
+ return new Barretenberg(socket, options);
26
+ }
27
+
28
+ case BackendType.NativeSharedMemory: {
29
+ const bbPath = findBbBinary(options.bbPath);
30
+ if (!bbPath) {
31
+ throw new Error('Native backend requires bb binary.');
32
+ }
33
+ const napiPath = findNapiBinary();
34
+ if (!napiPath) {
35
+ throw new Error('Native sync backend requires napi client stub.');
36
+ }
37
+ logger(`Using native shared memory backend (via sync adapter): ${bbPath}`);
38
+ // Use sync backend with adapter to provide async interface
39
+ const syncBackend = await BarretenbergNativeShmSyncBackend.new(bbPath, options.threads, options.maxClients);
40
+ const asyncBackend = new SyncToAsyncAdapter(syncBackend);
41
+ return new Barretenberg(asyncBackend, options);
42
+ }
43
+
44
+ case BackendType.Wasm:
45
+ case BackendType.WasmWorker: {
46
+ const useWorker = type === BackendType.WasmWorker;
47
+ logger(`Using WASM backend (worker: ${useWorker})`);
48
+ const wasm = await BarretenbergWasmAsyncBackend.new({
49
+ threads: options.threads,
50
+ wasmPath: options.wasmPath,
51
+ logger: options.logger,
52
+ memory: options.memory,
53
+ useWorker,
54
+ });
55
+ return new Barretenberg(wasm, options);
56
+ }
57
+
58
+ default:
59
+ throw new Error(`Unknown backend type: ${type}`);
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Create backend of specific type (no fallback)
65
+ */
66
+ export async function createSyncBackend(
67
+ type: BackendType,
68
+ options: BackendOptions,
69
+ logger: (msg: string) => void,
70
+ ): Promise<BarretenbergSync> {
71
+ switch (type) {
72
+ case BackendType.NativeSharedMemory: {
73
+ const bbPath = findBbBinary(options.bbPath);
74
+ if (!bbPath) {
75
+ throw new Error('Native backend requires bb binary.');
76
+ }
77
+ const napiPath = findNapiBinary();
78
+ if (!napiPath) {
79
+ throw new Error('Native sync backend requires napi client stub.');
80
+ }
81
+ logger(`Using native shared memory backend: ${bbPath}`);
82
+ const shm = await BarretenbergNativeShmSyncBackend.new(bbPath, options.threads, options.maxClients);
83
+ return new BarretenbergSync(shm);
84
+ }
85
+
86
+ case BackendType.Wasm:
87
+ logger('Using WASM backend');
88
+ const wasm = await BarretenbergWasmSyncBackend.new(options.wasmPath, logger);
89
+ return new BarretenbergSync(wasm);
90
+
91
+ default:
92
+ throw new Error(`Backend ${type} not supported for BarretenbergSync`);
93
+ }
94
+ }
@@ -0,0 +1,127 @@
1
+ import { spawn, ChildProcess } from 'child_process';
2
+ import * as fs from 'fs';
3
+ import { IMsgpackBackendSync, IMsgpackBackendAsync } from '../interface.js';
4
+
5
+ /**
6
+ * Asynchronous native backend that communicates with bb binary via stdin/stdout.
7
+ * Uses event-based I/O with a state machine to handle partial reads.
8
+ *
9
+ * Protocol:
10
+ * - Request: 4-byte little-endian length + msgpack buffer
11
+ * - Response: 4-byte little-endian length + msgpack buffer
12
+ */
13
+ export class BarretenbergNativePipeAsyncBackend implements IMsgpackBackendAsync {
14
+ private process: ChildProcess;
15
+ private pendingResolve: ((data: Uint8Array) => void) | null = null;
16
+ private pendingReject: ((error: Error) => void) | null = null;
17
+
18
+ // State machine for reading responses
19
+ private readingLength: boolean = true;
20
+ private lengthBuffer: Buffer = Buffer.alloc(4);
21
+ private lengthBytesRead: number = 0;
22
+ private responseLength: number = 0;
23
+ private responseBuffer: Buffer | null = null;
24
+ private responseBytesRead: number = 0;
25
+
26
+ constructor(bbBinaryPath: string) {
27
+ this.process = spawn(bbBinaryPath, ['msgpack', 'run'], {
28
+ stdio: ['pipe', 'pipe', 'inherit'],
29
+ });
30
+
31
+ this.process.stdout!.on('data', (chunk: Buffer) => {
32
+ this.handleData(chunk);
33
+ });
34
+
35
+ this.process.on('error', err => {
36
+ if (this.pendingReject) {
37
+ this.pendingReject(new Error(`Native backend process error: ${err.message}`));
38
+ this.pendingReject = null;
39
+ this.pendingResolve = null;
40
+ }
41
+ });
42
+
43
+ this.process.on('exit', (code, signal) => {
44
+ if (this.pendingReject) {
45
+ if (code !== null && code !== 0) {
46
+ this.pendingReject(new Error(`Native backend process exited with code ${code}`));
47
+ } else if (signal) {
48
+ if (signal != 'SIGTERM') {
49
+ this.pendingReject(new Error(`Native backend process killed with signal ${signal}`));
50
+ }
51
+ } else {
52
+ this.pendingReject(new Error('Native backend process exited unexpectedly'));
53
+ }
54
+ this.pendingReject = null;
55
+ this.pendingResolve = null;
56
+ }
57
+ });
58
+ }
59
+
60
+ private handleData(chunk: Buffer): void {
61
+ let offset = 0;
62
+
63
+ while (offset < chunk.length) {
64
+ if (this.readingLength) {
65
+ // Reading 4-byte length prefix
66
+ const bytesToCopy = Math.min(4 - this.lengthBytesRead, chunk.length - offset);
67
+ chunk.copy(this.lengthBuffer, this.lengthBytesRead, offset, offset + bytesToCopy);
68
+ this.lengthBytesRead += bytesToCopy;
69
+ offset += bytesToCopy;
70
+
71
+ if (this.lengthBytesRead === 4) {
72
+ // Length is complete, switch to reading data
73
+ this.responseLength = this.lengthBuffer.readUInt32LE(0);
74
+ this.responseBuffer = Buffer.alloc(this.responseLength);
75
+ this.responseBytesRead = 0;
76
+ this.readingLength = false;
77
+ }
78
+ } else {
79
+ // Reading response data
80
+ const bytesToCopy = Math.min(this.responseLength - this.responseBytesRead, chunk.length - offset);
81
+ chunk.copy(this.responseBuffer!, this.responseBytesRead, offset, offset + bytesToCopy);
82
+ this.responseBytesRead += bytesToCopy;
83
+ offset += bytesToCopy;
84
+
85
+ if (this.responseBytesRead === this.responseLength) {
86
+ // Response is complete
87
+ if (this.pendingResolve) {
88
+ this.pendingResolve(new Uint8Array(this.responseBuffer!));
89
+ this.pendingResolve = null;
90
+ this.pendingReject = null;
91
+ }
92
+
93
+ // Reset state for next message
94
+ this.readingLength = true;
95
+ this.lengthBytesRead = 0;
96
+ this.responseLength = 0;
97
+ this.responseBuffer = null;
98
+ this.responseBytesRead = 0;
99
+ }
100
+ }
101
+ }
102
+ }
103
+
104
+ async call(inputBuffer: Uint8Array): Promise<Uint8Array> {
105
+ if (this.pendingResolve) {
106
+ throw new Error('Cannot call while another call is pending (no pipelining supported)');
107
+ }
108
+
109
+ return new Promise((resolve, reject) => {
110
+ this.pendingResolve = resolve;
111
+ this.pendingReject = reject;
112
+
113
+ // Write request: 4-byte little-endian length + msgpack data
114
+ const lengthBuf = Buffer.alloc(4);
115
+ lengthBuf.writeUInt32LE(inputBuffer.length, 0);
116
+ this.process.stdin!.write(lengthBuf);
117
+ this.process.stdin!.write(inputBuffer);
118
+ });
119
+ }
120
+
121
+ async destroy(): Promise<void> {
122
+ this.process.kill();
123
+ return new Promise(resolve => {
124
+ this.process.once('exit', () => resolve());
125
+ });
126
+ }
127
+ }