@aztec/bb.js 0.0.1-alpha.7 → 0.0.1-fake-ceab37513c

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 (227) hide show
  1. package/README.md +69 -32
  2. package/package.json +56 -45
  3. package/src/barretenberg/__snapshots__/pedersen.test.ts.snap +156 -0
  4. package/src/barretenberg/__snapshots__/poseidon.test.ts.snap +40 -0
  5. package/src/barretenberg/backend.ts +378 -0
  6. package/src/barretenberg/blake2s.test.ts +70 -0
  7. package/src/{barretenberg_api → barretenberg}/common.test.ts +7 -5
  8. package/src/barretenberg/index.ts +204 -0
  9. package/src/barretenberg/pedersen.test.ts +62 -0
  10. package/src/barretenberg/poseidon.test.ts +39 -0
  11. package/src/barretenberg_api/index.ts +982 -415
  12. package/src/barretenberg_wasm/barretenberg_wasm_base/index.ts +138 -0
  13. package/src/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.ts +11 -0
  14. package/src/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.ts +13 -0
  15. package/src/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.ts +21 -0
  16. package/src/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.ts +19 -0
  17. package/src/{barretenberg_binder/heap_allocator_sync.ts → barretenberg_wasm/barretenberg_wasm_main/heap_allocator.ts} +20 -17
  18. package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +167 -0
  19. package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.ts +11 -0
  20. package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.ts +13 -0
  21. package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.ts +21 -0
  22. package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.ts +19 -0
  23. package/src/barretenberg_wasm/barretenberg_wasm_thread/index.ts +47 -0
  24. package/src/barretenberg_wasm/fetch_code/browser/barretenberg-threads.ts +3 -0
  25. package/src/barretenberg_wasm/fetch_code/browser/barretenberg.ts +3 -0
  26. package/src/barretenberg_wasm/fetch_code/browser/index.ts +34 -0
  27. package/src/barretenberg_wasm/fetch_code/index.ts +1 -0
  28. package/src/barretenberg_wasm/fetch_code/node/index.ts +34 -0
  29. package/src/barretenberg_wasm/fetch_code/wasm-module.d.ts +4 -0
  30. package/src/barretenberg_wasm/helpers/browser/index.ts +47 -0
  31. package/src/barretenberg_wasm/helpers/index.ts +1 -0
  32. package/src/barretenberg_wasm/{node → helpers/node}/index.ts +24 -15
  33. package/src/barretenberg_wasm/index.test.ts +45 -0
  34. package/src/barretenberg_wasm/index.ts +22 -1
  35. package/src/benchmark/index.ts +26 -0
  36. package/src/benchmark/timer.ts +45 -0
  37. package/src/bigint-array/index.ts +39 -17
  38. package/src/bindgen/index.ts +2 -2
  39. package/src/bindgen/mappings.ts +3 -2
  40. package/src/bindgen/typescript.ts +50 -25
  41. package/src/cbind/README.md +1 -0
  42. package/src/cbind/generate.ts +89 -0
  43. package/src/cbind/schema_compiler.ts +833 -0
  44. package/src/crs/browser/cached_net_crs.ts +41 -1
  45. package/src/crs/browser/index.ts +1 -1
  46. package/src/crs/index.ts +1 -1
  47. package/src/crs/net_crs.ts +114 -19
  48. package/src/crs/node/index.ts +96 -26
  49. package/src/index.html +1 -1
  50. package/src/index.ts +13 -5
  51. package/src/log/browser/index.ts +35 -0
  52. package/src/log/index.ts +1 -0
  53. package/src/log/node/index.ts +52 -0
  54. package/src/log/types.ts +6 -0
  55. package/src/main.ts +391 -168
  56. package/src/proof/index.ts +94 -0
  57. package/src/random/browser/index.ts +1 -1
  58. package/src/retry/index.ts +50 -0
  59. package/src/serialize/buffer_reader.ts +4 -1
  60. package/src/types/fields.ts +46 -18
  61. package/src/types/point.ts +4 -1
  62. package/dest/async_map/index.d.ts +0 -10
  63. package/dest/async_map/index.d.ts.map +0 -1
  64. package/dest/async_map/index.js +0 -16
  65. package/dest/barretenberg-threads.wasm +0 -0
  66. package/dest/barretenberg.wasm +0 -0
  67. package/dest/barretenberg_api/blake2s.test.d.ts +0 -2
  68. package/dest/barretenberg_api/blake2s.test.d.ts.map +0 -1
  69. package/dest/barretenberg_api/blake2s.test.js +0 -30
  70. package/dest/barretenberg_api/common.test.d.ts +0 -2
  71. package/dest/barretenberg_api/common.test.d.ts.map +0 -1
  72. package/dest/barretenberg_api/common.test.js +0 -18
  73. package/dest/barretenberg_api/index.d.ts +0 -103
  74. package/dest/barretenberg_api/index.d.ts.map +0 -1
  75. package/dest/barretenberg_api/index.js +0 -379
  76. package/dest/barretenberg_api/pedersen.test.d.ts +0 -2
  77. package/dest/barretenberg_api/pedersen.test.d.ts.map +0 -1
  78. package/dest/barretenberg_api/pedersen.test.js +0 -69
  79. package/dest/barretenberg_api/schnorr.test.d.ts +0 -2
  80. package/dest/barretenberg_api/schnorr.test.d.ts.map +0 -1
  81. package/dest/barretenberg_api/schnorr.test.js +0 -113
  82. package/dest/barretenberg_binder/heap_allocator.d.ts +0 -22
  83. package/dest/barretenberg_binder/heap_allocator.d.ts.map +0 -1
  84. package/dest/barretenberg_binder/heap_allocator.js +0 -59
  85. package/dest/barretenberg_binder/heap_allocator_sync.d.ts +0 -22
  86. package/dest/barretenberg_binder/heap_allocator_sync.d.ts.map +0 -1
  87. package/dest/barretenberg_binder/heap_allocator_sync.js +0 -58
  88. package/dest/barretenberg_binder/index.d.ts +0 -32
  89. package/dest/barretenberg_binder/index.d.ts.map +0 -1
  90. package/dest/barretenberg_binder/index.js +0 -73
  91. package/dest/barretenberg_wasm/barretenberg_wasm.d.ts +0 -50
  92. package/dest/barretenberg_wasm/barretenberg_wasm.d.ts.map +0 -1
  93. package/dest/barretenberg_wasm/barretenberg_wasm.js +0 -212
  94. package/dest/barretenberg_wasm/barretenberg_wasm.test.d.ts +0 -2
  95. package/dest/barretenberg_wasm/barretenberg_wasm.test.d.ts.map +0 -1
  96. package/dest/barretenberg_wasm/barretenberg_wasm.test.js +0 -43
  97. package/dest/barretenberg_wasm/browser/index.d.ts +0 -8
  98. package/dest/barretenberg_wasm/browser/index.d.ts.map +0 -1
  99. package/dest/barretenberg_wasm/browser/index.js +0 -26
  100. package/dest/barretenberg_wasm/browser/worker.d.ts +0 -2
  101. package/dest/barretenberg_wasm/browser/worker.d.ts.map +0 -1
  102. package/dest/barretenberg_wasm/browser/worker.js +0 -11
  103. package/dest/barretenberg_wasm/index.d.ts +0 -2
  104. package/dest/barretenberg_wasm/index.d.ts.map +0 -1
  105. package/dest/barretenberg_wasm/index.js +0 -2
  106. package/dest/barretenberg_wasm/node/index.d.ts +0 -17
  107. package/dest/barretenberg_wasm/node/index.d.ts.map +0 -1
  108. package/dest/barretenberg_wasm/node/index.js +0 -40
  109. package/dest/barretenberg_wasm/node/node_endpoint.d.ts +0 -8
  110. package/dest/barretenberg_wasm/node/node_endpoint.d.ts.map +0 -1
  111. package/dest/barretenberg_wasm/node/node_endpoint.js +0 -28
  112. package/dest/barretenberg_wasm/node/worker.d.ts +0 -2
  113. package/dest/barretenberg_wasm/node/worker.d.ts.map +0 -1
  114. package/dest/barretenberg_wasm/node/worker.js +0 -9
  115. package/dest/barretenberg_wasm.js +0 -2
  116. package/dest/barretenberg_wasm.js.LICENSE.txt +0 -5
  117. package/dest/bigint-array/index.d.ts +0 -3
  118. package/dest/bigint-array/index.d.ts.map +0 -1
  119. package/dest/bigint-array/index.js +0 -21
  120. package/dest/bindgen/function_declaration.d.ts +0 -11
  121. package/dest/bindgen/function_declaration.d.ts.map +0 -1
  122. package/dest/bindgen/function_declaration.js +0 -2
  123. package/dest/bindgen/index.d.ts +0 -2
  124. package/dest/bindgen/index.d.ts.map +0 -1
  125. package/dest/bindgen/index.js +0 -15
  126. package/dest/bindgen/mappings.d.ts +0 -4
  127. package/dest/bindgen/mappings.d.ts.map +0 -1
  128. package/dest/bindgen/mappings.js +0 -63
  129. package/dest/bindgen/rust.d.ts +0 -2
  130. package/dest/bindgen/rust.d.ts.map +0 -1
  131. package/dest/bindgen/rust.js +0 -43
  132. package/dest/bindgen/to_camel_case.d.ts +0 -2
  133. package/dest/bindgen/to_camel_case.d.ts.map +0 -1
  134. package/dest/bindgen/to_camel_case.js +0 -11
  135. package/dest/bindgen/typescript.d.ts +0 -2
  136. package/dest/bindgen/typescript.d.ts.map +0 -1
  137. package/dest/bindgen/typescript.js +0 -80
  138. package/dest/crs/browser/cached_net_crs.d.ts +0 -25
  139. package/dest/crs/browser/cached_net_crs.d.ts.map +0 -1
  140. package/dest/crs/browser/cached_net_crs.js +0 -54
  141. package/dest/crs/browser/index.d.ts +0 -2
  142. package/dest/crs/browser/index.d.ts.map +0 -1
  143. package/dest/crs/browser/index.js +0 -2
  144. package/dest/crs/index.d.ts +0 -2
  145. package/dest/crs/index.d.ts.map +0 -1
  146. package/dest/crs/index.js +0 -2
  147. package/dest/crs/net_crs.d.ts +0 -36
  148. package/dest/crs/net_crs.d.ts.map +0 -1
  149. package/dest/crs/net_crs.js +0 -59
  150. package/dest/crs/node/ignition_files_crs.d.ts +0 -37
  151. package/dest/crs/node/ignition_files_crs.d.ts.map +0 -1
  152. package/dest/crs/node/ignition_files_crs.js +0 -51
  153. package/dest/crs/node/index.d.ts +0 -21
  154. package/dest/crs/node/index.d.ts.map +0 -1
  155. package/dest/crs/node/index.js +0 -54
  156. package/dest/examples/simple.rawtest.d.ts +0 -2
  157. package/dest/examples/simple.rawtest.d.ts.map +0 -1
  158. package/dest/examples/simple.rawtest.js +0 -29
  159. package/dest/examples/simple.test.d.ts +0 -2
  160. package/dest/examples/simple.test.d.ts.map +0 -1
  161. package/dest/examples/simple.test.js +0 -22
  162. package/dest/factory/index.d.ts +0 -21
  163. package/dest/factory/index.d.ts.map +0 -1
  164. package/dest/factory/index.js +0 -34
  165. package/dest/index.d.ts +0 -6
  166. package/dest/index.d.ts.map +0 -1
  167. package/dest/index.html +0 -1
  168. package/dest/index.js +0 -6
  169. package/dest/main.d.ts +0 -10
  170. package/dest/main.d.ts.map +0 -1
  171. package/dest/main.js +0 -275
  172. package/dest/random/browser/index.d.ts +0 -2
  173. package/dest/random/browser/index.d.ts.map +0 -1
  174. package/dest/random/browser/index.js +0 -31
  175. package/dest/random/index.d.ts +0 -2
  176. package/dest/random/index.d.ts.map +0 -1
  177. package/dest/random/index.js +0 -2
  178. package/dest/random/node/index.d.ts +0 -2
  179. package/dest/random/node/index.d.ts.map +0 -1
  180. package/dest/random/node/index.js +0 -5
  181. package/dest/serialize/buffer_reader.d.ts +0 -28
  182. package/dest/serialize/buffer_reader.d.ts.map +0 -1
  183. package/dest/serialize/buffer_reader.js +0 -66
  184. package/dest/serialize/index.d.ts +0 -4
  185. package/dest/serialize/index.d.ts.map +0 -1
  186. package/dest/serialize/index.js +0 -4
  187. package/dest/serialize/output_type.d.ts +0 -11
  188. package/dest/serialize/output_type.d.ts.map +0 -1
  189. package/dest/serialize/output_type.js +0 -44
  190. package/dest/serialize/serialize.d.ts +0 -53
  191. package/dest/serialize/serialize.d.ts.map +0 -1
  192. package/dest/serialize/serialize.js +0 -139
  193. package/dest/simple_test.js +0 -2
  194. package/dest/simple_test.js.LICENSE.txt +0 -14
  195. package/dest/types/fields.d.ts +0 -33
  196. package/dest/types/fields.d.ts.map +0 -1
  197. package/dest/types/fields.js +0 -86
  198. package/dest/types/fixed_size_buffer.d.ts +0 -26
  199. package/dest/types/fixed_size_buffer.d.ts.map +0 -1
  200. package/dest/types/fixed_size_buffer.js +0 -54
  201. package/dest/types/index.d.ts +0 -6
  202. package/dest/types/index.d.ts.map +0 -1
  203. package/dest/types/index.js +0 -6
  204. package/dest/types/point.d.ts +0 -17
  205. package/dest/types/point.d.ts.map +0 -1
  206. package/dest/types/point.js +0 -32
  207. package/dest/types/ptr.d.ts +0 -13
  208. package/dest/types/ptr.d.ts.map +0 -1
  209. package/dest/types/ptr.js +0 -20
  210. package/dest/types/raw_buffer.d.ts +0 -3
  211. package/dest/types/raw_buffer.d.ts.map +0 -1
  212. package/dest/types/raw_buffer.js +0 -5
  213. package/src/barretenberg_api/blake2s.test.ts +0 -39
  214. package/src/barretenberg_api/pedersen.test.ts +0 -84
  215. package/src/barretenberg_api/schnorr.test.ts +0 -169
  216. package/src/barretenberg_binder/heap_allocator.ts +0 -62
  217. package/src/barretenberg_binder/index.ts +0 -76
  218. package/src/barretenberg_wasm/barretenberg_wasm.test.ts +0 -52
  219. package/src/barretenberg_wasm/barretenberg_wasm.ts +0 -246
  220. package/src/barretenberg_wasm/browser/index.ts +0 -32
  221. package/src/barretenberg_wasm/browser/worker.ts +0 -13
  222. package/src/barretenberg_wasm/node/worker.ts +0 -10
  223. package/src/crs/node/ignition_files_crs.ts +0 -60
  224. package/src/examples/simple.rawtest.ts +0 -37
  225. package/src/examples/simple.test.ts +0 -27
  226. package/src/factory/index.ts +0 -36
  227. /package/src/barretenberg_wasm/{node → helpers/node}/node_endpoint.ts +0 -0
