@aztec-labs/bb-prover 6.0.0-rc.1 → 6.0.0-rc.2

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.
@@ -55,8 +55,14 @@ export interface BBJsApi {
55
55
  export declare class BBJsInstance implements BBJsApi {
56
56
  private api;
57
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>;
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
- /** 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?;
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 from
171
- * the pool and returns to it on dispose.
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 currently held by an
177
- * in-flight pooled borrow are destroyed by their dispose callback when released.
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 initPool;
181
- private createInstance;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfanNfYmFja2VuZC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JiL2JiX2pzX2JhY2tlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFrRCxNQUFNLHlCQUF5QixDQUFDO0FBRXZHLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUtoRSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFvQmxELHlEQUF5RDtBQUN6RCxNQUFNLE1BQU0sZUFBZSxHQUFHO0lBQzVCLDJDQUEyQztJQUMzQyxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDMUIsa0RBQWtEO0lBQ2xELGlCQUFpQixFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ2hDLCtDQUErQztJQUMvQyxVQUFVLEVBQUUsTUFBTSxDQUFDO0NBQ3BCLENBQUM7QUFFRixxRkFBcUY7QUFDckYsTUFBTSxXQUFXLE9BQU87SUFDdEIsYUFBYSxDQUNYLFdBQVcsRUFBRSxNQUFNLEVBQ25CLFFBQVEsRUFBRSxVQUFVLEVBQ3BCLGVBQWUsRUFBRSxVQUFVLEVBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQ25CLE1BQU0sRUFBRSxlQUFlLEdBQ3RCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM1QixXQUFXLENBQ1QsV0FBVyxFQUFFLFVBQVUsRUFBRSxFQUN6QixlQUFlLEVBQUUsVUFBVSxFQUMzQixpQkFBaUIsRUFBRSxVQUFVLEVBQUUsRUFDL0IsTUFBTSxFQUFFLGVBQWUsR0FDdEIsT0FBTyxDQUFDO1FBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUFDLFVBQVUsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLENBQUM7SUFDdEQsZ0JBQWdCLENBQ2Qsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLEVBQ3BDLGVBQWUsRUFBRSxVQUFVLEdBQzFCLE9BQU8sQ0FBQztR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
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":"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"}
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;;;;;;OAMG;IACH,OAAa,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAiB9G;IAED;;;;;;;OAOG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,UAAU,EACpB,eAAe,EAAE,UAAU,EAC3B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,eAAe,CAAC,CAgB1B;IAED;;;;;;;OAOG;IACG,WAAW,CACf,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,CASpD;IAED;;;;;;OAMG;IACG,gBAAgB,CACpB,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,CAetD;IAED;;;;OAIG;IACG,gBAAgB,CAAC,eAAe,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAYzG;IAED;;;;;;OAMG;IACG,gBAAgB,CACpB,sBAAsB,EAAE,UAAU,EAAE,EACpC,eAAe,EAAE,UAAU,GAC1B,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAIpD;IAED,oDAAoD;IAC9C,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,CAIjH;IAED,4DAA4D;IACtD,cAAc,CAClB,KAAK,EAAE,UAAU,EAAE,EACnB,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAIpD;IAED,oDAAoD;IAC9C,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,CAI5G;IAED,gEAAgE;IAC1D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7B;CACF;AAED,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,WAAW;IAWpB,OAAO,CAAC,MAAM;IAVhB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAA4B;IACnD,OAAO,CAAC,SAAS,CAAS;IAE1B,YACU,MAAM,EAAE,MAAM,EACtB,OAAO,GAAE,kBAAuB,EAejC;IAED;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,GAAG,eAAe,CAAC,CAyBtD;IAED;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAqB7B;YAGa,OAAO;IAQrB,UAAgB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAIjD;YAGa,cAAc;IAQ5B;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;CAkBvB"}
@@ -45,11 +45,18 @@ import { ProvingError } from '@aztec-labs/stdlib/errors';
45
45
  constructor(api){
46
46
  this.api = api;
47
47
  }
48
- /** Creates a new Barretenberg instance connected to a fresh bb process. */ static async create(bbPath, logger, threads) {
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
- /** Available pooled instances when poolSize is set; otherwise undefined. */ pool;
237
- /** Lazily-resolved on first `getInstance()` call to prevent racing pool initialization. */ initPromise;
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.poolSize = options.poolSize;
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 (this.poolSize !== undefined && this.poolSize < 1) {
247
- throw new Error(`BBJsFactory poolSize must be >= 1, got ${this.poolSize}`);
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 from
253
- * the pool and returns to it on dispose.
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.poolSize === undefined) {
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
- if (!this.initPromise) {
264
- this.initPromise = this.initPool();
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
- await this.initPromise;
267
- const pool = this.pool;
268
- if (!pool) {
269
- throw new Error('BBJsFactory has been destroyed');
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
- const instance = await pool.get();
272
- if (!instance) {
273
- throw new Error('BBJsFactory was destroyed while waiting for an instance');
291
+ if (this.destroyed) {
292
+ await this.release(slot);
293
+ throw new Error('BBJsFactory has been destroyed');
274
294
  }
275
- return this.makeBorrowed(instance);
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 currently held by an
280
- * in-flight pooled borrow are destroyed by their dispose callback when released.
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
- const pool = this.pool;
287
- this.pool = undefined;
288
- if (!pool) {
306
+ if (!this.slots) {
289
307
  return;
290
308
  }
291
309
  const idle = [];
292
- while(pool.length() > 0){
293
- const item = pool.getImmediate();
294
- if (item) {
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
- pool.cancel();
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 initPool() {
307
- // Use allSettled so that if any createInstance() rejects we can destroy the rest instead of
308
- // leaking bb child processes whose creation succeeded.
309
- const results = await Promise.allSettled(Array.from({
310
- length: this.poolSize
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfcHJvdmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmVyL3NlcnZlci9iYl9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0IseUNBQXlDLEVBRXpDLHNCQUFzQixFQUV2QixNQUFNLHVCQUF1QixDQUFDO0FBSS9CLE9BQU8sRUFDTCxLQUFLLHNCQUFzQixFQXVCNUIsTUFBTSxpREFBaUQsQ0FBQztBQUl6RCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZGLE9BQU8sRUFDTCxLQUFLLDZCQUE2QixFQUNsQyxLQUFLLG1CQUFtQixFQUV6QixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUYsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQWdDLE1BQU0sMkJBQTJCLENBQUM7QUFDaEcsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qix1QkFBdUIsRUFDdkIsaUNBQWlDLEVBQ2pDLDRCQUE0QixFQUM1QixvQ0FBb0MsRUFDcEMsa0NBQWtDLEVBQ2xDLG9DQUFvQyxFQUNwQyw0QkFBNEIsRUFDNUIsaUNBQWlDLEVBQ2pDLDRDQUE0QyxFQUM1QyxLQUFLLGdDQUFnQyxFQUNyQyxnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQixLQUFLLHVCQUF1QixFQUM1QixLQUFLLHNCQUFzQixFQUMzQixLQUFLLDBCQUEwQixFQUMvQixLQUFLLG9CQUFvQixFQUMxQixNQUFNLDJCQUEyQixDQUFDO0FBR25DLE9BQU8sRUFBYyxLQUFLLGVBQWUsRUFBaUMsTUFBTSw4QkFBOEIsQ0FBQztBQU0vRyxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0s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
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":"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"}
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 instanceof ProvingError && error.retry;
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 instanceof ProvingError && error.retry;
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
- private constructor();
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
- /** Verify a Chonk (IVC) proof from a transaction via bb.js API. */
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfdmVyaWZpZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9iYl92ZXJpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sNEJBQTRCLENBQUM7QUFHdkUsT0FBTyxFQUVMLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0sZ0RBQWdELENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0SCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUlsRSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHN0MscUJBQWEsaUJBQWtCLFlBQVcsNkJBQTZCO0lBSW5FLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLE1BQU07SUFKaEIsT0FBTyxDQUFDLFdBQVcsQ0FBYztJQUVqQyxPQUFPLGVBV047SUFFTSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUUzQjtJQUVELE9BQW9CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBcUMsOEJBTXBGO0lBRU0sc0JBQXNCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixHQUFHLG1CQUFtQixDQU01RTtJQUVELCtEQUErRDtJQUNsRCxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLEtBQUssaUJBNEIvRTtJQUVELG1FQUFtRTtJQUN0RCxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0ErQnBFO0NBQ0YifQ==
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfdmVyaWZpZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9iYl92ZXJpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sNEJBQTRCLENBQUM7QUFHdkUsT0FBTyxFQUVMLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0sZ0RBQWdELENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0SCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUdsRSxPQUFPLEVBQWdCLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUc3QywwR0FBMEc7QUFDMUcscUJBQWEsNkJBQThCLFNBQVEsS0FBSztJQUN0RCxZQUFZLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsWUFBWSxFQUdsRDtDQUNGO0FBRUQscUJBQWEsaUJBQWtCLFlBQVcsNkJBQTZCO0lBT25FLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLE1BQU07SUFQaEIsc0hBQXNIO0lBQ3RILE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFLO0lBRXRELE9BQU8sQ0FBQyxXQUFXLENBQWM7SUFFakMsU0FBUyxhQUNDLE1BQU0sRUFBRSxRQUFRLEVBQ2hCLE1BQU0sRUFBRSxNQUFNLEVBQ3RCLFdBQVcsQ0FBQyxFQUFFLFdBQVcsRUFnQjFCO0lBRU0sSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFM0I7SUFFRCxPQUFvQixHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQXFDLDhCQU1wRjtJQUVNLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FNNUU7SUFFRCwrREFBK0Q7SUFDbEQscUJBQXFCLENBQUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxLQUFLLGlCQTRCL0U7SUFFRDs7O09BR0c7SUFDVSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FzQ3BFO1lBU2EsOEJBQThCO0NBc0M3QyJ9