@aztec/bb-prover 0.0.1-commit.e558bd1c → 0.0.1-commit.e57c76e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/avm_proving_tests/avm_proving_tester.d.ts +13 -8
- package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -1
- package/dest/avm_proving_tests/avm_proving_tester.js +152 -110
- package/dest/bb/bb_js_backend.d.ts +196 -0
- package/dest/bb/bb_js_backend.d.ts.map +1 -0
- package/dest/bb/bb_js_backend.js +379 -0
- package/dest/bb/bb_js_debug.d.ts +52 -0
- package/dest/bb/bb_js_debug.d.ts.map +1 -0
- package/dest/bb/bb_js_debug.js +176 -0
- package/dest/bb/file_names.d.ts +4 -0
- package/dest/bb/file_names.d.ts.map +1 -0
- package/dest/bb/file_names.js +5 -0
- package/dest/config.d.ts +17 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/index.d.ts +3 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -1
- package/dest/instrumentation.d.ts +1 -1
- package/dest/instrumentation.d.ts.map +1 -1
- package/dest/instrumentation.js +12 -4
- package/dest/prover/client/bb_private_kernel_prover.d.ts +10 -2
- package/dest/prover/client/bb_private_kernel_prover.d.ts.map +1 -1
- package/dest/prover/client/bb_private_kernel_prover.js +39 -5
- package/dest/prover/proof_utils.d.ts +11 -1
- package/dest/prover/proof_utils.d.ts.map +1 -1
- package/dest/prover/proof_utils.js +24 -1
- package/dest/prover/server/bb_prover.d.ts +4 -5
- package/dest/prover/server/bb_prover.d.ts.map +1 -1
- package/dest/prover/server/bb_prover.js +207 -78
- package/dest/verification_key/verification_key_data.js +1 -1
- package/dest/verifier/batch_chonk_verifier.d.ts +56 -0
- package/dest/verifier/batch_chonk_verifier.d.ts.map +1 -0
- package/dest/verifier/batch_chonk_verifier.js +384 -0
- package/dest/verifier/bb_verifier.d.ts +4 -1
- package/dest/verifier/bb_verifier.d.ts.map +1 -1
- package/dest/verifier/bb_verifier.js +134 -45
- package/dest/verifier/index.d.ts +2 -1
- package/dest/verifier/index.d.ts.map +1 -1
- package/dest/verifier/index.js +1 -0
- package/dest/verifier/queued_chonk_verifier.d.ts +2 -3
- package/dest/verifier/queued_chonk_verifier.d.ts.map +1 -1
- package/dest/verifier/queued_chonk_verifier.js +6 -5
- package/package.json +19 -17
- package/src/avm_proving_tests/avm_proving_tester.ts +53 -126
- package/src/bb/bb_js_backend.ts +435 -0
- package/src/bb/bb_js_debug.ts +227 -0
- package/src/bb/file_names.ts +6 -0
- package/src/config.ts +16 -0
- package/src/index.ts +2 -1
- package/src/instrumentation.ts +12 -4
- package/src/prover/client/bb_private_kernel_prover.ts +116 -4
- package/src/prover/proof_utils.ts +41 -1
- package/src/prover/server/bb_prover.ts +132 -137
- package/src/verification_key/verification_key_data.ts +1 -1
- package/src/verifier/batch_chonk_verifier.ts +415 -0
- package/src/verifier/bb_verifier.ts +66 -76
- package/src/verifier/index.ts +1 -0
- package/src/verifier/queued_chonk_verifier.ts +6 -7
- package/dest/bb/execute.d.ts +0 -107
- package/dest/bb/execute.d.ts.map +0 -1
- package/dest/bb/execute.js +0 -647
- package/src/bb/execute.ts +0 -678
|
@@ -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(
|
|
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,
|
|
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;
|
|
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(
|
|
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 ${
|
|
91
|
-
this.queue.start(
|
|
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
|
-
|
|
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.
|
|
3
|
+
"version": "0.0.1-commit.e57c76e",
|
|
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.
|
|
73
|
-
"@aztec/constants": "0.0.1-commit.
|
|
74
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
75
|
-
"@aztec/noir-noirc_abi": "0.0.1-commit.
|
|
76
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
77
|
-
"@aztec/noir-types": "0.0.1-commit.
|
|
78
|
-
"@aztec/simulator": "0.0.1-commit.
|
|
79
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
80
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
81
|
-
"@aztec/world-state": "0.0.1-commit.
|
|
73
|
+
"@aztec/bb.js": "0.0.1-commit.e57c76e",
|
|
74
|
+
"@aztec/constants": "0.0.1-commit.e57c76e",
|
|
75
|
+
"@aztec/foundation": "0.0.1-commit.e57c76e",
|
|
76
|
+
"@aztec/noir-noirc_abi": "0.0.1-commit.e57c76e",
|
|
77
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.e57c76e",
|
|
78
|
+
"@aztec/noir-types": "0.0.1-commit.e57c76e",
|
|
79
|
+
"@aztec/simulator": "0.0.1-commit.e57c76e",
|
|
80
|
+
"@aztec/stdlib": "0.0.1-commit.e57c76e",
|
|
81
|
+
"@aztec/telemetry-client": "0.0.1-commit.e57c76e",
|
|
82
|
+
"@aztec/world-state": "0.0.1-commit.e57c76e",
|
|
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.
|
|
89
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
90
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
91
|
-
"@aztec/noir-test-contracts.js": "0.0.1-commit.
|
|
92
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
90
|
+
"@aztec/ethereum": "0.0.1-commit.e57c76e",
|
|
91
|
+
"@aztec/kv-store": "0.0.1-commit.e57c76e",
|
|
92
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.e57c76e",
|
|
93
|
+
"@aztec/noir-test-contracts.js": "0.0.1-commit.e57c76e",
|
|
94
|
+
"@aztec/protocol-contracts": "0.0.1-commit.e57c76e",
|
|
93
95
|
"@jest/globals": "^30.0.0",
|
|
94
96
|
"@types/jest": "^30.0.0",
|
|
95
97
|
"@types/node": "^22.15.17",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AvmStat } from '@aztec/bb.js';
|
|
2
2
|
import { Timer } from '@aztec/foundation/timer';
|
|
3
3
|
import {
|
|
4
4
|
PublicTxSimulationTester,
|
|
@@ -10,81 +10,17 @@ import {
|
|
|
10
10
|
import type { PublicTxResult } from '@aztec/simulator/server';
|
|
11
11
|
import { AvmCircuitInputs, AvmCircuitPublicInputs, PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
12
12
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
13
|
+
import type { Gas } from '@aztec/stdlib/gas';
|
|
13
14
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
14
15
|
import type { GlobalVariables } from '@aztec/stdlib/tx';
|
|
15
16
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
16
17
|
|
|
17
|
-
import fs from 'node:fs/promises';
|
|
18
|
-
import { tmpdir } from 'node:os';
|
|
19
18
|
import path from 'path';
|
|
20
19
|
|
|
21
|
-
import {
|
|
20
|
+
import { BBJsFactory } from '../bb/bb_js_backend.js';
|
|
22
21
|
|
|
23
22
|
const BB_PATH = path.resolve('../../barretenberg/cpp/build/bin/bb-avm');
|
|
24
23
|
|
|
25
|
-
// An InterceptingLogger that records all log messages and forwards them to a wrapped logger.
|
|
26
|
-
class InterceptingLogger implements Logger {
|
|
27
|
-
public readonly logs: string[] = [];
|
|
28
|
-
public level: LogLevel;
|
|
29
|
-
public module: string;
|
|
30
|
-
|
|
31
|
-
private logger: Logger;
|
|
32
|
-
|
|
33
|
-
constructor(logger: Logger) {
|
|
34
|
-
this.logger = logger;
|
|
35
|
-
this.level = logger.level;
|
|
36
|
-
this.module = logger.module;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
isLevelEnabled(level: LogLevel): boolean {
|
|
40
|
-
return this.logger.isLevelEnabled(level);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
createChild(_childModule: string): Logger {
|
|
44
|
-
throw new Error('Not implemented');
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
getBindings() {
|
|
48
|
-
return this.logger.getBindings();
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
private intercept(level: LogLevel, msg: string, ...args: any[]) {
|
|
52
|
-
this.logs.push(...msg.split('\n'));
|
|
53
|
-
// Forward to the wrapped logger
|
|
54
|
-
(this.logger[level] as LogFn)(msg, ...args);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Log methods for each level
|
|
58
|
-
silent(msg: string, ...args: any[]) {
|
|
59
|
-
this.intercept('silent', msg, ...args);
|
|
60
|
-
}
|
|
61
|
-
fatal(msg: string, ...args: any[]) {
|
|
62
|
-
this.intercept('fatal', msg, ...args);
|
|
63
|
-
}
|
|
64
|
-
warn(msg: string, ...args: any[]) {
|
|
65
|
-
this.intercept('warn', msg, ...args);
|
|
66
|
-
}
|
|
67
|
-
info(msg: string, ...args: any[]) {
|
|
68
|
-
this.intercept('info', msg, ...args);
|
|
69
|
-
}
|
|
70
|
-
verbose(msg: string, ...args: any[]) {
|
|
71
|
-
this.intercept('verbose', msg, ...args);
|
|
72
|
-
}
|
|
73
|
-
debug(msg: string, ...args: any[]) {
|
|
74
|
-
this.intercept('debug', msg, ...args);
|
|
75
|
-
}
|
|
76
|
-
trace(msg: string, ...args: any[]) {
|
|
77
|
-
this.intercept('trace', msg, ...args);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Error log function can be string or Error
|
|
81
|
-
error(err: Error | string, ...args: any[]) {
|
|
82
|
-
const msg = typeof err === 'string' ? err : err.message;
|
|
83
|
-
this.logs.push(msg);
|
|
84
|
-
this.logger.error(msg, err, ...args);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
24
|
// Config with collectHints enabled for proving tests
|
|
89
25
|
const provingConfig: PublicSimulatorConfig = PublicSimulatorConfig.from({
|
|
90
26
|
skipFeeEnforcement: false,
|
|
@@ -96,7 +32,7 @@ const provingConfig: PublicSimulatorConfig = PublicSimulatorConfig.from({
|
|
|
96
32
|
});
|
|
97
33
|
|
|
98
34
|
export class AvmProvingTester extends PublicTxSimulationTester {
|
|
99
|
-
private
|
|
35
|
+
private readonly bbJsFactory = new BBJsFactory(BB_PATH);
|
|
100
36
|
|
|
101
37
|
constructor(
|
|
102
38
|
private checkCircuitOnly: boolean,
|
|
@@ -120,53 +56,57 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
120
56
|
return new AvmProvingTester(checkCircuitOnly, contractDataSource, merkleTrees, globals, metrics);
|
|
121
57
|
}
|
|
122
58
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Generate an AVM proof (or run check-circuit if configured). Records per-stage timings in the test metrics.
|
|
61
|
+
* Returns the in-memory proof fields on success; throws via jest expect() on failure.
|
|
62
|
+
*/
|
|
63
|
+
async prove(avmCircuitInputs: AvmCircuitInputs, txLabel: string = 'unlabeledTx'): Promise<Uint8Array[]> {
|
|
64
|
+
const inputsBuffer = avmCircuitInputs.serializeWithMessagePack();
|
|
126
65
|
|
|
127
|
-
|
|
66
|
+
if (this.checkCircuitOnly) {
|
|
67
|
+
await using instance = await this.bbJsFactory.getInstance();
|
|
68
|
+
const { passed, stats } = await instance.checkAvmCircuit(inputsBuffer);
|
|
69
|
+
this.recordProverMetrics(stats, txLabel);
|
|
70
|
+
expect(passed).toBe(true);
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
128
73
|
|
|
129
|
-
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
)
|
|
137
|
-
|
|
138
|
-
|
|
74
|
+
await using instance = await this.bbJsFactory.getInstance();
|
|
75
|
+
const { proof, stats } = await instance.generateAvmProof(inputsBuffer);
|
|
76
|
+
this.recordProverMetrics(stats, txLabel);
|
|
77
|
+
return proof;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async verify(proof: Uint8Array[], publicInputs: AvmCircuitPublicInputs): Promise<void> {
|
|
81
|
+
if (this.checkCircuitOnly) {
|
|
82
|
+
// Check-circuit did not generate a proof; nothing to verify.
|
|
83
|
+
return;
|
|
139
84
|
}
|
|
140
|
-
|
|
85
|
+
const piBuffer = publicInputs.serializeWithMessagePack();
|
|
86
|
+
await using instance = await this.bbJsFactory.getInstance();
|
|
87
|
+
const { verified } = await instance.verifyAvmProof(proof, piBuffer);
|
|
88
|
+
expect(verified).toBe(true);
|
|
89
|
+
}
|
|
141
90
|
|
|
142
|
-
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
// const match = log.match(/\b(\w+): (\d+) \(~2/);
|
|
147
|
-
// if (match) {
|
|
148
|
-
// traceSizes.push({
|
|
149
|
-
// name: match[1],
|
|
150
|
-
// size: parseInt(match[2]),
|
|
151
|
-
// });
|
|
152
|
-
// }
|
|
153
|
-
// });
|
|
154
|
-
const times: { [key: string]: number } = {};
|
|
155
|
-
logs.forEach(log => {
|
|
156
|
-
const match = log.match(/\b([\w/]+)_ms: (\d+)/);
|
|
157
|
-
if (match) {
|
|
158
|
-
times[match[1]] = parseInt(match[2]);
|
|
159
|
-
}
|
|
160
|
-
});
|
|
91
|
+
public async proveVerify(avmCircuitInputs: AvmCircuitInputs, txLabel: string = 'unlabeledTx') {
|
|
92
|
+
const proof = await this.prove(avmCircuitInputs, txLabel);
|
|
93
|
+
await this.verify(proof, avmCircuitInputs.publicInputs);
|
|
94
|
+
}
|
|
161
95
|
|
|
162
|
-
|
|
96
|
+
private recordProverMetrics(stats: AvmStat[], txLabel: string) {
|
|
97
|
+
// Build a lookup keyed on the stage name with the `_ms` suffix stripped, matching the legacy
|
|
98
|
+
// stdout-scraped shape. bb::avm2::Stats::time() stores keys with `_ms` appended.
|
|
99
|
+
const times: { [key: string]: number } = {};
|
|
100
|
+
for (const { name, valueMs } of stats) {
|
|
101
|
+
const key = name.endsWith('_ms') ? name.slice(0, -'_ms'.length) : name;
|
|
102
|
+
times[key] = valueMs;
|
|
103
|
+
}
|
|
163
104
|
if (Object.keys(times).length === 0) {
|
|
164
|
-
throw new Error('AVM
|
|
105
|
+
throw new Error('AVM response did not contain any proving-stage timings!');
|
|
165
106
|
}
|
|
166
|
-
|
|
167
107
|
// Hack to make labels match.
|
|
168
108
|
const txLabelWithCount = `${txLabel}/${this.txCount - 1}`;
|
|
169
|
-
//
|
|
109
|
+
// Cast because TS doesn't realize `metrics` is protected, not private on the parent class.
|
|
170
110
|
(this as any).metrics?.recordProverMetrics(txLabelWithCount, {
|
|
171
111
|
proverSimulationStepMs: times['simulation/all'],
|
|
172
112
|
proverProvingStepMs: times['proving/all'],
|
|
@@ -179,26 +119,6 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
179
119
|
provingLogDerivativeInverseCommitmentsMs: times['prove/log_derivative_inverse_commitments_round'],
|
|
180
120
|
provingWireCommitmentsMs: times['prove/wire_commitments_round'],
|
|
181
121
|
});
|
|
182
|
-
|
|
183
|
-
return proofRes as BBSuccess;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
async verify(proofRes: BBSuccess, publicInputs: AvmCircuitPublicInputs): Promise<BBResult> {
|
|
187
|
-
if (this.checkCircuitOnly) {
|
|
188
|
-
// Skip verification if we are only checking the circuit.
|
|
189
|
-
// Check-circuit does not generate a proof to verify.
|
|
190
|
-
return proofRes;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
return await verifyAvmProof(BB_PATH, this.bbWorkingDirectory, proofRes.proofPath!, publicInputs, this.logger);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
public async proveVerify(avmCircuitInputs: AvmCircuitInputs, txLabel: string = 'unlabeledTx') {
|
|
197
|
-
const provingRes = await this.prove(avmCircuitInputs, txLabel);
|
|
198
|
-
expect(provingRes.status).toEqual(BB_RESULT.SUCCESS);
|
|
199
|
-
|
|
200
|
-
const verificationRes = await this.verify(provingRes as BBSuccess, avmCircuitInputs.publicInputs);
|
|
201
|
-
expect(verificationRes.status).toBe(BB_RESULT.SUCCESS);
|
|
202
122
|
}
|
|
203
123
|
|
|
204
124
|
public async simProveVerify(
|
|
@@ -211,6 +131,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
211
131
|
privateInsertions?: TestPrivateInsertions,
|
|
212
132
|
txLabel: string = 'unlabeledTx',
|
|
213
133
|
disableRevertCheck: boolean = false,
|
|
134
|
+
gasLimits?: Gas,
|
|
214
135
|
): Promise<PublicTxResult> {
|
|
215
136
|
const simTimer = new Timer();
|
|
216
137
|
const simRes = await this.simulateTx(
|
|
@@ -221,6 +142,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
221
142
|
feePayer,
|
|
222
143
|
privateInsertions,
|
|
223
144
|
txLabel,
|
|
145
|
+
gasLimits,
|
|
224
146
|
);
|
|
225
147
|
const simDuration = simTimer.ms();
|
|
226
148
|
this.logger.info(`Simulation took ${simDuration} ms for tx ${txLabel}`);
|
|
@@ -247,6 +169,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
247
169
|
teardownCall?: TestEnqueuedCall,
|
|
248
170
|
feePayer?: AztecAddress,
|
|
249
171
|
privateInsertions?: TestPrivateInsertions,
|
|
172
|
+
gasLimits?: Gas,
|
|
250
173
|
) {
|
|
251
174
|
return await this.simProveVerify(
|
|
252
175
|
sender,
|
|
@@ -258,6 +181,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
258
181
|
privateInsertions,
|
|
259
182
|
txLabel,
|
|
260
183
|
true,
|
|
184
|
+
gasLimits,
|
|
261
185
|
);
|
|
262
186
|
}
|
|
263
187
|
|
|
@@ -265,6 +189,7 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
265
189
|
appCall: TestEnqueuedCall,
|
|
266
190
|
expectRevert?: boolean,
|
|
267
191
|
txLabel: string = 'unlabeledTx',
|
|
192
|
+
gasLimits?: Gas,
|
|
268
193
|
) {
|
|
269
194
|
await this.simProveVerify(
|
|
270
195
|
/*sender=*/ AztecAddress.fromNumber(42),
|
|
@@ -275,6 +200,8 @@ export class AvmProvingTester extends PublicTxSimulationTester {
|
|
|
275
200
|
/*feePayer=*/ undefined,
|
|
276
201
|
/*privateInsertions=*/ undefined,
|
|
277
202
|
txLabel,
|
|
203
|
+
/*disableRevertCheck=*/ false,
|
|
204
|
+
gasLimits,
|
|
278
205
|
);
|
|
279
206
|
}
|
|
280
207
|
}
|