@aztec/bb.js 0.0.0-devnet

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 (545) hide show
  1. package/README.md +149 -0
  2. package/dest/browser/522.index.js +10 -0
  3. package/dest/browser/barretenberg/backend.d.ts +85 -0
  4. package/dest/browser/barretenberg/backend.d.ts.map +1 -0
  5. package/dest/browser/barretenberg/index.d.ts +47 -0
  6. package/dest/browser/barretenberg/index.d.ts.map +1 -0
  7. package/dest/browser/barretenberg/verifier.d.ts +16 -0
  8. package/dest/browser/barretenberg/verifier.d.ts.map +1 -0
  9. package/dest/browser/barretenberg_api/index.d.ts +113 -0
  10. package/dest/browser/barretenberg_api/index.d.ts.map +1 -0
  11. package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +44 -0
  12. package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -0
  13. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts +2 -0
  14. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts.map +1 -0
  15. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +3 -0
  16. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts.map +1 -0
  17. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts +4 -0
  18. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +1 -0
  19. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +21 -0
  20. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -0
  21. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +47 -0
  22. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -0
  23. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts +2 -0
  24. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts.map +1 -0
  25. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +3 -0
  26. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts.map +1 -0
  27. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts +4 -0
  28. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +1 -0
  29. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts +28 -0
  30. package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts.map +1 -0
  31. package/dest/browser/barretenberg_wasm/fetch_code/browser/index.d.ts +2 -0
  32. package/dest/browser/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -0
  33. package/dest/browser/barretenberg_wasm/fetch_code/index.d.ts +2 -0
  34. package/dest/browser/barretenberg_wasm/fetch_code/index.d.ts.map +1 -0
  35. package/dest/browser/barretenberg_wasm/fetch_code/node/index.d.ts +2 -0
  36. package/dest/browser/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -0
  37. package/dest/browser/barretenberg_wasm/helpers/browser/index.d.ts +6 -0
  38. package/dest/browser/barretenberg_wasm/helpers/browser/index.d.ts.map +1 -0
  39. package/dest/browser/barretenberg_wasm/helpers/index.d.ts +2 -0
  40. package/dest/browser/barretenberg_wasm/helpers/index.d.ts.map +1 -0
  41. package/dest/browser/barretenberg_wasm/helpers/node/index.d.ts +22 -0
  42. package/dest/browser/barretenberg_wasm/helpers/node/index.d.ts.map +1 -0
  43. package/dest/browser/barretenberg_wasm/helpers/node/node_endpoint.d.ts +8 -0
  44. package/dest/browser/barretenberg_wasm/helpers/node/node_endpoint.d.ts.map +1 -0
  45. package/dest/browser/barretenberg_wasm/index.d.ts +18 -0
  46. package/dest/browser/barretenberg_wasm/index.d.ts.map +1 -0
  47. package/dest/browser/bigint-array/index.d.ts +3 -0
  48. package/dest/browser/bigint-array/index.d.ts.map +1 -0
  49. package/dest/browser/crs/browser/cached_net_crs.d.ts +43 -0
  50. package/dest/browser/crs/browser/cached_net_crs.d.ts.map +1 -0
  51. package/dest/browser/crs/browser/index.d.ts +2 -0
  52. package/dest/browser/crs/browser/index.d.ts.map +1 -0
  53. package/dest/browser/crs/index.d.ts +2 -0
  54. package/dest/browser/crs/index.d.ts.map +1 -0
  55. package/dest/browser/crs/net_crs.d.ts +61 -0
  56. package/dest/browser/crs/net_crs.d.ts.map +1 -0
  57. package/dest/browser/crs/node/index.d.ts +36 -0
  58. package/dest/browser/crs/node/index.d.ts.map +1 -0
  59. package/dest/browser/index.d.ts +5 -0
  60. package/dest/browser/index.d.ts.map +1 -0
  61. package/dest/browser/index.js +16205 -0
  62. package/dest/browser/proof/index.d.ts +19 -0
  63. package/dest/browser/proof/index.d.ts.map +1 -0
  64. package/dest/browser/random/browser/index.d.ts +2 -0
  65. package/dest/browser/random/browser/index.d.ts.map +1 -0
  66. package/dest/browser/random/index.d.ts +2 -0
  67. package/dest/browser/random/index.d.ts.map +1 -0
  68. package/dest/browser/random/node/index.d.ts +2 -0
  69. package/dest/browser/random/node/index.d.ts.map +1 -0
  70. package/dest/browser/serialize/buffer_reader.d.ts +28 -0
  71. package/dest/browser/serialize/buffer_reader.d.ts.map +1 -0
  72. package/dest/browser/serialize/index.d.ts +4 -0
  73. package/dest/browser/serialize/index.d.ts.map +1 -0
  74. package/dest/browser/serialize/output_type.d.ts +11 -0
  75. package/dest/browser/serialize/output_type.d.ts.map +1 -0
  76. package/dest/browser/serialize/serialize.d.ts +53 -0
  77. package/dest/browser/serialize/serialize.d.ts.map +1 -0
  78. package/dest/browser/types/fields.d.ts +43 -0
  79. package/dest/browser/types/fields.d.ts.map +1 -0
  80. package/dest/browser/types/fixed_size_buffer.d.ts +26 -0
  81. package/dest/browser/types/fixed_size_buffer.d.ts.map +1 -0
  82. package/dest/browser/types/index.d.ts +6 -0
  83. package/dest/browser/types/index.d.ts.map +1 -0
  84. package/dest/browser/types/point.d.ts +17 -0
  85. package/dest/browser/types/point.d.ts.map +1 -0
  86. package/dest/browser/types/ptr.d.ts +13 -0
  87. package/dest/browser/types/ptr.d.ts.map +1 -0
  88. package/dest/browser/types/raw_buffer.d.ts +3 -0
  89. package/dest/browser/types/raw_buffer.d.ts.map +1 -0
  90. package/dest/node/async_map/index.d.ts +10 -0
  91. package/dest/node/async_map/index.d.ts.map +1 -0
  92. package/dest/node/async_map/index.js +16 -0
  93. package/dest/node/barretenberg/backend.d.ts +85 -0
  94. package/dest/node/barretenberg/backend.d.ts.map +1 -0
  95. package/dest/node/barretenberg/backend.js +247 -0
  96. package/dest/node/barretenberg/blake2s.test.d.ts +2 -0
  97. package/dest/node/barretenberg/blake2s.test.d.ts.map +1 -0
  98. package/dest/node/barretenberg/blake2s.test.js +54 -0
  99. package/dest/node/barretenberg/common.test.d.ts +2 -0
  100. package/dest/node/barretenberg/common.test.d.ts.map +1 -0
  101. package/dest/node/barretenberg/common.test.js +20 -0
  102. package/dest/node/barretenberg/index.d.ts +47 -0
  103. package/dest/node/barretenberg/index.d.ts.map +1 -0
  104. package/dest/node/barretenberg/index.js +97 -0
  105. package/dest/node/barretenberg/pedersen.test.d.ts +2 -0
  106. package/dest/node/barretenberg/pedersen.test.d.ts.map +1 -0
  107. package/dest/node/barretenberg/pedersen.test.js +55 -0
  108. package/dest/node/barretenberg/poseidon.test.d.ts +2 -0
  109. package/dest/node/barretenberg/poseidon.test.d.ts.map +1 -0
  110. package/dest/node/barretenberg/poseidon.test.js +35 -0
  111. package/dest/node/barretenberg/schnorr.test.d.ts +2 -0
  112. package/dest/node/barretenberg/schnorr.test.d.ts.map +1 -0
  113. package/dest/node/barretenberg/schnorr.test.js +113 -0
  114. package/dest/node/barretenberg/verifier.d.ts +16 -0
  115. package/dest/node/barretenberg/verifier.d.ts.map +1 -0
  116. package/dest/node/barretenberg/verifier.js +40 -0
  117. package/dest/node/barretenberg_api/index.d.ts +113 -0
  118. package/dest/node/barretenberg_api/index.d.ts.map +1 -0
  119. package/dest/node/barretenberg_api/index.js +728 -0
  120. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  121. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +44 -0
  122. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -0
  123. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.js +125 -0
  124. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts +2 -0
  125. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts.map +1 -0
  126. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.js +10 -0
  127. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +3 -0
  128. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts.map +1 -0
  129. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.js +12 -0
  130. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts +4 -0
  131. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +1 -0
  132. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js +18 -0
  133. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.d.ts +2 -0
  134. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.d.ts.map +1 -0
  135. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.js +9 -0
  136. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +21 -0
  137. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -0
  138. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +57 -0
  139. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +47 -0
  140. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -0
  141. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js +107 -0
  142. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts +2 -0
  143. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts.map +1 -0
  144. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.js +10 -0
  145. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +3 -0
  146. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts.map +1 -0
  147. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.js +12 -0
  148. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts +4 -0
  149. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +1 -0
  150. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.js +18 -0
  151. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.d.ts +2 -0
  152. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.d.ts.map +1 -0
  153. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.js +9 -0
  154. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts +28 -0
  155. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts.map +1 -0
  156. package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/index.js +40 -0
  157. package/dest/node/barretenberg_wasm/fetch_code/browser/index.d.ts +2 -0
  158. package/dest/node/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -0
  159. package/dest/node/barretenberg_wasm/fetch_code/browser/index.js +12 -0
  160. package/dest/node/barretenberg_wasm/fetch_code/index.d.ts +2 -0
  161. package/dest/node/barretenberg_wasm/fetch_code/index.d.ts.map +1 -0
  162. package/dest/node/barretenberg_wasm/fetch_code/index.js +2 -0
  163. package/dest/node/barretenberg_wasm/fetch_code/node/index.d.ts +2 -0
  164. package/dest/node/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -0
  165. package/dest/node/barretenberg_wasm/fetch_code/node/index.js +22 -0
  166. package/dest/node/barretenberg_wasm/helpers/browser/index.d.ts +6 -0
  167. package/dest/node/barretenberg_wasm/helpers/browser/index.d.ts.map +1 -0
  168. package/dest/node/barretenberg_wasm/helpers/browser/index.js +18 -0
  169. package/dest/node/barretenberg_wasm/helpers/index.d.ts +2 -0
  170. package/dest/node/barretenberg_wasm/helpers/index.d.ts.map +1 -0
  171. package/dest/node/barretenberg_wasm/helpers/index.js +2 -0
  172. package/dest/node/barretenberg_wasm/helpers/node/index.d.ts +22 -0
  173. package/dest/node/barretenberg_wasm/helpers/node/index.d.ts.map +1 -0
  174. package/dest/node/barretenberg_wasm/helpers/node/index.js +39 -0
  175. package/dest/node/barretenberg_wasm/helpers/node/node_endpoint.d.ts +8 -0
  176. package/dest/node/barretenberg_wasm/helpers/node/node_endpoint.d.ts.map +1 -0
  177. package/dest/node/barretenberg_wasm/helpers/node/node_endpoint.js +28 -0
  178. package/dest/node/barretenberg_wasm/index.d.ts +18 -0
  179. package/dest/node/barretenberg_wasm/index.d.ts.map +1 -0
  180. package/dest/node/barretenberg_wasm/index.js +45 -0
  181. package/dest/node/barretenberg_wasm/index.test.d.ts +2 -0
  182. package/dest/node/barretenberg_wasm/index.test.d.ts.map +1 -0
  183. package/dest/node/barretenberg_wasm/index.test.js +38 -0
  184. package/dest/node/benchmark/index.d.ts +3 -0
  185. package/dest/node/benchmark/index.d.ts.map +1 -0
  186. package/dest/node/benchmark/index.js +25 -0
  187. package/dest/node/benchmark/timer.d.ts +34 -0
  188. package/dest/node/benchmark/timer.d.ts.map +1 -0
  189. package/dest/node/benchmark/timer.js +41 -0
  190. package/dest/node/bigint-array/index.d.ts +3 -0
  191. package/dest/node/bigint-array/index.d.ts.map +1 -0
  192. package/dest/node/bigint-array/index.js +21 -0
  193. package/dest/node/bindgen/function_declaration.d.ts +11 -0
  194. package/dest/node/bindgen/function_declaration.d.ts.map +1 -0
  195. package/dest/node/bindgen/function_declaration.js +2 -0
  196. package/dest/node/bindgen/index.d.ts +2 -0
  197. package/dest/node/bindgen/index.d.ts.map +1 -0
  198. package/dest/node/bindgen/index.js +15 -0
  199. package/dest/node/bindgen/mappings.d.ts +4 -0
  200. package/dest/node/bindgen/mappings.d.ts.map +1 -0
  201. package/dest/node/bindgen/mappings.js +63 -0
  202. package/dest/node/bindgen/rust.d.ts +2 -0
  203. package/dest/node/bindgen/rust.d.ts.map +1 -0
  204. package/dest/node/bindgen/rust.js +43 -0
  205. package/dest/node/bindgen/to_camel_case.d.ts +2 -0
  206. package/dest/node/bindgen/to_camel_case.d.ts.map +1 -0
  207. package/dest/node/bindgen/to_camel_case.js +11 -0
  208. package/dest/node/bindgen/typescript.d.ts +2 -0
  209. package/dest/node/bindgen/typescript.d.ts.map +1 -0
  210. package/dest/node/bindgen/typescript.js +100 -0
  211. package/dest/node/crs/browser/cached_net_crs.d.ts +43 -0
  212. package/dest/node/crs/browser/cached_net_crs.d.ts.map +1 -0
  213. package/dest/node/crs/browser/cached_net_crs.js +90 -0
  214. package/dest/node/crs/browser/index.d.ts +2 -0
  215. package/dest/node/crs/browser/index.d.ts.map +1 -0
  216. package/dest/node/crs/browser/index.js +2 -0
  217. package/dest/node/crs/index.d.ts +2 -0
  218. package/dest/node/crs/index.d.ts.map +1 -0
  219. package/dest/node/crs/index.js +2 -0
  220. package/dest/node/crs/net_crs.d.ts +61 -0
  221. package/dest/node/crs/net_crs.d.ts.map +1 -0
  222. package/dest/node/crs/net_crs.js +97 -0
  223. package/dest/node/crs/node/ignition_files_crs.d.ts +38 -0
  224. package/dest/node/crs/node/ignition_files_crs.d.ts.map +1 -0
  225. package/dest/node/crs/node/ignition_files_crs.js +65 -0
  226. package/dest/node/crs/node/index.d.ts +36 -0
  227. package/dest/node/crs/node/index.d.ts.map +1 -0
  228. package/dest/node/crs/node/index.js +93 -0
  229. package/dest/node/examples/simple.rawtest.d.ts +2 -0
  230. package/dest/node/examples/simple.rawtest.d.ts.map +1 -0
  231. package/dest/node/examples/simple.rawtest.js +30 -0
  232. package/dest/node/examples/simple.test.d.ts +2 -0
  233. package/dest/node/examples/simple.test.d.ts.map +1 -0
  234. package/dest/node/examples/simple.test.js +23 -0
  235. package/dest/node/index.d.ts +5 -0
  236. package/dest/node/index.d.ts.map +1 -0
  237. package/dest/node/index.js +5 -0
  238. package/dest/node/main.d.ts +23 -0
  239. package/dest/node/main.d.ts.map +1 -0
  240. package/dest/node/main.js +712 -0
  241. package/dest/node/proof/index.d.ts +19 -0
  242. package/dest/node/proof/index.d.ts.map +1 -0
  243. package/dest/node/proof/index.js +85 -0
  244. package/dest/node/random/browser/index.d.ts +2 -0
  245. package/dest/node/random/browser/index.d.ts.map +1 -0
  246. package/dest/node/random/browser/index.js +31 -0
  247. package/dest/node/random/index.d.ts +2 -0
  248. package/dest/node/random/index.d.ts.map +1 -0
  249. package/dest/node/random/index.js +2 -0
  250. package/dest/node/random/node/index.d.ts +2 -0
  251. package/dest/node/random/node/index.d.ts.map +1 -0
  252. package/dest/node/random/node/index.js +5 -0
  253. package/dest/node/serialize/buffer_reader.d.ts +28 -0
  254. package/dest/node/serialize/buffer_reader.d.ts.map +1 -0
  255. package/dest/node/serialize/buffer_reader.js +66 -0
  256. package/dest/node/serialize/index.d.ts +4 -0
  257. package/dest/node/serialize/index.d.ts.map +1 -0
  258. package/dest/node/serialize/index.js +4 -0
  259. package/dest/node/serialize/output_type.d.ts +11 -0
  260. package/dest/node/serialize/output_type.d.ts.map +1 -0
  261. package/dest/node/serialize/output_type.js +44 -0
  262. package/dest/node/serialize/serialize.d.ts +53 -0
  263. package/dest/node/serialize/serialize.d.ts.map +1 -0
  264. package/dest/node/serialize/serialize.js +139 -0
  265. package/dest/node/types/fields.d.ts +43 -0
  266. package/dest/node/types/fields.d.ts.map +1 -0
  267. package/dest/node/types/fields.js +97 -0
  268. package/dest/node/types/fixed_size_buffer.d.ts +26 -0
  269. package/dest/node/types/fixed_size_buffer.d.ts.map +1 -0
  270. package/dest/node/types/fixed_size_buffer.js +51 -0
  271. package/dest/node/types/index.d.ts +6 -0
  272. package/dest/node/types/index.d.ts.map +1 -0
  273. package/dest/node/types/index.js +6 -0
  274. package/dest/node/types/point.d.ts +17 -0
  275. package/dest/node/types/point.d.ts.map +1 -0
  276. package/dest/node/types/point.js +31 -0
  277. package/dest/node/types/ptr.d.ts +13 -0
  278. package/dest/node/types/ptr.d.ts.map +1 -0
  279. package/dest/node/types/ptr.js +19 -0
  280. package/dest/node/types/raw_buffer.d.ts +3 -0
  281. package/dest/node/types/raw_buffer.d.ts.map +1 -0
  282. package/dest/node/types/raw_buffer.js +5 -0
  283. package/dest/node-cjs/async_map/index.d.ts +10 -0
  284. package/dest/node-cjs/async_map/index.d.ts.map +1 -0
  285. package/dest/node-cjs/async_map/index.js +20 -0
  286. package/dest/node-cjs/barretenberg/backend.d.ts +85 -0
  287. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -0
  288. package/dest/node-cjs/barretenberg/backend.js +253 -0
  289. package/dest/node-cjs/barretenberg/blake2s.test.d.ts +2 -0
  290. package/dest/node-cjs/barretenberg/blake2s.test.d.ts.map +1 -0
  291. package/dest/node-cjs/barretenberg/blake2s.test.js +56 -0
  292. package/dest/node-cjs/barretenberg/common.test.d.ts +2 -0
  293. package/dest/node-cjs/barretenberg/common.test.d.ts.map +1 -0
  294. package/dest/node-cjs/barretenberg/common.test.js +22 -0
  295. package/dest/node-cjs/barretenberg/index.d.ts +47 -0
  296. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -0
  297. package/dest/node-cjs/barretenberg/index.js +106 -0
  298. package/dest/node-cjs/barretenberg/pedersen.test.d.ts +2 -0
  299. package/dest/node-cjs/barretenberg/pedersen.test.d.ts.map +1 -0
  300. package/dest/node-cjs/barretenberg/pedersen.test.js +57 -0
  301. package/dest/node-cjs/barretenberg/poseidon.test.d.ts +2 -0
  302. package/dest/node-cjs/barretenberg/poseidon.test.d.ts.map +1 -0
  303. package/dest/node-cjs/barretenberg/poseidon.test.js +37 -0
  304. package/dest/node-cjs/barretenberg/schnorr.test.d.ts +2 -0
  305. package/dest/node-cjs/barretenberg/schnorr.test.d.ts.map +1 -0
  306. package/dest/node-cjs/barretenberg/schnorr.test.js +115 -0
  307. package/dest/node-cjs/barretenberg/verifier.d.ts +16 -0
  308. package/dest/node-cjs/barretenberg/verifier.d.ts.map +1 -0
  309. package/dest/node-cjs/barretenberg/verifier.js +44 -0
  310. package/dest/node-cjs/barretenberg_api/index.d.ts +113 -0
  311. package/dest/node-cjs/barretenberg_api/index.d.ts.map +1 -0
  312. package/dest/node-cjs/barretenberg_api/index.js +733 -0
  313. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  314. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +44 -0
  315. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -0
  316. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.js +130 -0
  317. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts +2 -0
  318. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts.map +1 -0
  319. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.js +15 -0
  320. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +3 -0
  321. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts.map +1 -0
  322. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.js +15 -0
  323. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts +4 -0
  324. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +1 -0
  325. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js +22 -0
  326. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.d.ts +2 -0
  327. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.d.ts.map +1 -0
  328. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.js +11 -0
  329. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +21 -0
  330. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -0
  331. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +61 -0
  332. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +47 -0
  333. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -0
  334. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +112 -0
  335. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts +2 -0
  336. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts.map +1 -0
  337. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.js +15 -0
  338. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +3 -0
  339. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts.map +1 -0
  340. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.js +15 -0
  341. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts +4 -0
  342. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +1 -0
  343. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.js +22 -0
  344. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.d.ts +2 -0
  345. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.d.ts.map +1 -0
  346. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.js +11 -0
  347. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts +28 -0
  348. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts.map +1 -0
  349. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/index.js +44 -0
  350. package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.d.ts +2 -0
  351. package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -0
  352. package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.js +17 -0
  353. package/dest/node-cjs/barretenberg_wasm/fetch_code/index.d.ts +2 -0
  354. package/dest/node-cjs/barretenberg_wasm/fetch_code/index.d.ts.map +1 -0
  355. package/dest/node-cjs/barretenberg_wasm/fetch_code/index.js +5 -0
  356. package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.d.ts +2 -0
  357. package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -0
  358. package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.js +27 -0
  359. package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.d.ts +6 -0
  360. package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.d.ts.map +1 -0
  361. package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.js +26 -0
  362. package/dest/node-cjs/barretenberg_wasm/helpers/index.d.ts +2 -0
  363. package/dest/node-cjs/barretenberg_wasm/helpers/index.d.ts.map +1 -0
  364. package/dest/node-cjs/barretenberg_wasm/helpers/index.js +5 -0
  365. package/dest/node-cjs/barretenberg_wasm/helpers/node/index.d.ts +22 -0
  366. package/dest/node-cjs/barretenberg_wasm/helpers/node/index.d.ts.map +1 -0
  367. package/dest/node-cjs/barretenberg_wasm/helpers/node/index.js +48 -0
  368. package/dest/node-cjs/barretenberg_wasm/helpers/node/node_endpoint.d.ts +8 -0
  369. package/dest/node-cjs/barretenberg_wasm/helpers/node/node_endpoint.d.ts.map +1 -0
  370. package/dest/node-cjs/barretenberg_wasm/helpers/node/node_endpoint.js +32 -0
  371. package/dest/node-cjs/barretenberg_wasm/index.d.ts +18 -0
  372. package/dest/node-cjs/barretenberg_wasm/index.d.ts.map +1 -0
  373. package/dest/node-cjs/barretenberg_wasm/index.js +51 -0
  374. package/dest/node-cjs/barretenberg_wasm/index.test.d.ts +2 -0
  375. package/dest/node-cjs/barretenberg_wasm/index.test.d.ts.map +1 -0
  376. package/dest/node-cjs/barretenberg_wasm/index.test.js +40 -0
  377. package/dest/node-cjs/benchmark/index.d.ts +3 -0
  378. package/dest/node-cjs/benchmark/index.d.ts.map +1 -0
  379. package/dest/node-cjs/benchmark/index.js +30 -0
  380. package/dest/node-cjs/benchmark/timer.d.ts +34 -0
  381. package/dest/node-cjs/benchmark/timer.d.ts.map +1 -0
  382. package/dest/node-cjs/benchmark/timer.js +45 -0
  383. package/dest/node-cjs/bigint-array/index.d.ts +3 -0
  384. package/dest/node-cjs/bigint-array/index.d.ts.map +1 -0
  385. package/dest/node-cjs/bigint-array/index.js +26 -0
  386. package/dest/node-cjs/bindgen/function_declaration.d.ts +11 -0
  387. package/dest/node-cjs/bindgen/function_declaration.d.ts.map +1 -0
  388. package/dest/node-cjs/bindgen/function_declaration.js +3 -0
  389. package/dest/node-cjs/bindgen/index.d.ts +2 -0
  390. package/dest/node-cjs/bindgen/index.d.ts.map +1 -0
  391. package/dest/node-cjs/bindgen/index.js +17 -0
  392. package/dest/node-cjs/bindgen/mappings.d.ts +4 -0
  393. package/dest/node-cjs/bindgen/mappings.d.ts.map +1 -0
  394. package/dest/node-cjs/bindgen/mappings.js +68 -0
  395. package/dest/node-cjs/bindgen/rust.d.ts +2 -0
  396. package/dest/node-cjs/bindgen/rust.d.ts.map +1 -0
  397. package/dest/node-cjs/bindgen/rust.js +48 -0
  398. package/dest/node-cjs/bindgen/to_camel_case.d.ts +2 -0
  399. package/dest/node-cjs/bindgen/to_camel_case.d.ts.map +1 -0
  400. package/dest/node-cjs/bindgen/to_camel_case.js +15 -0
  401. package/dest/node-cjs/bindgen/typescript.d.ts +2 -0
  402. package/dest/node-cjs/bindgen/typescript.d.ts.map +1 -0
  403. package/dest/node-cjs/bindgen/typescript.js +105 -0
  404. package/dest/node-cjs/crs/browser/cached_net_crs.d.ts +43 -0
  405. package/dest/node-cjs/crs/browser/cached_net_crs.d.ts.map +1 -0
  406. package/dest/node-cjs/crs/browser/cached_net_crs.js +95 -0
  407. package/dest/node-cjs/crs/browser/index.d.ts +2 -0
  408. package/dest/node-cjs/crs/browser/index.d.ts.map +1 -0
  409. package/dest/node-cjs/crs/browser/index.js +7 -0
  410. package/dest/node-cjs/crs/index.d.ts +2 -0
  411. package/dest/node-cjs/crs/index.d.ts.map +1 -0
  412. package/dest/node-cjs/crs/index.js +7 -0
  413. package/dest/node-cjs/crs/net_crs.d.ts +61 -0
  414. package/dest/node-cjs/crs/net_crs.d.ts.map +1 -0
  415. package/dest/node-cjs/crs/net_crs.js +102 -0
  416. package/dest/node-cjs/crs/node/ignition_files_crs.d.ts +38 -0
  417. package/dest/node-cjs/crs/node/ignition_files_crs.d.ts.map +1 -0
  418. package/dest/node-cjs/crs/node/ignition_files_crs.js +69 -0
  419. package/dest/node-cjs/crs/node/index.d.ts +36 -0
  420. package/dest/node-cjs/crs/node/index.d.ts.map +1 -0
  421. package/dest/node-cjs/crs/node/index.js +99 -0
  422. package/dest/node-cjs/examples/simple.rawtest.d.ts +2 -0
  423. package/dest/node-cjs/examples/simple.rawtest.d.ts.map +1 -0
  424. package/dest/node-cjs/examples/simple.rawtest.js +33 -0
  425. package/dest/node-cjs/examples/simple.test.d.ts +2 -0
  426. package/dest/node-cjs/examples/simple.test.d.ts.map +1 -0
  427. package/dest/node-cjs/examples/simple.test.js +25 -0
  428. package/dest/node-cjs/index.d.ts +5 -0
  429. package/dest/node-cjs/index.d.ts.map +1 -0
  430. package/dest/node-cjs/index.js +20 -0
  431. package/dest/node-cjs/main.d.ts +23 -0
  432. package/dest/node-cjs/main.d.ts.map +1 -0
  433. package/dest/node-cjs/main.js +735 -0
  434. package/dest/node-cjs/package.json +3 -0
  435. package/dest/node-cjs/proof/index.d.ts +19 -0
  436. package/dest/node-cjs/proof/index.d.ts.map +1 -0
  437. package/dest/node-cjs/proof/index.js +93 -0
  438. package/dest/node-cjs/random/browser/index.d.ts +2 -0
  439. package/dest/node-cjs/random/browser/index.d.ts.map +1 -0
  440. package/dest/node-cjs/random/browser/index.js +35 -0
  441. package/dest/node-cjs/random/index.d.ts +2 -0
  442. package/dest/node-cjs/random/index.d.ts.map +1 -0
  443. package/dest/node-cjs/random/index.js +5 -0
  444. package/dest/node-cjs/random/node/index.d.ts +2 -0
  445. package/dest/node-cjs/random/node/index.d.ts.map +1 -0
  446. package/dest/node-cjs/random/node/index.js +9 -0
  447. package/dest/node-cjs/serialize/buffer_reader.d.ts +28 -0
  448. package/dest/node-cjs/serialize/buffer_reader.d.ts.map +1 -0
  449. package/dest/node-cjs/serialize/buffer_reader.js +70 -0
  450. package/dest/node-cjs/serialize/index.d.ts +4 -0
  451. package/dest/node-cjs/serialize/index.d.ts.map +1 -0
  452. package/dest/node-cjs/serialize/index.js +7 -0
  453. package/dest/node-cjs/serialize/output_type.d.ts +11 -0
  454. package/dest/node-cjs/serialize/output_type.d.ts.map +1 -0
  455. package/dest/node-cjs/serialize/output_type.js +52 -0
  456. package/dest/node-cjs/serialize/serialize.d.ts +53 -0
  457. package/dest/node-cjs/serialize/serialize.d.ts.map +1 -0
  458. package/dest/node-cjs/serialize/serialize.js +161 -0
  459. package/dest/node-cjs/types/fields.d.ts +43 -0
  460. package/dest/node-cjs/types/fields.d.ts.map +1 -0
  461. package/dest/node-cjs/types/fields.js +102 -0
  462. package/dest/node-cjs/types/fixed_size_buffer.d.ts +26 -0
  463. package/dest/node-cjs/types/fixed_size_buffer.d.ts.map +1 -0
  464. package/dest/node-cjs/types/fixed_size_buffer.js +57 -0
  465. package/dest/node-cjs/types/index.d.ts +6 -0
  466. package/dest/node-cjs/types/index.d.ts.map +1 -0
  467. package/dest/node-cjs/types/index.js +9 -0
  468. package/dest/node-cjs/types/point.d.ts +17 -0
  469. package/dest/node-cjs/types/point.d.ts.map +1 -0
  470. package/dest/node-cjs/types/point.js +35 -0
  471. package/dest/node-cjs/types/ptr.d.ts +13 -0
  472. package/dest/node-cjs/types/ptr.d.ts.map +1 -0
  473. package/dest/node-cjs/types/ptr.js +23 -0
  474. package/dest/node-cjs/types/raw_buffer.d.ts +3 -0
  475. package/dest/node-cjs/types/raw_buffer.d.ts.map +1 -0
  476. package/dest/node-cjs/types/raw_buffer.js +9 -0
  477. package/package.json +105 -0
  478. package/src/async_map/index.ts +15 -0
  479. package/src/barretenberg/__snapshots__/pedersen.test.ts.snap +156 -0
  480. package/src/barretenberg/__snapshots__/poseidon.test.ts.snap +40 -0
  481. package/src/barretenberg/backend.ts +362 -0
  482. package/src/barretenberg/blake2s.test.ts +70 -0
  483. package/src/barretenberg/common.test.ts +23 -0
  484. package/src/barretenberg/index.ts +130 -0
  485. package/src/barretenberg/pedersen.test.ts +62 -0
  486. package/src/barretenberg/poseidon.test.ts +39 -0
  487. package/src/barretenberg/schnorr.test.ts +182 -0
  488. package/src/barretenberg/verifier.ts +55 -0
  489. package/src/barretenberg_api/index.ts +1305 -0
  490. package/src/barretenberg_wasm/barretenberg_wasm_base/index.ts +138 -0
  491. package/src/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.ts +10 -0
  492. package/src/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.ts +15 -0
  493. package/src/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.ts +18 -0
  494. package/src/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.ts +10 -0
  495. package/src/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.ts +60 -0
  496. package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +138 -0
  497. package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.ts +10 -0
  498. package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.ts +15 -0
  499. package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.ts +18 -0
  500. package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.ts +10 -0
  501. package/src/barretenberg_wasm/barretenberg_wasm_thread/index.ts +47 -0
  502. package/src/barretenberg_wasm/fetch_code/browser/index.ts +12 -0
  503. package/src/barretenberg_wasm/fetch_code/browser/wasm-module.d.ts +4 -0
  504. package/src/barretenberg_wasm/fetch_code/index.ts +1 -0
  505. package/src/barretenberg_wasm/fetch_code/node/index.ts +22 -0
  506. package/src/barretenberg_wasm/helpers/browser/index.ts +22 -0
  507. package/src/barretenberg_wasm/helpers/index.ts +1 -0
  508. package/src/barretenberg_wasm/helpers/node/index.ts +44 -0
  509. package/src/barretenberg_wasm/helpers/node/node_endpoint.ts +28 -0
  510. package/src/barretenberg_wasm/index.test.ts +45 -0
  511. package/src/barretenberg_wasm/index.ts +50 -0
  512. package/src/benchmark/index.ts +26 -0
  513. package/src/benchmark/timer.ts +45 -0
  514. package/src/bigint-array/index.ts +21 -0
  515. package/src/bindgen/function_declaration.ts +11 -0
  516. package/src/bindgen/index.ts +17 -0
  517. package/src/bindgen/mappings.ts +66 -0
  518. package/src/bindgen/rust.ts +52 -0
  519. package/src/bindgen/to_camel_case.ts +10 -0
  520. package/src/bindgen/typescript.ts +116 -0
  521. package/src/crs/browser/cached_net_crs.ts +99 -0
  522. package/src/crs/browser/index.ts +1 -0
  523. package/src/crs/index.ts +1 -0
  524. package/src/crs/net_crs.ts +115 -0
  525. package/src/crs/node/ignition_files_crs.ts +74 -0
  526. package/src/crs/node/index.ts +102 -0
  527. package/src/examples/simple.rawtest.ts +38 -0
  528. package/src/examples/simple.test.ts +28 -0
  529. package/src/index.html +9 -0
  530. package/src/index.ts +12 -0
  531. package/src/main.ts +834 -0
  532. package/src/proof/index.ts +120 -0
  533. package/src/random/browser/index.ts +32 -0
  534. package/src/random/index.ts +1 -0
  535. package/src/random/node/index.ts +5 -0
  536. package/src/serialize/buffer_reader.ts +82 -0
  537. package/src/serialize/index.ts +3 -0
  538. package/src/serialize/output_type.ts +53 -0
  539. package/src/serialize/serialize.ts +157 -0
  540. package/src/types/fields.ts +115 -0
  541. package/src/types/fixed_size_buffer.ts +59 -0
  542. package/src/types/index.ts +5 -0
  543. package/src/types/point.ts +35 -0
  544. package/src/types/ptr.ts +20 -0
  545. package/src/types/raw_buffer.ts +3 -0
