@aztec-labs/bb-prover 6.0.0-rc.1 → 6.0.0-rc.3
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/bb/bb_js_backend.d.ts +29 -19
- package/dest/bb/bb_js_backend.d.ts.map +1 -1
- package/dest/bb/bb_js_backend.js +54 -72
- package/dest/prover/server/bb_prover.d.ts +1 -1
- package/dest/prover/server/bb_prover.d.ts.map +1 -1
- package/dest/prover/server/bb_prover.js +3 -2
- package/dest/test/fake_bb_js.d.ts +66 -0
- package/dest/test/fake_bb_js.d.ts.map +1 -0
- package/dest/test/fake_bb_js.js +111 -0
- package/dest/verifier/bb_verifier.d.ts +14 -3
- package/dest/verifier/bb_verifier.d.ts.map +1 -1
- package/dest/verifier/bb_verifier.js +101 -32
- package/dest/verifier/queued_chonk_verifier.d.ts +1 -1
- package/dest/verifier/queued_chonk_verifier.d.ts.map +1 -1
- package/dest/verifier/queued_chonk_verifier.js +7 -2
- package/package.json +14 -14
- package/src/bb/bb_js_backend.ts +66 -75
- package/src/prover/server/bb_prover.ts +3 -2
- package/src/test/fake_bb_js.ts +125 -0
- package/src/verifier/bb_verifier.ts +87 -11
- package/src/verifier/queued_chonk_verifier.ts +7 -2
|
@@ -55,8 +55,14 @@ export interface BBJsApi {
|
|
|
55
55
|
export declare class BBJsInstance implements BBJsApi {
|
|
56
56
|
private api;
|
|
57
57
|
private constructor();
|
|
58
|
-
/**
|
|
59
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Creates a new Barretenberg instance connected to a fresh bb process.
|
|
60
|
+
*
|
|
61
|
+
* `respawn` lets the instance replace its bb process when it dies, so a long-lived instance stays
|
|
62
|
+
* usable instead of failing every later call. Only safe where the instance holds no state between
|
|
63
|
+
* calls, since a replacement has no Chonk accumulation and no batch-verifier session.
|
|
64
|
+
*/
|
|
65
|
+
static create(bbPath: string, logger?: LogFn, threads?: number, respawn?: boolean): Promise<BBJsInstance>;
|
|
60
66
|
/**
|
|
61
67
|
* Generate an UltraHonk proof for a circuit.
|
|
62
68
|
* @param circuitName - Identifier for the circuit (used by bb internally).
|
|
@@ -136,6 +142,12 @@ export interface BBJsFactoryOptions {
|
|
|
136
142
|
* If omitted, every `getInstance()` call spawns a fresh bb that is destroyed on dispose.
|
|
137
143
|
*/
|
|
138
144
|
poolSize?: number;
|
|
145
|
+
/**
|
|
146
|
+
* Let each instance replace its bb process when it dies. Only for callers whose calls stand alone:
|
|
147
|
+
* a replacement process remembers nothing, so state held across calls (a Chonk accumulation, a
|
|
148
|
+
* batch-verifier session) would be silently lost.
|
|
149
|
+
*/
|
|
150
|
+
respawn?: boolean;
|
|
139
151
|
logger?: Logger;
|
|
140
152
|
threads?: number;
|
|
141
153
|
debugDir?: string;
|
|
@@ -146,6 +158,11 @@ export interface BBJsFactoryOptions {
|
|
|
146
158
|
* set of long-lived bb processes that are reused across calls — useful when the per-call
|
|
147
159
|
* bb startup cost dominates the workload (e.g. high-rate IVC verification).
|
|
148
160
|
*
|
|
161
|
+
* The pool is a queue of `poolSize` slots, each starting its bb on the first borrow that needs it.
|
|
162
|
+
* A borrower waits in exactly two places: for a slot, which destroy() releases by cancelling the
|
|
163
|
+
* queue, and for its slot's bb to start, which bb.js bounds with its own startup deadline. A bb that
|
|
164
|
+
* fails to start costs only that slot, which goes back empty for the next borrower to try again.
|
|
165
|
+
*
|
|
149
166
|
* Idiomatic usage:
|
|
150
167
|
* ```
|
|
151
168
|
* await using inst = await factory.getInstance();
|
|
@@ -155,30 +172,28 @@ export interface BBJsFactoryOptions {
|
|
|
155
172
|
*/
|
|
156
173
|
export declare class BBJsFactory {
|
|
157
174
|
private bbPath;
|
|
158
|
-
private readonly poolSize?;
|
|
159
175
|
private readonly logger?;
|
|
160
176
|
private readonly threads?;
|
|
161
177
|
private readonly debugDir?;
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
private initPromise?;
|
|
178
|
+
private readonly respawn;
|
|
179
|
+
/** Slots not currently borrowed, when poolSize is set; otherwise undefined. */
|
|
180
|
+
private readonly slots?;
|
|
166
181
|
private destroyed;
|
|
167
182
|
constructor(bbPath: string, options?: BBJsFactoryOptions);
|
|
168
183
|
/**
|
|
169
184
|
* 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
|
|
171
|
-
*
|
|
185
|
+
* With no pool: spawns a fresh bb that is destroyed on dispose. With a pool: borrows a slot,
|
|
186
|
+
* starting its bb if it has none, and returns the slot to the pool on dispose.
|
|
172
187
|
*/
|
|
173
188
|
getInstance(): Promise<BBJsApi & AsyncDisposable>;
|
|
174
189
|
/**
|
|
175
190
|
* 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
|
|
177
|
-
*
|
|
191
|
+
* instances are destroyed by their own dispose callbacks). Instances in borrowed slots are
|
|
192
|
+
* destroyed when their borrow is released.
|
|
178
193
|
*/
|
|
179
194
|
destroy(): Promise<void>;
|
|
180
|
-
private
|
|
181
|
-
|
|
195
|
+
private release;
|
|
196
|
+
protected createInstance(): Promise<BBJsApi>;
|
|
182
197
|
private maybeWrapDebug;
|
|
183
198
|
/**
|
|
184
199
|
* Wrap a fresh instance with an `AsyncDisposable` that destroys it on dispose. Used when no
|
|
@@ -186,11 +201,6 @@ export declare class BBJsFactory {
|
|
|
186
201
|
* that didn't shut down cleanly) surfaces instead of being silently swallowed.
|
|
187
202
|
*/
|
|
188
203
|
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
204
|
private makeDisposable;
|
|
195
205
|
}
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfanNfYmFja2VuZC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JiL2JiX2pzX2JhY2tlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFrRCxNQUFNLHlCQUF5QixDQUFDO0FBRXZHLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUtoRSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFvQmxELHlEQUF5RDtBQUN6RCxNQUFNLE1BQU0sZUFBZSxHQUFHO0lBQzVCLDJDQUEyQztJQUMzQyxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDMUIsa0RBQWtEO0lBQ2xELGlCQUFpQixFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ2hDLCtDQUErQztJQUMvQyxVQUFVLEVBQUUsTUFBTSxDQUFDO0NBQ3BCLENBQUM7QUFFRixxRkFBcUY7QUFDckYsTUFBTSxXQUFXLE9BQU87SUFDdEIsYUFBYSxDQUNYLFdBQVcsRUFBRSxNQUFNLEVBQ25CLFFBQVEsRUFBRSxVQUFVLEVBQ3BCLGVBQWUsRUFBRSxVQUFVLEVBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQ25CLE1BQU0sRUFBRSxlQUFlLEdBQ3RCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM1QixXQUFXLENBQ1QsV0FBVyxFQUFFLFVBQVUsRUFBRSxFQUN6QixlQUFlLEVBQUUsVUFBVSxFQUMzQixpQkFBaUIsRUFBRSxVQUFVLEVBQUUsRUFDL0IsTUFBTSxFQUFFLGVBQWUsR0FDdEIsT0FBTyxDQUFDO1FBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUFDLFVBQVUsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLENBQUM7SUFDdEQsZ0JBQWdCLENBQ2Qsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLEVBQ3BDLGVBQWUsRUFBRSxVQUFVLEdBQzFCLE9BQU8sQ0FBQztR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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bb_js_backend.d.ts","sourceRoot":"","sources":["../../src/bb/bb_js_backend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAkD,MAAM,yBAAyB,CAAC;AAEvG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAKhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAoBlD,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG;IAC5B,2CAA2C;IAC3C,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,kDAAkD;IAClD,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAChC,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qFAAqF;AACrF,MAAM,WAAW,OAAO;IACtB,aAAa,CACX,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,UAAU,EACpB,eAAe,EAAE,UAAU,EAC3B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5B,WAAW,CACT,WAAW,EAAE,UAAU,EAAE,EACzB,eAAe,EAAE,UAAU,EAC3B,iBAAiB,EAAE,UAAU,EAAE,EAC/B,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,gBAAgB,CACd,sBAAsB,EAAE,UAAU,EAAE,EACpC,eAAe,EAAE,UAAU,GAC1B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,eAAe,GAAG,WAAW,GACpC,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,gBAAgB,CAAC,eAAe,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrG,mGAAmG;IACnG,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7G,4DAA4D;IAC5D,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClH,6FAA6F;IAC7F,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,YAAa,YAAW,OAAO;IACtB,OAAO,CAAC,GAAG;IAA/B,OAAO,eAA0C;IAEjD
|
|
1
|
+
{"version":3,"file":"bb_js_backend.d.ts","sourceRoot":"","sources":["../../src/bb/bb_js_backend.ts"],"names":[],"mappings":"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"}
|
package/dest/bb/bb_js_backend.js
CHANGED
|
@@ -45,11 +45,18 @@ import { ProvingError } from '@aztec-labs/stdlib/errors';
|
|
|
45
45
|
constructor(api){
|
|
46
46
|
this.api = api;
|
|
47
47
|
}
|
|
48
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Creates a new Barretenberg instance connected to a fresh bb process.
|
|
50
|
+
*
|
|
51
|
+
* `respawn` lets the instance replace its bb process when it dies, so a long-lived instance stays
|
|
52
|
+
* usable instead of failing every later call. Only safe where the instance holds no state between
|
|
53
|
+
* calls, since a replacement has no Chonk accumulation and no batch-verifier session.
|
|
54
|
+
*/ static async create(bbPath, logger, threads, respawn) {
|
|
49
55
|
const options = {
|
|
50
56
|
bbPath,
|
|
51
57
|
backend: BackendType.NativeUnixSocket,
|
|
52
|
-
logger
|
|
58
|
+
logger,
|
|
59
|
+
respawn
|
|
53
60
|
};
|
|
54
61
|
if (threads !== undefined) {
|
|
55
62
|
options.threads = threads;
|
|
@@ -221,6 +228,11 @@ import { ProvingError } from '@aztec-labs/stdlib/errors';
|
|
|
221
228
|
* set of long-lived bb processes that are reused across calls — useful when the per-call
|
|
222
229
|
* bb startup cost dominates the workload (e.g. high-rate IVC verification).
|
|
223
230
|
*
|
|
231
|
+
* The pool is a queue of `poolSize` slots, each starting its bb on the first borrow that needs it.
|
|
232
|
+
* A borrower waits in exactly two places: for a slot, which destroy() releases by cancelling the
|
|
233
|
+
* queue, and for its slot's bb to start, which bb.js bounds with its own startup deadline. A bb that
|
|
234
|
+
* fails to start costs only that slot, which goes back empty for the next borrower to try again.
|
|
235
|
+
*
|
|
224
236
|
* Idiomatic usage:
|
|
225
237
|
* ```
|
|
226
238
|
* await using inst = await factory.getInstance();
|
|
@@ -229,73 +241,78 @@ import { ProvingError } from '@aztec-labs/stdlib/errors';
|
|
|
229
241
|
* ```
|
|
230
242
|
*/ export class BBJsFactory {
|
|
231
243
|
bbPath;
|
|
232
|
-
poolSize;
|
|
233
244
|
logger;
|
|
234
245
|
threads;
|
|
235
246
|
debugDir;
|
|
236
|
-
|
|
237
|
-
/**
|
|
247
|
+
respawn;
|
|
248
|
+
/** Slots not currently borrowed, when poolSize is set; otherwise undefined. */ slots;
|
|
238
249
|
destroyed;
|
|
239
250
|
constructor(bbPath, options = {}){
|
|
240
251
|
this.bbPath = bbPath;
|
|
241
252
|
this.destroyed = false;
|
|
242
|
-
this.
|
|
253
|
+
this.respawn = options.respawn ?? false;
|
|
243
254
|
this.logger = options.logger;
|
|
244
255
|
this.threads = options.threads;
|
|
245
256
|
this.debugDir = options.debugDir;
|
|
246
|
-
if (
|
|
247
|
-
|
|
257
|
+
if (options.poolSize !== undefined) {
|
|
258
|
+
if (options.poolSize < 1) {
|
|
259
|
+
throw new Error(`BBJsFactory poolSize must be >= 1, got ${options.poolSize}`);
|
|
260
|
+
}
|
|
261
|
+
this.slots = new FifoMemoryQueue();
|
|
262
|
+
for(let i = 0; i < options.poolSize; i++){
|
|
263
|
+
this.slots.put({});
|
|
264
|
+
}
|
|
248
265
|
}
|
|
249
266
|
}
|
|
250
267
|
/**
|
|
251
268
|
* Acquire a bb instance. The returned object implements `BBJsApi` and `AsyncDisposable`.
|
|
252
|
-
* With no pool: spawns a fresh bb that is destroyed on dispose. With a pool: borrows
|
|
253
|
-
*
|
|
269
|
+
* With no pool: spawns a fresh bb that is destroyed on dispose. With a pool: borrows a slot,
|
|
270
|
+
* starting its bb if it has none, and returns the slot to the pool on dispose.
|
|
254
271
|
*/ async getInstance() {
|
|
255
272
|
if (this.destroyed) {
|
|
256
273
|
throw new Error('BBJsFactory has been destroyed');
|
|
257
274
|
}
|
|
258
|
-
if (this.
|
|
275
|
+
if (!this.slots) {
|
|
259
276
|
// No pool: fresh-per-call, dispose destroys.
|
|
260
277
|
const instance = await this.createInstance();
|
|
261
278
|
return this.makeOwned(instance);
|
|
262
279
|
}
|
|
263
|
-
|
|
264
|
-
|
|
280
|
+
const slot = await this.slots.get();
|
|
281
|
+
if (!slot) {
|
|
282
|
+
throw new Error('BBJsFactory was destroyed while waiting for an instance');
|
|
265
283
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
284
|
+
let instance;
|
|
285
|
+
try {
|
|
286
|
+
instance = slot.instance ??= await this.createInstance();
|
|
287
|
+
} catch (err) {
|
|
288
|
+
await this.release(slot);
|
|
289
|
+
throw err;
|
|
270
290
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
throw new Error('BBJsFactory
|
|
291
|
+
if (this.destroyed) {
|
|
292
|
+
await this.release(slot);
|
|
293
|
+
throw new Error('BBJsFactory has been destroyed');
|
|
274
294
|
}
|
|
275
|
-
return this.
|
|
295
|
+
return this.makeDisposable(instance, ()=>this.release(slot));
|
|
276
296
|
}
|
|
277
297
|
/**
|
|
278
298
|
* Tear down all pooled instances. Idempotent. No-op when no pool is configured (fresh-per-call
|
|
279
|
-
* instances are destroyed by their own dispose callbacks). Instances
|
|
280
|
-
*
|
|
299
|
+
* instances are destroyed by their own dispose callbacks). Instances in borrowed slots are
|
|
300
|
+
* destroyed when their borrow is released.
|
|
281
301
|
*/ async destroy() {
|
|
282
302
|
if (this.destroyed) {
|
|
283
303
|
return;
|
|
284
304
|
}
|
|
285
305
|
this.destroyed = true;
|
|
286
|
-
|
|
287
|
-
this.pool = undefined;
|
|
288
|
-
if (!pool) {
|
|
306
|
+
if (!this.slots) {
|
|
289
307
|
return;
|
|
290
308
|
}
|
|
291
309
|
const idle = [];
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
idle.push(item);
|
|
310
|
+
for(let slot = this.slots.getImmediate(); slot; slot = this.slots.getImmediate()){
|
|
311
|
+
if (slot.instance) {
|
|
312
|
+
idle.push(slot.instance);
|
|
296
313
|
}
|
|
297
314
|
}
|
|
298
|
-
|
|
315
|
+
this.slots.cancel();
|
|
299
316
|
// Aggregate teardown failures so a single bb child that fails to shut down doesn't mask others.
|
|
300
317
|
const results = await Promise.allSettled(idle.map((item)=>item.destroy()));
|
|
301
318
|
const errors = results.filter((r)=>r.status === 'rejected').map((r)=>r.reason);
|
|
@@ -303,38 +320,16 @@ import { ProvingError } from '@aztec-labs/stdlib/errors';
|
|
|
303
320
|
throw new AggregateError(errors, `BBJsFactory.destroy: ${errors.length} bb instance(s) failed to shut down`);
|
|
304
321
|
}
|
|
305
322
|
}
|
|
306
|
-
async
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
}, ()=>this.createInstance()));
|
|
312
|
-
const items = [];
|
|
313
|
-
const errors = [];
|
|
314
|
-
for (const result of results){
|
|
315
|
-
if (result.status === 'fulfilled') {
|
|
316
|
-
items.push(result.value);
|
|
317
|
-
} else {
|
|
318
|
-
errors.push(result.reason);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
if (errors.length > 0 || this.destroyed) {
|
|
322
|
-
// Either creation failed or destroy() raced ahead — clean up everything we successfully spawned.
|
|
323
|
-
await Promise.all(items.map((item)=>item.destroy()));
|
|
324
|
-
if (errors.length > 0) {
|
|
325
|
-
throw errors[0];
|
|
326
|
-
}
|
|
327
|
-
return;
|
|
323
|
+
/** Return a borrowed slot to the pool, or destroy its bb if the factory was destroyed meanwhile. */ async release(slot) {
|
|
324
|
+
if (!this.destroyed) {
|
|
325
|
+
this.slots.put(slot);
|
|
326
|
+
} else {
|
|
327
|
+
await slot.instance?.destroy();
|
|
328
328
|
}
|
|
329
|
-
const pool = new FifoMemoryQueue();
|
|
330
|
-
for (const item of items){
|
|
331
|
-
pool.put(item);
|
|
332
|
-
}
|
|
333
|
-
this.pool = pool;
|
|
334
329
|
}
|
|
335
330
|
async createInstance() {
|
|
336
331
|
const logFn = this.logger ? (msg)=>this.logger.verbose(`bb.js - ${msg}`) : undefined;
|
|
337
|
-
const raw = await BBJsInstance.create(this.bbPath, logFn, this.threads);
|
|
332
|
+
const raw = await BBJsInstance.create(this.bbPath, logFn, this.threads, this.respawn);
|
|
338
333
|
return this.maybeWrapDebug(raw);
|
|
339
334
|
}
|
|
340
335
|
/** Wrap the instance in a debug wrapper if debugDir is configured. */ async maybeWrapDebug(instance) {
|
|
@@ -351,19 +346,6 @@ import { ProvingError } from '@aztec-labs/stdlib/errors';
|
|
|
351
346
|
*/ makeOwned(instance) {
|
|
352
347
|
return this.makeDisposable(instance, ()=>instance.destroy());
|
|
353
348
|
}
|
|
354
|
-
/**
|
|
355
|
-
* Wrap a pooled instance with an `AsyncDisposable` that returns it to the pool (or destroys it
|
|
356
|
-
* if the factory was destroyed in the meantime). Destroy errors are propagated.
|
|
357
|
-
*/ makeBorrowed(instance) {
|
|
358
|
-
return this.makeDisposable(instance, async ()=>{
|
|
359
|
-
const pool = this.pool;
|
|
360
|
-
if (pool && !this.destroyed) {
|
|
361
|
-
pool.put(instance);
|
|
362
|
-
} else {
|
|
363
|
-
await instance.destroy();
|
|
364
|
-
}
|
|
365
|
-
});
|
|
366
|
-
}
|
|
367
349
|
makeDisposable(instance, onDispose) {
|
|
368
350
|
let disposed = false;
|
|
369
351
|
const dispose = async ()=>{
|
|
@@ -85,4 +85,4 @@ export declare class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
85
85
|
private getVerificationKeyDataForCircuit;
|
|
86
86
|
private runInDirectory;
|
|
87
87
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfcHJvdmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmVyL3NlcnZlci9iYl9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0IseUNBQXlDLEVBRXpDLHNCQUFzQixFQUV2QixNQUFNLHVCQUF1QixDQUFDO0FBSy9CLE9BQU8sRUFDTCxLQUFLLHNCQUFzQixFQXVCNUIsTUFBTSxpREFBaUQsQ0FBQztBQUl6RCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZGLE9BQU8sRUFDTCxLQUFLLDZCQUE2QixFQUNsQyxLQUFLLG1CQUFtQixFQUV6QixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUYsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQWdDLE1BQU0sMkJBQTJCLENBQUM7QUFDaEcsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qix1QkFBdUIsRUFDdkIsaUNBQWlDLEVBQ2pDLDRCQUE0QixFQUM1QixvQ0FBb0MsRUFDcEMsa0NBQWtDLEVBQ2xDLG9DQUFvQyxFQUNwQyw0QkFBNEIsRUFDNUIsaUNBQWlDLEVBQ2pDLDRDQUE0QyxFQUM1QyxLQUFLLGdDQUFnQyxFQUNyQyxnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQixLQUFLLHVCQUF1QixFQUM1QixLQUFLLHNCQUFzQixFQUMzQixLQUFLLDBCQUEwQixFQUMvQixLQUFLLG9CQUFvQixFQUMxQixNQUFNLDJCQUEyQixDQUFDO0FBR25DLE9BQU8sRUFBYyxLQUFLLGVBQWUsRUFBaUMsTUFBTSw4QkFBOEIsQ0FBQztBQU0vRyxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0s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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bb_prover.d.ts","sourceRoot":"","sources":["../../../src/prover/server/bb_prover.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,yCAAyC,EAEzC,sBAAsB,EAEvB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"bb_prover.d.ts","sourceRoot":"","sources":["../../../src/prover/server/bb_prover.ts"],"names":[],"mappings":"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"}
|
|
@@ -438,6 +438,7 @@ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
|
|
|
438
438
|
var _dec, _dec1, _initProto;
|
|
439
439
|
import { AVM_V2_PROOF_LENGTH_IN_FIELDS, NESTED_RECURSIVE_PROOF_LENGTH, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, PAIRING_POINTS_SIZE, RECURSIVE_PROOF_LENGTH, ULTRA_KECCAK_PROOF_LENGTH } from '@aztec-labs/constants';
|
|
440
440
|
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
441
|
+
import { isRetryableError } from '@aztec-labs/foundation/error';
|
|
441
442
|
import { runInDirectory } from '@aztec-labs/foundation/fs';
|
|
442
443
|
import { createLogger } from '@aztec-labs/foundation/log';
|
|
443
444
|
import { convertBlockMergeRollupPrivateInputsToNoir, convertBlockRootNoTxsRollupPrivateInputsToNoir, convertBlockRootRollupPrivateInputsToNoir, convertBlockRootSingleTxRollupPrivateInputsToNoir, convertCheckpointMergeRollupPrivateInputsToNoir, convertCheckpointPaddingRollupPrivateInputsToNoir, convertCheckpointRootRollupPrivateInputsToNoir, convertCheckpointRootSingleBlockRollupPrivateInputsToNoir, convertInboxParityPrivateInputsToNoir, convertPrivateTxBaseRollupPrivateInputsToNoir, convertPublicChonkVerifierPrivateInputsToNoir, convertPublicTxBaseRollupPrivateInputsToNoir, convertRootRollupPrivateInputsToNoir, convertTxMergeRollupPrivateInputsToNoir, getServerCircuitArtifact, inboxParityArtifactForSize, mapBlockRollupPublicInputsFromNoir, mapCheckpointRollupPublicInputsFromNoir, mapParityPublicInputsFromNoir, mapPublicChonkVerifierPublicInputsFromNoir, mapRootRollupPublicInputsFromNoir, mapTxRollupPublicInputsFromNoir } from '@aztec-labs/noir-protocol-circuits-types/server';
|
|
@@ -644,7 +645,7 @@ _dec = trackSpan('BBNativeRollupProver.getInboxParityProof', {
|
|
|
644
645
|
}
|
|
645
646
|
} catch (error) {
|
|
646
647
|
// Preserve retryability of the underlying failure (e.g. a transient bb startup error).
|
|
647
|
-
const retry = error
|
|
648
|
+
const retry = isRetryableError(error);
|
|
648
649
|
throw new ProvingError(`Failed to generate proof for ${circuitType}: ${error}`, error, retry);
|
|
649
650
|
}
|
|
650
651
|
return {
|
|
@@ -761,7 +762,7 @@ _dec = trackSpan('BBNativeRollupProver.getInboxParityProof', {
|
|
|
761
762
|
}
|
|
762
763
|
} catch (error) {
|
|
763
764
|
// Preserve retryability of the underlying failure (e.g. a transient bb startup error).
|
|
764
|
-
const retry = error
|
|
765
|
+
const retry = isRetryableError(error);
|
|
765
766
|
throw new ProvingError(`Failed to verify proof for ${circuitType}: ${error}`, error, retry);
|
|
766
767
|
}
|
|
767
768
|
if (!verified) {
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { AvmStat } from '@aztec-foundation/bb.js';
|
|
2
|
+
import { type BBJsApi, BBJsFactory, type BBJsProofResult } from '../bb/bb_js_backend.js';
|
|
3
|
+
/** How a {@link FakeBBJsInstance} answers one `verifyChonkProof` call. */
|
|
4
|
+
export type FakeChonkVerifyOutcome = 'valid' | 'invalid' | 'bb-error' | 'die';
|
|
5
|
+
/**
|
|
6
|
+
* A {@link BBJsApi} double whose bb process can die.
|
|
7
|
+
*
|
|
8
|
+
* A pooled instance is created with respawn, so a death fails only the call that was in flight and
|
|
9
|
+
* the next call is served by a replacement process. The double behaves the same way: `die` rejects
|
|
10
|
+
* once, retryably, and leaves the instance usable. Only `verifyChonkProof` is implemented.
|
|
11
|
+
*/
|
|
12
|
+
export declare class FakeBBJsInstance implements BBJsApi {
|
|
13
|
+
private readonly outcomes;
|
|
14
|
+
destroyCount: number;
|
|
15
|
+
chonkVerifyCalls: number;
|
|
16
|
+
private destroyed;
|
|
17
|
+
/** @param outcomes - Answers to successive `verifyChonkProof` calls; `valid` once they run out. */
|
|
18
|
+
constructor(outcomes?: FakeChonkVerifyOutcome[]);
|
|
19
|
+
verifyChonkProof(): Promise<{
|
|
20
|
+
verified: boolean;
|
|
21
|
+
durationMs: number;
|
|
22
|
+
}>;
|
|
23
|
+
destroy(): Promise<void>;
|
|
24
|
+
generateProof(): Promise<BBJsProofResult>;
|
|
25
|
+
verifyProof(): Promise<{
|
|
26
|
+
verified: boolean;
|
|
27
|
+
durationMs: number;
|
|
28
|
+
}>;
|
|
29
|
+
computeGateCount(): Promise<{
|
|
30
|
+
circuitSize: number;
|
|
31
|
+
durationMs: number;
|
|
32
|
+
}>;
|
|
33
|
+
generateContract(): Promise<{
|
|
34
|
+
solidityCode: string;
|
|
35
|
+
durationMs: number;
|
|
36
|
+
}>;
|
|
37
|
+
generateAvmProof(): Promise<{
|
|
38
|
+
proof: Uint8Array[];
|
|
39
|
+
stats: AvmStat[];
|
|
40
|
+
durationMs: number;
|
|
41
|
+
}>;
|
|
42
|
+
verifyAvmProof(): Promise<{
|
|
43
|
+
verified: boolean;
|
|
44
|
+
durationMs: number;
|
|
45
|
+
}>;
|
|
46
|
+
checkAvmCircuit(): Promise<{
|
|
47
|
+
passed: boolean;
|
|
48
|
+
stats: AvmStat[];
|
|
49
|
+
durationMs: number;
|
|
50
|
+
}>;
|
|
51
|
+
}
|
|
52
|
+
/** A {@link BBJsFactory} that creates {@link FakeBBJsInstance}s instead of spawning bb. */
|
|
53
|
+
export declare class FakeBBJsFactory extends BBJsFactory {
|
|
54
|
+
/** Every instance created, in creation order. */
|
|
55
|
+
readonly created: FakeBBJsInstance[];
|
|
56
|
+
private readonly plan;
|
|
57
|
+
/** @param poolSize - Pooled instances to keep; when omitted, every borrow creates a fresh instance. */
|
|
58
|
+
constructor(poolSize?: number);
|
|
59
|
+
/**
|
|
60
|
+
* Scripts the next creation: an error makes that spawn fail, outcomes script the created instance's verifications.
|
|
61
|
+
* With `spawned`, the spawn completes only once it resolves.
|
|
62
|
+
*/
|
|
63
|
+
planNextInstance(next: FakeChonkVerifyOutcome[] | Error, spawned?: Promise<void>): void;
|
|
64
|
+
protected createInstance(): Promise<BBJsApi>;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZV9iYl9qcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvZmFrZV9iYl9qcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekYsMEVBQTBFO0FBQzFFLE1BQU0sTUFBTSxzQkFBc0IsR0FBRyxPQUFPLEdBQUcsU0FBUyxHQUFHLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFXOUU7Ozs7OztHQU1HO0FBQ0gscUJBQWEsZ0JBQWlCLFlBQVcsT0FBTztJQU1sQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7SUFMOUIsWUFBWSxTQUFLO0lBQ2pCLGdCQUFnQixTQUFLO0lBQzVCLE9BQU8sQ0FBQyxTQUFTLENBQVM7SUFFMUIsbUdBQW1HO0lBQ25HLFlBQTZCLFFBQVEsR0FBRSxzQkFBc0IsRUFBTyxFQUFJO0lBRWpFLGdCQUFnQixJQUFJLE9BQU8sQ0FBQztRQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7UUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQyxDQWU1RTtJQUVNLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBSTlCO0lBRU0sYUFBYSxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FFL0M7SUFFTSxXQUFXLElBQUksT0FBTyxDQUFDO1FBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUFDLFVBQVUsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLENBRXZFO0lBRU0sZ0JBQWdCLElBQUksT0FBTyxDQUFDO1FBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQUFDLFVBQVUsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLENBRTlFO0lBRU0sZ0JBQWdCLElBQUksT0FBTyxDQUFDO1FBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQztRQUFDLFVBQVUsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLENBRS9FO0lBRU0sZ0JBQWdCLElBQUksT0FBTyxDQUFDO1FBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQTtLQUFFLENBQUMsQ0FFaEc7SUFFTSxjQUFjLElBQUksT0FBTyxDQUFDO1FBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUFDLFVBQVUsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLENBRTFFO0lBRU0sZUFBZSxJQUFJLE9BQU8sQ0FBQztRQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7UUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQyxDQUUzRjtDQUNGO0FBVUQsMkZBQTJGO0FBQzNGLHFCQUFhLGVBQWdCLFNBQVEsV0FBVztJQUM5QyxpREFBaUQ7SUFDakQsU0FBZ0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQU07SUFDakQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQXNCO0lBRTNDLHVHQUF1RztJQUN2RyxZQUFZLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFFNUI7SUFFRDs7O09BR0c7SUFDSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FFN0Y7SUFFRCxVQUF5QixjQUFjLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQWExRDtDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake_bb_js.d.ts","sourceRoot":"","sources":["../../src/test/fake_bb_js.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,KAAK,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzF,0EAA0E;AAC1E,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;AAW9E;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,OAAO;IAMlC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL9B,YAAY,SAAK;IACjB,gBAAgB,SAAK;IAC5B,OAAO,CAAC,SAAS,CAAS;IAE1B,mGAAmG;IACnG,YAA6B,QAAQ,GAAE,sBAAsB,EAAO,EAAI;IAEjE,gBAAgB,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAe5E;IAEM,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAI9B;IAEM,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAE/C;IAEM,WAAW,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAEvE;IAEM,gBAAgB,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAE9E;IAEM,gBAAgB,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAE/E;IAEM,gBAAgB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAEhG;IAEM,cAAc,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAE1E;IAEM,eAAe,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAE3F;CACF;AAUD,2FAA2F;AAC3F,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,iDAAiD;IACjD,SAAgB,OAAO,EAAE,gBAAgB,EAAE,CAAM;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;IAE3C,uGAAuG;IACvG,YAAY,QAAQ,CAAC,EAAE,MAAM,EAE5B;IAED;;;OAGG;IACI,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAE7F;IAED,UAAyB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAa1D;CACF"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { BBJsFactory } from '../bb/bb_js_backend.js';
|
|
2
|
+
function notImplemented() {
|
|
3
|
+
return Promise.reject(new Error('Not implemented by FakeBBJsInstance'));
|
|
4
|
+
}
|
|
5
|
+
/** An error shaped like the one bb.js raises when the bb process died: retrying may help. */ function retryable(message) {
|
|
6
|
+
return Object.assign(new Error(message), {
|
|
7
|
+
retry: true
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A {@link BBJsApi} double whose bb process can die.
|
|
12
|
+
*
|
|
13
|
+
* A pooled instance is created with respawn, so a death fails only the call that was in flight and
|
|
14
|
+
* the next call is served by a replacement process. The double behaves the same way: `die` rejects
|
|
15
|
+
* once, retryably, and leaves the instance usable. Only `verifyChonkProof` is implemented.
|
|
16
|
+
*/ export class FakeBBJsInstance {
|
|
17
|
+
outcomes;
|
|
18
|
+
destroyCount;
|
|
19
|
+
chonkVerifyCalls;
|
|
20
|
+
destroyed;
|
|
21
|
+
/** @param outcomes - Answers to successive `verifyChonkProof` calls; `valid` once they run out. */ constructor(outcomes = []){
|
|
22
|
+
this.outcomes = outcomes;
|
|
23
|
+
this.destroyCount = 0;
|
|
24
|
+
this.chonkVerifyCalls = 0;
|
|
25
|
+
this.destroyed = false;
|
|
26
|
+
}
|
|
27
|
+
verifyChonkProof() {
|
|
28
|
+
this.chonkVerifyCalls++;
|
|
29
|
+
if (this.destroyed) {
|
|
30
|
+
return Promise.reject(new Error('Backend connection closed'));
|
|
31
|
+
}
|
|
32
|
+
switch(this.outcomes.shift() ?? 'valid'){
|
|
33
|
+
case 'valid':
|
|
34
|
+
return Promise.resolve({
|
|
35
|
+
verified: true,
|
|
36
|
+
durationMs: 1
|
|
37
|
+
});
|
|
38
|
+
case 'invalid':
|
|
39
|
+
return Promise.resolve({
|
|
40
|
+
verified: false,
|
|
41
|
+
durationMs: 1
|
|
42
|
+
});
|
|
43
|
+
case 'bb-error':
|
|
44
|
+
return Promise.reject(new Error('bb rejected the proof input'));
|
|
45
|
+
case 'die':
|
|
46
|
+
return Promise.reject(retryable('Socket connection ended unexpectedly'));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
destroy() {
|
|
50
|
+
this.destroyed = true;
|
|
51
|
+
this.destroyCount++;
|
|
52
|
+
return Promise.resolve();
|
|
53
|
+
}
|
|
54
|
+
generateProof() {
|
|
55
|
+
return notImplemented();
|
|
56
|
+
}
|
|
57
|
+
verifyProof() {
|
|
58
|
+
return notImplemented();
|
|
59
|
+
}
|
|
60
|
+
computeGateCount() {
|
|
61
|
+
return notImplemented();
|
|
62
|
+
}
|
|
63
|
+
generateContract() {
|
|
64
|
+
return notImplemented();
|
|
65
|
+
}
|
|
66
|
+
generateAvmProof() {
|
|
67
|
+
return notImplemented();
|
|
68
|
+
}
|
|
69
|
+
verifyAvmProof() {
|
|
70
|
+
return notImplemented();
|
|
71
|
+
}
|
|
72
|
+
checkAvmCircuit() {
|
|
73
|
+
return notImplemented();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** A {@link BBJsFactory} that creates {@link FakeBBJsInstance}s instead of spawning bb. */ export class FakeBBJsFactory extends BBJsFactory {
|
|
77
|
+
/** Every instance created, in creation order. */ created = [];
|
|
78
|
+
plan = [];
|
|
79
|
+
/** @param poolSize - Pooled instances to keep; when omitted, every borrow creates a fresh instance. */ constructor(poolSize){
|
|
80
|
+
super('/unused/bb', {
|
|
81
|
+
poolSize
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Scripts the next creation: an error makes that spawn fail, outcomes script the created instance's verifications.
|
|
86
|
+
* With `spawned`, the spawn completes only once it resolves.
|
|
87
|
+
*/ planNextInstance(next, spawned) {
|
|
88
|
+
this.plan.push({
|
|
89
|
+
next,
|
|
90
|
+
spawned
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
async createInstance() {
|
|
94
|
+
const { next, spawned } = this.plan.shift() ?? {
|
|
95
|
+
next: []
|
|
96
|
+
};
|
|
97
|
+
if (spawned) {
|
|
98
|
+
await spawned;
|
|
99
|
+
}
|
|
100
|
+
if (next instanceof Error) {
|
|
101
|
+
// BBJsInstance.create wraps a failed spawn as retryable; the double must too, or a test
|
|
102
|
+
// sees a permanent failure where production sees a transient one.
|
|
103
|
+
throw Object.assign(next, {
|
|
104
|
+
retry: true
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
const instance = new FakeBBJsInstance(next);
|
|
108
|
+
this.created.push(instance);
|
|
109
|
+
return instance;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -4,18 +4,29 @@ import type { ClientProtocolCircuitVerifier, IVCProofVerificationResult } from '
|
|
|
4
4
|
import type { Proof } from '@aztec-labs/stdlib/proofs';
|
|
5
5
|
import { Tx } from '@aztec-labs/stdlib/tx';
|
|
6
6
|
import type { VerificationKeyData } from '@aztec-labs/stdlib/vks';
|
|
7
|
+
import { BBJsFactory } from '../bb/bb_js_backend.js';
|
|
7
8
|
import type { BBConfig } from '../config.js';
|
|
9
|
+
/** Thrown when no live bb process could check a proof, so the proof was neither accepted nor rejected. */
|
|
10
|
+
export declare class ProofVerifierUnavailableError extends Error {
|
|
11
|
+
constructor(message: string, options?: ErrorOptions);
|
|
12
|
+
}
|
|
8
13
|
export declare class BBCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
9
14
|
private config;
|
|
10
15
|
private logger;
|
|
16
|
+
/** bb instances a Chonk verification tries, while each one's bb dies under it, before the verifier is unavailable. */
|
|
17
|
+
private static readonly MAX_CHONK_VERIFY_ATTEMPTS;
|
|
11
18
|
private bbJsFactory;
|
|
12
|
-
|
|
19
|
+
protected constructor(config: BBConfig, logger: Logger, bbJsFactory?: BBJsFactory);
|
|
13
20
|
stop(): Promise<void>;
|
|
14
21
|
static new(config: BBConfig, logger?: Logger): Promise<BBCircuitVerifier>;
|
|
15
22
|
getVerificationKeyData(circuit: ProtocolArtifact): VerificationKeyData;
|
|
16
23
|
/** Verify an UltraHonk proof via bb.js API (no temp files). */
|
|
17
24
|
verifyProofForCircuit(circuit: ServerProtocolArtifact, proof: Proof): Promise<void>;
|
|
18
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Verify a Chonk (IVC) proof from a transaction via bb.js API. Throws {@link ProofVerifierUnavailableError} when no
|
|
27
|
+
* live bb process could check the proof; any other failure returns `valid: false`.
|
|
28
|
+
*/
|
|
19
29
|
verifyProof(tx: Tx): Promise<IVCProofVerificationResult>;
|
|
30
|
+
private verifyChonkProofOnLiveInstance;
|
|
20
31
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfdmVyaWZpZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9iYl92ZXJpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sNEJBQTRCLENBQUM7QUFHdkUsT0FBTyxFQUVMLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0sZ0RBQWdELENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0SCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUdsRSxPQUFPLEVBQWdCLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUc3QywwR0FBMEc7QUFDMUcscUJBQWEsNkJBQThCLFNBQVEsS0FBSztJQUN0RCxZQUFZLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsWUFBWSxFQUdsRDtDQUNGO0FBRUQscUJBQWEsaUJBQWtCLFlBQVcsNkJBQTZCO0lBT25FLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLE1BQU07SUFQaEIsc0hBQXNIO0lBQ3RILE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFLO0lBRXRELE9BQU8sQ0FBQyxXQUFXLENBQWM7SUFFakMsU0FBUyxhQUNDLE1BQU0sRUFBRSxRQUFRLEVBQ2hCLE1BQU0sRUFBRSxNQUFNLEVBQ3RCLFdBQVcsQ0FBQyxFQUFFLFdBQVcsRUFnQjFCO0lBRU0sSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFM0I7SUFFRCxPQUFvQixHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQXFDLDhCQU1wRjtJQUVNLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FNNUU7SUFFRCwrREFBK0Q7SUFDbEQscUJBQXFCLENBQUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxLQUFLLGlCQTRCL0U7SUFFRDs7O09BR0c7SUFDVSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FzQ3BFO1lBU2EsOEJBQThCO0NBc0M3QyJ9
|