@aztec/bb-prover 0.0.1-commit.343b43af6 → 0.0.1-commit.350e0a4d

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.
Files changed (62) hide show
  1. package/dest/avm_proving_tests/avm_proving_tester.d.ts +9 -5
  2. package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -1
  3. package/dest/avm_proving_tests/avm_proving_tester.js +151 -105
  4. package/dest/bb/bb_js_backend.d.ts +196 -0
  5. package/dest/bb/bb_js_backend.d.ts.map +1 -0
  6. package/dest/bb/bb_js_backend.js +379 -0
  7. package/dest/bb/bb_js_debug.d.ts +52 -0
  8. package/dest/bb/bb_js_debug.d.ts.map +1 -0
  9. package/dest/bb/bb_js_debug.js +176 -0
  10. package/dest/bb/file_names.d.ts +4 -0
  11. package/dest/bb/file_names.d.ts.map +1 -0
  12. package/dest/bb/file_names.js +5 -0
  13. package/dest/config.d.ts +17 -1
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/index.d.ts +3 -2
  16. package/dest/index.d.ts.map +1 -1
  17. package/dest/index.js +2 -1
  18. package/dest/prover/client/bb_private_kernel_prover.d.ts +21 -5
  19. package/dest/prover/client/bb_private_kernel_prover.d.ts.map +1 -1
  20. package/dest/prover/client/bb_private_kernel_prover.js +75 -13
  21. package/dest/prover/proof_utils.d.ts +11 -1
  22. package/dest/prover/proof_utils.d.ts.map +1 -1
  23. package/dest/prover/proof_utils.js +24 -1
  24. package/dest/prover/server/bb_prover.d.ts +6 -7
  25. package/dest/prover/server/bb_prover.d.ts.map +1 -1
  26. package/dest/prover/server/bb_prover.js +206 -79
  27. package/dest/test/test_circuit_prover.d.ts +3 -3
  28. package/dest/test/test_circuit_prover.d.ts.map +1 -1
  29. package/dest/test/test_circuit_prover.js +2 -2
  30. package/dest/verification_key/verification_key_data.js +1 -1
  31. package/dest/verifier/batch_chonk_verifier.d.ts +56 -0
  32. package/dest/verifier/batch_chonk_verifier.d.ts.map +1 -0
  33. package/dest/verifier/batch_chonk_verifier.js +384 -0
  34. package/dest/verifier/bb_verifier.d.ts +4 -1
  35. package/dest/verifier/bb_verifier.d.ts.map +1 -1
  36. package/dest/verifier/bb_verifier.js +134 -45
  37. package/dest/verifier/index.d.ts +2 -1
  38. package/dest/verifier/index.d.ts.map +1 -1
  39. package/dest/verifier/index.js +1 -0
  40. package/dest/verifier/queued_chonk_verifier.d.ts +2 -3
  41. package/dest/verifier/queued_chonk_verifier.d.ts.map +1 -1
  42. package/dest/verifier/queued_chonk_verifier.js +6 -5
  43. package/package.json +19 -17
  44. package/src/avm_proving_tests/avm_proving_tester.ts +50 -127
  45. package/src/bb/bb_js_backend.ts +435 -0
  46. package/src/bb/bb_js_debug.ts +227 -0
  47. package/src/bb/file_names.ts +6 -0
  48. package/src/config.ts +16 -0
  49. package/src/index.ts +2 -1
  50. package/src/prover/client/bb_private_kernel_prover.ts +240 -20
  51. package/src/prover/proof_utils.ts +41 -1
  52. package/src/prover/server/bb_prover.ts +126 -141
  53. package/src/test/test_circuit_prover.ts +3 -5
  54. package/src/verification_key/verification_key_data.ts +1 -1
  55. package/src/verifier/batch_chonk_verifier.ts +415 -0
  56. package/src/verifier/bb_verifier.ts +66 -76
  57. package/src/verifier/index.ts +1 -0
  58. package/src/verifier/queued_chonk_verifier.ts +6 -7
  59. package/dest/bb/execute.d.ts +0 -108
  60. package/dest/bb/execute.d.ts.map +0 -1
  61. package/dest/bb/execute.js +0 -652
  62. package/src/bb/execute.ts +0 -687
