@aztec/bb.js 0.0.0-devnet → 0.0.0-test.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.
- package/README.md +10 -2
- package/dest/browser/522.6386c00ebfb22619e11b.js +3 -0
- package/dest/browser/barretenberg/backend.d.ts +7 -2
- package/dest/browser/barretenberg/backend.d.ts.map +1 -1
- package/dest/browser/barretenberg/index.d.ts +6 -2
- package/dest/browser/barretenberg/index.d.ts.map +1 -1
- package/dest/browser/barretenberg-threads.js +32 -0
- package/dest/browser/barretenberg.js +32 -0
- package/dest/browser/barretenberg_api/index.d.ts +5 -2
- package/dest/browser/barretenberg_api/index.d.ts.map +1 -1
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +1 -1
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +1 -1
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts +3 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts +3 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/index.d.ts +1 -1
- package/dest/browser/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -1
- package/dest/browser/barretenberg_wasm/fetch_code/node/index.d.ts +1 -1
- package/dest/browser/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -1
- package/dest/browser/barretenberg_wasm/index.d.ts +2 -2
- package/dest/browser/barretenberg_wasm/index.d.ts.map +1 -1
- package/dest/browser/bigint-array/index.d.ts +17 -2
- package/dest/browser/bigint-array/index.d.ts.map +1 -1
- package/dest/browser/crs/net_crs.d.ts.map +1 -1
- package/dest/browser/crs/node/index.d.ts +6 -4
- package/dest/browser/crs/node/index.d.ts.map +1 -1
- package/dest/browser/index.d.ts.map +1 -1
- package/dest/browser/index.js +10583 -16082
- package/dest/browser/index.js.LICENSE.txt +16 -0
- package/dest/browser/main.worker.worker.js.LICENSE.txt +5 -0
- package/dest/browser/proof/index.d.ts +10 -0
- package/dest/browser/proof/index.d.ts.map +1 -1
- package/dest/browser/retry/index.d.ts +26 -0
- package/dest/browser/retry/index.d.ts.map +1 -0
- package/dest/browser/thread.worker.worker.js.LICENSE.txt +5 -0
- package/dest/browser/thread.worker.worker.worker.js.LICENSE.txt +5 -0
- package/dest/browser/types/fields.d.ts +6 -5
- package/dest/browser/types/fields.d.ts.map +1 -1
- package/dest/node/barretenberg/__snapshots__/pedersen.test.js.snap +156 -0
- package/dest/node/barretenberg/__snapshots__/poseidon.test.js.snap +40 -0
- package/dest/node/barretenberg/backend.d.ts +7 -2
- package/dest/node/barretenberg/backend.d.ts.map +1 -1
- package/dest/node/barretenberg/backend.js +54 -4
- package/dest/node/barretenberg/blake2s.test.js +2 -2
- package/dest/node/barretenberg/index.d.ts +6 -2
- package/dest/node/barretenberg/index.d.ts.map +1 -1
- package/dest/node/barretenberg/index.js +15 -20
- package/dest/node/barretenberg/pedersen.test.js +2 -2
- package/dest/node/barretenberg/poseidon.test.js +2 -2
- package/dest/node/barretenberg_api/index.d.ts +5 -2
- package/dest/node/barretenberg_api/index.d.ts.map +1 -1
- package/dest/node/barretenberg_api/index.js +32 -2
- package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
- package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.js +5 -6
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +1 -1
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +16 -11
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +1 -1
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js +7 -9
- package/dest/node/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts +3 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +3 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts +3 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/barretenberg.js +3 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/index.d.ts +1 -1
- package/dest/node/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -1
- package/dest/node/barretenberg_wasm/fetch_code/browser/index.js +31 -8
- package/dest/node/barretenberg_wasm/fetch_code/node/index.d.ts +1 -1
- package/dest/node/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -1
- package/dest/node/barretenberg_wasm/fetch_code/node/index.js +3 -3
- package/dest/node/barretenberg_wasm/index.d.ts +2 -2
- package/dest/node/barretenberg_wasm/index.d.ts.map +1 -1
- package/dest/node/barretenberg_wasm/index.js +12 -10
- package/dest/node/barretenberg_wasm/index.test.js +3 -3
- package/dest/node/bigint-array/index.d.ts +17 -2
- package/dest/node/bigint-array/index.d.ts.map +1 -1
- package/dest/node/bigint-array/index.js +34 -18
- package/dest/node/crs/net_crs.d.ts.map +1 -1
- package/dest/node/crs/net_crs.js +6 -5
- package/dest/node/crs/node/index.d.ts +6 -4
- package/dest/node/crs/node/index.d.ts.map +1 -1
- package/dest/node/crs/node/index.js +16 -13
- package/dest/node/examples/simple.test.js +2 -2
- package/dest/node/index.d.ts.map +1 -1
- package/dest/node/index.js +1 -1
- package/dest/node/main.d.ts.map +1 -1
- package/dest/node/main.js +57 -65
- package/dest/node/proof/index.d.ts +10 -0
- package/dest/node/proof/index.d.ts.map +1 -1
- package/dest/node/proof/index.js +1 -1
- package/dest/node/retry/index.d.ts +26 -0
- package/dest/node/retry/index.d.ts.map +1 -0
- package/dest/node/retry/index.js +50 -0
- package/dest/node/types/fields.d.ts +6 -5
- package/dest/node/types/fields.d.ts.map +1 -1
- package/dest/node/types/fields.js +15 -10
- package/dest/node-cjs/barretenberg/backend.d.ts +7 -2
- package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg/backend.js +56 -5
- package/dest/node-cjs/barretenberg/blake2s.test.js +2 -2
- package/dest/node-cjs/barretenberg/index.d.ts +6 -2
- package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg/index.js +15 -19
- package/dest/node-cjs/barretenberg/pedersen.test.js +2 -2
- package/dest/node-cjs/barretenberg/poseidon.test.js +2 -2
- package/dest/node-cjs/barretenberg_api/index.d.ts +5 -2
- package/dest/node-cjs/barretenberg_api/index.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg_api/index.js +32 -2
- package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.js +5 -6
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +1 -1
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +16 -11
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +1 -1
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +7 -9
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts +3 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +6 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts +3 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/barretenberg.js +6 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.d.ts +1 -1
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.js +31 -8
- package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.d.ts +1 -1
- package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.js +3 -3
- package/dest/node-cjs/barretenberg_wasm/index.d.ts +2 -2
- package/dest/node-cjs/barretenberg_wasm/index.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg_wasm/index.js +12 -10
- package/dest/node-cjs/barretenberg_wasm/index.test.js +3 -3
- package/dest/node-cjs/bigint-array/index.d.ts +17 -2
- package/dest/node-cjs/bigint-array/index.d.ts.map +1 -1
- package/dest/node-cjs/bigint-array/index.js +39 -21
- package/dest/node-cjs/crs/net_crs.d.ts.map +1 -1
- package/dest/node-cjs/crs/net_crs.js +6 -5
- package/dest/node-cjs/crs/node/index.d.ts +6 -4
- package/dest/node-cjs/crs/node/index.d.ts.map +1 -1
- package/dest/node-cjs/crs/node/index.js +16 -13
- package/dest/node-cjs/examples/simple.test.js +2 -2
- package/dest/node-cjs/index.d.ts.map +1 -1
- package/dest/node-cjs/index.js +1 -1
- package/dest/node-cjs/main.d.ts.map +1 -1
- package/dest/node-cjs/main.js +57 -65
- package/dest/node-cjs/proof/index.d.ts +10 -0
- package/dest/node-cjs/proof/index.d.ts.map +1 -1
- package/dest/node-cjs/proof/index.js +1 -1
- package/dest/node-cjs/retry/index.d.ts +26 -0
- package/dest/node-cjs/retry/index.d.ts.map +1 -0
- package/dest/node-cjs/retry/index.js +56 -0
- package/dest/node-cjs/types/fields.d.ts +6 -5
- package/dest/node-cjs/types/fields.d.ts.map +1 -1
- package/dest/node-cjs/types/fields.js +14 -9
- package/package.json +5 -5
- package/src/barretenberg/backend.ts +79 -3
- package/src/barretenberg/blake2s.test.ts +1 -1
- package/src/barretenberg/index.ts +27 -21
- package/src/barretenberg/pedersen.test.ts +1 -1
- package/src/barretenberg/poseidon.test.ts +1 -1
- package/src/barretenberg_api/index.ts +49 -2
- package/src/barretenberg_wasm/barretenberg_wasm_base/index.ts +4 -6
- package/src/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.ts +14 -10
- package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +7 -10
- package/src/barretenberg_wasm/fetch_code/browser/barretenberg-threads.ts +3 -0
- package/src/barretenberg_wasm/fetch_code/browser/barretenberg.ts +3 -0
- package/src/barretenberg_wasm/fetch_code/browser/index.ts +28 -7
- package/src/barretenberg_wasm/fetch_code/node/index.ts +2 -2
- package/src/barretenberg_wasm/index.test.ts +2 -2
- package/src/barretenberg_wasm/index.ts +22 -11
- package/src/bigint-array/index.ts +39 -17
- package/src/crs/net_crs.ts +18 -9
- package/src/crs/node/index.ts +31 -15
- package/src/examples/simple.test.ts +1 -1
- package/src/index.ts +1 -0
- package/src/main.ts +61 -70
- package/src/proof/index.ts +11 -0
- package/src/retry/index.ts +50 -0
- package/src/types/fields.ts +24 -13
- package/dest/browser/522.index.js +0 -10
- /package/src/barretenberg_wasm/fetch_code/{browser/wasm-module.d.ts → wasm-module.d.ts} +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a backoff sequence for retrying operations with an increasing delay.
|
|
3
|
+
* The backoff sequence follows this pattern: 1, 1, 1, 2, 4, 8, 16, 32, 64, ...
|
|
4
|
+
* This generator can be used in combination with the `retry` function to perform
|
|
5
|
+
* retries with exponential backoff and capped at 64 seconds between attempts.
|
|
6
|
+
*
|
|
7
|
+
* @returns A generator that yields the next backoff value in seconds as an integer.
|
|
8
|
+
*/
|
|
9
|
+
export declare function backoffGenerator(): Generator<number, void, unknown>;
|
|
10
|
+
/**
|
|
11
|
+
* Generates a backoff sequence based on the array of retry intervals to use with the `retry` function.
|
|
12
|
+
* @param retries - Intervals to retry (in seconds).
|
|
13
|
+
* @returns A generator sequence.
|
|
14
|
+
*/
|
|
15
|
+
export declare function makeBackoff(retries: number[]): Generator<number, void, unknown>;
|
|
16
|
+
/**
|
|
17
|
+
* Retry a given asynchronous function with a specific backoff strategy, until it succeeds or backoff generator ends.
|
|
18
|
+
* It logs the error and retry interval in case an error is caught. The function can be named for better log output.
|
|
19
|
+
*
|
|
20
|
+
* @param fn - The asynchronous function to be retried.
|
|
21
|
+
* @param backoff - The optional backoff generator providing the intervals in seconds between retries. Defaults to a predefined series.
|
|
22
|
+
* @returns A Promise that resolves with the successful result of the provided function, or rejects if backoff generator ends.
|
|
23
|
+
* @throws If `NoRetryError` is thrown by the `fn`, it is rethrown.
|
|
24
|
+
*/
|
|
25
|
+
export declare function retry<Result>(fn: () => Promise<Result>, backoff?: Generator<number, void, unknown>): Promise<Result>;
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/retry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAiB,gBAAgB,qCAMhC;AAED;;;;GAIG;AACH,wBAAiB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,oCAI7C;AAED;;;;;;;;GAQG;AACH,wBAAsB,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,mCAAqB,mBAa1F"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.retry = exports.makeBackoff = exports.backoffGenerator = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Generates a backoff sequence for retrying operations with an increasing delay.
|
|
6
|
+
* The backoff sequence follows this pattern: 1, 1, 1, 2, 4, 8, 16, 32, 64, ...
|
|
7
|
+
* This generator can be used in combination with the `retry` function to perform
|
|
8
|
+
* retries with exponential backoff and capped at 64 seconds between attempts.
|
|
9
|
+
*
|
|
10
|
+
* @returns A generator that yields the next backoff value in seconds as an integer.
|
|
11
|
+
*/
|
|
12
|
+
function* backoffGenerator() {
|
|
13
|
+
const v = [1, 1, 1, 2, 4, 8, 16, 32, 64];
|
|
14
|
+
let i = 0;
|
|
15
|
+
while (true) {
|
|
16
|
+
yield v[Math.min(i++, v.length - 1)];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.backoffGenerator = backoffGenerator;
|
|
20
|
+
/**
|
|
21
|
+
* Generates a backoff sequence based on the array of retry intervals to use with the `retry` function.
|
|
22
|
+
* @param retries - Intervals to retry (in seconds).
|
|
23
|
+
* @returns A generator sequence.
|
|
24
|
+
*/
|
|
25
|
+
function* makeBackoff(retries) {
|
|
26
|
+
for (const retry of retries) {
|
|
27
|
+
yield retry;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.makeBackoff = makeBackoff;
|
|
31
|
+
/**
|
|
32
|
+
* Retry a given asynchronous function with a specific backoff strategy, until it succeeds or backoff generator ends.
|
|
33
|
+
* It logs the error and retry interval in case an error is caught. The function can be named for better log output.
|
|
34
|
+
*
|
|
35
|
+
* @param fn - The asynchronous function to be retried.
|
|
36
|
+
* @param backoff - The optional backoff generator providing the intervals in seconds between retries. Defaults to a predefined series.
|
|
37
|
+
* @returns A Promise that resolves with the successful result of the provided function, or rejects if backoff generator ends.
|
|
38
|
+
* @throws If `NoRetryError` is thrown by the `fn`, it is rethrown.
|
|
39
|
+
*/
|
|
40
|
+
async function retry(fn, backoff = backoffGenerator()) {
|
|
41
|
+
while (true) {
|
|
42
|
+
try {
|
|
43
|
+
return await fn();
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
const s = backoff.next().value;
|
|
47
|
+
if (s === undefined) {
|
|
48
|
+
throw err;
|
|
49
|
+
}
|
|
50
|
+
await new Promise(resolve => setTimeout(resolve, s * 1000));
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.retry = retry;
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmV0cnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7R0FPRztBQUNILFFBQWUsQ0FBQyxDQUFDLGdCQUFnQjtJQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7QUFDSCxDQUFDO0FBTkQsNENBTUM7QUFFRDs7OztHQUlHO0FBQ0gsUUFBZSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQWlCO0lBQzVDLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUpELGtDQUlDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsS0FBSyxDQUFTLEVBQXlCLEVBQUUsT0FBTyxHQUFHLGdCQUFnQixFQUFFO0lBQ3pGLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDbEIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDO1lBQ0QsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUQsU0FBUztRQUNYLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQWJELHNCQWFDIn0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import { BufferReader } from '../serialize/index.js';
|
|
2
3
|
/**
|
|
3
4
|
* Fr field class.
|
|
@@ -10,9 +11,9 @@ export declare class Fr {
|
|
|
10
11
|
static MAX_VALUE: bigint;
|
|
11
12
|
static SIZE_IN_BYTES: number;
|
|
12
13
|
value: Uint8Array;
|
|
13
|
-
constructor(value: Uint8Array | bigint);
|
|
14
|
+
constructor(value: Uint8Array | Buffer | bigint);
|
|
14
15
|
static random(): Fr;
|
|
15
|
-
static fromBuffer(buffer: Uint8Array | BufferReader): Fr;
|
|
16
|
+
static fromBuffer(buffer: Uint8Array | Buffer | BufferReader): Fr;
|
|
16
17
|
static fromBufferReduce(buffer: Uint8Array | BufferReader): Fr;
|
|
17
18
|
static fromString(str: string): Fr;
|
|
18
19
|
toBuffer(): Uint8Array;
|
|
@@ -32,10 +33,10 @@ export declare class Fq {
|
|
|
32
33
|
static SIZE_IN_BYTES: number;
|
|
33
34
|
constructor(value: bigint);
|
|
34
35
|
static random(): Fq;
|
|
35
|
-
static fromBuffer(buffer: Uint8Array | BufferReader): Fq;
|
|
36
|
-
static fromBufferReduce(buffer: Uint8Array | BufferReader): Fq;
|
|
36
|
+
static fromBuffer(buffer: Uint8Array | Buffer | BufferReader): Fq;
|
|
37
|
+
static fromBufferReduce(buffer: Uint8Array | Buffer | BufferReader): Fq;
|
|
37
38
|
static fromString(str: string): Fq;
|
|
38
|
-
toBuffer():
|
|
39
|
+
toBuffer(): Buffer;
|
|
39
40
|
toString(): string;
|
|
40
41
|
equals(rhs: Fq): boolean;
|
|
41
42
|
isZero(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/types/fields.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/types/fields.ts"],"names":[],"mappings":";AAOA,OAAO,EAAE,YAAY,EAAyB,MAAM,uBAAuB,CAAC;AAG5E;;;;GAIG;AACH,qBAAa,EAAE;IACb,MAAM,CAAC,IAAI,KAAc;IACzB,MAAM,CAAC,OAAO,SAAuE;IACrF,MAAM,CAAC,SAAS,SAAqB;IACrC,MAAM,CAAC,aAAa,SAAM;IAC1B,KAAK,EAAE,UAAU,CAAC;gBAEN,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM;IAiB/C,MAAM,CAAC,MAAM;IAKb,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,YAAY;IAK5D,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY;IAKzD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAI7B,QAAQ;IAIR,QAAQ;IAIR,MAAM,CAAC,GAAG,EAAE,EAAE;IAId,MAAM;CAGP;AAED;;;;GAIG;AACH,qBAAa,EAAE;aAKe,KAAK,EAAE,MAAM;IAJzC,MAAM,CAAC,OAAO,SAAuE;IACrF,MAAM,CAAC,SAAS,SAAqB;IACrC,MAAM,CAAC,aAAa,SAAM;gBAEE,KAAK,EAAE,MAAM;IAMzC,MAAM,CAAC,MAAM;IAKb,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,YAAY;IAK5D,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,YAAY;IAKlE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAI7B,QAAQ;IAIR,QAAQ;IAIR,MAAM,CAAC,GAAG,EAAE,EAAE;IAId,MAAM;CAGP"}
|
|
@@ -14,14 +14,19 @@ const index_js_3 = require("../serialize/index.js");
|
|
|
14
14
|
class Fr {
|
|
15
15
|
constructor(value) {
|
|
16
16
|
// We convert buffer value to bigint to be able to check it fits within modulus
|
|
17
|
-
const valueBigInt = typeof value === 'bigint'
|
|
17
|
+
const valueBigInt = typeof value === 'bigint'
|
|
18
|
+
? value
|
|
19
|
+
: value instanceof Buffer
|
|
20
|
+
? (0, index_js_2.buffer32BytesToBigIntBE)(value)
|
|
21
|
+
: (0, index_js_2.uint8ArrayToBigIntBE)(value);
|
|
18
22
|
if (valueBigInt > _a.MAX_VALUE) {
|
|
19
23
|
throw new Error(`Value 0x${valueBigInt.toString(16)} is greater or equal to field modulus.`);
|
|
20
24
|
}
|
|
21
|
-
this.value =
|
|
25
|
+
this.value =
|
|
26
|
+
typeof value === 'bigint' ? (0, index_js_2.bigIntToUint8ArrayBE)(value) : value instanceof Buffer ? new Uint8Array(value) : value;
|
|
22
27
|
}
|
|
23
28
|
static random() {
|
|
24
|
-
const r = (0, index_js_2.
|
|
29
|
+
const r = (0, index_js_2.uint8ArrayToBigIntBE)((0, index_js_1.randomBytes)(64)) % _a.MODULUS;
|
|
25
30
|
return new this(r);
|
|
26
31
|
}
|
|
27
32
|
static fromBuffer(buffer) {
|
|
@@ -30,7 +35,7 @@ class Fr {
|
|
|
30
35
|
}
|
|
31
36
|
static fromBufferReduce(buffer) {
|
|
32
37
|
const reader = index_js_3.BufferReader.asReader(buffer);
|
|
33
|
-
return new this((0, index_js_2.
|
|
38
|
+
return new this((0, index_js_2.uint8ArrayToBigIntBE)(reader.readBytes(this.SIZE_IN_BYTES)) % _a.MODULUS);
|
|
34
39
|
}
|
|
35
40
|
static fromString(str) {
|
|
36
41
|
return this.fromBuffer(Buffer.from(str.replace(/^0x/i, ''), 'hex'));
|
|
@@ -67,22 +72,22 @@ class Fq {
|
|
|
67
72
|
}
|
|
68
73
|
}
|
|
69
74
|
static random() {
|
|
70
|
-
const r = (0, index_js_2.
|
|
75
|
+
const r = (0, index_js_2.uint8ArrayToBigIntBE)((0, index_js_1.randomBytes)(64)) % _b.MODULUS;
|
|
71
76
|
return new this(r);
|
|
72
77
|
}
|
|
73
78
|
static fromBuffer(buffer) {
|
|
74
79
|
const reader = index_js_3.BufferReader.asReader(buffer);
|
|
75
|
-
return new this((0, index_js_2.
|
|
80
|
+
return new this((0, index_js_2.uint8ArrayToBigIntBE)(reader.readBytes(this.SIZE_IN_BYTES)));
|
|
76
81
|
}
|
|
77
82
|
static fromBufferReduce(buffer) {
|
|
78
83
|
const reader = index_js_3.BufferReader.asReader(buffer);
|
|
79
|
-
return new this((0, index_js_2.
|
|
84
|
+
return new this((0, index_js_2.uint8ArrayToBigIntBE)(reader.readBytes(this.SIZE_IN_BYTES)) % Fr.MODULUS);
|
|
80
85
|
}
|
|
81
86
|
static fromString(str) {
|
|
82
87
|
return this.fromBuffer(Buffer.from(str.replace(/^0x/i, ''), 'hex'));
|
|
83
88
|
}
|
|
84
89
|
toBuffer() {
|
|
85
|
-
return (0, index_js_2.
|
|
90
|
+
return (0, index_js_2.bigIntToBufferBE)(this.value, _b.SIZE_IN_BYTES);
|
|
86
91
|
}
|
|
87
92
|
toString() {
|
|
88
93
|
return '0x' + this.value.toString(16);
|
|
@@ -99,4 +104,4 @@ _b = Fq;
|
|
|
99
104
|
Fq.MODULUS = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47n;
|
|
100
105
|
Fq.MAX_VALUE = _b.MODULUS - 1n;
|
|
101
106
|
Fq.SIZE_IN_BYTES = 32;
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL2ZpZWxkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsaURBQWlEO0FBQ2pELHVEQUtrQztBQUNsQyxvREFBNEU7QUFFNUUsMkZBQTJGO0FBQzNGOzs7O0dBSUc7QUFDSCxNQUFhLEVBQUU7SUFPYixZQUFZLEtBQW1DO1FBQzdDLCtFQUErRTtRQUMvRSxNQUFNLFdBQVcsR0FDZixPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3ZCLENBQUMsQ0FBQyxLQUFLO1lBQ1AsQ0FBQyxDQUFDLEtBQUssWUFBWSxNQUFNO2dCQUN6QixDQUFDLENBQUMsSUFBQSxrQ0FBdUIsRUFBQyxLQUFLLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxJQUFBLCtCQUFvQixFQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUs7WUFDUixPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUEsK0JBQW9CLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDdEgsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNO1FBQ1gsTUFBTSxDQUFDLEdBQUcsSUFBQSwrQkFBb0IsRUFBQyxJQUFBLHNCQUFXLEVBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQzdELE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIs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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/bb.js",
|
|
3
3
|
"packageManager": "yarn@4.5.2",
|
|
4
|
-
"version": "0.0.0-
|
|
4
|
+
"version": "0.0.0-test.0",
|
|
5
5
|
"homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/barretenberg/ts",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"default": "./dest/node/index.js"
|
|
14
14
|
}
|
|
15
15
|
},
|
|
16
|
-
"bin": "
|
|
16
|
+
"bin": "dest/node/main.js",
|
|
17
17
|
"files": [
|
|
18
18
|
"src/",
|
|
19
19
|
"dest/",
|
|
@@ -84,7 +84,6 @@
|
|
|
84
84
|
"@typescript-eslint/eslint-plugin": "^5.54.1",
|
|
85
85
|
"@typescript-eslint/parser": "^5.54.1",
|
|
86
86
|
"buffer": "^6.0.3",
|
|
87
|
-
"copy-webpack-plugin": "^11.0.0",
|
|
88
87
|
"eslint": "^8.35.0",
|
|
89
88
|
"eslint-config-prettier": "^8.8.0",
|
|
90
89
|
"html-webpack-plugin": "^5.5.1",
|
|
@@ -93,13 +92,14 @@
|
|
|
93
92
|
"prettier": "^2.8.4",
|
|
94
93
|
"resolve-typescript-plugin": "^2.0.1",
|
|
95
94
|
"source-map-support": "^0.5.21",
|
|
95
|
+
"terser-webpack-plugin": "^5.3.11",
|
|
96
96
|
"ts-jest": "^29.1.0",
|
|
97
97
|
"ts-loader": "^9.4.2",
|
|
98
98
|
"ts-node": "^10.9.1",
|
|
99
|
-
"typescript": "
|
|
99
|
+
"typescript": "5.4.5",
|
|
100
100
|
"webpack": "^5.82.1",
|
|
101
101
|
"webpack-cli": "^5.1.1",
|
|
102
|
-
"webpack-dev-server": "^
|
|
102
|
+
"webpack-dev-server": "^5.2.0",
|
|
103
103
|
"worker-loader": "^3.0.8"
|
|
104
104
|
}
|
|
105
105
|
}
|
|
@@ -5,10 +5,17 @@ import {
|
|
|
5
5
|
deflattenFields,
|
|
6
6
|
flattenFieldsAsArray,
|
|
7
7
|
ProofData,
|
|
8
|
+
ProofDataForRecursion,
|
|
8
9
|
reconstructHonkProof,
|
|
9
10
|
reconstructUltraPlonkProof,
|
|
10
11
|
} from '../proof/index.js';
|
|
11
12
|
|
|
13
|
+
export class AztecClientBackendError extends Error {
|
|
14
|
+
constructor(message: string) {
|
|
15
|
+
super(message);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
12
19
|
export class UltraPlonkBackend {
|
|
13
20
|
// These type assertions are used so that we don't
|
|
14
21
|
// have to initialize `api` and `acirComposer` in the constructor.
|
|
@@ -216,6 +223,7 @@ export class UltraHonkBackend {
|
|
|
216
223
|
const proofStart = proofWithPublicInputs.slice(0, publicInputsOffset);
|
|
217
224
|
const publicInputsSplitIndex = numPublicInputs * fieldByteSize;
|
|
218
225
|
const proofEnd = proofWithPublicInputs.slice(publicInputsOffset + publicInputsSplitIndex);
|
|
226
|
+
|
|
219
227
|
// Construct the proof without the public inputs
|
|
220
228
|
const proof = new Uint8Array([...proofStart, ...proofEnd]);
|
|
221
229
|
|
|
@@ -229,6 +237,61 @@ export class UltraHonkBackend {
|
|
|
229
237
|
return { proof, publicInputs };
|
|
230
238
|
}
|
|
231
239
|
|
|
240
|
+
async generateProofForRecursiveAggregation(
|
|
241
|
+
compressedWitness: Uint8Array,
|
|
242
|
+
options?: UltraHonkBackendOptions,
|
|
243
|
+
): Promise<ProofDataForRecursion> {
|
|
244
|
+
await this.instantiate();
|
|
245
|
+
|
|
246
|
+
const proveUltraHonk = options?.keccak
|
|
247
|
+
? this.api.acirProveUltraKeccakHonk.bind(this.api)
|
|
248
|
+
: this.api.acirProveUltraHonk.bind(this.api);
|
|
249
|
+
|
|
250
|
+
const proofWithPublicInputs = await proveUltraHonk(
|
|
251
|
+
this.acirUncompressedBytecode,
|
|
252
|
+
this.circuitOptions.recursive,
|
|
253
|
+
gunzip(compressedWitness),
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
// proofWithPublicInputs starts with a four-byte size
|
|
257
|
+
const numSerdeHeaderBytes = 4;
|
|
258
|
+
// some public inputs are handled specially
|
|
259
|
+
const numKZGAccumulatorFieldElements = 16;
|
|
260
|
+
// proof begins with: size, num public inputs, public input offset
|
|
261
|
+
const numProofPreambleElements = 3;
|
|
262
|
+
const publicInputsSizeIndex = 1;
|
|
263
|
+
|
|
264
|
+
// Slice serde header and convert to fields
|
|
265
|
+
const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(numSerdeHeaderBytes));
|
|
266
|
+
const numPublicInputs = Number(proofAsStrings[publicInputsSizeIndex]) - numKZGAccumulatorFieldElements;
|
|
267
|
+
|
|
268
|
+
// Account for the serialized buffer size at start
|
|
269
|
+
const publicInputsOffset = publicInputsOffsetBytes + serializedBufferSize;
|
|
270
|
+
const publicInputsSplitIndex = numPublicInputs * fieldByteSize;
|
|
271
|
+
|
|
272
|
+
// Construct the proof without the public inputs
|
|
273
|
+
const numPublicInputsBytes = numPublicInputs * fieldByteSize;
|
|
274
|
+
const numHeaderPlusPreambleBytes = numSerdeHeaderBytes + numProofPreambleElements * fieldByteSize;
|
|
275
|
+
const proofNoPIs = new Uint8Array(proofWithPublicInputs.length - numPublicInputsBytes);
|
|
276
|
+
// copy the elements before the public inputs
|
|
277
|
+
proofNoPIs.set(proofWithPublicInputs.subarray(0, numHeaderPlusPreambleBytes), 0);
|
|
278
|
+
// copy the elements after the public inputs
|
|
279
|
+
proofNoPIs.set(
|
|
280
|
+
proofWithPublicInputs.subarray(numHeaderPlusPreambleBytes + numPublicInputsBytes),
|
|
281
|
+
numHeaderPlusPreambleBytes,
|
|
282
|
+
);
|
|
283
|
+
const proof: string[] = deflattenFields(proofNoPIs.slice(numSerdeHeaderBytes));
|
|
284
|
+
|
|
285
|
+
// Fetch the number of public inputs out of the proof string
|
|
286
|
+
const publicInputsConcatenated = proofWithPublicInputs.slice(
|
|
287
|
+
publicInputsOffset,
|
|
288
|
+
publicInputsOffset + publicInputsSplitIndex,
|
|
289
|
+
);
|
|
290
|
+
const publicInputs = deflattenFields(publicInputsConcatenated);
|
|
291
|
+
|
|
292
|
+
return { proof, publicInputs };
|
|
293
|
+
}
|
|
294
|
+
|
|
232
295
|
async verifyProof(proofData: ProofData, options?: UltraHonkBackendOptions): Promise<boolean> {
|
|
233
296
|
await this.instantiate();
|
|
234
297
|
|
|
@@ -245,9 +308,11 @@ export class UltraHonkBackend {
|
|
|
245
308
|
return await verifyUltraHonk(proof, new RawBuffer(vkBuf));
|
|
246
309
|
}
|
|
247
310
|
|
|
248
|
-
async getVerificationKey(): Promise<Uint8Array> {
|
|
311
|
+
async getVerificationKey(options?: UltraHonkBackendOptions): Promise<Uint8Array> {
|
|
249
312
|
await this.instantiate();
|
|
250
|
-
return
|
|
313
|
+
return options?.keccak
|
|
314
|
+
? await this.api.acirWriteVkUltraKeccakHonk(this.acirUncompressedBytecode, this.circuitOptions.recursive)
|
|
315
|
+
: await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode, this.circuitOptions.recursive);
|
|
251
316
|
}
|
|
252
317
|
|
|
253
318
|
/** @description Returns a solidity verifier */
|
|
@@ -319,7 +384,12 @@ export class AztecClientBackend {
|
|
|
319
384
|
|
|
320
385
|
async prove(witnessMsgpack: Uint8Array[]): Promise<[Uint8Array, Uint8Array]> {
|
|
321
386
|
await this.instantiate();
|
|
322
|
-
|
|
387
|
+
const proofAndVk = await this.api.acirProveAztecClient(this.acirMsgpack, witnessMsgpack);
|
|
388
|
+
const [proof, vk] = proofAndVk;
|
|
389
|
+
if (!await this.verify(proof, vk)) {
|
|
390
|
+
throw new AztecClientBackendError("Failed to verify the private (ClientIVC) transaction proof!");
|
|
391
|
+
}
|
|
392
|
+
return proofAndVk;
|
|
323
393
|
}
|
|
324
394
|
|
|
325
395
|
async verify(proof: Uint8Array, vk: Uint8Array): Promise<boolean> {
|
|
@@ -332,6 +402,12 @@ export class AztecClientBackend {
|
|
|
332
402
|
return this.api.acirProveAndVerifyAztecClient(this.acirMsgpack, witnessMsgpack);
|
|
333
403
|
}
|
|
334
404
|
|
|
405
|
+
async gates(): Promise<number[]> {
|
|
406
|
+
// call function on API
|
|
407
|
+
await this.instantiate();
|
|
408
|
+
return this.api.acirGatesAztecClient(this.acirMsgpack);
|
|
409
|
+
}
|
|
410
|
+
|
|
335
411
|
async destroy(): Promise<void> {
|
|
336
412
|
if (!this.api) {
|
|
337
413
|
return;
|
|
@@ -11,8 +11,6 @@ import { RawBuffer } from '../types/raw_buffer.js';
|
|
|
11
11
|
export { BarretenbergVerifier } from './verifier.js';
|
|
12
12
|
export { UltraPlonkBackend, UltraHonkBackend, AztecClientBackend } from './backend.js';
|
|
13
13
|
|
|
14
|
-
const debug = createDebug('bb.js:wasm');
|
|
15
|
-
|
|
16
14
|
export type BackendOptions = {
|
|
17
15
|
/** @description Number of threads to run the backend worker on */
|
|
18
16
|
threads?: number;
|
|
@@ -22,6 +20,12 @@ export type BackendOptions = {
|
|
|
22
20
|
|
|
23
21
|
/** @description Path to download CRS files */
|
|
24
22
|
crsPath?: string;
|
|
23
|
+
|
|
24
|
+
/** @description Path to download WASM files */
|
|
25
|
+
wasmPath?: string;
|
|
26
|
+
|
|
27
|
+
/** @description Logging function */
|
|
28
|
+
logger?: (msg: string) => void;
|
|
25
29
|
};
|
|
26
30
|
|
|
27
31
|
export type CircuitOptions = {
|
|
@@ -50,8 +54,14 @@ export class Barretenberg extends BarretenbergApi {
|
|
|
50
54
|
static async new(options: BackendOptions = {}) {
|
|
51
55
|
const worker = createMainWorker();
|
|
52
56
|
const wasm = getRemoteBarretenbergWasm<BarretenbergWasmMainWorker>(worker);
|
|
53
|
-
const { module, threads } = await fetchModuleAndThreads(options.threads);
|
|
54
|
-
await wasm.init(
|
|
57
|
+
const { module, threads } = await fetchModuleAndThreads(options.threads, options.wasmPath, options.logger);
|
|
58
|
+
await wasm.init(
|
|
59
|
+
module,
|
|
60
|
+
threads,
|
|
61
|
+
proxy(options.logger ?? createDebug('bb.js:bb_wasm_async')),
|
|
62
|
+
options.memory?.initial,
|
|
63
|
+
options.memory?.maximum,
|
|
64
|
+
);
|
|
55
65
|
return new Barretenberg(worker, wasm, options);
|
|
56
66
|
}
|
|
57
67
|
|
|
@@ -60,7 +70,7 @@ export class Barretenberg extends BarretenbergApi {
|
|
|
60
70
|
}
|
|
61
71
|
|
|
62
72
|
async initSRSForCircuitSize(circuitSize: number): Promise<void> {
|
|
63
|
-
const crs = await Crs.new(circuitSize + 1, this.options.crsPath);
|
|
73
|
+
const crs = await Crs.new(circuitSize + 1, this.options.crsPath, this.options.logger);
|
|
64
74
|
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1129): Do slab allocator initialization?
|
|
65
75
|
// await this.commonInitSlabAllocator(circuitSize);
|
|
66
76
|
await this.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
|
|
@@ -68,8 +78,8 @@ export class Barretenberg extends BarretenbergApi {
|
|
|
68
78
|
|
|
69
79
|
async initSRSClientIVC(): Promise<void> {
|
|
70
80
|
// crsPath can be undefined
|
|
71
|
-
const crs = await Crs.new(2 ** 20 + 1, this.options.crsPath);
|
|
72
|
-
const grumpkinCrs = await GrumpkinCrs.new(2 **
|
|
81
|
+
const crs = await Crs.new(2 ** 20 + 1, this.options.crsPath, this.options.logger);
|
|
82
|
+
const grumpkinCrs = await GrumpkinCrs.new(2 ** 16 + 1, this.options.crsPath, this.options.logger);
|
|
73
83
|
|
|
74
84
|
// Load CRS into wasm global CRS state.
|
|
75
85
|
// TODO: Make RawBuffer be default behavior, and have a specific Vector type for when wanting length prefixed.
|
|
@@ -89,26 +99,28 @@ export class Barretenberg extends BarretenbergApi {
|
|
|
89
99
|
}
|
|
90
100
|
}
|
|
91
101
|
|
|
102
|
+
let barrentenbergSyncSingletonPromise: Promise<BarretenbergSync>;
|
|
92
103
|
let barretenbergSyncSingleton: BarretenbergSync;
|
|
93
|
-
let barretenbergSyncSingletonPromise: Promise<BarretenbergSync>;
|
|
94
104
|
|
|
95
105
|
export class BarretenbergSync extends BarretenbergApiSync {
|
|
96
106
|
private constructor(wasm: BarretenbergWasmMain) {
|
|
97
107
|
super(wasm);
|
|
98
108
|
}
|
|
99
109
|
|
|
100
|
-
static async new() {
|
|
110
|
+
private static async new(wasmPath?: string, logger: (msg: string) => void = createDebug('bb.js:bb_wasm_sync')) {
|
|
101
111
|
const wasm = new BarretenbergWasmMain();
|
|
102
|
-
const { module, threads } = await fetchModuleAndThreads(1);
|
|
103
|
-
await wasm.init(module, threads);
|
|
112
|
+
const { module, threads } = await fetchModuleAndThreads(1, wasmPath, logger);
|
|
113
|
+
await wasm.init(module, threads, logger);
|
|
104
114
|
return new BarretenbergSync(wasm);
|
|
105
115
|
}
|
|
106
116
|
|
|
107
|
-
static initSingleton() {
|
|
108
|
-
if (!
|
|
109
|
-
|
|
117
|
+
static async initSingleton(wasmPath?: string, logger: (msg: string) => void = createDebug('bb.js:bb_wasm_sync')) {
|
|
118
|
+
if (!barrentenbergSyncSingletonPromise) {
|
|
119
|
+
barrentenbergSyncSingletonPromise = BarretenbergSync.new(wasmPath, logger);
|
|
110
120
|
}
|
|
111
|
-
|
|
121
|
+
|
|
122
|
+
barretenbergSyncSingleton = await barrentenbergSyncSingletonPromise;
|
|
123
|
+
return barretenbergSyncSingleton;
|
|
112
124
|
}
|
|
113
125
|
|
|
114
126
|
static getSingleton() {
|
|
@@ -122,9 +134,3 @@ export class BarretenbergSync extends BarretenbergApiSync {
|
|
|
122
134
|
return this.wasm;
|
|
123
135
|
}
|
|
124
136
|
}
|
|
125
|
-
|
|
126
|
-
// If we're in ESM environment, use top level await. CJS users need to call it manually.
|
|
127
|
-
// Need to ignore for cjs build.
|
|
128
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
129
|
-
// @ts-ignore
|
|
130
|
-
await BarretenbergSync.initSingleton(); // POSTPROCESS ESM ONLY
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// WARNING: FILE CODE GENERATED BY BINDGEN UTILITY. DO NOT EDIT!
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
3
|
+
import { BarretenbergWasmMain } from '../barretenberg_wasm/barretenberg_wasm_main/index.js';
|
|
3
4
|
import { BarretenbergWasmWorker, BarretenbergWasm } from '../barretenberg_wasm/index.js';
|
|
4
5
|
import {
|
|
5
6
|
BufferDeserializer,
|
|
@@ -11,9 +12,29 @@ import {
|
|
|
11
12
|
OutputType,
|
|
12
13
|
} from '../serialize/index.js';
|
|
13
14
|
import { Fr, Fq, Point, Buffer32, Buffer128, Ptr } from '../types/index.js';
|
|
15
|
+
function parseBigEndianU32Array(buffer: Uint8Array, hasSizePrefix = false): number[] {
|
|
16
|
+
const dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
17
|
+
|
|
18
|
+
let offset = 0;
|
|
19
|
+
let count = buffer.byteLength >>> 2; // default is entire buffer length / 4
|
|
20
|
+
|
|
21
|
+
if (hasSizePrefix) {
|
|
22
|
+
// Read the first 4 bytes as the size (big-endian).
|
|
23
|
+
count = dv.getUint32(0, /* littleEndian= */ false);
|
|
24
|
+
offset = 4;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const out: number[] = new Array(count);
|
|
28
|
+
for (let i = 0; i < count; i++) {
|
|
29
|
+
out[i] = dv.getUint32(offset, false);
|
|
30
|
+
offset += 4;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
14
35
|
|
|
15
36
|
export class BarretenbergApi {
|
|
16
|
-
constructor(protected wasm: BarretenbergWasmWorker) {}
|
|
37
|
+
constructor(protected wasm: BarretenbergWasmWorker | BarretenbergWasmMain) {}
|
|
17
38
|
|
|
18
39
|
async pedersenCommit(inputsBuffer: Fr[], ctxIndex: number): Promise<Point> {
|
|
19
40
|
const inArgs = [inputsBuffer, ctxIndex].map(serializeBufferable);
|
|
@@ -75,6 +96,18 @@ export class BarretenbergApi {
|
|
|
75
96
|
return out[0];
|
|
76
97
|
}
|
|
77
98
|
|
|
99
|
+
async poseidon2HashAccumulate(inputsBuffer: Fr[]): Promise<Fr> {
|
|
100
|
+
const inArgs = [inputsBuffer].map(serializeBufferable);
|
|
101
|
+
const outTypes: OutputType[] = [Fr];
|
|
102
|
+
const result = await this.wasm.callWasmExport(
|
|
103
|
+
'poseidon2_hash_accumulate',
|
|
104
|
+
inArgs,
|
|
105
|
+
outTypes.map(t => t.SIZE_IN_BYTES),
|
|
106
|
+
);
|
|
107
|
+
const out = result.map((r, i) => outTypes[i].fromBuffer(r));
|
|
108
|
+
return out[0];
|
|
109
|
+
}
|
|
110
|
+
|
|
78
111
|
async poseidon2Hashes(inputsBuffer: Fr[]): Promise<Fr> {
|
|
79
112
|
const inArgs = [inputsBuffer].map(serializeBufferable);
|
|
80
113
|
const outTypes: OutputType[] = [Fr];
|
|
@@ -344,6 +377,21 @@ export class BarretenbergApi {
|
|
|
344
377
|
return out as [number, number];
|
|
345
378
|
}
|
|
346
379
|
|
|
380
|
+
async acirGatesAztecClient(
|
|
381
|
+
// cf acirProveAztecClient
|
|
382
|
+
acirVec: Uint8Array[],
|
|
383
|
+
): Promise<number[]> {
|
|
384
|
+
const inArgs = [acirVec].map(serializeBufferable);
|
|
385
|
+
const outTypes: OutputType[] = [BufferDeserializer()];
|
|
386
|
+
const resultBuffer = await this.wasm.callWasmExport(
|
|
387
|
+
'acir_gates_aztec_client',
|
|
388
|
+
inArgs,
|
|
389
|
+
outTypes.map(t => t.SIZE_IN_BYTES),
|
|
390
|
+
);
|
|
391
|
+
|
|
392
|
+
return parseBigEndianU32Array(resultBuffer[0], /*hasSizePrefix=*/ true);
|
|
393
|
+
}
|
|
394
|
+
|
|
347
395
|
async acirNewAcirComposer(sizeHint: number): Promise<Ptr> {
|
|
348
396
|
const inArgs = [sizeHint].map(serializeBufferable);
|
|
349
397
|
const outTypes: OutputType[] = [Ptr];
|
|
@@ -594,7 +642,6 @@ export class BarretenbergApi {
|
|
|
594
642
|
}
|
|
595
643
|
|
|
596
644
|
async acirProveUltraKeccakHonk(acirVec: Uint8Array, recursive: boolean, witnessVec: Uint8Array): Promise<Uint8Array> {
|
|
597
|
-
console.log('acirProveUltraKeccakHonk in');
|
|
598
645
|
const inArgs = [acirVec, recursive, witnessVec].map(serializeBufferable);
|
|
599
646
|
const outTypes: OutputType[] = [BufferDeserializer()];
|
|
600
647
|
const result = await this.wasm.callWasmExport(
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import createDebug from 'debug';
|
|
2
2
|
import { randomBytes } from '../../random/index.js';
|
|
3
3
|
|
|
4
|
-
const debug = createDebug('bb.js:wasm');
|
|
5
|
-
|
|
6
4
|
/**
|
|
7
5
|
* Base implementation of BarretenbergWasm.
|
|
8
6
|
* Contains code that is common to the "main thread" implementation and the "child thread" implementation.
|
|
@@ -11,7 +9,7 @@ export class BarretenbergWasmBase {
|
|
|
11
9
|
protected memStore: { [key: string]: Uint8Array } = {};
|
|
12
10
|
protected memory!: WebAssembly.Memory;
|
|
13
11
|
protected instance!: WebAssembly.Instance;
|
|
14
|
-
protected logger: (msg: string) => void =
|
|
12
|
+
protected logger: (msg: string) => void = createDebug('bb.js:bb_wasm_base');
|
|
15
13
|
|
|
16
14
|
protected getImportObj(memory: WebAssembly.Memory) {
|
|
17
15
|
/* eslint-disable camelcase */
|
|
@@ -51,9 +49,9 @@ export class BarretenbergWasmBase {
|
|
|
51
49
|
const m = this.getMemory();
|
|
52
50
|
const str2 = `${str} (mem: ${(m.length / (1024 * 1024)).toFixed(2)}MiB)`;
|
|
53
51
|
this.logger(str2);
|
|
54
|
-
if (str2.startsWith('WARNING:')) {
|
|
55
|
-
|
|
56
|
-
}
|
|
52
|
+
// if (str2.startsWith('WARNING:')) {
|
|
53
|
+
// this.logger(new Error().stack!);
|
|
54
|
+
// }
|
|
57
55
|
},
|
|
58
56
|
|
|
59
57
|
get_data: (keyAddr: number, outBufAddr: number) => {
|