@@ -1,246 +0,0 @@
1
- import { type Worker } from 'worker_threads';
2
- import { EventEmitter } from 'events';
3
- import createDebug from 'debug';
4
- import { Remote, proxy } from 'comlink';
5
- import { randomBytes } from '../random/index.js';
6
- // Webpack config swaps this import with ./browser/index.js
7
- // You can toggle between these two imports to sanity check the type-safety.
8
- import { fetchCode, getNumCpu, createWorker, getRemoteBarretenbergWasm, threadLogger, killSelf } from './node/index.js';
9
- // import { fetchCode, getNumCpu, createWorker, randomBytes } from './browser/index.js';
10
-
11
- const debug = createDebug('bb.js:wasm');
12
-
13
- EventEmitter.defaultMaxListeners = 30;
14
-
15
- export class BarretenbergWasm {
16
- static MAX_THREADS = 32;
17
- private memStore: { [key: string]: Uint8Array } = {};
18
- private memory!: WebAssembly.Memory;
19
- private instance!: WebAssembly.Instance;
20
- private workers: Worker[] = [];
21
- private remoteWasms: BarretenbergWasmWorker[] = [];
22
- private nextWorker = 0;
23
- private nextThreadId = 1;
24
- private isThread = false;
25
- private logger: (msg: string) => void = debug;
26
-
27
- public static async new() {
28
- const barretenberg = new BarretenbergWasm();
29
- await barretenberg.init(1);
30
- return barretenberg;
31
- }
32
-
33
- /**
34
- * Construct and initialise BarretenbergWasm within a Worker. Return both the worker and the wasm proxy.
35
- * Used when running in the browser, because we can't block the main thread.
36
- */
37
- public static async newWorker(threads?: number) {
38
- const worker = createWorker();
39
- const wasm = getRemoteBarretenbergWasm(worker);
40
- await wasm.init(threads, proxy(debug));
41
- return { worker, wasm };
42
- }
43
-
44
- public getNumThreads() {
45
- return this.workers.length + 1;
46
- }
47
-
48
- /**
49
- * Init as main thread. Spawn child threads.
50
- */
51
- public async init(
52
- threads = Math.min(getNumCpu(), BarretenbergWasm.MAX_THREADS),
53
- logger: (msg: string) => void = debug,
54
- initial = 25,
55
- maximum = 2 ** 16,
56
- ) {
57
- this.logger = logger;
58
-
59
- const initialMb = (initial * 2 ** 16) / (1024 * 1024);
60
- const maxMb = (maximum * 2 ** 16) / (1024 * 1024);
61
- this.logger(
62
- `initial mem: ${initial} pages, ${initialMb}MiB. ` +
63
- `max mem: ${maximum} pages, ${maxMb}MiB. ` +
64
- `threads: ${threads}`,
65
- );
66
-
67
- this.memory = new WebAssembly.Memory({ initial, maximum, shared: threads > 1 });
68
-
69
- // Annoyingly the wasm declares if it's memory is shared or not. So now we need two wasms if we want to be
70
- // able to fallback on "non shared memory" situations.
71
- const code = await fetchCode(threads > 1 ? 'barretenberg-threads.wasm' : 'barretenberg.wasm');
72
- const { instance, module } = await WebAssembly.instantiate(code, this.getImportObj(this.memory));
73
-
74
- this.instance = instance;
75
-
76
- // Init all global/static data.
77
- this.call('_initialize');
78
-
79
- // Create worker threads. Create 1 less than requested, as main thread counts as a thread.
80
- this.logger('creating worker threads...');
81
- this.workers = await Promise.all(Array.from({ length: threads - 1 }).map(createWorker));
82
- this.remoteWasms = await Promise.all(this.workers.map(getRemoteBarretenbergWasm));
83
- await Promise.all(this.remoteWasms.map(w => w.initThread(module, this.memory)));
84
- this.logger('init complete.');
85
- }
86
-
87
- /**
88
- * Init as worker thread.
89
- */
90
- public async initThread(module: WebAssembly.Module, memory: WebAssembly.Memory) {
91
- this.isThread = true;
92
- this.logger = threadLogger() || this.logger;
93
- this.memory = memory;
94
- this.instance = await WebAssembly.instantiate(module, this.getImportObj(this.memory));
95
- }
96
-
97
- /**
98
- * Called on main thread. Signals child threads to gracefully exit.
99
- */
100
- public async destroy() {
101
- await Promise.all(this.workers.map(w => w.terminate()));
102
- }
103
-
104
- private getImportObj(memory: WebAssembly.Memory) {
105
- /* eslint-disable camelcase */
106
- const importObj = {
107
- // We need to implement a part of the wasi api:
108
- // https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md
109
- // We literally only need to support random_get, everything else is noop implementated in barretenberg.wasm.
110
- wasi_snapshot_preview1: {
111
- random_get: (out: any, length: number) => {
112
- out = out >>> 0;
113
- const randomData = randomBytes(length);
114
- const mem = this.getMemory();
115
- mem.set(randomData, out);
116
- },
117
- clock_time_get: (a1: number, a2: number, out: number) => {
118
- out = out >>> 0;
119
- const ts = BigInt(new Date().getTime()) * 1000000n;
120
- const view = new DataView(this.getMemory().buffer);
121
- view.setBigUint64(out, ts, true);
122
- },
123
- proc_exit: () => {
124
- this.logger('HUNG: proc_exit was called. This is caused by unstable experimental wasi pthreads. Try again.');
125
- this.logger(new Error().stack!);
126
- killSelf();
127
- },
128
- },
129
- wasi: {
130
- 'thread-spawn': (arg: number) => {
131
- arg = arg >>> 0;
132
- const id = this.nextThreadId++;
133
- const worker = this.nextWorker++ % this.remoteWasms.length;
134
- // this.logger(`spawning thread ${id} on worker ${worker} with arg ${arg >>> 0}`);
135
- this.remoteWasms[worker].call('wasi_thread_start', id, arg).catch(this.logger);
136
- // this.remoteWasms[worker].postMessage({ msg: 'thread', data: { id, arg } });
137
- return id;
138
- },
139
- },
140
-
141
- // These are functions implementations for imports we've defined are needed.
142
- // The native C++ build defines these in a module called "env". We must implement TypeScript versions here.
143
- env: {
144
- env_hardware_concurrency: () => {
145
- // If there are no workers (we're already running as a worker, or the main thread requested no workers)
146
- // then we return 1, which should cause any algos using threading to just not create a thread.
147
- return this.remoteWasms.length + 1;
148
- },
149
- /**
150
- * The 'info' call we use for logging in C++, calls this under the hood.
151
- * The native code will just print to std:err (to avoid std::cout which is used for IPC).
152
- * Here we just emit the log line for the client to decide what to do with.
153
- */
154
- logstr: (addr: number) => {
155
- const str = this.stringFromAddress(addr);
156
- const m = this.getMemory();
157
- const str2 = `${str} (mem: ${(m.length / (1024 * 1024)).toFixed(2)}MiB)`;
158
- this.logger(str2);
159
- if (str2.startsWith('WARNING:')) {
160
- this.logger(new Error().stack!);
161
- }
162
- },
163
-
164
- get_data: (keyAddr: number, outBufAddr: number) => {
165
- const key = this.stringFromAddress(keyAddr);
166
- outBufAddr = outBufAddr >>> 0;
167
- const data = this.memStore[key];
168
- if (!data) {
169
- this.logger(`get_data miss ${key}`);
170
- return;
171
- }
172
- // this.logger(`get_data hit ${key} size: ${data.length} dest: ${outBufAddr}`);
173
- // this.logger(Buffer.from(data.slice(0, 64)).toString('hex'));
174
- this.writeMemory(outBufAddr, data);
175
- },
176
-
177
- set_data: (keyAddr: number, dataAddr: number, dataLength: number) => {
178
- const key = this.stringFromAddress(keyAddr);
179
- dataAddr = dataAddr >>> 0;
180
- this.memStore[key] = this.getMemorySlice(dataAddr, dataAddr + dataLength).slice();
181
- // this.logger(`set_data: ${key} length: ${dataLength}`);
182
- },
183
-
184
- memory,
185
- },
186
- };
187
- /* eslint-enable camelcase */
188
-
189
- return importObj;
190
- }
191
-
192
- public exports(): any {
193
- return this.instance.exports;
194
- }
195
-
196
- /**
197
- * When returning values from the WASM, use >>> operator to convert signed representation to unsigned representation.
198
- */
199
- public call(name: string, ...args: any) {
200
- if (!this.exports()[name]) {
201
- throw new Error(`WASM function ${name} not found.`);
202
- }
203
- try {
204
- return this.exports()[name](...args) >>> 0;
205
- } catch (err: any) {
206
- const message = `WASM function ${name} aborted, error: ${err}`;
207
- this.logger(message);
208
- this.logger(err.stack);
209
- if (this.isThread) {
210
- killSelf();
211
- } else {
212
- throw err;
213
- }
214
- }
215
- }
216
-
217
- public memSize() {
218
- return this.getMemory().length;
219
- }
220
-
221
- public getMemorySlice(start: number, end?: number) {
222
- return this.getMemory().subarray(start, end);
223
- }
224
-
225
- public writeMemory(offset: number, arr: Uint8Array) {
226
- const mem = this.getMemory();
227
- mem.set(arr, offset);
228
- }
229
-
230
- // PRIVATE METHODS
231
-
232
- private getMemory() {
233
- return new Uint8Array(this.memory.buffer);
234
- }
235
-
236
- private stringFromAddress(addr: number) {
237
- addr = addr >>> 0;
238
- const m = this.getMemory();
239
- let i = addr;
240
- for (; m[i] !== 0; ++i);
241
- const textDecoder = new TextDecoder('ascii');
242
- return textDecoder.decode(m.slice(addr, i));
243
- }
244
- }
245
-
246
- export type BarretenbergWasmWorker = Remote<BarretenbergWasm>;
@@ -1,32 +0,0 @@
1
- import { wrap } from 'comlink';
2
- import { BarretenbergWasmWorker, type BarretenbergWasm } from '../barretenberg_wasm.js';
3
- import debug from 'debug';
4
-
5
- export async function fetchCode(name: string) {
6
- const res = await fetch('/' + name);
7
- return await res.arrayBuffer();
8
- }
9
-
10
- export function createWorker() {
11
- const worker = new Worker('barretenberg_wasm.js');
12
- const debugStr = debug.disable();
13
- debug.enable(debugStr);
14
- worker.postMessage({ debug: debugStr });
15
- return worker;
16
- }
17
-
18
- export function getRemoteBarretenbergWasm(worker: Worker): BarretenbergWasmWorker {
19
- return wrap<BarretenbergWasm>(worker);
20
- }
21
-
22
- export function getNumCpu() {
23
- return navigator.hardwareConcurrency;
24
- }
25
-
26
- export function threadLogger(): ((msg: string) => void) | undefined {
27
- return undefined;
28
- }
29
-
30
- export function killSelf() {
31
- self.close();
32
- }
@@ -1,13 +0,0 @@
1
- import { expose } from 'comlink';
2
- import { BarretenbergWasm } from '../index.js';
3
- import debug from 'debug';
4
-
5
- self.onmessage = function (e) {
6
- if (e.data.debug) {
7
- debug.enable(e.data.debug);
8
- }
9
- };
10
-
11
- expose(new BarretenbergWasm());
12
-
13
- self.postMessage({ ready: true });
@@ -1,10 +0,0 @@
1
- import { parentPort } from 'worker_threads';
2
- import { expose } from 'comlink';
3
- import { BarretenbergWasm } from '../index.js';
4
- import { nodeEndpoint } from './node_endpoint.js';
5
-
6
- if (!parentPort) {
7
- throw new Error('No parentPort');
8
- }
9
-
10
- expose(new BarretenbergWasm(), nodeEndpoint(parentPort));
@@ -1,60 +0,0 @@
1
- import { existsSync } from 'fs';
2
- import { readFile } from 'fs/promises';
3
- import { dirname } from 'path';
4
- import { fileURLToPath } from 'url';
5
-
6
- /**
7
- * The path to our SRS object, assuming that we are in barretenberg/ts folder.
8
- */
9
- export const SRS_DEV_PATH = dirname(fileURLToPath(import.meta.url)) + '/../../../cpp/srs_db/ignition/monomial';
10
-
11
- /**
12
- * Downloader for CRS from a local file (for Node).
13
- */
14
- export class IgnitionFilesCrs {
15
- private data!: Uint8Array;
16
- private g2Data!: Uint8Array;
17
-
18
- constructor(
19
- /**
20
- * The number of circuit gates.
21
- */
22
- public readonly numPoints: number,
23
- private path = SRS_DEV_PATH,
24
- ) {}
25
-
26
- static defaultExists() {
27
- return existsSync(SRS_DEV_PATH);
28
- }
29
-
30
- /**
31
- * Read the data file.
32
- */
33
- async init() {
34
- // We need this.numPoints number of g1 points.
35
- // numPoints should be circuitSize + 1.
36
- const g1Start = 28;
37
- const g1End = g1Start + this.numPoints * 64;
38
-
39
- const data = await readFile(this.path + '/transcript00.dat');
40
- this.data = data.subarray(g1Start, g1End);
41
-
42
- this.g2Data = await readFile(this.path + '/g2.dat');
43
- }
44
-
45
- /**
46
- * G1 points data for prover key.
47
- * @returns The points data.
48
- */
49
- getG1Data(): Uint8Array {
50
- return this.data;
51
- }
52
-
53
- /**
54
- * G2 points data for verification key.
55
- * @returns The points data.
56
- */
57
- getG2Data(): Uint8Array {
58
- return this.g2Data;
59
- }
60
- }
@@ -1,37 +0,0 @@
1
- import { Crs } from '../crs/index.js';
2
- import createDebug from 'debug';
3
- import { newBarretenbergApiAsync } from '../factory/index.js';
4
- import { RawBuffer } from '../types/index.js';
5
-
6
- createDebug.enable('*');
7
- const debug = createDebug('simple_test');
8
-
9
- async function main() {
10
- const CIRCUIT_SIZE = 2 ** 19;
11
-
12
- debug('starting test...');
13
- const api = await newBarretenbergApiAsync();
14
-
15
- // Important to init slab allocator as first thing, to ensure maximum memory efficiency.
16
- await api.commonInitSlabAllocator(CIRCUIT_SIZE);
17
-
18
- // Plus 1 needed!
19
- const crs = await Crs.new(CIRCUIT_SIZE + 1);
20
- await api.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
21
-
22
- const iterations = 10;
23
- let totalTime = 0;
24
- for (let i = 0; i < iterations; ++i) {
25
- const start = new Date().getTime();
26
- debug(`iteration ${i} starting...`);
27
- await api.examplesSimpleCreateAndVerifyProof();
28
- totalTime += new Date().getTime() - start;
29
- }
30
-
31
- await api.destroy();
32
-
33
- debug(`avg iteration time: ${totalTime / iterations}ms`);
34
- debug('test complete.');
35
- }
36
-
37
- void main();
@@ -1,27 +0,0 @@
1
- import { Crs } from '../index.js';
2
- import { BarretenbergApiAsync, newBarretenbergApiAsync } from '../factory/index.js';
3
- import { RawBuffer } from '../types/index.js';
4
-
5
- describe('simple', () => {
6
- let api: BarretenbergApiAsync;
7
-
8
- beforeAll(async () => {
9
- api = await newBarretenbergApiAsync();
10
-
11
- // Important to init slab allocator as first thing, to ensure maximum memory efficiency.
12
- const CIRCUIT_SIZE = 2 ** 19;
13
- await api.commonInitSlabAllocator(CIRCUIT_SIZE);
14
-
15
- const crs = await Crs.new(2 ** 19 + 1);
16
- await api.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
17
- }, 20000);
18
-
19
- afterAll(async () => {
20
- await api.destroy();
21
- });
22
-
23
- it('should construct 512k gate proof', async () => {
24
- const valid = await api.examplesSimpleCreateAndVerifyProof();
25
- expect(valid).toBe(true);
26
- }, 90000);
27
- });
@@ -1,36 +0,0 @@
1
- import { BarretenbergApi, BarretenbergApiSync } from '../barretenberg_api/index.js';
2
- import { BarretenbergBinder, BarretenbergBinderSync } from '../barretenberg_binder/index.js';
3
- import { BarretenbergWasm, BarretenbergWasmWorker } from '../barretenberg_wasm/index.js';
4
-
5
- /**
6
- * Returns a single threaded, synchronous, barretenberg api.
7
- * Can be used on the main thread to perform small light-weight requests like hashing etc.
8
- */
9
- export async function newBarretenbergApiSync() {
10
- return new BarretenbergApiSync(new BarretenbergBinderSync(await BarretenbergWasm.new()));
11
- }
12
-
13
- export class BarretenbergApiAsync extends BarretenbergApi {
14
- constructor(private worker: any, private wasm: BarretenbergWasmWorker) {
15
- super(new BarretenbergBinder(wasm));
16
- }
17
-
18
- async getNumThreads() {
19
- return await this.wasm.getNumThreads();
20
- }
21
-
22
- async destroy() {
23
- await this.wasm.destroy();
24
- await this.worker.terminate();
25
- }
26
- }
27
-
28
- /**
29
- * Returns a multi threaded, asynchronous, barretenberg api.
30
- * It runs in a worker, and so can be used within the browser to execute long running, multi-threaded requests
31
- * like proof construction etc.
32
- */
33
- export async function newBarretenbergApiAsync(threads?: number) {
34
- const { wasm, worker } = await BarretenbergWasm.newWorker(threads);
35
- return new BarretenbergApiAsync(worker, wasm);
36
- }