@@ -1,15 +1,14 @@
1
1
  import type { ClientProtocolCircuitVerifier, IVCProofVerificationResult } from '@aztec/stdlib/interfaces/server';
2
2
  import type { Tx } from '@aztec/stdlib/tx';
3
3
  import { type TelemetryClient } from '@aztec/telemetry-client';
4
- import type { BBConfig } from '../config.js';
5
4
  export declare class QueuedIVCVerifier implements ClientProtocolCircuitVerifier {
6
5
  private verifier;
7
6
  private telemetry;
8
7
  private logger;
9
8
  private queue;
10
9
  private metrics;
11
- constructor(config: BBConfig, verifier: ClientProtocolCircuitVerifier, telemetry?: TelemetryClient, logger?: import("@aztec/foundation/log").Logger);
10
+ constructor(verifier: ClientProtocolCircuitVerifier, concurrency: number, telemetry?: TelemetryClient, logger?: import("@aztec/foundation/log").Logger);
12
11
  verifyProof(tx: Tx): Promise<IVCProofVerificationResult>;
13
12
  stop(): Promise<void>;
14
13
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWVkX2Nob25rX3ZlcmlmaWVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyaWZpZXIvcXVldWVkX2Nob25rX3ZlcmlmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakgsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQU1MLEtBQUssZUFBZSxFQUlyQixNQUFNLHlCQUF5QixDQUFDO0FBSWpDLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWlFN0MscUJBQWEsaUJBQWtCLFlBQVcsNkJBQTZCO0lBTW5FLE9BQU8sQ0FBQyxRQUFRO0lBQ2hCLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxNQUFNO0lBUGhCLE9BQU8sQ0FBQyxLQUFLLENBQWM7SUFDM0IsT0FBTyxDQUFDLE9BQU8sQ0FBcUI7SUFFcEMsWUFDRSxNQUFNLEVBQUUsUUFBUSxFQUNSLFFBQVEsRUFBRSw2QkFBNkIsRUFDdkMsU0FBUyxHQUFFLGVBQXNDLEVBQ2pELE1BQU0seUNBQWtELEVBTWpFO0lBRVksV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBSXBFO0lBRUQsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFcEI7Q0FDRiJ9
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWVkX2Nob25rX3ZlcmlmaWVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyaWZpZXIvcXVldWVkX2Nob25rX3ZlcmlmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakgsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQU1MLEtBQUssZUFBZSxFQUlyQixNQUFNLHlCQUF5QixDQUFDO0FBbUVqQyxxQkFBYSxpQkFBa0IsWUFBVyw2QkFBNkI7SUFLbkUsT0FBTyxDQUFDLFFBQVE7SUFFaEIsT0FBTyxDQUFDLFNBQVM7SUFDakIsT0FBTyxDQUFDLE1BQU07SUFQaEIsT0FBTyxDQUFDLEtBQUssQ0FBYztJQUMzQixPQUFPLENBQUMsT0FBTyxDQUFxQjtJQUVwQyxZQUNVLFFBQVEsRUFBRSw2QkFBNkIsRUFDL0MsV0FBVyxFQUFFLE1BQU0sRUFDWCxTQUFTLEdBQUUsZUFBc0MsRUFDakQsTUFBTSx5Q0FBa0QsRUFNakU7SUFFWSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FJcEU7SUFFSyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUcxQjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"queued_chonk_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/queued_chonk_verifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAML,KAAK,eAAe,EAIrB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAiE7C,qBAAa,iBAAkB,YAAW,6BAA6B;IAMnE,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,OAAO,CAAqB;IAEpC,YACE,MAAM,EAAE,QAAQ,EACR,QAAQ,EAAE,6BAA6B,EACvC,SAAS,GAAE,eAAsC,EACjD,MAAM,yCAAkD,EAMjE;IAEY,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAIpE;IAED,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpB;CACF"}
1
+ {"version":3,"file":"queued_chonk_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/queued_chonk_verifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAML,KAAK,eAAe,EAIrB,MAAM,yBAAyB,CAAC;AAmEjC,qBAAa,iBAAkB,YAAW,6BAA6B;IAKnE,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,OAAO,CAAqB;IAEpC,YACU,QAAQ,EAAE,6BAA6B,EAC/C,WAAW,EAAE,MAAM,EACX,SAAS,GAAE,eAAsC,EACjD,MAAM,yCAAkD,EAMjE;IAEY,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAIpE;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAG1B;CACF"}
@@ -81,21 +81,22 @@ export class QueuedIVCVerifier {
81
81
  logger;
82
82
  queue;
83
83
  metrics;
84
- constructor(config, verifier, telemetry = getTelemetryClient(), logger = createLogger('bb-prover:queued_chonk_verifier')){
84
+ constructor(verifier, concurrency, telemetry = getTelemetryClient(), logger = createLogger('bb-prover:queued_chonk_verifier')){
85
85
  this.verifier = verifier;
86
86
  this.telemetry = telemetry;
87
87
  this.logger = logger;
88
88
  this.metrics = new IVCVerifierMetrics(this.telemetry, 'QueuedIVCVerifier');
89
89
  this.queue = new SerialQueue();
90
- this.logger.info(`Starting QueuedIVCVerifier with ${config.numConcurrentIVCVerifiers} concurrent verifiers`);
91
- this.queue.start(config.numConcurrentIVCVerifiers);
90
+ this.logger.info(`Starting QueuedIVCVerifier with ${concurrency} concurrent verifiers`);
91
+ this.queue.start(concurrency);
92
92
  }
93
93
  async verifyProof(tx) {
94
94
  const result = await this.queue.put(()=>this.verifier.verifyProof(tx));
95
95
  this.metrics.recordIVCVerification(result);
96
96
  return result;
97
97
  }
98
- stop() {
99
- return this.queue.end();
98
+ async stop() {
99
+ await this.queue.end();
100
+ await this.verifier.stop();
100
101
  }
101
102
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/bb-prover",
3
- "version": "0.0.1-commit.343b43af6",
3
+ "version": "0.0.1-commit.350e0a4d",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -9,7 +9,8 @@
9
9
  "./client": "./dest/prover/client/bb_private_kernel_prover.js",
10
10
  "./verifier": "./dest/verifier/index.js",
11
11
  "./test": "./dest/test/index.js",
12
- "./config": "./dest/config.js"
12
+ "./config": "./dest/config.js",
13
+ "./debug": "./dest/bb/bb_js_debug.js"
13
14
  },
14
15
  "bin": {
15
16
  "bb-cli": "./dest/bb/index.js"
@@ -69,27 +70,28 @@
69
70
  ]
70
71
  },
71
72
  "dependencies": {
72
- "@aztec/bb.js": "0.0.1-commit.343b43af6",
73
- "@aztec/constants": "0.0.1-commit.343b43af6",
74
- "@aztec/foundation": "0.0.1-commit.343b43af6",
75
- "@aztec/noir-noirc_abi": "0.0.1-commit.343b43af6",
76
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.343b43af6",
77
- "@aztec/noir-types": "0.0.1-commit.343b43af6",
78
- "@aztec/simulator": "0.0.1-commit.343b43af6",
79
- "@aztec/stdlib": "0.0.1-commit.343b43af6",
80
- "@aztec/telemetry-client": "0.0.1-commit.343b43af6",
81
- "@aztec/world-state": "0.0.1-commit.343b43af6",
73
+ "@aztec/bb.js": "0.0.1-commit.350e0a4d",
74
+ "@aztec/constants": "0.0.1-commit.350e0a4d",
75
+ "@aztec/foundation": "0.0.1-commit.350e0a4d",
76
+ "@aztec/noir-noirc_abi": "0.0.1-commit.350e0a4d",
77
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.350e0a4d",
78
+ "@aztec/noir-types": "0.0.1-commit.350e0a4d",
79
+ "@aztec/simulator": "0.0.1-commit.350e0a4d",
80
+ "@aztec/stdlib": "0.0.1-commit.350e0a4d",
81
+ "@aztec/telemetry-client": "0.0.1-commit.350e0a4d",
82
+ "@aztec/world-state": "0.0.1-commit.350e0a4d",
82
83
  "commander": "^12.1.0",
84
+ "msgpackr": "^1.11.2",
83
85
  "pako": "^2.1.0",
84
86
  "source-map-support": "^0.5.21",
85
87
  "tslib": "^2.4.0"
86
88
  },
87
89
  "devDependencies": {
88
- "@aztec/ethereum": "0.0.1-commit.343b43af6",
89
- "@aztec/kv-store": "0.0.1-commit.343b43af6",
90
- "@aztec/noir-contracts.js": "0.0.1-commit.343b43af6",
91
- "@aztec/noir-test-contracts.js": "0.0.1-commit.343b43af6",
92
- "@aztec/protocol-contracts": "0.0.1-commit.343b43af6",
90
+ "@aztec/ethereum": "0.0.1-commit.350e0a4d",
91
+ "@aztec/kv-store": "0.0.1-commit.350e0a4d",
92
+ "@aztec/noir-contracts.js": "0.0.1-commit.350e0a4d",
93
+ "@aztec/noir-test-contracts.js": "0.0.1-commit.350e0a4d",
94
+ "@aztec/protocol-contracts": "0.0.1-commit.350e0a4d",
93
95
  "@jest/globals": "^30.0.0",
94
96
  "@types/jest": "^30.0.0",
95
97
  "@types/node": "^22.15.17",
@@ -1,4 +1,5 @@
1
- import type { LogFn, LogLevel, Logger } from '@aztec/foundation/log';
1
+ import type { AvmStat } from '@aztec/bb.js';
2
+ import { createLogger } from '@aztec/foundation/log';
2
3
  import { Timer } from '@aztec/foundation/timer';
3
4
  import {
4
5
  PublicTxSimulationTester,
@@ -15,77 +16,12 @@ import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server'
15
16
  import type { GlobalVariables } from '@aztec/stdlib/tx';
16
17
  import { NativeWorldStateService } from '@aztec/world-state';
17
18
 
18
- import fs from 'node:fs/promises';
19
- import { tmpdir } from 'node:os';
20
19
  import path from 'path';
21
20
 
22
- import { type BBResult, type BBSuccess, BB_RESULT, generateAvmProof, verifyAvmProof } from '../bb/execute.js';
21
+ import { BBJsFactory } from '../bb/bb_js_backend.js';
23
22
 
24
23
  const BB_PATH = path.resolve('../../barretenberg/cpp/build/bin/bb-avm');
25
24
 
26
- // An InterceptingLogger that records all log messages and forwards them to a wrapped logger.
27
- class InterceptingLogger implements Logger {
28
- public readonly logs: string[] = [];
29
- public level: LogLevel;
30
- public module: string;
31
-
32
- private logger: Logger;
33
-
34
- constructor(logger: Logger) {
35
- this.logger = logger;
36
- this.level = logger.level;
37
- this.module = logger.module;
38
- }
39
-
40
- isLevelEnabled(level: LogLevel): boolean {
41
- return this.logger.isLevelEnabled(level);
42
- }
43
-
44
- createChild(_childModule: string): Logger {
45
- throw new Error('Not implemented');
46
- }
47
-
48
- getBindings() {
49
- return this.logger.getBindings();
50
- }
51
-
52
- private intercept(level: LogLevel, msg: string, ...args: any[]) {
53
- this.logs.push(...msg.split('\n'));
54
- // Forward to the wrapped logger
55
- (this.logger[level] as LogFn)(msg, ...args);
56
- }
57
-
58
- // Log methods for each level
59
- silent(msg: string, ...args: any[]) {
60
- this.intercept('silent', msg, ...args);
61
- }
62
- fatal(msg: string, ...args: any[]) {
63
- this.intercept('fatal', msg, ...args);
64
- }
65
- warn(msg: string, ...args: any[]) {
66
- this.intercept('warn', msg, ...args);
67
- }
68
- info(msg: string, ...args: any[]) {
69
- this.intercept('info', msg, ...args);
70
- }
71
- verbose(msg: string, ...args: any[]) {
72
- this.intercept('verbose', msg, ...args);
73
- }
74
- debug(msg: string, ...args: any[]) {
75
- this.intercept('debug', msg, ...args);
76
- }
77
- trace(msg: string, ...args: any[]) {
78
- this.intercept('trace', msg, ...args);
79
- }
80
-
81
- // Error log function can be string or Error
82
- error(err: Error | string, ...args: any[]) {
83
- const msg = typeof err === 'string' ? err : err.message;
84
- this.logs.push(msg);
85
- this.logger.error(msg, err, ...args);
86
- }
87
- }
88
-
89
25
  // Config with collectHints enabled for proving tests
90
26
  const provingConfig: PublicSimulatorConfig = PublicSimulatorConfig.from({
91
27
  skipFeeEnforcement: false,
@@ -97,7 +33,10 @@ const provingConfig: PublicSimulatorConfig = PublicSimulatorConfig.from({
97
33
  });
98
34
 
99
35
  export class AvmProvingTester extends PublicTxSimulationTester {
100
- private bbWorkingDirectory: string = '';
36
+ private readonly bbJsFactory = new BBJsFactory(BB_PATH, {
37
+ debugDir: process.env.BB_DEBUG_OUTPUT_DIR,
38
+ logger: createLogger('bb-prover:avm-proving-tester'),
39
+ });
101
40
 
102
41
  constructor(
103
42
  private checkCircuitOnly: boolean,
@@ -121,53 +60,57 @@ export class AvmProvingTester extends PublicTxSimulationTester {
121
60
  return new AvmProvingTester(checkCircuitOnly, contractDataSource, merkleTrees, globals, metrics);
122
61
  }
123
62
 
124
- async prove(avmCircuitInputs: AvmCircuitInputs, txLabel: string = 'unlabeledTx'): Promise<BBResult> {
125
- // We use a new working directory for each proof.
126
- this.bbWorkingDirectory = await fs.mkdtemp(path.join(tmpdir(), 'bb-'));
63
+ /**
64
+ * Generate an AVM proof (or run check-circuit if configured). Records per-stage timings in the test metrics.
65
+ * Returns the in-memory proof fields on success; throws via jest expect() on failure.
66
+ */
67
+ async prove(avmCircuitInputs: AvmCircuitInputs, txLabel: string = 'unlabeledTx'): Promise<Uint8Array[]> {
68
+ const inputsBuffer = avmCircuitInputs.serializeWithMessagePack();
127
69
 
128
- const interceptingLogger = new InterceptingLogger(this.logger);
70
+ if (this.checkCircuitOnly) {
71
+ await using instance = await this.bbJsFactory.getInstance();
72
+ const { passed, stats } = await instance.checkAvmCircuit(inputsBuffer);
73
+ this.recordProverMetrics(stats, txLabel);
74
+ expect(passed).toBe(true);
75
+ return [];
76
+ }
129
77
 
130
- // Then we prove.
131
- const proofRes = await generateAvmProof(
132
- BB_PATH,
133
- this.bbWorkingDirectory,
134
- avmCircuitInputs,
135
- interceptingLogger,
136
- this.checkCircuitOnly,
137
- );
138
- if (proofRes.status === BB_RESULT.FAILURE) {
139
- this.logger.error(`Proof generation failed: ${proofRes.reason}`);
78
+ await using instance = await this.bbJsFactory.getInstance();
79
+ const { proof, stats } = await instance.generateAvmProof(inputsBuffer);
80
+ this.recordProverMetrics(stats, txLabel);
81
+ return proof;
82
+ }
83
+
84
+ async verify(proof: Uint8Array[], publicInputs: AvmCircuitPublicInputs): Promise<void> {
85
+ if (this.checkCircuitOnly) {
86
+ // Check-circuit did not generate a proof; nothing to verify.
87
+ return;
140
88
  }
141
- expect(proofRes.status).toEqual(BB_RESULT.SUCCESS);
89
+ const piBuffer = publicInputs.serializeWithMessagePack();
90
+ await using instance = await this.bbJsFactory.getInstance();
91
+ const { verified } = await instance.verifyAvmProof(proof, piBuffer);
92
+ expect(verified).toBe(true);
93
+ }
142
94
 
143
- // Parse the logs into a structured format.
144
- const logs = interceptingLogger.logs;
145
- // const traceSizes: { name: string; size: number }[] = [];
146
- // logs.forEach(log => {
147
- // const match = log.match(/\b(\w+): (\d+) \(~2/);
148
- // if (match) {
149
- // traceSizes.push({
150
- // name: match[1],
151
- // size: parseInt(match[2]),
152
- // });
153
- // }
154
- // });
155
- const times: { [key: string]: number } = {};
156
- logs.forEach(log => {
157
- const match = log.match(/\b([\w/]+)_ms: (\d+)/);
158
- if (match) {
159
- times[match[1]] = parseInt(match[2]);
160
- }
161
- });
95
+ public async proveVerify(avmCircuitInputs: AvmCircuitInputs, txLabel: string = 'unlabeledTx') {
96
+ const proof = await this.prove(avmCircuitInputs, txLabel);
97
+ await this.verify(proof, avmCircuitInputs.publicInputs);
98
+ }
162
99
 
163
- // Throw if logs did not contain any times.
100
+ private recordProverMetrics(stats: AvmStat[], txLabel: string) {
101
+ // Build a lookup keyed on the stage name with the `_ms` suffix stripped, matching the legacy
102
+ // stdout-scraped shape. bb::avm2::Stats::time() stores keys with `_ms` appended.
103
+ const times: { [key: string]: number } = {};
104
+ for (const { name, valueMs } of stats) {
105
+ const key = name.endsWith('_ms') ? name.slice(0, -'_ms'.length) : name;
106
+ times[key] = valueMs;
107
+ }
164
108
  if (Object.keys(times).length === 0) {
165
- throw new Error('AVM stdout did not contain any proving times in the stats!');
109
+ throw new Error('AVM response did not contain any proving-stage timings!');
166
110
  }
167
-
168
111
  // Hack to make labels match.
169
112
  const txLabelWithCount = `${txLabel}/${this.txCount - 1}`;
170
- // I need to cast because TS doesnt realize metrics is protected not private.
113
+ // Cast because TS doesn't realize `metrics` is protected, not private on the parent class.
171
114
  (this as any).metrics?.recordProverMetrics(txLabelWithCount, {
172
115
  proverSimulationStepMs: times['simulation/all'],
173
116
  proverProvingStepMs: times['proving/all'],
@@ -180,26 +123,6 @@ export class AvmProvingTester extends PublicTxSimulationTester {
180
123
  provingLogDerivativeInverseCommitmentsMs: times['prove/log_derivative_inverse_commitments_round'],
181
124
  provingWireCommitmentsMs: times['prove/wire_commitments_round'],
182
125
  });
183
-
184
- return proofRes as BBSuccess;
185
- }
186
-
187
- async verify(proofRes: BBSuccess, publicInputs: AvmCircuitPublicInputs): Promise<BBResult> {
188
- if (this.checkCircuitOnly) {
189
- // Skip verification if we are only checking the circuit.
190
- // Check-circuit does not generate a proof to verify.
191
- return proofRes;
192
- }
193
-
194
- return await verifyAvmProof(BB_PATH, this.bbWorkingDirectory, proofRes.proofPath!, publicInputs, this.logger);
195
- }
196
-
197
- public async proveVerify(avmCircuitInputs: AvmCircuitInputs, txLabel: string = 'unlabeledTx') {
198
- const provingRes = await this.prove(avmCircuitInputs, txLabel);
199
- expect(provingRes.status).toEqual(BB_RESULT.SUCCESS);
200
-
201
- const verificationRes = await this.verify(provingRes as BBSuccess, avmCircuitInputs.publicInputs);
202
- expect(verificationRes.status).toBe(BB_RESULT.SUCCESS);
203
126
  }
204
127
 
205
128
  public async simProveVerify(
@@ -273,7 +196,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
273
196
  gasLimits?: Gas,
274
197
  ) {
275
198
  await this.simProveVerify(
276
- /*sender=*/ AztecAddress.fromNumber(42),
199
+ /*sender=*/ AztecAddress.fromNumberUnsafe(42),
277
200
  /*setupCalls=*/ [],
278
201
  [appCall],
279
202
  undefined,