@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
@@ -1,14 +1,6 @@
1
1
  import { BackendOptions, Barretenberg, CircuitOptions } from './index.js';
2
- import { RawBuffer } from '../types/raw_buffer.js';
3
- import {
4
- ProofData,
5
- reconstructHonkProof,
6
- splitHonkProof,
7
- PAIRING_POINTS_SIZE,
8
- uint8ArrayToHex,
9
- hexToUint8Array,
10
- } from '../proof/index.js';
11
- import { fromClientIVCProof, toClientIVCProof } from '../cbind/generated/api_types.js';
2
+ import { ProofData, uint8ArrayToHex, hexToUint8Array } from '../proof/index.js';
3
+ import { fromChonkProof, toChonkProof } from '../cbind/generated/api_types.js';
12
4
  import { ungzip } from 'pako';
13
5
  import { Buffer } from 'buffer';
14
6
  import { Decoder, Encoder } from 'msgpackr';
@@ -45,12 +37,20 @@ export type UltraHonkBackendOptions = {
45
37
  starknetZK?: boolean;
46
38
  };
47
39
 
48
- function getProofSettingsFromOptions(
49
- options?: UltraHonkBackendOptions,
50
- ): { ipaAccumulation: boolean; oracleHashType: string; disableZk: boolean, optimizedSolidityVerifier: boolean } {
40
+ function getProofSettingsFromOptions(options?: UltraHonkBackendOptions): {
41
+ ipaAccumulation: boolean;
42
+ oracleHashType: string;
43
+ disableZk: boolean;
44
+ optimizedSolidityVerifier: boolean;
45
+ } {
51
46
  return {
52
47
  ipaAccumulation: false,
53
- oracleHashType: options?.keccak || options?.keccakZK ? 'keccak' : (options?.starknet || options?.starknetZK ? 'starknet' : 'poseidon2'),
48
+ oracleHashType:
49
+ options?.keccak || options?.keccakZK
50
+ ? 'keccak'
51
+ : options?.starknet || options?.starknetZK
52
+ ? 'starknet'
53
+ : 'poseidon2',
54
54
  // TODO no current way to target non-zk poseidon2 hash
55
55
  disableZk: options?.keccak || options?.starknet ? true : false,
56
56
  optimizedSolidityVerifier: false,
@@ -75,7 +75,10 @@ export class UltraHonkVerifierBackend {
75
75
  }
76
76
  }
77
77
 
78
- async verifyProof(proofData: ProofData & { verificationKey: Uint8Array }, options?: UltraHonkBackendOptions): Promise<boolean> {
78
+ async verifyProof(
79
+ proofData: ProofData & { verificationKey: Uint8Array },
80
+ options?: UltraHonkBackendOptions,
81
+ ): Promise<boolean> {
79
82
  await this.instantiate();
80
83
 
81
84
  const proofFrs: Uint8Array[] = [];
@@ -136,7 +139,7 @@ export class UltraHonkBackend {
136
139
  bytecode: Buffer.from(this.acirUncompressedBytecode),
137
140
  verificationKey: Buffer.from([]), // Empty VK - lower performance.
138
141
  },
139
- settings: getProofSettingsFromOptions(options)
142
+ settings: getProofSettingsFromOptions(options),
140
143
  });
141
144
  console.log(`Generated proof for circuit with ${publicInputs.length} public inputs and ${proof.length} fields.`);
142
145
 
@@ -164,7 +167,7 @@ export class UltraHonkBackend {
164
167
  },
165
168
  settings: getProofSettingsFromOptions(options),
166
169
  });