package/src/main.ts ADDED
@@ -0,0 +1,834 @@
1
+ #!/usr/bin/env node
2
+ import 'source-map-support/register.js';
3
+ import { Crs, GrumpkinCrs, Barretenberg, RawBuffer } from './index.js';
4
+ import createDebug from 'debug';
5
+ import { readFileSync, writeFileSync } from 'fs';
6
+ import { gunzipSync } from 'zlib';
7
+ import { ungzip } from 'pako';
8
+ import { Command } from 'commander';
9
+ import { decode } from '@msgpack/msgpack';
10
+ import { Timer, writeBenchmark } from './benchmark/index.js';
11
+ import path from 'path';
12
+ import { UltraHonkBackendOptions } from './barretenberg/backend.js';
13
+ createDebug.log = console.error.bind(console);
14
+ const debug = createDebug('bb.js');
15
+
16
+ // Maximum circuit size for plonk we support in node and the browser is 2^19.
17
+ // This is because both node and browser use barretenberg.wasm which has a 4GB memory limit.
18
+ //
19
+ // This is not a restriction in the bb binary and one should be
20
+ // aware of this discrepancy, when creating proofs in bb versus
21
+ // creating the same proofs in the node CLI.
22
+ const MAX_ULTRAPLONK_CIRCUIT_SIZE_IN_WASM = 2 ** 19;
23
+ const threads = +process.env.HARDWARE_CONCURRENCY! || undefined;
24
+
25
+ function getBytecode(bytecodePath: string) {
26
+ const extension = bytecodePath.substring(bytecodePath.lastIndexOf('.') + 1);
27
+
28
+ if (extension == 'json') {
29
+ const encodedCircuit = JSON.parse(readFileSync(bytecodePath, 'utf8'));
30
+ const decompressed = gunzipSync(Buffer.from(encodedCircuit.bytecode, 'base64'));
31
+ return decompressed;
32
+ }
33
+
34
+ const encodedCircuit = readFileSync(bytecodePath);
35
+ const decompressed = gunzipSync(encodedCircuit);
36
+ return decompressed;
37
+ }
38
+
39
+ function base64ToUint8Array(base64: string) {
40
+ const binaryString = atob(base64);
41
+ const len = binaryString.length;
42
+ const bytes = new Uint8Array(len);
43
+ for (let i = 0; i < len; i++) {
44
+ bytes[i] = binaryString.charCodeAt(i);
45
+ }
46
+ return bytes;
47
+ }
48
+
49
+ function readStack(bytecodePath: string, numToDrop = 0) {
50
+ const encodedPackedZippedBytecodeArray = readFileSync(bytecodePath, 'utf-8');
51
+ const packedZippedBytecodeArray = base64ToUint8Array(encodedPackedZippedBytecodeArray);
52
+ const zipped = decode(
53
+ packedZippedBytecodeArray.subarray(0, packedZippedBytecodeArray.length - numToDrop),
54
+ ) as Uint8Array[];
55
+ const bytecodeArray = zipped.map((arr: Uint8Array) => ungzip(arr));
56
+ return bytecodeArray;
57
+ }
58
+
59
+ // TODO(https://github.com/AztecProtocol/barretenberg/issues/1126): split this into separate Plonk and Honk functions as their gate count differs
60
+ async function getGatesUltra(bytecodePath: string, recursive: boolean, honkRecursion: boolean, api: Barretenberg) {
61
+ const { total } = await computeCircuitSize(bytecodePath, recursive, honkRecursion, api);
62
+ return total;
63
+ }
64
+
65
+ function getWitness(witnessPath: string) {
66
+ const data = readFileSync(witnessPath);
67
+ const decompressed = gunzipSync(data);
68
+ return decompressed;
69
+ }
70
+
71
+ async function computeCircuitSize(bytecodePath: string, recursive: boolean, honkRecursion: boolean, api: Barretenberg) {
72
+ debug(`computing circuit size...`);
73
+ const bytecode = getBytecode(bytecodePath);
74
+ const [total, subgroup] = await api.acirGetCircuitSizes(bytecode, recursive, honkRecursion);
75
+ return { total, subgroup };
76
+ }
77
+
78
+ async function initUltraPlonk(
79
+ bytecodePath: string,
80
+ recursive: boolean,
81
+ crsPath: string,
82
+ subgroupSizeOverride = -1,
83
+ honkRecursion = false,
84
+ ) {
85
+ const api = await Barretenberg.new({ threads });
86
+
87
+ // TODO(https://github.com/AztecProtocol/barretenberg/issues/1126): use specific UltraPlonk function
88
+ const circuitSize = await getGatesUltra(bytecodePath, recursive, honkRecursion, api);
89
+ // TODO(https://github.com/AztecProtocol/barretenberg/issues/811): remove subgroupSizeOverride hack for goblin
90
+ const subgroupSize = Math.max(subgroupSizeOverride, Math.pow(2, Math.ceil(Math.log2(circuitSize))));
91
+
92
+ if (subgroupSize > MAX_ULTRAPLONK_CIRCUIT_SIZE_IN_WASM) {
93
+ throw new Error(`Circuit size of ${subgroupSize} exceeds max supported of ${MAX_ULTRAPLONK_CIRCUIT_SIZE_IN_WASM}`);
94
+ }
95
+ debug(`circuit size: ${circuitSize}`);
96
+ debug(`subgroup size: ${subgroupSize}`);
97
+ debug('loading crs...');
98
+ // Plus 1 needed! (Move +1 into Crs?)
99
+ const crs = await Crs.new(subgroupSize + 1, crsPath);
100
+
101
+ // // Important to init slab allocator as first thing, to ensure maximum memory efficiency for Plonk.
102
+ // TODO(https://github.com/AztecProtocol/barretenberg/issues/1129): Do slab allocator initialization?
103
+ // await api.commonInitSlabAllocator(subgroupSize);
104
+
105
+ // Load CRS into wasm global CRS state.
106
+ // TODO: Make RawBuffer be default behavior, and have a specific Vector type for when wanting length prefixed.
107
+ await api.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
108
+ const acirComposer = await api.acirNewAcirComposer(subgroupSize);
109
+ return { api, acirComposer, circuitSize, subgroupSize };
110
+ }
111
+
112
+ async function initUltraHonk(bytecodePath: string, recursive: boolean, crsPath: string) {
113
+ const api = await Barretenberg.new({ threads });
114
+
115
+ // TODO(https://github.com/AztecProtocol/barretenberg/issues/1126): use specific UltraHonk function
116
+ const circuitSize = await getGatesUltra(bytecodePath, recursive, /*honkRecursion=*/ true, api);
117
+ // TODO(https://github.com/AztecProtocol/barretenberg/issues/811): remove subgroupSizeOverride hack for goblin
118
+ const dyadicCircuitSize = Math.pow(2, Math.ceil(Math.log2(circuitSize)));
119
+
120
+ debug(`circuit size: ${circuitSize}`);
121
+ debug(`dyadic circuit size size: ${dyadicCircuitSize}`);
122
+ debug('loading crs...');
123
+ const crs = await Crs.new(dyadicCircuitSize + 1, crsPath);
124
+
125
+ // Load CRS into wasm global CRS state.
126
+ // TODO: Make RawBuffer be default behavior, and have a specific Vector type for when wanting length prefixed.
127
+ await api.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
128
+ return { api, circuitSize, dyadicCircuitSize };
129
+ }
130
+
131
+ async function initClientIVC(crsPath: string) {
132
+ const api = await Barretenberg.new({ threads });
133
+
134
+ debug('loading BN254 and Grumpkin crs...');
135
+ const crs = await Crs.new(2 ** 21 + 1, crsPath);
136
+ const grumpkinCrs = await GrumpkinCrs.new(2 ** 16 + 1, crsPath);
137
+
138
+ // Load CRS into wasm global CRS state.
139
+ // TODO: Make RawBuffer be default behavior, and have a specific Vector type for when wanting length prefixed.
140
+ await api.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
141
+ await api.srsInitGrumpkinSrs(new RawBuffer(grumpkinCrs.getG1Data()), grumpkinCrs.numPoints);
142
+ return { api };
143
+ }
144
+
145
+ async function initLite(crsPath: string) {
146
+ const api = await Barretenberg.new({ threads: 1 });
147
+
148
+ // Plus 1 needed! (Move +1 into Crs?)
149
+ const crs = await Crs.new(1, crsPath);
150
+
151
+ // Load CRS into wasm global CRS state.
152
+ await api.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
153
+
154
+ const acirComposer = await api.acirNewAcirComposer(0);
155
+ return { api, acirComposer };
156
+ }
157
+
158
+ export async function proveAndVerify(bytecodePath: string, recursive: boolean, witnessPath: string, crsPath: string) {
159
+ /* eslint-disable camelcase */
160
+ const acir_test = path.basename(process.cwd());
161
+
162
+ const { api, acirComposer, circuitSize, subgroupSize } = await initUltraPlonk(bytecodePath, recursive, crsPath);
163
+ try {
164
+ debug(`creating proof...`);
165
+ const bytecode = getBytecode(bytecodePath);
166
+ const witness = getWitness(witnessPath);
167
+
168
+ const pkTimer = new Timer();
169
+ await api.acirInitProvingKey(acirComposer, bytecode, recursive);
170
+ writeBenchmark('pk_construction_time', pkTimer.ms(), { acir_test, threads });
171
+ writeBenchmark('gate_count', circuitSize, { acir_test, threads });
172
+ writeBenchmark('subgroup_size', subgroupSize, { acir_test, threads });
173
+
174
+ const proofTimer = new Timer();
175
+ const proof = await api.acirCreateProof(acirComposer, bytecode, recursive, witness);
176
+ writeBenchmark('proof_construction_time', proofTimer.ms(), { acir_test, threads });
177
+
178
+ debug(`verifying...`);
179
+ const verified = await api.acirVerifyProof(acirComposer, proof);
180
+ debug(`verified: ${verified}`);
181
+ return verified;
182
+ } finally {
183
+ await api.destroy();
184
+ }
185
+ /* eslint-enable camelcase */
186
+ }
187
+
188
+ export async function proveAndVerifyUltraHonk(
189
+ bytecodePath: string,
190
+ recursive: boolean,
191
+ witnessPath: string,
192
+ crsPath: string,
193
+ ) {
194
+ /* eslint-disable camelcase */
195
+ const { api } = await initUltraHonk(bytecodePath, false, crsPath);
196
+ try {
197
+ const bytecode = getBytecode(bytecodePath);
198
+ const witness = getWitness(witnessPath);
199
+
200
+ const verified = await api.acirProveAndVerifyUltraHonk(bytecode, recursive, witness);
201
+ return verified;
202
+ } finally {
203
+ await api.destroy();
204
+ }
205
+ /* eslint-enable camelcase */
206
+ }
207
+
208
+ export async function proveAndVerifyMegaHonk(
209
+ bytecodePath: string,
210
+ recursive: boolean,
211
+ witnessPath: string,
212
+ crsPath: string,
213
+ ) {
214
+ /* eslint-disable camelcase */
215
+ const { api } = await initUltraPlonk(bytecodePath, false, crsPath);
216
+ try {
217
+ const bytecode = getBytecode(bytecodePath);
218
+ const witness = getWitness(witnessPath);
219
+
220
+ const verified = await api.acirProveAndVerifyMegaHonk(bytecode, recursive, witness);
221
+ return verified;
222
+ } finally {
223
+ await api.destroy();
224
+ }
225
+ /* eslint-enable camelcase */
226
+ }
227
+
228
+ export async function proveAndVerifyAztecClient(bytecodePath: string, witnessPath: string, crsPath: string) {
229
+ /* eslint-disable camelcase */
230
+ const { api } = await initClientIVC(crsPath);
231
+ try {
232
+ const bytecode = readStack(bytecodePath);
233
+ const witness = readStack(witnessPath);
234
+
235
+ const verified = await api.acirProveAndVerifyAztecClient(bytecode, witness);
236
+ console.log(`verified?: ${verified}`);
237
+ return verified;
238
+ } finally {
239
+ await api.destroy();
240
+ }
241
+ /* eslint-enable camelcase */
242
+ }
243
+
244
+ export async function foldAndVerifyProgram(
245
+ bytecodePath: string,
246
+ recursive: boolean,
247
+ witnessPath: string,
248
+ crsPath: string,
249
+ ) {
250
+ /* eslint-disable camelcase */
251
+ const { api } = await initClientIVC(crsPath);
252
+ try {
253
+ const bytecode = getBytecode(bytecodePath);
254
+ const witness = getWitness(witnessPath);
255
+
256
+ const verified = await api.acirFoldAndVerifyProgramStack(bytecode, recursive, witness);
257
+ debug(`verified: ${verified}`);
258
+ return verified;
259
+ } finally {
260
+ await api.destroy();
261
+ }
262
+ /* eslint-enable camelcase */
263
+ }
264
+
265
+ export async function prove(
266
+ bytecodePath: string,
267
+ recursive: boolean,
268
+ witnessPath: string,
269
+ crsPath: string,
270
+ outputPath: string,
271
+ ) {
272
+ const { api, acirComposer } = await initUltraPlonk(bytecodePath, recursive, crsPath);
273
+ try {
274
+ debug(`creating proof...`);
275
+ const bytecode = getBytecode(bytecodePath);
276
+ const witness = getWitness(witnessPath);
277
+ const proof = await api.acirCreateProof(acirComposer, bytecode, recursive, witness);
278
+ debug(`done.`);
279
+
280
+ if (outputPath === '-') {
281
+ process.stdout.write(proof);
282
+ debug(`proof written to stdout`);
283
+ } else {
284
+ writeFileSync(outputPath, proof);
285
+ debug(`proof written to: ${outputPath}`);
286
+ }
287
+ } finally {
288
+ await api.destroy();
289
+ }
290
+ }
291
+
292
+ export async function gateCountUltra(bytecodePath: string, recursive: boolean, honkRecursion: boolean) {
293
+ const api = await Barretenberg.new({ threads: 1 });
294
+ try {
295
+ const numberOfGates = await getGatesUltra(bytecodePath, recursive, honkRecursion, api);
296
+ debug(`number of gates: : ${numberOfGates}`);
297
+ // Create an 8-byte buffer and write the number into it.
298
+ // Writing number directly to stdout will result in a variable sized
299
+ // input depending on the size.
300
+ const buffer = Buffer.alloc(8);
301
+ buffer.writeBigInt64LE(BigInt(numberOfGates));
302
+
303
+ process.stdout.write(buffer);
304
+ } finally {
305
+ await api.destroy();
306
+ }
307
+ }
308
+
309
+ export async function verify(proofPath: string, vkPath: string, crsPath: string) {
310
+ const { api, acirComposer } = await initLite(crsPath);
311
+ try {
312
+ await api.acirLoadVerificationKey(acirComposer, new RawBuffer(readFileSync(vkPath)));
313
+ const verified = await api.acirVerifyProof(acirComposer, readFileSync(proofPath));
314
+ debug(`verified: ${verified}`);
315
+ return verified;
316
+ } finally {
317
+ await api.destroy();
318
+ }
319
+ }
320
+
321
+ export async function contract(outputPath: string, vkPath: string, crsPath: string) {
322
+ const { api, acirComposer } = await initLite(crsPath);
323
+ try {
324
+ await api.acirLoadVerificationKey(acirComposer, new RawBuffer(readFileSync(vkPath)));
325
+ const contract = await api.acirGetSolidityVerifier(acirComposer);
326
+
327
+ if (outputPath === '-') {
328
+ process.stdout.write(contract);
329
+ debug(`contract written to stdout`);
330
+ } else {
331
+ writeFileSync(outputPath, contract);
332
+ debug(`contract written to: ${outputPath}`);
333
+ }
334
+ } finally {
335
+ await api.destroy();
336
+ }
337
+ }
338
+
339
+ export async function contractUltraHonk(bytecodePath: string, vkPath: string, crsPath: string, outputPath: string) {
340
+ const { api } = await initUltraHonk(bytecodePath, false, crsPath);
341
+ try {
342
+ console.log('bytecodePath', bytecodePath);
343
+ const bytecode = getBytecode(bytecodePath);
344
+ console.log('vkPath', vkPath);
345
+ const vk = new RawBuffer(readFileSync(vkPath));
346
+ const contract = await api.acirHonkSolidityVerifier(bytecode, vk);
347
+
348
+ if (outputPath === '-') {
349
+ process.stdout.write(contract);
350
+ debug(`contract written to stdout`);
351
+ } else {
352
+ writeFileSync(outputPath, contract);
353
+ debug(`contract written to: ${outputPath}`);
354
+ }
355
+ } finally {
356
+ await api.destroy();
357
+ }
358
+ }
359
+
360
+ export async function writeVk(bytecodePath: string, recursive: boolean, crsPath: string, outputPath: string) {
361
+ const { api, acirComposer } = await initUltraPlonk(bytecodePath, recursive, crsPath);
362
+ try {
363
+ debug('initing proving key...');
364
+ const bytecode = getBytecode(bytecodePath);
365
+ await api.acirInitProvingKey(acirComposer, bytecode, recursive);
366
+
367
+ debug('initing verification key...');
368
+ const vk = await api.acirGetVerificationKey(acirComposer);
369
+
370
+ if (outputPath === '-') {
371
+ process.stdout.write(vk);
372
+ debug(`vk written to stdout`);
373
+ } else {
374
+ writeFileSync(outputPath, vk);
375
+ debug(`vk written to: ${outputPath}`);
376
+ }
377
+ } finally {
378
+ await api.destroy();
379
+ }
380
+ }
381
+
382
+ export async function writePk(bytecodePath: string, recursive: boolean, crsPath: string, outputPath: string) {
383
+ const { api, acirComposer } = await initUltraPlonk(bytecodePath, recursive, crsPath);
384
+ try {
385
+ debug('initing proving key...');
386
+ const bytecode = getBytecode(bytecodePath);
387
+ const pk = await api.acirGetProvingKey(acirComposer, bytecode, recursive);
388
+
389
+ if (outputPath === '-') {
390
+ process.stdout.write(pk);
391
+ debug(`pk written to stdout`);
392
+ } else {
393
+ writeFileSync(outputPath, pk);
394
+ debug(`pk written to: ${outputPath}`);
395
+ }
396
+ } finally {
397
+ await api.destroy();
398
+ }
399
+ }
400
+
401
+ export async function proofAsFields(proofPath: string, vkPath: string, outputPath: string, crsPath: string) {
402
+ const { api, acirComposer } = await initLite(crsPath);
403
+
404
+ try {
405
+ debug('serializing proof byte array into field elements');
406
+ const numPublicInputs = readFileSync(vkPath).readUint32BE(8);
407
+ const proofAsFields = await api.acirSerializeProofIntoFields(
408
+ acirComposer,
409
+ readFileSync(proofPath),
410
+ numPublicInputs,
411
+ );
412
+ const jsonProofAsFields = JSON.stringify(proofAsFields.map(f => f.toString()));
413
+
414
+ if (outputPath === '-') {
415
+ process.stdout.write(jsonProofAsFields);
416
+ debug(`proofAsFields written to stdout`);
417
+ } else {
418
+ writeFileSync(outputPath, jsonProofAsFields);
419
+ debug(`proofAsFields written to: ${outputPath}`);
420
+ }
421
+
422
+ debug('done.');
423
+ } finally {
424
+ await api.destroy();
425
+ }
426
+ }
427
+
428
+ export async function vkAsFields(vkPath: string, vkeyOutputPath: string, crsPath: string) {
429
+ const { api, acirComposer } = await initLite(crsPath);
430
+
431
+ try {
432
+ debug('serializing vk byte array into field elements');
433
+ await api.acirLoadVerificationKey(acirComposer, new RawBuffer(readFileSync(vkPath)));
434
+ const [vkAsFields, vkHash] = await api.acirSerializeVerificationKeyIntoFields(acirComposer);
435
+ const output = [vkHash, ...vkAsFields].map(f => f.toString());
436
+ const jsonVKAsFields = JSON.stringify(output);
437
+
438
+ if (vkeyOutputPath === '-') {
439
+ process.stdout.write(jsonVKAsFields);
440
+ debug(`vkAsFields written to stdout`);
441
+ } else {
442
+ writeFileSync(vkeyOutputPath, jsonVKAsFields);
443
+ debug(`vkAsFields written to: ${vkeyOutputPath}`);
444
+ }
445
+
446
+ debug('done.');
447
+ } finally {
448
+ await api.destroy();
449
+ }
450
+ }
451
+
452
+ export async function proveUltraHonk(
453
+ bytecodePath: string,
454
+ recursive: boolean,
455
+ witnessPath: string,
456
+ crsPath: string,
457
+ outputPath: string,
458
+ options?: UltraHonkBackendOptions,
459
+ ) {
460
+ const { api } = await initUltraHonk(bytecodePath, recursive, crsPath);
461
+ try {
462
+ debug(`creating proof...`);
463
+ const bytecode = getBytecode(bytecodePath);
464
+ const witness = getWitness(witnessPath);
465
+
466
+ const acirProveUltraHonk = options?.keccak
467
+ ? api.acirProveUltraKeccakHonk.bind(api)
468
+ : api.acirProveUltraHonk.bind(api);
469
+ const proof = await acirProveUltraHonk(bytecode, recursive, witness);
470
+ debug(`done.`);
471
+
472
+ if (outputPath === '-') {
473
+ process.stdout.write(proof);
474
+ debug(`proof written to stdout`);
475
+ } else {
476
+ writeFileSync(outputPath, proof);
477
+ debug(`proof written to: ${outputPath}`);
478
+ }
479
+ } finally {
480
+ await api.destroy();
481
+ }
482
+ }
483
+
484
+ export async function writeVkUltraHonk(
485
+ bytecodePath: string,
486
+ recursive: boolean,
487
+ crsPath: string,
488
+ outputPath: string,
489
+ options?: UltraHonkBackendOptions,
490
+ ) {
491
+ const { api } = await initUltraHonk(bytecodePath, recursive, crsPath);
492
+ try {
493
+ const bytecode = getBytecode(bytecodePath);
494
+ debug('initing verification key...');
495
+
496
+ const acirWriteVkUltraHonk = options?.keccak
497
+ ? api.acirWriteVkUltraKeccakHonk.bind(api)
498
+ : api.acirWriteVkUltraHonk.bind(api);
499
+ const vk = await acirWriteVkUltraHonk(bytecode, recursive);
500
+
501
+ if (outputPath === '-') {
502
+ process.stdout.write(vk);
503
+ debug(`vk written to stdout`);
504
+ } else {
505
+ writeFileSync(outputPath, vk);
506
+ debug(`vk written to: ${outputPath}`);
507
+ }
508
+ } finally {
509
+ await api.destroy();
510
+ }
511
+ }
512
+
513
+ export async function verifyUltraHonk(
514
+ proofPath: string,
515
+ vkPath: string,
516
+ crsPath: string,
517
+ options?: UltraHonkBackendOptions,
518
+ ) {
519
+ const { api } = await initLite(crsPath);
520
+ try {
521
+ const acirVerifyUltraHonk = options?.keccak
522
+ ? api.acirVerifyUltraKeccakHonk.bind(api)
523
+ : api.acirVerifyUltraHonk.bind(api);
524
+ const verified = await acirVerifyUltraHonk(readFileSync(proofPath), new RawBuffer(readFileSync(vkPath)));
525
+
526
+ debug(`verified: ${verified}`);
527
+ return verified;
528
+ } finally {
529
+ await api.destroy();
530
+ }
531
+ }
532
+
533
+ export async function proofAsFieldsUltraHonk(proofPath: string, outputPath: string, crsPath: string) {
534
+ const { api } = await initLite(crsPath);
535
+ try {
536
+ debug('outputting proof as vector of fields');
537
+ const proofAsFields = await api.acirProofAsFieldsUltraHonk(readFileSync(proofPath));
538
+ const jsonProofAsFields = JSON.stringify(proofAsFields.map(f => f.toString()));
539
+
540
+ if (outputPath === '-') {
541
+ process.stdout.write(jsonProofAsFields);
542
+ debug(`proofAsFieldsUltraHonk written to stdout`);
543
+ } else {
544
+ writeFileSync(outputPath, jsonProofAsFields);
545
+ debug(`proofAsFieldsUltraHonk written to: ${outputPath}`);
546
+ }
547
+
548
+ debug('done.');
549
+ } finally {
550
+ await api.destroy();
551
+ }
552
+ }
553
+
554
+ export async function vkAsFieldsUltraHonk(vkPath: string, vkeyOutputPath: string, crsPath: string) {
555
+ const { api } = await initLite(crsPath);
556
+
557
+ try {
558
+ debug('serializing vk byte array into field elements');
559
+ const vkAsFields = await api.acirVkAsFieldsUltraHonk(new RawBuffer(readFileSync(vkPath)));
560
+ const jsonVKAsFields = JSON.stringify(vkAsFields.map(f => f.toString()));
561
+
562
+ if (vkeyOutputPath === '-') {
563
+ process.stdout.write(jsonVKAsFields);
564
+ debug(`vkAsFieldsUltraHonk written to stdout`);
565
+ } else {
566
+ writeFileSync(vkeyOutputPath, jsonVKAsFields);
567
+ debug(`vkAsFieldsUltraHonk written to: ${vkeyOutputPath}`);
568
+ }
569
+
570
+ debug('done.');
571
+ } finally {
572
+ await api.destroy();
573
+ }
574
+ }
575
+
576
+ const program = new Command('bb');
577
+
578
+ program.option('-v, --verbose', 'enable verbose logging', false);
579
+ program.option('-c, --crs-path <path>', 'set crs path', './crs');
580
+
581
+ function handleGlobalOptions() {
582
+ if (program.opts().verbose) {
583
+ createDebug.enable('bb.js*');
584
+ }
585
+ return { crsPath: program.opts().crsPath };
586
+ }
587
+
588
+ program
589
+ .command('prove_and_verify')
590
+ .description('Generate a proof and verify it. Process exits with success or failure code.')
591
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
592
+ .option('-r, --recursive', 'Whether to use a SNARK friendly proof', false)
593
+ .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
594
+ .action(async ({ bytecodePath, recursive, witnessPath }) => {
595
+ const { crsPath } = handleGlobalOptions();
596
+ const result = await proveAndVerify(bytecodePath, recursive, witnessPath, crsPath);
597
+ process.exit(result ? 0 : 1);
598
+ });
599
+
600
+ program
601
+ .command('prove_and_verify_ultra_honk')
602
+ .description('Generate an UltraHonk proof and verify it. Process exits with success or failure code.')
603
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
604
+ .option('-r, --recursive', 'Whether to use a SNARK friendly proof', false)
605
+ .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
606
+ .action(async ({ bytecodePath, recursive, witnessPath }) => {
607
+ const { crsPath } = handleGlobalOptions();
608
+ const result = await proveAndVerifyUltraHonk(bytecodePath, recursive, witnessPath, crsPath);
609
+ process.exit(result ? 0 : 1);
610
+ });
611
+
612
+ program
613
+ .command('prove_and_verify_mega_honk')
614
+ .description('Generate a MegaHonk proof and verify it. Process exits with success or failure code.')
615
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
616
+ .option('-r, --recursive', 'Whether to use a SNARK friendly proof', false)
617
+ .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
618
+ .action(async ({ bytecodePath, recursive, witnessPath }) => {
619
+ const { crsPath } = handleGlobalOptions();
620
+ const result = await proveAndVerifyMegaHonk(bytecodePath, recursive, witnessPath, crsPath);
621
+ process.exit(result ? 0 : 1);
622
+ });
623
+
624
+ program
625
+ .command('client_ivc_prove_and_verify')
626
+ .description('Generate a ClientIVC proof.')
627
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/acir.msgpack.b64')
628
+ .option('-w, --witness-path <path>', 'Specify the witness path', './target/witnesses.msgpack.b64')
629
+ .action(async ({ bytecodePath, witnessPath }) => {
630
+ const { crsPath } = handleGlobalOptions();
631
+ const result = await proveAndVerifyAztecClient(bytecodePath, witnessPath, crsPath);
632
+ process.exit(result ? 0 : 1);
633
+ });
634
+
635
+ program
636
+ .command('fold_and_verify_program')
637
+ .description('Accumulate a set of circuits using ClientIvc then verify. Process exits with success or failure code.')
638
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
639
+ .option('-r, --recursive', 'Create a SNARK friendly proof', false)
640
+ .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
641
+ .action(async ({ bytecodePath, recursive, witnessPath }) => {
642
+ const { crsPath } = handleGlobalOptions();
643
+ const result = await foldAndVerifyProgram(bytecodePath, recursive, witnessPath, crsPath);
644
+ process.exit(result ? 0 : 1);
645
+ });
646
+
647
+ program
648
+ .command('prove')
649
+ .description('Generate a proof and write it to a file.')
650
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
651
+ .option('-r, --recursive', 'Create a SNARK friendly proof', false)
652
+ .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
653
+ .option('-o, --output-path <path>', 'Specify the proof output path', './proofs/proof')
654
+ .action(async ({ bytecodePath, recursive, witnessPath, outputPath }) => {
655
+ const { crsPath } = handleGlobalOptions();
656
+ await prove(bytecodePath, recursive, witnessPath, crsPath, outputPath);
657
+ });
658
+
659
+ program
660
+ .command('gates')
661
+ .description('Print Ultra Builder gate count to standard output.')
662
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
663
+ .option('-r, --recursive', 'Create a SNARK friendly proof', false)
664
+ .option('-hr, --honk-recursion', 'Specify whether to use UltraHonk recursion', false)
665
+ .action(async ({ bytecodePath, recursive, honkRecursion: honkRecursion }) => {
666
+ handleGlobalOptions();
667
+ await gateCountUltra(bytecodePath, recursive, honkRecursion);
668
+ });
669
+
670
+ program
671
+ .command('verify')
672
+ .description('Verify a proof. Process exists with success or failure code.')
673
+ .requiredOption('-p, --proof-path <path>', 'Specify the path to the proof')
674
+ .requiredOption('-k, --vk <path>', 'path to a verification key. avoids recomputation.')
675
+ .action(async ({ proofPath, vk }) => {
676
+ const { crsPath } = handleGlobalOptions();
677
+ const result = await verify(proofPath, vk, crsPath);
678
+ process.exit(result ? 0 : 1);
679
+ });
680
+
681
+ program
682
+ .command('contract')
683
+ .description('Output solidity verification key contract.')
684
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
685
+ .option('-o, --output-path <path>', 'Specify the path to write the contract', './target/contract.sol')
686
+ .requiredOption('-k, --vk-path <path>', 'Path to a verification key. avoids recomputation.')
687
+ .action(async ({ outputPath, vkPath }) => {
688
+ const { crsPath } = handleGlobalOptions();
689
+ await contract(outputPath, vkPath, crsPath);
690
+ });
691
+
692
+ program
693
+ .command('contract_ultra_honk')
694
+ .description('Output solidity verification key contract.')
695
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
696
+ .option('-o, --output-path <path>', 'Specify the path to write the contract', './target/contract.sol')
697
+ .requiredOption('-k, --vk-path <path>', 'Path to a verification key.')
698
+ .action(async ({ bytecodePath, outputPath, vkPath, crsPath }) => {
699
+ handleGlobalOptions();
700
+ await contractUltraHonk(bytecodePath, vkPath, crsPath, outputPath);
701
+ });
702
+
703
+ program
704
+ .command('write_vk')
705
+ .description('Output verification key.')
706
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
707
+ .option('-r, --recursive', 'Create a SNARK friendly proof', false)
708
+ .option('-o, --output-path <path>', 'Specify the path to write the key')
709
+ .action(async ({ bytecodePath, recursive, outputPath }) => {
710
+ const { crsPath } = handleGlobalOptions();
711
+ await writeVk(bytecodePath, recursive, crsPath, outputPath);
712
+ });
713
+
714
+ program
715
+ .command('write_pk')
716
+ .description('Output proving key.')
717
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
718
+ .option('-r, --recursive', 'Create a SNARK friendly proof', false)
719
+ .requiredOption('-o, --output-path <path>', 'Specify the path to write the key')
720
+ .action(async ({ bytecodePath, recursive, outputPath }) => {
721
+ const { crsPath } = handleGlobalOptions();
722
+ await writePk(bytecodePath, recursive, crsPath, outputPath);
723
+ });
724
+
725
+ program
726
+ .command('proof_as_fields')
727
+ .description('Return the proof as fields elements')
728
+ .requiredOption('-p, --proof-path <path>', 'Specify the proof path')
729
+ .requiredOption('-k, --vk-path <path>', 'Path to verification key.')
730
+ .requiredOption('-o, --output-path <path>', 'Specify the JSON path to write the proof fields')
731
+ .action(async ({ proofPath, vkPath, outputPath }) => {
732
+ const { crsPath } = handleGlobalOptions();
733
+ await proofAsFields(proofPath, vkPath, outputPath, crsPath);
734
+ });
735
+
736
+ program
737
+ .command('vk_as_fields')
738
+ .description('Return the verification key represented as fields elements. Also return the verification key hash.')
739
+ .requiredOption('-k, --vk-path <path>', 'Path to verification key.')
740
+ .requiredOption('-o, --output-path <path>', 'Specify the JSON path to write the verification key fields and key hash')
741
+ .action(async ({ vkPath, outputPath }) => {
742
+ const { crsPath } = handleGlobalOptions();
743
+ await vkAsFields(vkPath, outputPath, crsPath);
744
+ });
745
+
746
+ program
747
+ .command('prove_ultra_honk')
748
+ .description('Generate a proof and write it to a file.')
749
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
750
+ .option('-r, --recursive', 'Create a SNARK friendly proof', false)
751
+ .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
752
+ .option('-o, --output-path <path>', 'Specify the proof output path', './proofs/proof')
753
+ .action(async ({ bytecodePath, recursive, witnessPath, outputPath }) => {
754
+ const { crsPath } = handleGlobalOptions();
755
+ await proveUltraHonk(bytecodePath, recursive, witnessPath, crsPath, outputPath);
756
+ });
757
+
758
+ program
759
+ .command('prove_ultra_keccak_honk')
760
+ .description('Generate a proof and write it to a file.')
761
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
762
+ .option('-r, --recursive', 'Create a SNARK friendly proof', false)
763
+ .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
764
+ .option('-o, --output-path <path>', 'Specify the proof output path', './proofs/proof')
765
+ .action(async ({ bytecodePath, recursive, witnessPath, outputPath, crsPath }) => {
766
+ handleGlobalOptions();
767
+ await proveUltraHonk(bytecodePath, recursive, witnessPath, crsPath, outputPath, { keccak: true });
768
+ });
769
+
770
+ program
771
+ .command('write_vk_ultra_honk')
772
+ .description('Output verification key.')
773
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
774
+ .option('-r, --recursive', 'Create a SNARK friendly proof', false)
775
+ .requiredOption('-o, --output-path <path>', 'Specify the path to write the key')
776
+ .action(async ({ bytecodePath, recursive, outputPath }) => {
777
+ const { crsPath } = handleGlobalOptions();
778
+ await writeVkUltraHonk(bytecodePath, recursive, crsPath, outputPath);
779
+ });
780
+
781
+ program
782
+ .command('write_vk_ultra_keccak_honk')
783
+ .description('Output verification key.')
784
+ .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
785
+ .option('-r, --recursive', 'Create a SNARK friendly proof', false)
786
+ .requiredOption('-o, --output-path <path>', 'Specify the path to write the key')
787
+ .action(async ({ bytecodePath, recursive, outputPath, crsPath }) => {
788
+ handleGlobalOptions();
789
+ await writeVkUltraHonk(bytecodePath, recursive, crsPath, outputPath, { keccak: true });
790
+ });
791
+
792
+ program
793
+ .command('verify_ultra_honk')
794
+ .description('Verify a proof. Process exists with success or failure code.')
795
+ .requiredOption('-p, --proof-path <path>', 'Specify the path to the proof')
796
+ .requiredOption('-k, --vk <path>', 'path to a verification key. avoids recomputation.')
797
+ .action(async ({ proofPath, vk }) => {
798
+ const { crsPath } = handleGlobalOptions();
799
+ const result = await verifyUltraHonk(proofPath, vk, crsPath);
800
+ process.exit(result ? 0 : 1);
801
+ });
802
+
803
+ program
804
+ .command('verify_ultra_keccak_honk')
805
+ .description('Verify a proof. Process exists with success or failure code.')
806
+ .requiredOption('-p, --proof-path <path>', 'Specify the path to the proof')
807
+ .requiredOption('-k, --vk <path>', 'path to a verification key. avoids recomputation.')
808
+ .action(async ({ proofPath, vk }) => {
809
+ const { crsPath } = handleGlobalOptions();
810
+ const result = await verifyUltraHonk(proofPath, vk, crsPath, { keccak: true });
811
+ process.exit(result ? 0 : 1);
812
+ });
813
+
814
+ program
815
+ .command('proof_as_fields_honk')
816
+ .description('Return the proof as fields elements')
817
+ .requiredOption('-p, --proof-path <path>', 'Specify the proof path')
818
+ .requiredOption('-o, --output-path <path>', 'Specify the JSON path to write the proof fields')
819
+ .action(async ({ proofPath, outputPath }) => {
820
+ const { crsPath } = handleGlobalOptions();
821
+ await proofAsFieldsUltraHonk(proofPath, outputPath, crsPath);
822
+ });
823
+
824
+ program
825
+ .command('vk_as_fields_ultra_honk')
826
+ .description('Return the verification key represented as fields elements.')
827
+ .requiredOption('-k, --vk-path <path>', 'Path to verification key.')
828
+ .requiredOption('-o, --output-path <path>', 'Specify the JSON path to write the verification key fields.')
829
+ .action(async ({ vkPath, outputPath }) => {
830
+ const { crsPath } = handleGlobalOptions();
831
+ await vkAsFieldsUltraHonk(vkPath, outputPath, crsPath);
832
+ });
833
+
834
+ program.name('bb.js').parse(process.argv);