@aztec/bb-prover 5.0.0-private.20260319 → 5.0.0-rc.1
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/dest/avm_proving_tests/avm_proving_tester.d.ts +9 -5
- package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -1
- package/dest/avm_proving_tests/avm_proving_tester.js +146 -104
- package/dest/bb/bb_js_backend.d.ts +196 -0
- package/dest/bb/bb_js_backend.d.ts.map +1 -0
- package/dest/bb/bb_js_backend.js +379 -0
- package/dest/bb/bb_js_debug.d.ts +52 -0
- package/dest/bb/bb_js_debug.d.ts.map +1 -0
- package/dest/bb/bb_js_debug.js +176 -0
- package/dest/bb/file_names.d.ts +4 -0
- package/dest/bb/file_names.d.ts.map +1 -0
- package/dest/bb/file_names.js +5 -0
- package/dest/config.d.ts +17 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/index.d.ts +3 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -1
- package/dest/prover/client/bb_private_kernel_prover.d.ts +10 -2
- package/dest/prover/client/bb_private_kernel_prover.d.ts.map +1 -1
- package/dest/prover/client/bb_private_kernel_prover.js +38 -4
- package/dest/prover/proof_utils.d.ts +11 -1
- package/dest/prover/proof_utils.d.ts.map +1 -1
- package/dest/prover/proof_utils.js +24 -1
- package/dest/prover/server/bb_prover.d.ts +4 -5
- package/dest/prover/server/bb_prover.d.ts.map +1 -1
- package/dest/prover/server/bb_prover.js +207 -78
- package/dest/verification_key/verification_key_data.js +1 -1
- package/dest/verifier/batch_chonk_verifier.d.ts +45 -0
- package/dest/verifier/batch_chonk_verifier.d.ts.map +1 -0
- package/dest/verifier/batch_chonk_verifier.js +232 -0
- package/dest/verifier/bb_verifier.d.ts +4 -1
- package/dest/verifier/bb_verifier.d.ts.map +1 -1
- package/dest/verifier/bb_verifier.js +134 -45
- package/dest/verifier/index.d.ts +2 -1
- package/dest/verifier/index.d.ts.map +1 -1
- package/dest/verifier/index.js +1 -0
- package/dest/verifier/queued_chonk_verifier.d.ts +2 -3
- package/dest/verifier/queued_chonk_verifier.d.ts.map +1 -1
- package/dest/verifier/queued_chonk_verifier.js +6 -5
- package/package.json +19 -17
- package/src/avm_proving_tests/avm_proving_tester.ts +45 -126
- package/src/bb/bb_js_backend.ts +435 -0
- package/src/bb/bb_js_debug.ts +227 -0
- package/src/bb/file_names.ts +6 -0
- package/src/config.ts +16 -0
- package/src/index.ts +2 -1
- package/src/prover/client/bb_private_kernel_prover.ts +115 -3
- package/src/prover/proof_utils.ts +41 -1
- package/src/prover/server/bb_prover.ts +132 -137
- package/src/verification_key/verification_key_data.ts +1 -1
- package/src/verifier/batch_chonk_verifier.ts +276 -0
- package/src/verifier/bb_verifier.ts +66 -76
- package/src/verifier/index.ts +1 -0
- package/src/verifier/queued_chonk_verifier.ts +6 -7
- package/dest/bb/execute.d.ts +0 -108
- package/dest/bb/execute.d.ts.map +0 -1
- package/dest/bb/execute.js +0 -652
- package/src/bb/execute.ts +0 -687
|
@@ -6,17 +6,21 @@ import type { Gas } from '@aztec/stdlib/gas';
|
|
|
6
6
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
7
7
|
import type { GlobalVariables } from '@aztec/stdlib/tx';
|
|
8
8
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
9
|
-
import { type BBResult, type BBSuccess } from '../bb/execute.js';
|
|
10
9
|
export declare class AvmProvingTester extends PublicTxSimulationTester {
|
|
11
10
|
private checkCircuitOnly;
|
|
12
|
-
private
|
|
11
|
+
private readonly bbJsFactory;
|
|
13
12
|
constructor(checkCircuitOnly: boolean, contractDataSource: SimpleContractDataSource, merkleTrees: MerkleTreeWriteOperations, globals?: GlobalVariables, metrics?: TestExecutorMetrics);
|
|
14
13
|
static new(worldStateService: NativeWorldStateService, checkCircuitOnly?: boolean, globals?: GlobalVariables, metrics?: TestExecutorMetrics): Promise<AvmProvingTester>;
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Generate an AVM proof (or run check-circuit if configured). Records per-stage timings in the test metrics.
|
|
16
|
+
* Returns the in-memory proof fields on success; throws via jest expect() on failure.
|
|
17
|
+
*/
|
|
18
|
+
prove(avmCircuitInputs: AvmCircuitInputs, txLabel?: string): Promise<Uint8Array[]>;
|
|
19
|
+
verify(proof: Uint8Array[], publicInputs: AvmCircuitPublicInputs): Promise<void>;
|
|
17
20
|
proveVerify(avmCircuitInputs: AvmCircuitInputs, txLabel?: string): Promise<void>;
|
|
21
|
+
private recordProverMetrics;
|
|
18
22
|
simProveVerify(sender: AztecAddress, setupCalls: TestEnqueuedCall[], appCalls: TestEnqueuedCall[], teardownCall: TestEnqueuedCall | undefined, expectRevert: boolean | undefined, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, txLabel?: string, disableRevertCheck?: boolean, gasLimits?: Gas): Promise<PublicTxResult>;
|
|
19
23
|
executeTxWithLabel(txLabel: string, sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, gasLimits?: Gas): Promise<PublicTxResult>;
|
|
20
24
|
simProveVerifyAppLogic(appCall: TestEnqueuedCall, expectRevert?: boolean, txLabel?: string, gasLimits?: Gas): Promise<void>;
|
|
21
25
|
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX3Byb3ZpbmdfdGVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtX3Byb3ZpbmdfdGVzdHMvYXZtX3Byb3ZpbmdfdGVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssbUJBQW1CLEVBQ3hCLEtBQUsscUJBQXFCLEVBQzNCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUF5QixNQUFNLG1CQUFtQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBa0I3RCxxQkFBYSxnQkFBaUIsU0FBUSx3QkFBd0I7SUFJMUQsT0FBTyxDQUFDLGdCQUFnQjtJQUgxQixPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBNEI7SUFFeEQsWUFDVSxnQkFBZ0IsRUFBRSxPQUFPLEVBQ2pDLGtCQUFrQixFQUFFLHdCQUF3QixFQUM1QyxXQUFXLEVBQUUseUJBQXlCLEVBQ3RDLE9BQU8sQ0FBQyxFQUFFLGVBQWUsRUFDekIsT0FBTyxDQUFDLEVBQUUsbUJBQW1CLEVBSTlCO0lBRUQsT0FBYSxHQUFHLENBQ2QsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQzFDLGdCQUFnQixHQUFFLE9BQWUsRUFDakMsT0FBTyxDQUFDLEVBQUUsZUFBZSxFQUN6QixPQUFPLENBQUMsRUFBRSxtQkFBbUIsNkJBSzlCO0lBRUQ7OztPQUdHO0lBQ0csS0FBSyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sR0FBRSxNQUFzQixHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQWV0RztJQUVLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FTckY7SUFFWSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxHQUFFLE1BQXNCLGlCQUczRjtJQUVELE9BQU8sQ0FBQyxtQkFBbUI7SUE0QmQsY0FBYyxDQUN6QixNQUFNLEVBQUUsWUFBWSxFQUNwQixVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsRUFDOUIsUUFBUSxFQUFFLGdCQUFnQixFQUFFLEVBQzVCLFlBQVksRUFBRSxnQkFBZ0IsR0FBRyxTQUFTLEVBQzFDLFlBQVksRUFBRSxPQUFPLEdBQUcsU0FBUyxFQUNqQyxRQUFRLGVBQVMsRUFDakIsaUJBQWlCLENBQUMsRUFBRSxxQkFBcUIsRUFDekMsT0FBTyxHQUFFLE1BQXNCLEVBQy9CLGtCQUFrQixHQUFFLE9BQWUsRUFDbkMsU0FBUyxDQUFDLEVBQUUsR0FBRyxHQUNkLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0EyQnpCO0lBRXFCLGtCQUFrQixDQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUNmLE1BQU0sRUFBRSxZQUFZLEVBQ3BCLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEVBQy9CLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEVBQzdCLFlBQVksQ0FBQyxFQUFFLGdCQUFnQixFQUMvQixRQUFRLENBQUMsRUFBRSxZQUFZLEVBQ3ZCLGlCQUFpQixDQUFDLEVBQUUscUJBQXFCLEVBQ3pDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsMkJBY2hCO0lBRVksc0JBQXNCLENBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFDekIsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUN0QixPQUFPLEdBQUUsTUFBc0IsRUFDL0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxpQkFjaEI7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avm_proving_tester.d.ts","sourceRoot":"","sources":["../../src/avm_proving_tests/avm_proving_tester.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAyB,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"avm_proving_tester.d.ts","sourceRoot":"","sources":["../../src/avm_proving_tests/avm_proving_tester.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAyB,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAkB7D,qBAAa,gBAAiB,SAAQ,wBAAwB;IAI1D,OAAO,CAAC,gBAAgB;IAH1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IAExD,YACU,gBAAgB,EAAE,OAAO,EACjC,kBAAkB,EAAE,wBAAwB,EAC5C,WAAW,EAAE,yBAAyB,EACtC,OAAO,CAAC,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,mBAAmB,EAI9B;IAED,OAAa,GAAG,CACd,iBAAiB,EAAE,uBAAuB,EAC1C,gBAAgB,GAAE,OAAe,EACjC,OAAO,CAAC,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,mBAAmB,6BAK9B;IAED;;;OAGG;IACG,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAetG;IAEK,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CASrF;IAEY,WAAW,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,GAAE,MAAsB,iBAG3F;IAED,OAAO,CAAC,mBAAmB;IA4Bd,cAAc,CACzB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,YAAY,EAAE,gBAAgB,GAAG,SAAS,EAC1C,YAAY,EAAE,OAAO,GAAG,SAAS,EACjC,QAAQ,eAAS,EACjB,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,OAAO,GAAE,MAAsB,EAC/B,kBAAkB,GAAE,OAAe,EACnC,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,CAAC,CA2BzB;IAEqB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,gBAAgB,EAAE,EAC/B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,EAC7B,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,CAAC,EAAE,YAAY,EACvB,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,SAAS,CAAC,EAAE,GAAG,2BAchB;IAEY,sBAAsB,CACjC,OAAO,EAAE,gBAAgB,EACzB,YAAY,CAAC,EAAE,OAAO,EACtB,OAAO,GAAE,MAAsB,EAC/B,SAAS,CAAC,EAAE,GAAG,iBAchB;CACF"}
|
|
@@ -1,66 +1,75 @@
|
|
|
1
|
+
function _ts_add_disposable_resource(env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() {
|
|
16
|
+
try {
|
|
17
|
+
inner.call(this);
|
|
18
|
+
} catch (e) {
|
|
19
|
+
return Promise.reject(e);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
env.stack.push({
|
|
23
|
+
value: value,
|
|
24
|
+
dispose: dispose,
|
|
25
|
+
async: async
|
|
26
|
+
});
|
|
27
|
+
} else if (async) {
|
|
28
|
+
env.stack.push({
|
|
29
|
+
async: true
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
function _ts_dispose_resources(env) {
|
|
35
|
+
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
36
|
+
var e = new Error(message);
|
|
37
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
38
|
+
};
|
|
39
|
+
return (_ts_dispose_resources = function _ts_dispose_resources(env) {
|
|
40
|
+
function fail(e) {
|
|
41
|
+
env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
42
|
+
env.hasError = true;
|
|
43
|
+
}
|
|
44
|
+
var r, s = 0;
|
|
45
|
+
function next() {
|
|
46
|
+
while(r = env.stack.pop()){
|
|
47
|
+
try {
|
|
48
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
49
|
+
if (r.dispose) {
|
|
50
|
+
var result = r.dispose.call(r.value);
|
|
51
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
52
|
+
fail(e);
|
|
53
|
+
return next();
|
|
54
|
+
});
|
|
55
|
+
} else s |= 1;
|
|
56
|
+
} catch (e) {
|
|
57
|
+
fail(e);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
61
|
+
if (env.hasError) throw env.error;
|
|
62
|
+
}
|
|
63
|
+
return next();
|
|
64
|
+
})(env);
|
|
65
|
+
}
|
|
1
66
|
import { Timer } from '@aztec/foundation/timer';
|
|
2
67
|
import { PublicTxSimulationTester, SimpleContractDataSource } from '@aztec/simulator/public/fixtures';
|
|
3
68
|
import { AvmCircuitInputs, PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
4
69
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
|
-
import fs from 'node:fs/promises';
|
|
6
|
-
import { tmpdir } from 'node:os';
|
|
7
70
|
import path from 'path';
|
|
8
|
-
import {
|
|
71
|
+
import { BBJsFactory } from '../bb/bb_js_backend.js';
|
|
9
72
|
const BB_PATH = path.resolve('../../barretenberg/cpp/build/bin/bb-avm');
|
|
10
|
-
// An InterceptingLogger that records all log messages and forwards them to a wrapped logger.
|
|
11
|
-
class InterceptingLogger {
|
|
12
|
-
logs = [];
|
|
13
|
-
level;
|
|
14
|
-
module;
|
|
15
|
-
logger;
|
|
16
|
-
constructor(logger){
|
|
17
|
-
this.logger = logger;
|
|
18
|
-
this.level = logger.level;
|
|
19
|
-
this.module = logger.module;
|
|
20
|
-
}
|
|
21
|
-
isLevelEnabled(level) {
|
|
22
|
-
return this.logger.isLevelEnabled(level);
|
|
23
|
-
}
|
|
24
|
-
createChild(_childModule) {
|
|
25
|
-
throw new Error('Not implemented');
|
|
26
|
-
}
|
|
27
|
-
getBindings() {
|
|
28
|
-
return this.logger.getBindings();
|
|
29
|
-
}
|
|
30
|
-
intercept(level, msg, ...args) {
|
|
31
|
-
this.logs.push(...msg.split('\n'));
|
|
32
|
-
// Forward to the wrapped logger
|
|
33
|
-
this.logger[level](msg, ...args);
|
|
34
|
-
}
|
|
35
|
-
// Log methods for each level
|
|
36
|
-
silent(msg, ...args) {
|
|
37
|
-
this.intercept('silent', msg, ...args);
|
|
38
|
-
}
|
|
39
|
-
fatal(msg, ...args) {
|
|
40
|
-
this.intercept('fatal', msg, ...args);
|
|
41
|
-
}
|
|
42
|
-
warn(msg, ...args) {
|
|
43
|
-
this.intercept('warn', msg, ...args);
|
|
44
|
-
}
|
|
45
|
-
info(msg, ...args) {
|
|
46
|
-
this.intercept('info', msg, ...args);
|
|
47
|
-
}
|
|
48
|
-
verbose(msg, ...args) {
|
|
49
|
-
this.intercept('verbose', msg, ...args);
|
|
50
|
-
}
|
|
51
|
-
debug(msg, ...args) {
|
|
52
|
-
this.intercept('debug', msg, ...args);
|
|
53
|
-
}
|
|
54
|
-
trace(msg, ...args) {
|
|
55
|
-
this.intercept('trace', msg, ...args);
|
|
56
|
-
}
|
|
57
|
-
// Error log function can be string or Error
|
|
58
|
-
error(err, ...args) {
|
|
59
|
-
const msg = typeof err === 'string' ? err : err.message;
|
|
60
|
-
this.logs.push(msg);
|
|
61
|
-
this.logger.error(msg, err, ...args);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
73
|
// Config with collectHints enabled for proving tests
|
|
65
74
|
const provingConfig = PublicSimulatorConfig.from({
|
|
66
75
|
skipFeeEnforcement: false,
|
|
@@ -72,52 +81,100 @@ const provingConfig = PublicSimulatorConfig.from({
|
|
|
72
81
|
});
|
|
73
82
|
export class AvmProvingTester extends PublicTxSimulationTester {
|
|
74
83
|
checkCircuitOnly;
|
|
75
|
-
|
|
84
|
+
bbJsFactory;
|
|
76
85
|
constructor(checkCircuitOnly, contractDataSource, merkleTrees, globals, metrics){
|
|
77
86
|
// simulator factory is undefined because for proving, we use the default C++ simulator
|
|
78
|
-
super(merkleTrees, contractDataSource, globals, metrics, /*simulatorFactory=*/ undefined, provingConfig), this.checkCircuitOnly = checkCircuitOnly, this.
|
|
87
|
+
super(merkleTrees, contractDataSource, globals, metrics, /*simulatorFactory=*/ undefined, provingConfig), this.checkCircuitOnly = checkCircuitOnly, this.bbJsFactory = new BBJsFactory(BB_PATH);
|
|
79
88
|
}
|
|
80
89
|
static async new(worldStateService, checkCircuitOnly = false, globals, metrics) {
|
|
81
90
|
const contractDataSource = new SimpleContractDataSource();
|
|
82
91
|
const merkleTrees = await worldStateService.fork();
|
|
83
92
|
return new AvmProvingTester(checkCircuitOnly, contractDataSource, merkleTrees, globals, metrics);
|
|
84
93
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Generate an AVM proof (or run check-circuit if configured). Records per-stage timings in the test metrics.
|
|
96
|
+
* Returns the in-memory proof fields on success; throws via jest expect() on failure.
|
|
97
|
+
*/ async prove(avmCircuitInputs, txLabel = 'unlabeledTx') {
|
|
98
|
+
const env = {
|
|
99
|
+
stack: [],
|
|
100
|
+
error: void 0,
|
|
101
|
+
hasError: false
|
|
102
|
+
};
|
|
103
|
+
try {
|
|
104
|
+
const inputsBuffer = avmCircuitInputs.serializeWithMessagePack();
|
|
105
|
+
if (this.checkCircuitOnly) {
|
|
106
|
+
const env = {
|
|
107
|
+
stack: [],
|
|
108
|
+
error: void 0,
|
|
109
|
+
hasError: false
|
|
110
|
+
};
|
|
111
|
+
try {
|
|
112
|
+
const instance = _ts_add_disposable_resource(env, await this.bbJsFactory.getInstance(), true);
|
|
113
|
+
const { passed, stats } = await instance.checkAvmCircuit(inputsBuffer);
|
|
114
|
+
this.recordProverMetrics(stats, txLabel);
|
|
115
|
+
expect(passed).toBe(true);
|
|
116
|
+
return [];
|
|
117
|
+
} catch (e) {
|
|
118
|
+
env.error = e;
|
|
119
|
+
env.hasError = true;
|
|
120
|
+
} finally{
|
|
121
|
+
const result = _ts_dispose_resources(env);
|
|
122
|
+
if (result) await result;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const instance = _ts_add_disposable_resource(env, await this.bbJsFactory.getInstance(), true);
|
|
126
|
+
const { proof, stats } = await instance.generateAvmProof(inputsBuffer);
|
|
127
|
+
this.recordProverMetrics(stats, txLabel);
|
|
128
|
+
return proof;
|
|
129
|
+
} catch (e) {
|
|
130
|
+
env.error = e;
|
|
131
|
+
env.hasError = true;
|
|
132
|
+
} finally{
|
|
133
|
+
const result = _ts_dispose_resources(env);
|
|
134
|
+
if (result) await result;
|
|
93
135
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
// }
|
|
106
|
-
// });
|
|
107
|
-
const times = {};
|
|
108
|
-
logs.forEach((log)=>{
|
|
109
|
-
const match = log.match(/\b([\w/]+)_ms: (\d+)/);
|
|
110
|
-
if (match) {
|
|
111
|
-
times[match[1]] = parseInt(match[2]);
|
|
136
|
+
}
|
|
137
|
+
async verify(proof, publicInputs) {
|
|
138
|
+
const env = {
|
|
139
|
+
stack: [],
|
|
140
|
+
error: void 0,
|
|
141
|
+
hasError: false
|
|
142
|
+
};
|
|
143
|
+
try {
|
|
144
|
+
if (this.checkCircuitOnly) {
|
|
145
|
+
// Check-circuit did not generate a proof; nothing to verify.
|
|
146
|
+
return;
|
|
112
147
|
}
|
|
113
|
-
|
|
114
|
-
|
|
148
|
+
const piBuffer = publicInputs.serializeWithMessagePack();
|
|
149
|
+
const instance = _ts_add_disposable_resource(env, await this.bbJsFactory.getInstance(), true);
|
|
150
|
+
const { verified } = await instance.verifyAvmProof(proof, piBuffer);
|
|
151
|
+
expect(verified).toBe(true);
|
|
152
|
+
} catch (e) {
|
|
153
|
+
env.error = e;
|
|
154
|
+
env.hasError = true;
|
|
155
|
+
} finally{
|
|
156
|
+
const result = _ts_dispose_resources(env);
|
|
157
|
+
if (result) await result;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async proveVerify(avmCircuitInputs, txLabel = 'unlabeledTx') {
|
|
161
|
+
const proof = await this.prove(avmCircuitInputs, txLabel);
|
|
162
|
+
await this.verify(proof, avmCircuitInputs.publicInputs);
|
|
163
|
+
}
|
|
164
|
+
recordProverMetrics(stats, txLabel) {
|
|
165
|
+
// Build a lookup keyed on the stage name with the `_ms` suffix stripped, matching the legacy
|
|
166
|
+
// stdout-scraped shape. bb::avm2::Stats::time() stores keys with `_ms` appended.
|
|
167
|
+
const times = {};
|
|
168
|
+
for (const { name, valueMs } of stats){
|
|
169
|
+
const key = name.endsWith('_ms') ? name.slice(0, -'_ms'.length) : name;
|
|
170
|
+
times[key] = valueMs;
|
|
171
|
+
}
|
|
115
172
|
if (Object.keys(times).length === 0) {
|
|
116
|
-
throw new Error('AVM
|
|
173
|
+
throw new Error('AVM response did not contain any proving-stage timings!');
|
|
117
174
|
}
|
|
118
175
|
// Hack to make labels match.
|
|
119
176
|
const txLabelWithCount = `${txLabel}/${this.txCount - 1}`;
|
|
120
|
-
//
|
|
177
|
+
// Cast because TS doesn't realize `metrics` is protected, not private on the parent class.
|
|
121
178
|
this.metrics?.recordProverMetrics(txLabelWithCount, {
|
|
122
179
|
proverSimulationStepMs: times['simulation/all'],
|
|
123
180
|
proverProvingStepMs: times['proving/all'],
|
|
@@ -130,21 +187,6 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
130
187
|
provingLogDerivativeInverseCommitmentsMs: times['prove/log_derivative_inverse_commitments_round'],
|
|
131
188
|
provingWireCommitmentsMs: times['prove/wire_commitments_round']
|
|
132
189
|
});
|
|
133
|
-
return proofRes;
|
|
134
|
-
}
|
|
135
|
-
async verify(proofRes, publicInputs) {
|
|
136
|
-
if (this.checkCircuitOnly) {
|
|
137
|
-
// Skip verification if we are only checking the circuit.
|
|
138
|
-
// Check-circuit does not generate a proof to verify.
|
|
139
|
-
return proofRes;
|
|
140
|
-
}
|
|
141
|
-
return await verifyAvmProof(BB_PATH, this.bbWorkingDirectory, proofRes.proofPath, publicInputs, this.logger);
|
|
142
|
-
}
|
|
143
|
-
async proveVerify(avmCircuitInputs, txLabel = 'unlabeledTx') {
|
|
144
|
-
const provingRes = await this.prove(avmCircuitInputs, txLabel);
|
|
145
|
-
expect(provingRes.status).toEqual(BB_RESULT.SUCCESS);
|
|
146
|
-
const verificationRes = await this.verify(provingRes, avmCircuitInputs.publicInputs);
|
|
147
|
-
expect(verificationRes.status).toBe(BB_RESULT.SUCCESS);
|
|
148
190
|
}
|
|
149
191
|
async simProveVerify(sender, setupCalls, appCalls, teardownCall, expectRevert, feePayer = sender, privateInsertions, txLabel = 'unlabeledTx', disableRevertCheck = false, gasLimits) {
|
|
150
192
|
const simTimer = new Timer();
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { type AvmStat } from '@aztec/bb.js';
|
|
2
|
+
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
3
|
+
import type { UltraHonkFlavor } from '../honk.js';
|
|
4
|
+
/** Result of a successful proof generation via bb.js. */
|
|
5
|
+
export type BBJsProofResult = {
|
|
6
|
+
/** Proof fields as 32-byte Uint8Arrays. */
|
|
7
|
+
proofFields: Uint8Array[];
|
|
8
|
+
/** Public input fields as 32-byte Uint8Arrays. */
|
|
9
|
+
publicInputFields: Uint8Array[];
|
|
10
|
+
/** Duration of the proving operation in ms. */
|
|
11
|
+
durationMs: number;
|
|
12
|
+
};
|
|
13
|
+
/** Public API surface of a bb.js instance, used by the factory and debug wrapper. */
|
|
14
|
+
export interface BBJsApi {
|
|
15
|
+
generateProof(circuitName: string, bytecode: Uint8Array, verificationKey: Uint8Array, witness: Uint8Array, flavor: UltraHonkFlavor): Promise<BBJsProofResult>;
|
|
16
|
+
verifyProof(proofFields: Uint8Array[], verificationKey: Uint8Array, publicInputFields: Uint8Array[], flavor: UltraHonkFlavor): Promise<{
|
|
17
|
+
verified: boolean;
|
|
18
|
+
durationMs: number;
|
|
19
|
+
}>;
|
|
20
|
+
verifyChonkProof(fieldsWithPublicInputs: Uint8Array[], verificationKey: Uint8Array): Promise<{
|
|
21
|
+
verified: boolean;
|
|
22
|
+
durationMs: number;
|
|
23
|
+
}>;
|
|
24
|
+
computeGateCount(circuitName: string, bytecode: Uint8Array, flavor: UltraHonkFlavor | 'mega_honk'): Promise<{
|
|
25
|
+
circuitSize: number;
|
|
26
|
+
durationMs: number;
|
|
27
|
+
}>;
|
|
28
|
+
generateContract(verificationKey: Uint8Array): Promise<{
|
|
29
|
+
solidityCode: string;
|
|
30
|
+
durationMs: number;
|
|
31
|
+
}>;
|
|
32
|
+
/** Generate an AVM proof from serialized inputs. Callers should call verifyAvmProof separately. */
|
|
33
|
+
generateAvmProof(inputs: Uint8Array): Promise<{
|
|
34
|
+
proof: Uint8Array[];
|
|
35
|
+
stats: AvmStat[];
|
|
36
|
+
durationMs: number;
|
|
37
|
+
}>;
|
|
38
|
+
/** Verify an AVM proof against serialized public inputs. */
|
|
39
|
+
verifyAvmProof(proof: Uint8Array[], publicInputs: Uint8Array): Promise<{
|
|
40
|
+
verified: boolean;
|
|
41
|
+
durationMs: number;
|
|
42
|
+
}>;
|
|
43
|
+
/** Check the AVM circuit from serialized inputs. Returns pass/fail and per-stage timings. */
|
|
44
|
+
checkAvmCircuit(inputs: Uint8Array): Promise<{
|
|
45
|
+
passed: boolean;
|
|
46
|
+
stats: AvmStat[];
|
|
47
|
+
durationMs: number;
|
|
48
|
+
}>;
|
|
49
|
+
destroy(): Promise<void>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Thin wrapper around a single Barretenberg instance.
|
|
53
|
+
* Each instance spawns its own bb process via the NativeUnixSocket backend.
|
|
54
|
+
*/
|
|
55
|
+
export declare class BBJsInstance implements BBJsApi {
|
|
56
|
+
private api;
|
|
57
|
+
private constructor();
|
|
58
|
+
/** Creates a new Barretenberg instance connected to a fresh bb process. */
|
|
59
|
+
static create(bbPath: string, logger?: LogFn, threads?: number): Promise<BBJsInstance>;
|
|
60
|
+
/**
|
|
61
|
+
* Generate an UltraHonk proof for a circuit.
|
|
62
|
+
* @param circuitName - Identifier for the circuit (used by bb internally).
|
|
63
|
+
* @param bytecode - Uncompressed ACIR bytecode.
|
|
64
|
+
* @param verificationKey - The circuit's verification key bytes.
|
|
65
|
+
* @param witness - Uncompressed witness bytes.
|
|
66
|
+
* @param flavor - The UltraHonk flavor to use.
|
|
67
|
+
*/
|
|
68
|
+
generateProof(circuitName: string, bytecode: Uint8Array, verificationKey: Uint8Array, witness: Uint8Array, flavor: UltraHonkFlavor): Promise<BBJsProofResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Verify an UltraHonk proof.
|
|
71
|
+
* @param proofFields - Proof fields as 32-byte Uint8Arrays.
|
|
72
|
+
* @param verificationKey - The VK bytes.
|
|
73
|
+
* @param publicInputFields - Public input fields as 32-byte Uint8Arrays.
|
|
74
|
+
* @param flavor - The UltraHonk flavor.
|
|
75
|
+
* @returns Whether the proof is valid.
|
|
76
|
+
*/
|
|
77
|
+
verifyProof(proofFields: Uint8Array[], verificationKey: Uint8Array, publicInputFields: Uint8Array[], flavor: UltraHonkFlavor): Promise<{
|
|
78
|
+
verified: boolean;
|
|
79
|
+
durationMs: number;
|
|
80
|
+
}>;
|
|
81
|
+
/**
|
|
82
|
+
* Compute circuit gate count / circuit size.
|
|
83
|
+
* @param circuitName - Identifier for the circuit.
|
|
84
|
+
* @param bytecode - Uncompressed ACIR bytecode.
|
|
85
|
+
* @param flavor - 'mega_honk' for chonk circuits, or an UltraHonk flavor.
|
|
86
|
+
* @returns The dyadic circuit size (next power of 2 of gate count).
|
|
87
|
+
*/
|
|
88
|
+
computeGateCount(circuitName: string, bytecode: Uint8Array, flavor: UltraHonkFlavor | 'mega_honk'): Promise<{
|
|
89
|
+
circuitSize: number;
|
|
90
|
+
durationMs: number;
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* Generate a Solidity verifier contract from a verification key.
|
|
94
|
+
* @param verificationKey - The VK bytes.
|
|
95
|
+
* @returns The Solidity source code.
|
|
96
|
+
*/
|
|
97
|
+
generateContract(verificationKey: Uint8Array): Promise<{
|
|
98
|
+
solidityCode: string;
|
|
99
|
+
durationMs: number;
|
|
100
|
+
}>;
|
|
101
|
+
/**
|
|
102
|
+
* Verify a Chonk (IVC) proof passed as flat field elements (with public inputs prepended).
|
|
103
|
+
* The split into structured sub-proofs happens server-side in `ChonkProof::from_field_elements`,
|
|
104
|
+
* so this layer doesn't need to know per-component sub-proof sizes.
|
|
105
|
+
* @param fieldsWithPublicInputs - Flat proof fields as 32-byte Uint8Arrays (public inputs prepended).
|
|
106
|
+
* @param verificationKey - The VK bytes.
|
|
107
|
+
*/
|
|
108
|
+
verifyChonkProof(fieldsWithPublicInputs: Uint8Array[], verificationKey: Uint8Array): Promise<{
|
|
109
|
+
verified: boolean;
|
|
110
|
+
durationMs: number;
|
|
111
|
+
}>;
|
|
112
|
+
/** Generate an AVM proof from serialized inputs. */
|
|
113
|
+
generateAvmProof(inputs: Uint8Array): Promise<{
|
|
114
|
+
proof: Uint8Array[];
|
|
115
|
+
stats: AvmStat[];
|
|
116
|
+
durationMs: number;
|
|
117
|
+
}>;
|
|
118
|
+
/** Verify an AVM proof against serialized public inputs. */
|
|
119
|
+
verifyAvmProof(proof: Uint8Array[], publicInputs: Uint8Array): Promise<{
|
|
120
|
+
verified: boolean;
|
|
121
|
+
durationMs: number;
|
|
122
|
+
}>;
|
|
123
|
+
/** Check the AVM circuit from serialized inputs. */
|
|
124
|
+
checkAvmCircuit(inputs: Uint8Array): Promise<{
|
|
125
|
+
passed: boolean;
|
|
126
|
+
stats: AvmStat[];
|
|
127
|
+
durationMs: number;
|
|
128
|
+
}>;
|
|
129
|
+
/** Destroy this instance and kill the underlying bb process. */
|
|
130
|
+
destroy(): Promise<void>;
|
|
131
|
+
}
|
|
132
|
+
/** Options for {@link BBJsFactory}. */
|
|
133
|
+
export interface BBJsFactoryOptions {
|
|
134
|
+
/**
|
|
135
|
+
* Number of long-lived bb processes to keep in the pool.
|
|
136
|
+
* If omitted, every `getInstance()` call spawns a fresh bb that is destroyed on dispose.
|
|
137
|
+
*/
|
|
138
|
+
poolSize?: number;
|
|
139
|
+
logger?: Logger;
|
|
140
|
+
threads?: number;
|
|
141
|
+
debugDir?: string;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Manages bb.js instance lifecycle. By default every `getInstance()` call spawns a fresh
|
|
145
|
+
* bb process that is destroyed when the borrow is disposed. Pass `poolSize` to keep a fixed
|
|
146
|
+
* set of long-lived bb processes that are reused across calls — useful when the per-call
|
|
147
|
+
* bb startup cost dominates the workload (e.g. high-rate IVC verification).
|
|
148
|
+
*
|
|
149
|
+
* Idiomatic usage:
|
|
150
|
+
* ```
|
|
151
|
+
* await using inst = await factory.getInstance();
|
|
152
|
+
* await inst.someMethod(...);
|
|
153
|
+
* // disposed automatically when `inst` goes out of scope
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
export declare class BBJsFactory {
|
|
157
|
+
private bbPath;
|
|
158
|
+
private readonly poolSize?;
|
|
159
|
+
private readonly logger?;
|
|
160
|
+
private readonly threads?;
|
|
161
|
+
private readonly debugDir?;
|
|
162
|
+
/** Available pooled instances when poolSize is set; otherwise undefined. */
|
|
163
|
+
private pool?;
|
|
164
|
+
/** Lazily-resolved on first `getInstance()` call to prevent racing pool initialization. */
|
|
165
|
+
private initPromise?;
|
|
166
|
+
private destroyed;
|
|
167
|
+
constructor(bbPath: string, options?: BBJsFactoryOptions);
|
|
168
|
+
/**
|
|
169
|
+
* Acquire a bb instance. The returned object implements `BBJsApi` and `AsyncDisposable`.
|
|
170
|
+
* With no pool: spawns a fresh bb that is destroyed on dispose. With a pool: borrows from
|
|
171
|
+
* the pool and returns to it on dispose.
|
|
172
|
+
*/
|
|
173
|
+
getInstance(): Promise<BBJsApi & AsyncDisposable>;
|
|
174
|
+
/**
|
|
175
|
+
* Tear down all pooled instances. Idempotent. No-op when no pool is configured (fresh-per-call
|
|
176
|
+
* instances are destroyed by their own dispose callbacks). Instances currently held by an
|
|
177
|
+
* in-flight pooled borrow are destroyed by their dispose callback when released.
|
|
178
|
+
*/
|
|
179
|
+
destroy(): Promise<void>;
|
|
180
|
+
private initPool;
|
|
181
|
+
private createInstance;
|
|
182
|
+
private maybeWrapDebug;
|
|
183
|
+
/**
|
|
184
|
+
* Wrap a fresh instance with an `AsyncDisposable` that destroys it on dispose. Used when no
|
|
185
|
+
* pool is configured. Destroy errors are propagated so that a teardown failure (e.g. a bb child
|
|
186
|
+
* that didn't shut down cleanly) surfaces instead of being silently swallowed.
|
|
187
|
+
*/
|
|
188
|
+
private makeOwned;
|
|
189
|
+
/**
|
|
190
|
+
* Wrap a pooled instance with an `AsyncDisposable` that returns it to the pool (or destroys it
|
|
191
|
+
* if the factory was destroyed in the meantime). Destroy errors are propagated.
|
|
192
|
+
*/
|
|
193
|
+
private makeBorrowed;
|
|
194
|
+
private makeDisposable;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfanNfYmFja2VuZC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JiL2JiX2pzX2JhY2tlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFrRCxNQUFNLGNBQWMsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJM0QsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBb0JsRCx5REFBeUQ7QUFDekQsTUFBTSxNQUFNLGVBQWUsR0FBRztJQUM1QiwyQ0FBMkM7SUFDM0MsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzFCLGtEQUFrRDtJQUNsRCxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNoQywrQ0FBK0M7SUFDL0MsVUFBVSxFQUFFLE1BQU0sQ0FBQztDQUNwQixDQUFDO0FBRUYscUZBQXFGO0FBQ3JGLE1BQU0sV0FBVyxPQUFPO0lBQ3RCLGFBQWEsQ0FDWCxXQUFXLEVBQUUsTUFBTSxFQUNuQixRQUFRLEVBQUUsVUFBVSxFQUNwQixlQUFlLEVBQUUsVUFBVSxFQUMzQixPQUFPLEVBQUUsVUFBVSxFQUNuQixNQUFNLEVBQUUsZUFBZSxHQUN0QixPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDNUIsV0FBVyxDQUNULFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFDekIsZUFBZSxFQUFFLFVBQVUsRUFDM0IsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEVBQy9CLE1BQU0sRUFBRSxlQUFlLEdBQ3RCLE9BQU8sQ0FBQztRQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7UUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQyxDQUFDO0lBQ3RELGdCQUFnQixDQUNkLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxFQUNwQyxlQUFlLEVBQUUsVUFBVSxHQUMxQixPQUFPLENBQUM7UUFB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bb_js_backend.d.ts","sourceRoot":"","sources":["../../src/bb/bb_js_backend.ts"],"names":[],"mappings":"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"}
|