167
- const {verified} = await this.api.circuitVerify({
170
+ const { verified } = await this.api.circuitVerify({
168
171
  verificationKey: vkResult.bytes,
169
172
  publicInputs: proofData.publicInputs.map(hexToUint8Array),
170
173
  proof: proofFrs,
@@ -187,10 +190,13 @@ export class UltraHonkBackend {
187
190
  }
188
191
 
189
192
  /** @description Returns a solidity verifier */
190
- async getSolidityVerifier(vk?: Uint8Array): Promise<string> {
193
+ async getSolidityVerifier(vk: Uint8Array, options?: UltraHonkBackendOptions): Promise<string> {
191
194
  await this.instantiate();
192
- const vkBuf = vk ?? (await this.api.acirWriteVkUltraKeccakHonk(this.acirUncompressedBytecode));
193
- return await this.api.acirHonkSolidityVerifier(this.acirUncompressedBytecode, new RawBuffer(vkBuf));
195
+ const result = await this.api.circuitWriteSolidityVerifier({
196
+ verificationKey: vk,
197
+ settings: getProofSettingsFromOptions(options),
198
+ });
199
+ return result.solidityCode;
194
200
  }
195
201
 
196
202
  // TODO(https://github.com/noir-lang/noir/issues/5661): Update this to handle Honk recursive aggregation in the browser once it is ready in the backend itself
@@ -233,7 +239,7 @@ export class UltraHonkBackend {
233
239
  // We use an empty string for the vk hash here as it is unneeded as part of the recursive artifacts
234
240
  // The user can be expected to hash the vk inside their circuit to check whether the vk is the circuit
235
241
  // they expect
236
- vkHash: uint8ArrayToHex(vkResult.hash)
242
+ vkHash: uint8ArrayToHex(vkResult.hash),
237
243
  };
238
244
  }
239
245
 
@@ -262,12 +268,12 @@ export class AztecClientBackend {
262
268
  private async instantiate(): Promise<void> {
263
269
  if (!this.api) {
264
270
  const api = await Barretenberg.new(this.options);
265
- await api.initSRSClientIVC();
271
+ await api.initSRSChonk();
266
272
  this.api = api;
267
273
  }
268
274
  }
269
275
 
270
- async prove(witnessBuf: Uint8Array[], vksBuf: Uint8Array[] = []): Promise<[Uint8Array, Uint8Array]> {
276
+ async prove(witnessBuf: Uint8Array[], vksBuf: Uint8Array[] = []): Promise<[Uint8Array[], Uint8Array, Uint8Array]> {
271
277
  if (vksBuf.length !== 0 && this.acirBuf.length !== witnessBuf.length) {
272
278
  throw new AztecClientBackendError('Witness and bytecodes must have the same stack depth!');
273
279
  }
@@ -278,7 +284,7 @@ export class AztecClientBackend {
278
284
  await this.instantiate();
279
285
 
280
286
  // Queue IVC start with the number of circuits
281
- this.api.clientIvcStart({ numCircuits: this.acirBuf.length });
287
+ this.api.chonkStart({ numCircuits: this.acirBuf.length });
282
288
 
283
289
  // Queue load and accumulate for each circuit
284
290
  for (let i = 0; i < this.acirBuf.length; i++) {
@@ -288,45 +294,51 @@ export class AztecClientBackend {
288
294
  const functionName = `unknown_wasm_${i}`;
289
295
 
290
296
  // Load the circuit
291
- this.api.clientIvcLoad({
297
+ this.api.chonkLoad({
292
298
  circuit: {
293
299
  name: functionName,
294
300
  bytecode: Buffer.from(bytecode),
295
301
  verificationKey: Buffer.from(vk),
296
- }
302
+ },
297
303
  });
298
304
 
299
305
  // Accumulate with witness
300
- this.api.clientIvcAccumulate({
306
+ this.api.chonkAccumulate({
301
307
  witness: Buffer.from(witness),
302
308
  });
303
-
304
309
  }
305
310
 
306
-
307
-
308
311
  // Generate the proof (and wait for all previous steps to finish)
309
- const proveResult = await this.api.clientIvcProve({});
312
+ const proveResult = await this.api.chonkProve({});
310
313
  // The API currently expects a msgpack-encoded API.
311
- const proof = new Encoder({useRecords: false}).encode(fromClientIVCProof(proveResult.proof));
314
+ const proof = new Encoder({ useRecords: false }).encode(fromChonkProof(proveResult.proof));
312
315
  // Generate the VK
313
- const vkResult = await this.api.clientIvcComputeIvcVk({ circuit: {
314
- name: 'hiding',
315
- bytecode: this.acirBuf[this.acirBuf.length - 1],
316
- } });
316
+ const vkResult = await this.api.chonkComputeIvcVk({
317
+ circuit: {
318
+ name: 'hiding',
319
+ bytecode: this.acirBuf[this.acirBuf.length - 1],
320
+ },
321
+ });
317
322
 
323
+ const proofFields = [
324
+ proveResult.proof.megaProof,
325
+ proveResult.proof.goblinProof.mergeProof,
326
+ proveResult.proof.goblinProof.eccvmProof.preIpaProof,
327
+ proveResult.proof.goblinProof.eccvmProof.ipaProof,
328
+ proveResult.proof.goblinProof.translatorProof,
329
+ ].flat();
318
330
 
319
331
  // Note: Verification may not work correctly until we properly serialize the proof
320
332
  if (!(await this.verify(proof, vkResult.bytes))) {
321
- throw new AztecClientBackendError('Failed to verify the private (ClientIVC) transaction proof!');
333
+ throw new AztecClientBackendError('Failed to verify the private (Chonk) transaction proof!');
322
334
  }
323
- return [proof, vkResult.bytes];
335
+ return [proofFields, proof, vkResult.bytes];
324
336
  }
325
337
 
326
338
  async verify(proof: Uint8Array, vk: Uint8Array): Promise<boolean> {
327
339
  await this.instantiate();
328
- const result = await this.api.clientIvcVerify({
329
- proof: toClientIVCProof(new Decoder({useRecords: false}).decode(proof)),
340
+ const result = await this.api.chonkVerify({
341
+ proof: toChonkProof(new Decoder({ useRecords: false }).decode(proof)),
330
342
  vk: Buffer.from(vk),
331
343
  });
332
344
  return result.valid;
@@ -336,12 +348,12 @@ export class AztecClientBackend {
336
348
  await this.instantiate();
337
349
  const circuitSizes: number[] = [];
338
350
  for (const buf of this.acirBuf) {
339
- const gates = await this.api.clientIvcStats({
351
+ const gates = await this.api.chonkStats({
340
352
  circuit: {
341
353
  name: 'circuit',
342
354
  bytecode: buf,
343
355
  },
344
- includeGatesPerOpcode: false
356
+ includeGatesPerOpcode: false,
345
357
  });
346
358
  circuitSizes.push(gates.circuitSize);
347
359
  }
@@ -1,11 +1,12 @@
1
- import { Barretenberg, BarretenbergSync } from './index.js';
2
- import { Buffer32, Fr } from '../types/index.js';
1
+ import { BackendType, Barretenberg, BarretenbergSync } from './index.js';
2
+ import { Fr } from '../types/index.js';
3
3
 
4
4
  describe('blake2s async', () => {
5
5
  let api: Barretenberg;
6
6
 
7
7
  beforeAll(async () => {
8
- api = await Barretenberg.new({ threads: 1 });
8
+ // We're going to test over a worker backend to cover more code paths.
9
+ api = await Barretenberg.new({ threads: 1, backend: BackendType.WasmWorker });
9
10
  });
10
11
 
11
12
  afterAll(async () => {
@@ -14,14 +15,12 @@ describe('blake2s async', () => {
14
15
 
15
16
  it('blake2s', async () => {
16
17
  const input = Buffer.from('abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789');
17
- const expected = Buffer32.fromBuffer(
18
- new Uint8Array([
19
- 0x44, 0xdd, 0xdb, 0x39, 0xbd, 0xb2, 0xaf, 0x80, 0xc1, 0x47, 0x89, 0x4c, 0x1d, 0x75, 0x6a, 0xda, 0x3d, 0x1c,
20
- 0x2a, 0xc2, 0xb1, 0x00, 0x54, 0x1e, 0x04, 0xfe, 0x87, 0xb4, 0xa5, 0x9e, 0x12, 0x43,
21
- ]),
22
- );
23
- const result = await api.blake2s(input);
24
- expect(result).toEqual(expected);
18
+ const expected = new Uint8Array([
19
+ 0x44, 0xdd, 0xdb, 0x39, 0xbd, 0xb2, 0xaf, 0x80, 0xc1, 0x47, 0x89, 0x4c, 0x1d, 0x75, 0x6a, 0xda, 0x3d, 0x1c, 0x2a,
20
+ 0xc2, 0xb1, 0x00, 0x54, 0x1e, 0x04, 0xfe, 0x87, 0xb4, 0xa5, 0x9e, 0x12, 0x43,
21
+ ]);
22
+ const response = await api.blake2s({ data: input });
23
+ expect(response.hash).toEqual(expected);
25
24
  });
26
25
 
27
26
  it('blake2sToField', async () => {
@@ -32,7 +31,8 @@ describe('blake2s async', () => {
32
31
  0x2a, 0xc2, 0xb1, 0x00, 0x54, 0x1e, 0x04, 0xfe, 0x87, 0xb4, 0xa5, 0x9e, 0x12, 0x43,
33
32
  ]),
34
33
  );
35
- const result = await api.blake2sToField(input);
34
+ const response = await api.blake2sToField({ data: input });
35
+ const result = Fr.fromBuffer(response.field);
36
36
  expect(result).toEqual(expected);
37
37
  });
38
38
  });
@@ -46,14 +46,12 @@ describe('blake2s sync', () => {
46
46
 
47
47
  it('blake2s', () => {
48
48
  const input = Buffer.from('abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789');
49
- const expected = Buffer32.fromBuffer(
50
- new Uint8Array([
51
- 0x44, 0xdd, 0xdb, 0x39, 0xbd, 0xb2, 0xaf, 0x80, 0xc1, 0x47, 0x89, 0x4c, 0x1d, 0x75, 0x6a, 0xda, 0x3d, 0x1c,
52
- 0x2a, 0xc2, 0xb1, 0x00, 0x54, 0x1e, 0x04, 0xfe, 0x87, 0xb4, 0xa5, 0x9e, 0x12, 0x43,
53
- ]),
54
- );
55
- const result = api.blake2s(input);
56
- expect(result).toEqual(expected);
49
+ const expected = new Uint8Array([
50
+ 0x44, 0xdd, 0xdb, 0x39, 0xbd, 0xb2, 0xaf, 0x80, 0xc1, 0x47, 0x89, 0x4c, 0x1d, 0x75, 0x6a, 0xda, 0x3d, 0x1c, 0x2a,
51
+ 0xc2, 0xb1, 0x00, 0x54, 0x1e, 0x04, 0xfe, 0x87, 0xb4, 0xa5, 0x9e, 0x12, 0x43,
52
+ ]);
53
+ const response = api.blake2s({ data: input });
54
+ expect(response.hash).toEqual(expected);
57
55
  });
58
56
 
59
57
  it('blake2sToField', () => {
@@ -64,7 +62,8 @@ describe('blake2s sync', () => {
64
62
  0x2a, 0xc2, 0xb1, 0x00, 0x54, 0x1e, 0x04, 0xfe, 0x87, 0xb4, 0xa5, 0x9e, 0x12, 0x43,
65
63
  ]),
66
64
  );
67
- const result = api.blake2sToField(input);
65
+ const response = api.blake2sToField({ data: input });
66
+ const result = Fr.fromBuffer(response.field);
68
67
  expect(result).toEqual(expected);
69
68
  });
70
69
  });
@@ -1,33 +1,13 @@
1
- import { proxy } from 'comlink';
2
- import { BarretenbergApi, BarretenbergApiSync } from '../barretenberg_api/index.js';
3
- import { createMainWorker } from '../barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js';
4
- import { BarretenbergWasmMain, BarretenbergWasmMainWorker } from '../barretenberg_wasm/barretenberg_wasm_main/index.js';
5
- import { getRemoteBarretenbergWasm } from '../barretenberg_wasm/helpers/index.js';
6
1
  import { Crs, GrumpkinCrs } from '../crs/index.js';
7
- import { RawBuffer } from '../types/raw_buffer.js';
8
- import { fetchModuleAndThreads } from '../barretenberg_wasm/index.js';
9
2
  import { createDebugLogger } from '../log/index.js';
10
3
  import { AsyncApi } from '../cbind/generated/async.js';
11
- import { BbApiBase, CircuitComputeVk, CircuitProve, CircuitVerify, ClientIvcAccumulate, ClientIvcComputeIvcVk, ClientIvcStats, ClientIvcLoad, ClientIvcProve, ClientIvcStart, ClientIvcVerify, VkAsFields } from '../cbind/generated/api_types.js';
4
+ import { SyncApi } from '../cbind/generated/sync.js';
5
+ import { IMsgpackBackendSync, IMsgpackBackendAsync } from '../bb_backends/interface.js';
6
+ import { BackendOptions, BackendType } from '../bb_backends/index.js';
7
+ import { createAsyncBackend, createSyncBackend } from '../bb_backends/node/index.js';
12
8
 
13
9
  export { UltraHonkBackend, UltraHonkVerifierBackend, AztecClientBackend } from './backend.js';
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 Logging function */
29
- logger?: (msg: string) => void;
30
- };
10
+ export * from '../bb_backends/index.js';
31
11
 
32
12
  export type CircuitOptions = {
33
13
  /** @description Whether to produce SNARK friendly proofs */
@@ -38,42 +18,46 @@ export type CircuitOptions = {
38
18
  * The main class library consumers interact with.
39
19
  * It extends the generated api, and provides a static constructor "new" to compose components.
40
20
  */
41
- export class Barretenberg extends BarretenbergApi {
21
+ export class Barretenberg extends AsyncApi {
42
22
  private options: BackendOptions;
43
- private bbApi: BbApiBase;
44
-
45
- private constructor(
46
- private worker: any,
47
- wasm: BarretenbergWasmMainWorker,
48
- options: BackendOptions,
49
- ) {
50
- super(wasm);
23
+
24
+ constructor(backend: IMsgpackBackendAsync, options: BackendOptions) {
25
+ super(backend);
51
26
  this.options = options;
52
- this.bbApi = new AsyncApi(wasm);
53
27
  }
54
28
 
55
29
  /**
56
30
  * Constructs an instance of Barretenberg.
57
- * Launches it within a worker. This is necessary as it blocks waiting on child threads to complete,
58
- * and blocking the main thread in the browser is not allowed.
59
- * It threads > 1 (defaults to hardware availability), child threads will be created on their own workers.
31
+ *
32
+ * If options.backend is set: uses that specific backend (throws if unavailable)
33
+ * If options.backend is unset: tries backends in order with fallback:
34
+ * 1. NativeSharedMemory (if bb binary available)
35
+ * 2. WasmWorker (in browser) or Wasm (in Node.js)
60
36
  */
61
37
  static async new(options: BackendOptions = {}) {
62
- const worker = await createMainWorker();
63
- const wasm = getRemoteBarretenbergWasm<BarretenbergWasmMainWorker>(worker);
64
- const { module, threads } = await fetchModuleAndThreads(options.threads, options.wasmPath, options.logger);
65
- await wasm.init(
66
- module,
67
- threads,
68
- proxy(options.logger ?? createDebugLogger('bb_wasm_async')),
69
- options.memory?.initial,
70
- options.memory?.maximum,
71
- );
72
- return new Barretenberg(worker, wasm, options);
73
- }
38
+ const logger = options.logger ?? createDebugLogger('bb_async');
39
+
40
+ if (options.backend) {
41
+ // Explicit backend required - no fallback
42
+ return await createAsyncBackend(options.backend, options, logger);
43
+ }
74
44
 
75
- async getNumThreads() {
76
- return await this.wasm.getNumThreads();
45
+ if (typeof window === 'undefined') {
46
+ try {
47
+ return await createAsyncBackend(BackendType.NativeSharedMemory, options, logger);
48
+ } catch (err: any) {
49
+ logger(`Shared memory unavailable (${err.message}), falling back to other backends`);
50
+ try {
51
+ return await createAsyncBackend(BackendType.NativeUnixSocket, options, logger);
52
+ } catch (err: any) {
53
+ logger(`Unix socket unavailable (${err.message}), falling back to WASM`);
54
+ return await createAsyncBackend(BackendType.Wasm, options, logger);
55
+ }
56
+ }
57
+ } else {
58
+ logger(`In browser, using WASM over worker backend.`);
59
+ return await createAsyncBackend(BackendType.WasmWorker, options, logger);
60
+ }
77
61
  }
78
62
 
79
63
  async initSRSForCircuitSize(circuitSize: number): Promise<void> {
@@ -81,18 +65,18 @@ export class Barretenberg extends BarretenbergApi {
81
65
  const crs = await Crs.new(Math.max(circuitSize, minSRSSize) + 1, this.options.crsPath, this.options.logger);
82
66
  // TODO(https://github.com/AztecProtocol/barretenberg/issues/1129): Do slab allocator initialization?
83
67
  // await this.commonInitSlabAllocator(circuitSize);
84
- await this.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
68
+ await this.srsInitSrs({ pointsBuf: crs.getG1Data(), numPoints: crs.numPoints, g2Point: crs.getG2Data() });
85
69
  }
86
70
 
87
- async initSRSClientIVC(srsSize = this.getDefaultSrsSize()): Promise<void> {
71
+ async initSRSChonk(srsSize = this.getDefaultSrsSize()): Promise<void> {
88
72
  // crsPath can be undefined
89
73
  const crs = await Crs.new(srsSize + 1, this.options.crsPath, this.options.logger);
90
74
  const grumpkinCrs = await GrumpkinCrs.new(2 ** 16 + 1, this.options.crsPath, this.options.logger);
91
75
 
92
76
  // Load CRS into wasm global CRS state.
93
77
  // TODO: Make RawBuffer be default behavior, and have a specific Vector type for when wanting length prefixed.
94
- await this.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
95
- await this.srsInitGrumpkinSrs(new RawBuffer(grumpkinCrs.getG1Data()), grumpkinCrs.numPoints);
78
+ await this.srsInitSrs({ pointsBuf: crs.getG1Data(), numPoints: crs.numPoints, g2Point: crs.getG2Data() });
79
+ await this.srsInitGrumpkinSrs({ pointsBuf: grumpkinCrs.getG1Data(), numPoints: grumpkinCrs.numPoints });
96
80
  }
97
81
 
98
82
  getDefaultSrsSize(): number {
@@ -104,101 +88,136 @@ export class Barretenberg extends BarretenbergApi {
104
88
  return 2 ** 20;
105
89
  }
106
90
 
91
+ async acirGetCircuitSizes(
92
+ bytecode: Uint8Array,
93
+ recursive: boolean,
94
+ honkRecursion: boolean,
95
+ ): Promise<[number, number]> {
96
+ const response = await this.circuitStats({
97
+ circuit: { name: '', bytecode, verificationKey: new Uint8Array() },
98
+ includeGatesPerOpcode: false,
99
+ settings: {
100
+ ipaAccumulation: false,
101
+ oracleHashType: honkRecursion ? 'poseidon2' : 'keccak',
102
+ disableZk: !recursive,
103
+ optimizedSolidityVerifier: false,
104
+ },
105
+ });
106
+ return [response.numGates, response.numGatesDyadic];
107
+ }
108
+
107
109
  async acirInitSRS(bytecode: Uint8Array, recursive: boolean, honkRecursion: boolean): Promise<void> {
108
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
109
- const [_total, subgroupSize] = await this.acirGetCircuitSizes(bytecode, recursive, honkRecursion);
110
+ const [_, subgroupSize] = await this.acirGetCircuitSizes(bytecode, recursive, honkRecursion);
110
111
  return this.initSRSForCircuitSize(subgroupSize);
111
112
  }
112
113
 
113
114
  async destroy() {
114
- await this.wasm.destroy();
115
- await this.worker.terminate();
116
- }
117
-
118
- getWasm() {
119
- return this.wasm;
120
- }
121
-
122
- // Wrap ClientIVC methods used by AztecClientBackend and UltraHonkBackend
123
- async clientIvcStart(command: ClientIvcStart) {
124
- return this.bbApi.clientIvcStart(command);
125
- }
126
-
127
- async clientIvcLoad(command: ClientIvcLoad) {
128
- return this.bbApi.clientIvcLoad(command);
129
- }
130
-
131
- async clientIvcAccumulate(command: ClientIvcAccumulate) {
132
- return this.bbApi.clientIvcAccumulate(command);
115
+ return super.destroy();
133
116
  }
134
117
 
135
- async clientIvcProve(command: ClientIvcProve) {
136
- return this.bbApi.clientIvcProve(command);
137
- }
138
-
139
- async clientIvcVerify(command: ClientIvcVerify) {
140
- return this.bbApi.clientIvcVerify(command);
141
- }
142
-
143
- async clientIvcComputeIvcVk(command: ClientIvcComputeIvcVk) {
144
- return this.bbApi.clientIvcComputeIvcVk(command);
118
+ /**
119
+ * Initialize the singleton instance of Barretenberg.
120
+ * @param options Backend configuration options
121
+ */
122
+ static async initSingleton(options: BackendOptions = {}) {
123
+ if (!barretenbergSingletonPromise) {
124
+ barretenbergSingletonPromise = Barretenberg.new(options);
125
+ }
126
+ try {
127
+ barretenbergSingleton = await barretenbergSingletonPromise;
128
+ return barretenbergSingleton;
129
+ } catch (error) {
130
+ // If initialization fails, clear the singleton so next call can retry
131
+ barretenbergSingleton = undefined!;
132
+ barretenbergSingletonPromise = undefined!;
133
+ throw error;
134
+ }
145
135
  }
146
136
 
147
- async clientIvcStats(command: ClientIvcStats) {
148
- return this.bbApi.clientIvcStats(command);
137
+ static async destroySingleton() {
138
+ if (barretenbergSingleton) {
139
+ await barretenbergSingleton.destroy();
140
+ barretenbergSingleton = undefined!;
141
+ barretenbergSingletonPromise = undefined!;
142
+ }
149
143
  }
150
144
 
151
- // Wrap circuit methods used by BbApiUltraHonkBackend
152
- async circuitProve(command: CircuitProve) {
153
- return this.bbApi.circuitProve(command);
145
+ /**
146
+ * Get the singleton instance of Barretenberg.
147
+ * Must call initSingleton() first.
148
+ */
149
+ static getSingleton() {
150
+ if (!barretenbergSingleton) {
151
+ throw new Error('First call Barretenberg.initSingleton() on @aztec/bb.js module.');
152
+ }
153
+ return barretenbergSingleton;
154
154
  }
155
+ }
155
156
 
156
- async circuitComputeVk(command: CircuitComputeVk) {
157
- return this.bbApi.circuitComputeVk(command);
158
- }
157
+ let barretenbergSingletonPromise: Promise<Barretenberg>;
158
+ let barretenbergSingleton: Barretenberg;
159
159
 
160
- async circuitVerify(command: CircuitVerify) {
161
- return this.bbApi.circuitVerify(command);
162
- }
160
+ let barretenbergSyncSingletonPromise: Promise<BarretenbergSync>;
161
+ let barretenbergSyncSingleton: BarretenbergSync;
163
162
 
164
- async vkAsFields(command: VkAsFields) {
165
- return this.bbApi.vkAsFields(command);
163
+ export class BarretenbergSync extends SyncApi {
164
+ constructor(backend: IMsgpackBackendSync) {
165
+ super(backend);
166
166
  }
167
167
 
168
- }
168
+ /**
169
+ * Create a new BarretenbergSync instance.
170
+ *
171
+ * If options.backend is set: uses that specific backend (throws if unavailable)
172
+ * If options.backend is unset: tries backends in order with fallback:
173
+ * 1. NativeSharedMem (if bb binary + NAPI module available)
174
+ * 2. Wasm
175
+ *
176
+ * Supported backends: Wasm, NativeSharedMem
177
+ * Not supported: WasmWorker (no workers in sync), NativeUnixSocket (async only)
178
+ */
179
+ static async new(options: BackendOptions = {}) {
180
+ const logger = options.logger ?? createDebugLogger('bb_sync');
169
181
 
170
- let barretenbergSyncSingletonPromise: Promise<BarretenbergSync>;
171
- let barretenbergSyncSingleton: BarretenbergSync;
182
+ if (options.backend) {
183
+ return await createSyncBackend(options.backend, options, logger);
184
+ }
172
185
 
173
- export class BarretenbergSync extends BarretenbergApiSync {
174
- private constructor(wasm: BarretenbergWasmMain) {
175
- super(wasm);
176
- }
186
+ // Try native, fallback to WASM.
187
+ try {
188
+ return await createSyncBackend(BackendType.NativeSharedMemory, options, logger);
189
+ } catch (err: any) {
190
+ logger(`Shared memory unavailable (${err.message}), falling back to WASM`);
191
+ }
177
192
 
178
- private static async new(wasmPath?: string, logger: (msg: string) => void = createDebugLogger('bb_wasm_sync')) {
179
- const wasm = new BarretenbergWasmMain();
180
- const { module, threads } = await fetchModuleAndThreads(1, wasmPath, logger);
181
- await wasm.init(module, threads, logger);
182
- return new BarretenbergSync(wasm);
193
+ return await createSyncBackend(BackendType.Wasm, options, logger);
183
194
  }
184
195
 
185
- static async initSingleton(wasmPath?: string, logger: (msg: string) => void = createDebugLogger('bb_wasm_sync')) {
196
+ /**
197
+ * Initialize the singleton instance.
198
+ * @param options Backend configuration options
199
+ */
200
+ static async initSingleton(options: BackendOptions = {}) {
186
201
  if (!barretenbergSyncSingletonPromise) {
187
- barretenbergSyncSingletonPromise = BarretenbergSync.new(wasmPath, logger);
202
+ barretenbergSyncSingletonPromise = BarretenbergSync.new(options);
188
203
  }
189
204
 
190
205
  barretenbergSyncSingleton = await barretenbergSyncSingletonPromise;
191
206
  return barretenbergSyncSingleton;
192
207
  }
193
208
 
209
+ static destroySingleton() {
210
+ if (barretenbergSyncSingleton) {
211
+ barretenbergSyncSingleton.destroy();
212
+ barretenbergSyncSingleton = undefined!;
213
+ barretenbergSyncSingletonPromise = undefined!;
214
+ }
215
+ }
216
+
194
217
  static getSingleton() {
195
218
  if (!barretenbergSyncSingleton) {
196
219
  throw new Error('First call BarretenbergSync.initSingleton() on @aztec/bb.js module.');
197
220
  }
198
221
  return barretenbergSyncSingleton;
199
222
  }
200
-
201
- getWasm() {
202
- return this.wasm;
203
- }
204
223
  }