@aztec/bb-prover 0.0.1-commit.a5db02d → 0.0.1-commit.aa0c64f
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 +4 -3
- package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -1
- package/dest/avm_proving_tests/avm_proving_tester.js +26 -4
- package/dest/prover/client/bb_private_kernel_prover.d.ts +11 -3
- package/dest/prover/client/bb_private_kernel_prover.d.ts.map +1 -1
- package/dest/prover/client/bb_private_kernel_prover.js +29 -3
- package/dest/verifier/batch_chonk_verifier.d.ts +13 -2
- package/dest/verifier/batch_chonk_verifier.d.ts.map +1 -1
- package/dest/verifier/batch_chonk_verifier.js +210 -58
- package/package.json +16 -16
- package/src/avm_proving_tests/avm_proving_tester.ts +32 -4
- package/src/prover/client/bb_private_kernel_prover.ts +107 -2
- package/src/verifier/batch_chonk_verifier.ts +204 -65
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PublicTxSimulationTester, SimpleContractDataSource, type TestEnqueuedCall, type TestExecutorMetrics, type TestPrivateInsertions } from '@aztec/simulator/public/fixtures';
|
|
1
|
+
import { type MeasuredSimulatorFactory, PublicTxSimulationTester, SimpleContractDataSource, type TestEnqueuedCall, type TestExecutorMetrics, type TestPrivateInsertions } from '@aztec/simulator/public/fixtures';
|
|
2
2
|
import type { PublicTxResult } from '@aztec/simulator/server';
|
|
3
3
|
import { AvmCircuitInputs, AvmCircuitPublicInputs } from '@aztec/stdlib/avm';
|
|
4
4
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
@@ -9,8 +9,9 @@ import { NativeWorldStateService } from '@aztec/world-state';
|
|
|
9
9
|
export declare class AvmProvingTester extends PublicTxSimulationTester {
|
|
10
10
|
private checkCircuitOnly;
|
|
11
11
|
private readonly bbJsFactory;
|
|
12
|
-
constructor(checkCircuitOnly: boolean, contractDataSource: SimpleContractDataSource, merkleTrees: MerkleTreeWriteOperations, globals?: GlobalVariables, metrics?: TestExecutorMetrics);
|
|
12
|
+
constructor(checkCircuitOnly: boolean, contractDataSource: SimpleContractDataSource, merkleTrees: MerkleTreeWriteOperations, globals?: GlobalVariables, metrics?: TestExecutorMetrics, simulatorFactory?: MeasuredSimulatorFactory);
|
|
13
13
|
static new(worldStateService: NativeWorldStateService, checkCircuitOnly?: boolean, globals?: GlobalVariables, metrics?: TestExecutorMetrics): Promise<AvmProvingTester>;
|
|
14
|
+
close(): Promise<void>;
|
|
14
15
|
/**
|
|
15
16
|
* Generate an AVM proof (or run check-circuit if configured). Records per-stage timings in the test metrics.
|
|
16
17
|
* Returns the in-memory proof fields on success; throws via jest expect() on failure.
|
|
@@ -23,4 +24,4 @@ export declare class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
23
24
|
executeTxWithLabel(txLabel: string, sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, gasLimits?: Gas): Promise<PublicTxResult>;
|
|
24
25
|
simProveVerifyAppLogic(appCall: TestEnqueuedCall, expectRevert?: boolean, txLabel?: string, gasLimits?: Gas): Promise<void>;
|
|
25
26
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX3Byb3ZpbmdfdGVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtX3Byb3ZpbmdfdGVzdHMvYXZtX3Byb3ZpbmdfdGVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFDTCxLQUFLLHdCQUF3QixFQUM3Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssbUJBQW1CLEVBQ3hCLEtBQUsscUJBQXFCLEVBQzNCLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUF5QixNQUFNLG1CQUFtQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBa0I3RCxxQkFBYSxnQkFBaUIsU0FBUSx3QkFBd0I7SUFPMUQsT0FBTyxDQUFDLGdCQUFnQjtJQU4xQixPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FHekI7SUFFSCxZQUNVLGdCQUFnQixFQUFFLE9BQU8sRUFDakMsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQzVDLFdBQVcsRUFBRSx5QkFBeUIsRUFDdEMsT0FBTyxDQUFDLEVBQUUsZUFBZSxFQUN6QixPQUFPLENBQUMsRUFBRSxtQkFBbUIsRUFDN0IsZ0JBQWdCLENBQUMsRUFBRSx3QkFBd0IsRUFHNUM7SUFFRCxPQUFhLEdBQUcsQ0FDZCxpQkFBaUIsRUFBRSx1QkFBdUIsRUFDMUMsZ0JBQWdCLEdBQUUsT0FBZSxFQUNqQyxPQUFPLENBQUMsRUFBRSxlQUFlLEVBQ3pCLE9BQU8sQ0FBQyxFQUFFLG1CQUFtQiw2QkFtQjlCO0lBRXFCLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBTTNDO0lBRUQ7OztPQUdHO0lBQ0csS0FBSyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sR0FBRSxNQUFzQixHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQWV0RztJQUVLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FTckY7SUFFWSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxHQUFFLE1BQXNCLGlCQUczRjtJQUVELE9BQU8sQ0FBQyxtQkFBbUI7SUE0QmQsY0FBYyxDQUN6QixNQUFNLEVBQUUsWUFBWSxFQUNwQixVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsRUFDOUIsUUFBUSxFQUFFLGdCQUFnQixFQUFFLEVBQzVCLFlBQVksRUFBRSxnQkFBZ0IsR0FBRyxTQUFTLEVBQzFDLFlBQVksRUFBRSxPQUFPLEdBQUcsU0FBUyxFQUNqQyxRQUFRLGVBQVMsRUFDakIsaUJBQWlCLENBQUMsRUFBRSxxQkFBcUIsRUFDekMsT0FBTyxHQUFFLE1BQXNCLEVBQy9CLGtCQUFrQixHQUFFLE9BQWUsRUFDbkMsU0FBUyxDQUFDLEVBQUUsR0FBRyxHQUNkLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0EyQnpCO0lBRXFCLGtCQUFrQixDQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUNmLE1BQU0sRUFBRSxZQUFZLEVBQ3BCLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEVBQy9CLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEVBQzdCLFlBQVksQ0FBQyxFQUFFLGdCQUFnQixFQUMvQixRQUFRLENBQUMsRUFBRSxZQUFZLEVBQ3ZCLGlCQUFpQixDQUFDLEVBQUUscUJBQXFCLEVBQ3pDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsMkJBY2hCO0lBRVksc0JBQXNCLENBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFDekIsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUN0QixPQUFPLEdBQUUsTUFBc0IsRUFDL0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxpQkFjaEI7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avm_proving_tester.d.ts","sourceRoot":"","sources":["../../src/avm_proving_tests/avm_proving_tester.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"avm_proving_tester.d.ts","sourceRoot":"","sources":["../../src/avm_proving_tests/avm_proving_tester.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,wBAAwB,EAC7B,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,kCAAkC,CAAC;AAE1C,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;IAO1D,OAAO,CAAC,gBAAgB;IAN1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAGzB;IAEH,YACU,gBAAgB,EAAE,OAAO,EACjC,kBAAkB,EAAE,wBAAwB,EAC5C,WAAW,EAAE,yBAAyB,EACtC,OAAO,CAAC,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,mBAAmB,EAC7B,gBAAgB,CAAC,EAAE,wBAAwB,EAG5C;IAED,OAAa,GAAG,CACd,iBAAiB,EAAE,uBAAuB,EAC1C,gBAAgB,GAAE,OAAe,EACjC,OAAO,CAAC,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,mBAAmB,6BAmB9B;IAEqB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3C;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"}
|
|
@@ -63,8 +63,10 @@ function _ts_dispose_resources(env) {
|
|
|
63
63
|
return next();
|
|
64
64
|
})(env);
|
|
65
65
|
}
|
|
66
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
66
67
|
import { Timer } from '@aztec/foundation/timer';
|
|
67
68
|
import { PublicTxSimulationTester, SimpleContractDataSource } from '@aztec/simulator/public/fixtures';
|
|
69
|
+
import { AvmSimulatorPool, MeasuredPublicTxSimulator } from '@aztec/simulator/server';
|
|
68
70
|
import { AvmCircuitInputs, PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
69
71
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
70
72
|
import path from 'path';
|
|
@@ -82,14 +84,34 @@ const provingConfig = PublicSimulatorConfig.from({
|
|
|
82
84
|
export class AvmProvingTester extends PublicTxSimulationTester {
|
|
83
85
|
checkCircuitOnly;
|
|
84
86
|
bbJsFactory;
|
|
85
|
-
constructor(checkCircuitOnly, contractDataSource, merkleTrees, globals, metrics){
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
constructor(checkCircuitOnly, contractDataSource, merkleTrees, globals, metrics, simulatorFactory){
|
|
88
|
+
super(merkleTrees, contractDataSource, globals, metrics, simulatorFactory, provingConfig), this.checkCircuitOnly = checkCircuitOnly, this.bbJsFactory = new BBJsFactory(BB_PATH, {
|
|
89
|
+
debugDir: process.env.BB_DEBUG_OUTPUT_DIR,
|
|
90
|
+
logger: createLogger('bb-prover:avm-proving-tester')
|
|
91
|
+
});
|
|
88
92
|
}
|
|
89
93
|
static async new(worldStateService, checkCircuitOnly = false, globals, metrics) {
|
|
90
94
|
const contractDataSource = new SimpleContractDataSource();
|
|
91
95
|
const merkleTrees = await worldStateService.fork();
|
|
92
|
-
|
|
96
|
+
const avmSimulator = await AvmSimulatorPool.spawn({
|
|
97
|
+
wsdbIpcPath: worldStateService.getIpcPath()
|
|
98
|
+
});
|
|
99
|
+
const simulatorFactory = (mt, cdb, g, m, c)=>new MeasuredPublicTxSimulator(avmSimulator, g, cdb, mt.getRevision().forkId, m, c, undefined);
|
|
100
|
+
const tester = new AvmProvingTester(checkCircuitOnly, contractDataSource, merkleTrees, globals, metrics, simulatorFactory);
|
|
101
|
+
tester.avmSimulator = avmSimulator;
|
|
102
|
+
return tester;
|
|
103
|
+
}
|
|
104
|
+
async close() {
|
|
105
|
+
const results = await Promise.allSettled([
|
|
106
|
+
super.close(),
|
|
107
|
+
this.bbJsFactory.destroy()
|
|
108
|
+
]);
|
|
109
|
+
const errors = results.flatMap((result)=>result.status === 'rejected' ? [
|
|
110
|
+
result.reason
|
|
111
|
+
] : []);
|
|
112
|
+
if (errors.length > 0) {
|
|
113
|
+
throw new AggregateError(errors, `Failed to close AVM proving tester`);
|
|
114
|
+
}
|
|
93
115
|
}
|
|
94
116
|
/**
|
|
95
117
|
* Generate an AVM proof (or run check-circuit if configured). Records per-stage timings in the test metrics.
|
|
@@ -4,7 +4,7 @@ import { type ArtifactProvider, type ClientProtocolArtifact } from '@aztec/noir-
|
|
|
4
4
|
import type { Abi, WitnessMap } from '@aztec/noir-types';
|
|
5
5
|
import type { CircuitSimulator } from '@aztec/simulator/client';
|
|
6
6
|
import type { PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
|
|
7
|
-
import type { HidingKernelToPublicPrivateInputs, HidingKernelToRollupPrivateInputs, PrivateExecutionStep, PrivateKernelCircuitPublicInputs, PrivateKernelInit2CircuitPrivateInputs, PrivateKernelInit3CircuitPrivateInputs, PrivateKernelInitCircuitPrivateInputs, PrivateKernelInner2CircuitPrivateInputs, PrivateKernelInner3CircuitPrivateInputs, PrivateKernelInnerCircuitPrivateInputs, PrivateKernelResetCircuitPrivateInputs, PrivateKernelResetTailCircuitPrivateInputs, PrivateKernelSimulateOutput, PrivateKernelTailCircuitPublicInputs } from '@aztec/stdlib/kernel';
|
|
7
|
+
import type { HidingKernelToPublicPrivateInputs, HidingKernelToRollupPrivateInputs, PrivateExecutionStep, PrivateKernelCircuitPublicInputs, PrivateKernelInit2CircuitPrivateInputs, PrivateKernelInit3CircuitPrivateInputs, PrivateKernelInit4CircuitPrivateInputs, PrivateKernelInit5CircuitPrivateInputs, PrivateKernelInitCircuitPrivateInputs, PrivateKernelInner2CircuitPrivateInputs, PrivateKernelInner3CircuitPrivateInputs, PrivateKernelInner4CircuitPrivateInputs, PrivateKernelInner5CircuitPrivateInputs, PrivateKernelInnerCircuitPrivateInputs, PrivateKernelResetCircuitPrivateInputs, PrivateKernelResetTailCircuitPrivateInputs, PrivateKernelSimulateOutput, PrivateKernelTailCircuitPublicInputs } from '@aztec/stdlib/kernel';
|
|
8
8
|
import { ChonkProofWithPublicInputs } from '@aztec/stdlib/proofs';
|
|
9
9
|
export type BBPrivateKernelProverOptions = Omit<BackendOptions, 'logger'> & {
|
|
10
10
|
logger?: Logger;
|
|
@@ -21,12 +21,20 @@ export declare abstract class BBPrivateKernelProver implements PrivateKernelProv
|
|
|
21
21
|
simulateInit2(inputs: PrivateKernelInit2CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
22
22
|
generateInit3Output(inputs: PrivateKernelInit3CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
23
23
|
simulateInit3(inputs: PrivateKernelInit3CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
24
|
+
generateInit4Output(inputs: PrivateKernelInit4CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
25
|
+
simulateInit4(inputs: PrivateKernelInit4CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
26
|
+
generateInit5Output(inputs: PrivateKernelInit5CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
27
|
+
simulateInit5(inputs: PrivateKernelInit5CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
24
28
|
generateInnerOutput(inputs: PrivateKernelInnerCircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
25
29
|
simulateInner(inputs: PrivateKernelInnerCircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
26
30
|
generateInner2Output(inputs: PrivateKernelInner2CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
27
31
|
simulateInner2(inputs: PrivateKernelInner2CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
28
32
|
generateInner3Output(inputs: PrivateKernelInner3CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
29
33
|
simulateInner3(inputs: PrivateKernelInner3CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
34
|
+
generateInner4Output(inputs: PrivateKernelInner4CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
35
|
+
simulateInner4(inputs: PrivateKernelInner4CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
36
|
+
generateInner5Output(inputs: PrivateKernelInner5CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
37
|
+
simulateInner5(inputs: PrivateKernelInner5CircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
30
38
|
generateResetOutput(inputs: PrivateKernelResetCircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
31
39
|
simulateReset(inputs: PrivateKernelResetCircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>>;
|
|
32
40
|
generateResetTailOutput(inputs: PrivateKernelResetTailCircuitPrivateInputs): Promise<PrivateKernelSimulateOutput<PrivateKernelTailCircuitPublicInputs>>;
|
|
@@ -41,6 +49,6 @@ export declare abstract class BBPrivateKernelProver implements PrivateKernelProv
|
|
|
41
49
|
}, O extends PrivateKernelCircuitPublicInputs | PrivateKernelTailCircuitPublicInputs>(inputs: I, circuitType: ClientProtocolArtifact, convertInputs: (inputs: I, abi: Abi) => WitnessMap, convertOutputs: (outputs: WitnessMap, abi: Abi) => O): Promise<PrivateKernelSimulateOutput<O>>;
|
|
42
50
|
makeEmptyKernelSimulateOutput<PublicInputsType extends PrivateKernelTailCircuitPublicInputs | PrivateKernelCircuitPublicInputs>(publicInputs: PublicInputsType, circuitType: ClientProtocolArtifact): Promise<PrivateKernelSimulateOutput<PublicInputsType>>;
|
|
43
51
|
createChonkProof(executionSteps: PrivateExecutionStep[]): Promise<ChonkProofWithPublicInputs>;
|
|
44
|
-
computeGateCountForCircuit(_bytecode: Buffer, _circuitName: string): Promise<number>;
|
|
52
|
+
computeGateCountForCircuit(_bytecode: Buffer, _circuitName: string, _circuitKind: PrivateExecutionStep['kind']): Promise<number>;
|
|
45
53
|
}
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfcHJpdmF0ZV9rZXJuZWxfcHJvdmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmVyL2NsaWVudC9iYl9wcml2YXRlX2tlcm5lbF9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixLQUFLLGNBQWMsRUFBZ0IsTUFBTSxjQUFjLENBQUM7QUFDckYsT0FBTyxFQUFpQixLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQXFDakYsT0FBTyxFQUNMLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEtBQUssRUFDVixpQ0FBaUMsRUFDakMsaUNBQWlDLEVBQ2pDLG9CQUFvQixFQUNwQixnQ0FBZ0MsRUFDaEMsc0NBQXNDLEVBQ3RDLHNDQUFzQyxFQUN0QyxzQ0FBc0MsRUFDdEMsc0NBQXNDLEVBQ3RDLHFDQUFxQyxFQUNyQyx1Q0FBdUMsRUFDdkMsdUNBQXVDLEVBQ3ZDLHVDQUF1QyxFQUN2Qyx1Q0FBdUMsRUFDdkMsc0NBQXNDLEVBQ3RDLHNDQUFzQyxFQUN0QywwQ0FBMEMsRUFDMUMsMkJBQTJCLEVBQzNCLG9DQUFvQyxFQUNyQyxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBS2xFLE1BQU0sTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxHQUFHO0lBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFBO0NBQUUs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bb_private_kernel_prover.d.ts","sourceRoot":"","sources":["../../../src/prover/client/bb_private_kernel_prover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,cAAc,EAAgB,MAAM,cAAc,CAAC;AACrF,OAAO,EAAiB,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"bb_private_kernel_prover.d.ts","sourceRoot":"","sources":["../../../src/prover/client/bb_private_kernel_prover.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { AztecClientBackend, Barretenberg } from '@aztec/bb.js';
|
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { Timer } from '@aztec/foundation/timer';
|
|
4
4
|
import { serializeWitness } from '@aztec/noir-noirc_abi';
|
|
5
|
-
import { convertHidingKernelPublicInputsToWitnessMapWithAbi, convertHidingKernelToRollupInputsToWitnessMapWithAbi, convertPrivateKernelInit2InputsToWitnessMapWithAbi, convertPrivateKernelInit2OutputsFromWitnessMapWithAbi, convertPrivateKernelInit3InputsToWitnessMapWithAbi, convertPrivateKernelInit3OutputsFromWitnessMapWithAbi, convertPrivateKernelInitInputsToWitnessMapWithAbi, convertPrivateKernelInitOutputsFromWitnessMapWithAbi, convertPrivateKernelInner2InputsToWitnessMapWithAbi, convertPrivateKernelInner2OutputsFromWitnessMapWithAbi, convertPrivateKernelInner3InputsToWitnessMapWithAbi, convertPrivateKernelInner3OutputsFromWitnessMapWithAbi, convertPrivateKernelInnerInputsToWitnessMapWithAbi, convertPrivateKernelInnerOutputsFromWitnessMapWithAbi, convertPrivateKernelResetInputsToWitnessMapWithAbi, convertPrivateKernelResetOutputsFromWitnessMapWithAbi, convertPrivateKernelResetTailInputsToWitnessMapWithAbi, convertPrivateKernelResetTailToPublicInputsToWitnessMapWithAbi, convertPrivateKernelTailForPublicOutputsFromWitnessMapWithAbi, convertPrivateKernelTailOutputsFromWitnessMapWithAbi, foreignCallHandler, getPrivateKernelResetArtifactName, getPrivateKernelResetTailArtifactName, updateResetCircuitSampleInputs } from '@aztec/noir-protocol-circuits-types/client';
|
|
5
|
+
import { convertHidingKernelPublicInputsToWitnessMapWithAbi, convertHidingKernelToRollupInputsToWitnessMapWithAbi, convertPrivateKernelInit2InputsToWitnessMapWithAbi, convertPrivateKernelInit2OutputsFromWitnessMapWithAbi, convertPrivateKernelInit3InputsToWitnessMapWithAbi, convertPrivateKernelInit3OutputsFromWitnessMapWithAbi, convertPrivateKernelInit4InputsToWitnessMapWithAbi, convertPrivateKernelInit4OutputsFromWitnessMapWithAbi, convertPrivateKernelInit5InputsToWitnessMapWithAbi, convertPrivateKernelInit5OutputsFromWitnessMapWithAbi, convertPrivateKernelInitInputsToWitnessMapWithAbi, convertPrivateKernelInitOutputsFromWitnessMapWithAbi, convertPrivateKernelInner2InputsToWitnessMapWithAbi, convertPrivateKernelInner2OutputsFromWitnessMapWithAbi, convertPrivateKernelInner3InputsToWitnessMapWithAbi, convertPrivateKernelInner3OutputsFromWitnessMapWithAbi, convertPrivateKernelInner4InputsToWitnessMapWithAbi, convertPrivateKernelInner4OutputsFromWitnessMapWithAbi, convertPrivateKernelInner5InputsToWitnessMapWithAbi, convertPrivateKernelInner5OutputsFromWitnessMapWithAbi, convertPrivateKernelInnerInputsToWitnessMapWithAbi, convertPrivateKernelInnerOutputsFromWitnessMapWithAbi, convertPrivateKernelResetInputsToWitnessMapWithAbi, convertPrivateKernelResetOutputsFromWitnessMapWithAbi, convertPrivateKernelResetTailInputsToWitnessMapWithAbi, convertPrivateKernelResetTailToPublicInputsToWitnessMapWithAbi, convertPrivateKernelTailForPublicOutputsFromWitnessMapWithAbi, convertPrivateKernelTailOutputsFromWitnessMapWithAbi, foreignCallHandler, getPrivateKernelResetArtifactName, getPrivateKernelResetTailArtifactName, updateResetCircuitSampleInputs } from '@aztec/noir-protocol-circuits-types/client';
|
|
6
6
|
import { mapProtocolArtifactNameToCircuitName } from '@aztec/noir-protocol-circuits-types/types';
|
|
7
7
|
import { ChonkProofWithPublicInputs } from '@aztec/stdlib/proofs';
|
|
8
8
|
import { ungzip } from 'pako';
|
|
@@ -35,6 +35,18 @@ export class BBPrivateKernelProver {
|
|
|
35
35
|
async simulateInit3(inputs) {
|
|
36
36
|
return await this.simulateCircuitOutput(inputs, 'PrivateKernelInit3Artifact', convertPrivateKernelInit3InputsToWitnessMapWithAbi, convertPrivateKernelInit3OutputsFromWitnessMapWithAbi);
|
|
37
37
|
}
|
|
38
|
+
async generateInit4Output(inputs) {
|
|
39
|
+
return await this.generateCircuitOutput(inputs, 'PrivateKernelInit4Artifact', convertPrivateKernelInit4InputsToWitnessMapWithAbi, convertPrivateKernelInit4OutputsFromWitnessMapWithAbi);
|
|
40
|
+
}
|
|
41
|
+
async simulateInit4(inputs) {
|
|
42
|
+
return await this.simulateCircuitOutput(inputs, 'PrivateKernelInit4Artifact', convertPrivateKernelInit4InputsToWitnessMapWithAbi, convertPrivateKernelInit4OutputsFromWitnessMapWithAbi);
|
|
43
|
+
}
|
|
44
|
+
async generateInit5Output(inputs) {
|
|
45
|
+
return await this.generateCircuitOutput(inputs, 'PrivateKernelInit5Artifact', convertPrivateKernelInit5InputsToWitnessMapWithAbi, convertPrivateKernelInit5OutputsFromWitnessMapWithAbi);
|
|
46
|
+
}
|
|
47
|
+
async simulateInit5(inputs) {
|
|
48
|
+
return await this.simulateCircuitOutput(inputs, 'PrivateKernelInit5Artifact', convertPrivateKernelInit5InputsToWitnessMapWithAbi, convertPrivateKernelInit5OutputsFromWitnessMapWithAbi);
|
|
49
|
+
}
|
|
38
50
|
async generateInnerOutput(inputs) {
|
|
39
51
|
return await this.generateCircuitOutput(inputs, 'PrivateKernelInnerArtifact', convertPrivateKernelInnerInputsToWitnessMapWithAbi, convertPrivateKernelInnerOutputsFromWitnessMapWithAbi);
|
|
40
52
|
}
|
|
@@ -53,6 +65,18 @@ export class BBPrivateKernelProver {
|
|
|
53
65
|
async simulateInner3(inputs) {
|
|
54
66
|
return await this.simulateCircuitOutput(inputs, 'PrivateKernelInner3Artifact', convertPrivateKernelInner3InputsToWitnessMapWithAbi, convertPrivateKernelInner3OutputsFromWitnessMapWithAbi);
|
|
55
67
|
}
|
|
68
|
+
async generateInner4Output(inputs) {
|
|
69
|
+
return await this.generateCircuitOutput(inputs, 'PrivateKernelInner4Artifact', convertPrivateKernelInner4InputsToWitnessMapWithAbi, convertPrivateKernelInner4OutputsFromWitnessMapWithAbi);
|
|
70
|
+
}
|
|
71
|
+
async simulateInner4(inputs) {
|
|
72
|
+
return await this.simulateCircuitOutput(inputs, 'PrivateKernelInner4Artifact', convertPrivateKernelInner4InputsToWitnessMapWithAbi, convertPrivateKernelInner4OutputsFromWitnessMapWithAbi);
|
|
73
|
+
}
|
|
74
|
+
async generateInner5Output(inputs) {
|
|
75
|
+
return await this.generateCircuitOutput(inputs, 'PrivateKernelInner5Artifact', convertPrivateKernelInner5InputsToWitnessMapWithAbi, convertPrivateKernelInner5OutputsFromWitnessMapWithAbi);
|
|
76
|
+
}
|
|
77
|
+
async simulateInner5(inputs) {
|
|
78
|
+
return await this.simulateCircuitOutput(inputs, 'PrivateKernelInner5Artifact', convertPrivateKernelInner5InputsToWitnessMapWithAbi, convertPrivateKernelInner5OutputsFromWitnessMapWithAbi);
|
|
79
|
+
}
|
|
56
80
|
async generateResetOutput(inputs) {
|
|
57
81
|
const variantInputs = inputs.trimToSizes();
|
|
58
82
|
const artifactName = getPrivateKernelResetArtifactName(inputs.dimensions);
|
|
@@ -143,7 +167,7 @@ export class BBPrivateKernelProver {
|
|
|
143
167
|
...this.options,
|
|
144
168
|
logger: this.options.logger?.verbose
|
|
145
169
|
});
|
|
146
|
-
const backend = new AztecClientBackend(executionSteps.map((step)=>ungzip(step.bytecode)), barretenberg, executionSteps.map((step)=>step.functionName));
|
|
170
|
+
const backend = new AztecClientBackend(executionSteps.map((step)=>ungzip(step.bytecode)), barretenberg, executionSteps.map((step)=>step.functionName), executionSteps.map((step)=>step.kind));
|
|
147
171
|
// Use compressed prove path to get both proof fields and compressed proof bytes
|
|
148
172
|
const result = await backend.prove(executionSteps.map((step)=>ungzip(serializeWitness(step.witness))), executionSteps.map((step)=>step.vk), {
|
|
149
173
|
compress: true
|
|
@@ -162,7 +186,7 @@ export class BBPrivateKernelProver {
|
|
|
162
186
|
proofWithPubInputs.compressedProof = result.compressedProof ? Buffer.from(result.compressedProof) : undefined;
|
|
163
187
|
return proofWithPubInputs;
|
|
164
188
|
}
|
|
165
|
-
async computeGateCountForCircuit(_bytecode, _circuitName) {
|
|
189
|
+
async computeGateCountForCircuit(_bytecode, _circuitName, _circuitKind) {
|
|
166
190
|
// Note we do not pass the vk to the backend. This is unneeded for gate counts.
|
|
167
191
|
const barretenberg = await Barretenberg.initSingleton({
|
|
168
192
|
...this.options,
|
|
@@ -172,6 +196,8 @@ export class BBPrivateKernelProver {
|
|
|
172
196
|
ungzip(_bytecode)
|
|
173
197
|
], barretenberg, [
|
|
174
198
|
_circuitName
|
|
199
|
+
], [
|
|
200
|
+
_circuitKind
|
|
175
201
|
]);
|
|
176
202
|
const gateCount = await backend.gates();
|
|
177
203
|
return gateCount[0];
|
|
@@ -3,7 +3,7 @@ import type { Tx } from '@aztec/stdlib/tx';
|
|
|
3
3
|
import type { BBConfig } from '../config.js';
|
|
4
4
|
/**
|
|
5
5
|
* Batch verifier for Chonk IVC proofs. Uses the bb batch verifier service
|
|
6
|
-
* which batches IPA verification into a
|
|
6
|
+
* which batches IPA verification into a constant number of SRS MSMs for better throughput.
|
|
7
7
|
*
|
|
8
8
|
* Architecture:
|
|
9
9
|
* - Spawns a persistent `bb msgpack run` process via Barretenberg (native backend)
|
|
@@ -17,6 +17,7 @@ export declare class BatchChonkVerifier implements ClientProtocolCircuitVerifier
|
|
|
17
17
|
private batchSize;
|
|
18
18
|
private label;
|
|
19
19
|
private bb;
|
|
20
|
+
private fifoDir;
|
|
20
21
|
private fifoPath;
|
|
21
22
|
private nextRequestId;
|
|
22
23
|
private pendingRequests;
|
|
@@ -27,6 +28,9 @@ export declare class BatchChonkVerifier implements ClientProtocolCircuitVerifier
|
|
|
27
28
|
private vkIndexMap;
|
|
28
29
|
/** Bound cleanup handler for process exit signals. */
|
|
29
30
|
private exitCleanup;
|
|
31
|
+
private stopped;
|
|
32
|
+
private fatalError;
|
|
33
|
+
private pendingDrainedResolvers;
|
|
30
34
|
private constructor();
|
|
31
35
|
/** Create and start a BatchChonkVerifier using the protocol circuit VKs. */
|
|
32
36
|
static new(config: BBConfig, batchSize: number, label: string): Promise<BatchChonkVerifier>;
|
|
@@ -37,9 +41,16 @@ export declare class BatchChonkVerifier implements ClientProtocolCircuitVerifier
|
|
|
37
41
|
/** Enqueue raw proof fields for verification. Used directly by tests with custom VKs. */
|
|
38
42
|
enqueueProof(vkIndex: number, proofFields: Uint8Array[]): Promise<IVCProofVerificationResult>;
|
|
39
43
|
stop(): Promise<void>;
|
|
44
|
+
private withTimeout;
|
|
40
45
|
private startFifoReader;
|
|
41
46
|
private handleResult;
|
|
42
47
|
private registerExitCleanup;
|
|
43
48
|
private deregisterExitCleanup;
|
|
49
|
+
private rejectPendingRequests;
|
|
50
|
+
private failVerifier;
|
|
51
|
+
private waitForPendingRequestsToDrain;
|
|
52
|
+
private notifyPendingDrained;
|
|
53
|
+
private cleanupFifo;
|
|
54
|
+
private cleanupFifoSync;
|
|
44
55
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfY2hvbmtfdmVyaWZpZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9iYXRjaF9jaG9ua192ZXJpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEtBQUssRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pILE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBVTNDLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQXdCN0M7Ozs7Ozs7OztHQVNHO0FBQ0gscUJBQWEsa0JBQW1CLFlBQVcsNkJBQTZCO0lBa0JwRSxPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxLQUFLO0lBcEJmLE9BQU8sQ0FBQyxFQUFFLENBQWdCO0lBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQXFCO0lBQ3BDLE9BQU8sQ0FBQyxRQUFRLENBQU07SUFDdEIsT0FBTyxDQUFDLGFBQWEsQ0FBSztJQUMxQixPQUFPLENBQUMsZUFBZSxDQUFxQztJQUM1RCxPQUFPLENBQUMsU0FBUyxDQUFjO0lBQy9CLE9BQU8sQ0FBQyxVQUFVLENBQWtCO0lBQ3BDLE9BQU8sQ0FBQyxNQUFNLENBQWtEO0lBQ2hFLDREQUE0RDtJQUM1RCxPQUFPLENBQUMsVUFBVSxDQUE2QjtJQUMvQyxzREFBc0Q7SUFDdEQsT0FBTyxDQUFDLFdBQVcsQ0FBNkI7SUFDaEQsT0FBTyxDQUFDLE9BQU8sQ0FBUztJQUN4QixPQUFPLENBQUMsVUFBVSxDQUFvQjtJQUN0QyxPQUFPLENBQUMsdUJBQXVCLENBQXlCO0lBRXhELE9BQU8sZUFTTjtJQUVELDRFQUE0RTtJQUM1RSxPQUFhLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FlaEc7SUFFRCwyRUFBMkU7SUFDM0UsT0FBYSxhQUFhLENBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLDBCQUEwQixDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFDNUYsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUNqQixTQUFTLEVBQUUsTUFBTSxHQUNoQixPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FPN0I7WUFFYSxLQUFLO0lBaUNaLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQWU5RDtJQUVELHlGQUF5RjtJQUNsRixZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBa0RuRztJQUVZLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBK0JqQztZQU9hLFdBQVc7SUFrQnpCLE9BQU8sQ0FBQyxlQUFlO0lBNkJ2QixPQUFPLENBQUMsWUFBWTtJQTZCcEIsT0FBTyxDQUFDLG1CQUFtQjtJQU8zQixPQUFPLENBQUMscUJBQXFCO0lBTzdCLE9BQU8sQ0FBQyxxQkFBcUI7SUFTN0IsT0FBTyxDQUFDLFlBQVk7SUFPcEIsT0FBTyxDQUFDLDZCQUE2QjtJQTBCckMsT0FBTyxDQUFDLG9CQUFvQjtZQVNkLFdBQVc7SUFVekIsT0FBTyxDQUFDLGVBQWU7Q0FXeEIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch_chonk_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/batch_chonk_verifier.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAU3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"batch_chonk_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/batch_chonk_verifier.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAU3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAwB7C;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,YAAW,6BAA6B;IAkBpE,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;IApBf,OAAO,CAAC,EAAE,CAAgB;IAC1B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,MAAM,CAAkD;IAChE,4DAA4D;IAC5D,OAAO,CAAC,UAAU,CAA6B;IAC/C,sDAAsD;IACtD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,uBAAuB,CAAyB;IAExD,OAAO,eASN;IAED,4EAA4E;IAC5E,OAAa,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAehG;IAED,2EAA2E;IAC3E,OAAa,aAAa,CACxB,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,0BAA0B,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,EAC5F,GAAG,EAAE,UAAU,EAAE,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAO7B;YAEa,KAAK;IAiCZ,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAe9D;IAED,yFAAyF;IAClF,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAkDnG;IAEY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA+BjC;YAOa,WAAW;IAkBzB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,6BAA6B;IA0BrC,OAAO,CAAC,oBAAoB;YASd,WAAW;IAUzB,OAAO,CAAC,eAAe;CAWxB"}
|