@aztec/bb.js 0.72.1 → 0.73.0

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 (69) hide show
  1. package/dest/browser/barretenberg/index.d.ts +4 -9
  2. package/dest/browser/barretenberg/index.d.ts.map +1 -1
  3. package/dest/browser/barretenberg-threads.wasm.gz +0 -0
  4. package/dest/browser/barretenberg.wasm.gz +0 -0
  5. package/dest/browser/barretenberg_api/index.d.ts +1 -0
  6. package/dest/browser/barretenberg_api/index.d.ts.map +1 -1
  7. package/dest/browser/barretenberg_wasm/fetch_code/browser/index.d.ts +1 -1
  8. package/dest/browser/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -1
  9. package/dest/browser/barretenberg_wasm/fetch_code/node/index.d.ts +1 -1
  10. package/dest/browser/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -1
  11. package/dest/browser/barretenberg_wasm/index.d.ts +2 -2
  12. package/dest/browser/barretenberg_wasm/index.d.ts.map +1 -1
  13. package/dest/browser/index.d.ts +1 -1
  14. package/dest/browser/index.d.ts.map +1 -1
  15. package/dest/browser/index.js +12803 -13152
  16. package/dest/node/barretenberg/blake2s.test.js +2 -2
  17. package/dest/node/barretenberg/index.d.ts +4 -9
  18. package/dest/node/barretenberg/index.d.ts.map +1 -1
  19. package/dest/node/barretenberg/index.js +10 -35
  20. package/dest/node/barretenberg/pedersen.test.js +2 -2
  21. package/dest/node/barretenberg/poseidon.test.js +2 -2
  22. package/dest/node/barretenberg_api/index.d.ts +1 -0
  23. package/dest/node/barretenberg_api/index.d.ts.map +1 -1
  24. package/dest/node/barretenberg_api/index.js +8 -1
  25. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  26. package/dest/node/barretenberg_wasm/fetch_code/browser/index.d.ts +1 -1
  27. package/dest/node/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -1
  28. package/dest/node/barretenberg_wasm/fetch_code/browser/index.js +20 -6
  29. package/dest/node/barretenberg_wasm/fetch_code/node/index.d.ts +1 -1
  30. package/dest/node/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -1
  31. package/dest/node/barretenberg_wasm/fetch_code/node/index.js +2 -2
  32. package/dest/node/barretenberg_wasm/index.d.ts +2 -2
  33. package/dest/node/barretenberg_wasm/index.d.ts.map +1 -1
  34. package/dest/node/barretenberg_wasm/index.js +5 -5
  35. package/dest/node/index.d.ts +1 -1
  36. package/dest/node/index.d.ts.map +1 -1
  37. package/dest/node/index.js +2 -2
  38. package/dest/node-cjs/barretenberg/blake2s.test.js +2 -2
  39. package/dest/node-cjs/barretenberg/index.d.ts +4 -9
  40. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
  41. package/dest/node-cjs/barretenberg/index.js +11 -36
  42. package/dest/node-cjs/barretenberg/pedersen.test.js +2 -2
  43. package/dest/node-cjs/barretenberg/poseidon.test.js +2 -2
  44. package/dest/node-cjs/barretenberg_api/index.d.ts +1 -0
  45. package/dest/node-cjs/barretenberg_api/index.d.ts.map +1 -1
  46. package/dest/node-cjs/barretenberg_api/index.js +8 -1
  47. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  48. package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.d.ts +1 -1
  49. package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -1
  50. package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.js +20 -6
  51. package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.d.ts +1 -1
  52. package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -1
  53. package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.js +2 -2
  54. package/dest/node-cjs/barretenberg_wasm/index.d.ts +2 -2
  55. package/dest/node-cjs/barretenberg_wasm/index.d.ts.map +1 -1
  56. package/dest/node-cjs/barretenberg_wasm/index.js +5 -5
  57. package/dest/node-cjs/index.d.ts +1 -1
  58. package/dest/node-cjs/index.d.ts.map +1 -1
  59. package/dest/node-cjs/index.js +2 -3
  60. package/package.json +1 -1
  61. package/src/barretenberg/blake2s.test.ts +1 -1
  62. package/src/barretenberg/index.ts +13 -40
  63. package/src/barretenberg/pedersen.test.ts +1 -1
  64. package/src/barretenberg/poseidon.test.ts +1 -1
  65. package/src/barretenberg_api/index.ts +12 -0
  66. package/src/barretenberg_wasm/fetch_code/browser/index.ts +18 -5
  67. package/src/barretenberg_wasm/fetch_code/node/index.ts +1 -1
  68. package/src/barretenberg_wasm/index.ts +4 -4
  69. package/src/index.ts +1 -1
@@ -22,6 +22,9 @@ export type BackendOptions = {
22
22
 
23
23
  /** @description Path to download CRS files */
24
24
  crsPath?: string;
25
+
26
+ /** @description Path to download WASM files */
27
+ wasmPath?: string;
25
28
  };
26
29
 
27
30
  export type CircuitOptions = {
@@ -50,7 +53,7 @@ export class Barretenberg extends BarretenbergApi {
50
53
  static async new(options: BackendOptions = {}) {
51
54
  const worker = createMainWorker();
52
55
  const wasm = getRemoteBarretenbergWasm<BarretenbergWasmMainWorker>(worker);
53
- const { module, threads } = await fetchModuleAndThreads(options.threads);
56
+ const { module, threads } = await fetchModuleAndThreads(options.threads, options.wasmPath);
54
57
  await wasm.init(module, threads, proxy(debug), options.memory?.initial, options.memory?.maximum);
55
58
  return new Barretenberg(worker, wasm, options);
56
59
  }
@@ -89,26 +92,28 @@ export class Barretenberg extends BarretenbergApi {
89
92
  }
90
93
  }
91
94
 
95
+ let barrentenbergSyncSingletonPromise: Promise<BarretenbergSync>;
92
96
  let barretenbergSyncSingleton: BarretenbergSync;
93
- let barretenbergSyncSingletonPromise: Promise<BarretenbergSync>;
94
97
 
95
98
  export class BarretenbergSync extends BarretenbergApiSync {
96
99
  private constructor(wasm: BarretenbergWasmMain) {
97
100
  super(wasm);
98
101
  }
99
102
 
100
- static async new() {
103
+ private static async new(wasmPath?: string) {
101
104
  const wasm = new BarretenbergWasmMain();
102
- const { module, threads } = await fetchModuleAndThreads(1);
105
+ const { module, threads } = await fetchModuleAndThreads(1, wasmPath);
103
106
  await wasm.init(module, threads);
104
107
  return new BarretenbergSync(wasm);
105
108
  }
106
109
 
107
- static initSingleton() {
108
- if (!barretenbergSyncSingletonPromise) {
109
- barretenbergSyncSingletonPromise = BarretenbergSync.new().then(s => (barretenbergSyncSingleton = s));
110
+ static async initSingleton(wasmPath?: string) {
111
+ if (!barrentenbergSyncSingletonPromise) {
112
+ barrentenbergSyncSingletonPromise = BarretenbergSync.new(wasmPath);
110
113
  }
111
- return barretenbergSyncSingletonPromise;
114
+
115
+ barretenbergSyncSingleton = await barrentenbergSyncSingletonPromise;
116
+ return barretenbergSyncSingleton;
112
117
  }
113
118
 
114
119
  static getSingleton() {
@@ -122,35 +127,3 @@ export class BarretenbergSync extends BarretenbergApiSync {
122
127
  return this.wasm;
123
128
  }
124
129
  }
125
-
126
- let barrentenbergLazySingleton: BarretenbergLazy;
127
-
128
- export class BarretenbergLazy extends BarretenbergApi {
129
- private constructor(wasm: BarretenbergWasmMain) {
130
- super(wasm);
131
- }
132
-
133
- private static async new() {
134
- const wasm = new BarretenbergWasmMain();
135
- const { module, threads } = await fetchModuleAndThreads(1);
136
- await wasm.init(module, threads);
137
- return new BarretenbergLazy(wasm);
138
- }
139
-
140
- static async getSingleton() {
141
- if (!barrentenbergLazySingleton) {
142
- barrentenbergLazySingleton = await BarretenbergLazy.new();
143
- }
144
- return barrentenbergLazySingleton;
145
- }
146
-
147
- getWasm() {
148
- return this.wasm;
149
- }
150
- }
151
-
152
- // If we're in ESM environment, use top level await. CJS users need to call it manually.
153
- // Need to ignore for cjs build.
154
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
155
- // @ts-ignore
156
- await BarretenbergSync.initSingleton(); // POSTPROCESS ESM ONLY
@@ -6,7 +6,7 @@ describe('pedersen sync', () => {
6
6
  let api: BarretenbergSync;
7
7
 
8
8
  beforeAll(async () => {
9
- api = await BarretenbergSync.new();
9
+ api = await BarretenbergSync.initSingleton();
10
10
  });
11
11
 
12
12
  it('pedersenHash', () => {
@@ -6,7 +6,7 @@ describe('poseidon sync', () => {
6
6
  let api: BarretenbergSync;
7
7
 
8
8
  beforeAll(async () => {
9
- api = await BarretenbergSync.new();
9
+ api = await BarretenbergSync.initSingleton();
10
10
  });
11
11
 
12
12
  it('poseidonHash', () => {
@@ -76,6 +76,18 @@ export class BarretenbergApi {
76
76
  return out[0];
77
77
  }
78
78
 
79
+ async poseidon2HashAccumulate(inputsBuffer: Fr[]): Promise<Fr> {
80
+ const inArgs = [inputsBuffer].map(serializeBufferable);
81
+ const outTypes: OutputType[] = [Fr];
82
+ const result = await this.wasm.callWasmExport(
83
+ 'poseidon2_hash_accumulate',
84
+ inArgs,
85
+ outTypes.map(t => t.SIZE_IN_BYTES),
86
+ );
87
+ const out = result.map((r, i) => outTypes[i].fromBuffer(r));
88
+ return out[0];
89
+ }
90
+
79
91
  async poseidon2Hashes(inputsBuffer: Fr[]): Promise<Fr> {
80
92
  const inArgs = [inputsBuffer].map(serializeBufferable);
81
93
  const outTypes: OutputType[] = [Fr];
@@ -4,9 +4,22 @@ import pako from 'pako';
4
4
 
5
5
  // Annoyingly the wasm declares if it's memory is shared or not. So now we need two wasms if we want to be
6
6
  // able to fallback on "non shared memory" situations.
7
- export async function fetchCode(multithreaded: boolean) {
8
- const res = await fetch(multithreaded ? barretenbergThreadsModule : barretenbergModule);
9
- const compressedData = await res.arrayBuffer();
10
- const decompressedData = pako.ungzip(new Uint8Array(compressedData));
11
- return decompressedData.buffer;
7
+ export async function fetchCode(multithreaded: boolean, wasmPath?: string) {
8
+ let url = multithreaded ? barretenbergThreadsModule : barretenbergModule;
9
+ url = wasmPath ? `${wasmPath}/${/[^/]+(?=\/$|$)/.exec(url)?.[0]}` : url;
10
+ const res = await fetch(url);
11
+ const maybeCompressedData = await res.arrayBuffer();
12
+ const buffer = new Uint8Array(maybeCompressedData);
13
+ const isGzip =
14
+ // Check magic number
15
+ buffer[0] === 0x1f &&
16
+ buffer[1] === 0x8b &&
17
+ // Check compression method:
18
+ buffer[2] === 0x08;
19
+ if (isGzip) {
20
+ const decompressedData = pako.ungzip(buffer);
21
+ return decompressedData.buffer;
22
+ } else {
23
+ return buffer;
24
+ }
12
25
  }
@@ -14,7 +14,7 @@ function getCurrentDir() {
14
14
  }
15
15
 
16
16
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
17
- export async function fetchCode(multithreaded: boolean) {
17
+ export async function fetchCode(multithreaded: boolean, wasmPath?: string) {
18
18
  const path = getCurrentDir() + '/../../barretenberg-threads.wasm.gz';
19
19
  const compressedData = await readFile(path);
20
20
  const decompressedData = pako.ungzip(new Uint8Array(compressedData));
@@ -7,14 +7,14 @@ import { fetchCode } from './fetch_code/index.js';
7
7
 
8
8
  const debug = createDebug('bb.js:wasm');
9
9
 
10
- export async function fetchModuleAndThreads(desiredThreads = 32) {
10
+ export async function fetchModuleAndThreads(desiredThreads = 32, wasmPath?: string) {
11
11
  const shared = getSharedMemoryAvailable();
12
12
 
13
13
  const availableThreads = shared ? await getAvailableThreads() : 1;
14
14
  // We limit the number of threads to 32 as we do not benefit from greater numbers.
15
15
  const limitedThreads = Math.min(desiredThreads, availableThreads, 32);
16
16
 
17
- const code = await fetchCode(shared);
17
+ const code = await fetchCode(shared, wasmPath);
18
18
  const module = await WebAssembly.compile(code);
19
19
  return { module, threads: limitedThreads };
20
20
  }
@@ -38,10 +38,10 @@ export class BarretenbergWasm extends BarretenbergWasmMain {
38
38
  * Construct and initialize BarretenbergWasm within a Worker. Return both the worker and the wasm proxy.
39
39
  * Used when running in the browser, because we can't block the main thread.
40
40
  */
41
- public static async new(desiredThreads?: number) {
41
+ public static async new(desiredThreads?: number, wasmPath?: string) {
42
42
  const worker = createMainWorker();
43
43
  const wasm = getRemoteBarretenbergWasm<BarretenbergWasmMainWorker>(worker);
44
- const { module, threads } = await fetchModuleAndThreads(desiredThreads);
44
+ const { module, threads } = await fetchModuleAndThreads(desiredThreads, wasmPath);
45
45
  await wasm.init(module, threads, proxy(debug));
46
46
  return { worker, wasm };
47
47
  }
package/src/index.ts CHANGED
@@ -3,11 +3,11 @@ export {
3
3
  BackendOptions,
4
4
  Barretenberg,
5
5
  BarretenbergSync,
6
- BarretenbergLazy,
7
6
  BarretenbergVerifier,
8
7
  UltraPlonkBackend,
9
8
  UltraHonkBackend,
10
9
  AztecClientBackend,
11
10
  } from './barretenberg/index.js';
11
+
12
12
  export { RawBuffer, Fr } from './types/index.js';
13
13
  export { splitHonkProof, reconstructHonkProof, ProofData } from './proof/index.js';