@aztec/prover-client 0.43.0 → 0.44.0
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/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +7 -5
- package/dest/orchestrator/orchestrator.d.ts +3 -1
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +598 -517
- package/dest/tx-prover/tx-prover.d.ts +3 -1
- package/dest/tx-prover/tx-prover.d.ts.map +1 -1
- package/dest/tx-prover/tx-prover.js +11 -10
- package/package.json +19 -10
- package/src/mocks/test_context.ts +6 -3
- package/src/orchestrator/orchestrator.ts +157 -43
- package/src/tx-prover/tx-prover.ts +18 -7
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ProcessedTx } from '@aztec/circuit-types';
|
|
2
2
|
import { type BlockResult, type ProverClient, type ProvingJobSource, type ProvingTicket } from '@aztec/circuit-types/interfaces';
|
|
3
3
|
import { type Fr, type GlobalVariables, type Header, type VerificationKeys } from '@aztec/circuits.js';
|
|
4
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
4
5
|
import { type WorldStateSynchronizer } from '@aztec/world-state';
|
|
5
6
|
import { type ProverClientConfig } from '../config.js';
|
|
6
7
|
/**
|
|
@@ -10,6 +11,7 @@ export declare class TxProver implements ProverClient {
|
|
|
10
11
|
private config;
|
|
11
12
|
private worldStateSynchronizer;
|
|
12
13
|
private vks;
|
|
14
|
+
private telemetry;
|
|
13
15
|
private agent?;
|
|
14
16
|
private orchestrator;
|
|
15
17
|
private queue;
|
|
@@ -33,7 +35,7 @@ export declare class TxProver implements ProverClient {
|
|
|
33
35
|
* @param worldStateSynchronizer - An instance of the world state
|
|
34
36
|
* @returns An instance of the prover, constructed and started.
|
|
35
37
|
*/
|
|
36
|
-
static new(config: ProverClientConfig, vks: VerificationKeys, worldStateSynchronizer: WorldStateSynchronizer, initialHeader?: Header): Promise<TxProver>;
|
|
38
|
+
static new(config: ProverClientConfig, vks: VerificationKeys, worldStateSynchronizer: WorldStateSynchronizer, telemetry: TelemetryClient, initialHeader?: Header): Promise<TxProver>;
|
|
37
39
|
private static buildCircuitProver;
|
|
38
40
|
/**
|
|
39
41
|
* Cancels any block that is currently being built and prepares for a new one to be built
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-prover.d.ts","sourceRoot":"","sources":["../../src/tx-prover/tx-prover.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvG,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKvD;;GAEG;AACH,qBAAa,QAAS,YAAW,YAAY;IAMzC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"tx-prover.d.ts","sourceRoot":"","sources":["../../src/tx-prover/tx-prover.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvG,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKvD;;GAEG;AACH,qBAAa,QAAS,YAAW,YAAY;IAMzC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK,CAAC;IAThB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO;IAiBD,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,GAAG;QAAE,GAAG,EAAE,gBAAgB,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBxG;;OAEG;IACI,KAAK;IAWZ;;OAEG;IACU,IAAI;IASjB;;;;;;OAMG;WACiB,GAAG,CACrB,MAAM,EAAE,kBAAkB,EAC1B,GAAG,EAAE,gBAAgB,EACrB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,eAAe,EAC1B,aAAa,CAAC,EAAE,MAAM;mBAeH,kBAAkB;IAevC;;;;;OAKG;IACU,aAAa,CACxB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,EAAE,EAAE,GACtB,OAAO,CAAC,aAAa,CAAC;IAMzB;;;OAGG;IACI,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACI,WAAW,IAAI,IAAI;IAI1B;;OAEG;IACI,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC;IAI5C;;;OAGG;IACI,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,mBAAmB,IAAI,gBAAgB;CAG/C"}
|
|
@@ -7,14 +7,15 @@ import { ProverAgent } from '../prover-agent/prover-agent.js';
|
|
|
7
7
|
* A prover accepting individual transaction requests
|
|
8
8
|
*/
|
|
9
9
|
export class TxProver {
|
|
10
|
-
constructor(config, worldStateSynchronizer, vks, agent, initialHeader) {
|
|
10
|
+
constructor(config, worldStateSynchronizer, vks, telemetry, agent, initialHeader) {
|
|
11
11
|
this.config = config;
|
|
12
12
|
this.worldStateSynchronizer = worldStateSynchronizer;
|
|
13
13
|
this.vks = vks;
|
|
14
|
+
this.telemetry = telemetry;
|
|
14
15
|
this.agent = agent;
|
|
15
16
|
this.running = false;
|
|
16
17
|
this.queue = new MemoryProvingQueue(config.proverJobTimeoutMs, config.proverJobPollIntervalMs);
|
|
17
|
-
this.orchestrator = new ProvingOrchestrator(worldStateSynchronizer.getLatest(), this.queue, initialHeader);
|
|
18
|
+
this.orchestrator = new ProvingOrchestrator(worldStateSynchronizer.getLatest(), this.queue, telemetry, initialHeader);
|
|
18
19
|
}
|
|
19
20
|
async updateProverConfig(config) {
|
|
20
21
|
const newConfig = { ...this.config, ...config };
|
|
@@ -22,7 +23,7 @@ export class TxProver {
|
|
|
22
23
|
this.vks = config.vks;
|
|
23
24
|
}
|
|
24
25
|
if (newConfig.realProofs !== this.config.realProofs && this.agent) {
|
|
25
|
-
const circuitProver = await TxProver.buildCircuitProver(newConfig);
|
|
26
|
+
const circuitProver = await TxProver.buildCircuitProver(newConfig, this.telemetry);
|
|
26
27
|
this.agent.setCircuitProver(circuitProver);
|
|
27
28
|
}
|
|
28
29
|
if (this.config.proverAgentConcurrency !== newConfig.proverAgentConcurrency) {
|
|
@@ -63,22 +64,22 @@ export class TxProver {
|
|
|
63
64
|
* @param worldStateSynchronizer - An instance of the world state
|
|
64
65
|
* @returns An instance of the prover, constructed and started.
|
|
65
66
|
*/
|
|
66
|
-
static async new(config, vks, worldStateSynchronizer, initialHeader) {
|
|
67
|
+
static async new(config, vks, worldStateSynchronizer, telemetry, initialHeader) {
|
|
67
68
|
const agent = config.proverAgentEnabled
|
|
68
|
-
? new ProverAgent(await TxProver.buildCircuitProver(config), config.proverAgentConcurrency, config.proverAgentPollInterval)
|
|
69
|
+
? new ProverAgent(await TxProver.buildCircuitProver(config, telemetry), config.proverAgentConcurrency, config.proverAgentPollInterval)
|
|
69
70
|
: undefined;
|
|
70
|
-
const prover = new TxProver(config, worldStateSynchronizer, vks, agent, initialHeader);
|
|
71
|
+
const prover = new TxProver(config, worldStateSynchronizer, vks, telemetry, agent, initialHeader);
|
|
71
72
|
await prover.start();
|
|
72
73
|
return prover;
|
|
73
74
|
}
|
|
74
|
-
static async buildCircuitProver(config) {
|
|
75
|
+
static async buildCircuitProver(config, telemetry) {
|
|
75
76
|
if (config.realProofs) {
|
|
76
|
-
return await BBNativeRollupProver.new(config);
|
|
77
|
+
return await BBNativeRollupProver.new(config, telemetry);
|
|
77
78
|
}
|
|
78
79
|
const simulationProvider = config.acvmBinaryPath
|
|
79
80
|
? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
|
|
80
81
|
: undefined;
|
|
81
|
-
return new TestCircuitProver(simulationProvider);
|
|
82
|
+
return new TestCircuitProver(telemetry, simulationProvider);
|
|
82
83
|
}
|
|
83
84
|
/**
|
|
84
85
|
* Cancels any block that is currently being built and prepares for a new one to be built
|
|
@@ -121,4 +122,4 @@ export class TxProver {
|
|
|
121
122
|
return this.queue;
|
|
122
123
|
}
|
|
123
124
|
}
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHgtcHJvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4LXByb3Zlci90eC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFVM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFLdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFLbkIsWUFDVSxNQUEwQixFQUMxQixzQkFBOEMsRUFDOUMsR0FBcUIsRUFDckIsU0FBMEIsRUFDMUIsS0FBbUIsRUFDM0IsYUFBc0I7UUFMZCxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFQckIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQVV0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxtQkFBbUIsQ0FDekMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLEVBQ2xDLElBQUksQ0FBQyxLQUFLLEVBQ1YsU0FBUyxFQUNULGFBQWEsQ0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUErRDtRQUN0RixNQUFNLFNBQVMsR0FB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -34,7 +34,15 @@
|
|
|
34
34
|
"rootDir": "./src",
|
|
35
35
|
"transform": {
|
|
36
36
|
"^.+\\.tsx?$": [
|
|
37
|
-
"@swc/jest"
|
|
37
|
+
"@swc/jest",
|
|
38
|
+
{
|
|
39
|
+
"jsc": {
|
|
40
|
+
"parser": {
|
|
41
|
+
"syntax": "typescript",
|
|
42
|
+
"decorators": true
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
38
46
|
]
|
|
39
47
|
},
|
|
40
48
|
"extensionsToTreatAsEsm": [
|
|
@@ -50,14 +58,15 @@
|
|
|
50
58
|
]
|
|
51
59
|
},
|
|
52
60
|
"dependencies": {
|
|
53
|
-
"@aztec/bb-prover": "0.
|
|
54
|
-
"@aztec/circuit-types": "0.
|
|
55
|
-
"@aztec/circuits.js": "0.
|
|
56
|
-
"@aztec/foundation": "0.
|
|
57
|
-
"@aztec/kv-store": "0.
|
|
58
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
59
|
-
"@aztec/simulator": "0.
|
|
60
|
-
"@aztec/
|
|
61
|
+
"@aztec/bb-prover": "0.44.0",
|
|
62
|
+
"@aztec/circuit-types": "0.44.0",
|
|
63
|
+
"@aztec/circuits.js": "0.44.0",
|
|
64
|
+
"@aztec/foundation": "0.44.0",
|
|
65
|
+
"@aztec/kv-store": "0.44.0",
|
|
66
|
+
"@aztec/noir-protocol-circuits-types": "0.44.0",
|
|
67
|
+
"@aztec/simulator": "0.44.0",
|
|
68
|
+
"@aztec/telemetry-client": "0.44.0",
|
|
69
|
+
"@aztec/world-state": "0.44.0",
|
|
61
70
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
62
71
|
"commander": "^9.0.0",
|
|
63
72
|
"lodash.chunk": "^4.2.0",
|
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
WASMSimulator,
|
|
32
32
|
type WorldStatePublicDB,
|
|
33
33
|
} from '@aztec/simulator';
|
|
34
|
+
import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
|
|
34
35
|
import { type MerkleTreeOperations, MerkleTrees } from '@aztec/world-state';
|
|
35
36
|
|
|
36
37
|
import * as fs from 'fs/promises';
|
|
@@ -85,7 +86,7 @@ export class TestContext {
|
|
|
85
86
|
logger: DebugLogger,
|
|
86
87
|
proverCount = 4,
|
|
87
88
|
createProver: (bbConfig: BBProverConfig) => Promise<ServerCircuitProver> = _ =>
|
|
88
|
-
Promise.resolve(new TestCircuitProver(new WASMSimulator())),
|
|
89
|
+
Promise.resolve(new TestCircuitProver(new NoopTelemetryClient(), new WASMSimulator())),
|
|
89
90
|
blockNumber = 3,
|
|
90
91
|
) {
|
|
91
92
|
const globalVariables = makeGlobals(blockNumber);
|
|
@@ -95,6 +96,7 @@ export class TestContext {
|
|
|
95
96
|
const publicWorldStateDB = mock<WorldStatePublicDB>();
|
|
96
97
|
const publicKernel = new RealPublicKernelCircuitSimulator(new WASMSimulator());
|
|
97
98
|
const actualDb = await MerkleTrees.new(openTmpStore()).then(t => t.asLatest());
|
|
99
|
+
const telemetry = new NoopTelemetryClient();
|
|
98
100
|
const processor = new PublicProcessor(
|
|
99
101
|
actualDb,
|
|
100
102
|
publicExecutor,
|
|
@@ -103,6 +105,7 @@ export class TestContext {
|
|
|
103
105
|
Header.empty(),
|
|
104
106
|
publicContractsDB,
|
|
105
107
|
publicWorldStateDB,
|
|
108
|
+
telemetry,
|
|
106
109
|
);
|
|
107
110
|
|
|
108
111
|
let localProver: ServerCircuitProver;
|
|
@@ -112,7 +115,7 @@ export class TestContext {
|
|
|
112
115
|
acvmBinaryPath: config?.expectedAcvmPath,
|
|
113
116
|
});
|
|
114
117
|
if (!config) {
|
|
115
|
-
localProver = new TestCircuitProver(simulationProvider);
|
|
118
|
+
localProver = new TestCircuitProver(new NoopTelemetryClient(), simulationProvider);
|
|
116
119
|
} else {
|
|
117
120
|
const bbConfig: BBProverConfig = {
|
|
118
121
|
acvmBinaryPath: config.expectedAcvmPath,
|
|
@@ -124,7 +127,7 @@ export class TestContext {
|
|
|
124
127
|
}
|
|
125
128
|
|
|
126
129
|
const queue = new MemoryProvingQueue();
|
|
127
|
-
const orchestrator = new ProvingOrchestrator(actualDb, queue);
|
|
130
|
+
const orchestrator = new ProvingOrchestrator(actualDb, queue, telemetry);
|
|
128
131
|
const agent = new ProverAgent(localProver, proverCount);
|
|
129
132
|
|
|
130
133
|
queue.start();
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
type TxEffect,
|
|
10
10
|
makeEmptyProcessedTx,
|
|
11
11
|
makePaddingProcessedTx,
|
|
12
|
+
mapPublicKernelToCircuitName,
|
|
12
13
|
toTxEffect,
|
|
13
14
|
} from '@aztec/circuit-types';
|
|
14
15
|
import {
|
|
@@ -20,6 +21,7 @@ import {
|
|
|
20
21
|
type PublicInputsAndRecursiveProof,
|
|
21
22
|
type ServerCircuitProver,
|
|
22
23
|
} from '@aztec/circuit-types/interfaces';
|
|
24
|
+
import { type CircuitName } from '@aztec/circuit-types/stats';
|
|
23
25
|
import {
|
|
24
26
|
AGGREGATION_OBJECT_LENGTH,
|
|
25
27
|
AvmCircuitInputs,
|
|
@@ -53,6 +55,7 @@ import { createDebugLogger } from '@aztec/foundation/log';
|
|
|
53
55
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
54
56
|
import { BufferReader, type Tuple } from '@aztec/foundation/serialize';
|
|
55
57
|
import { pushTestData } from '@aztec/foundation/testing';
|
|
58
|
+
import { Attributes, type TelemetryClient, type Tracer, trackSpan, wrapCallbackInSpan } from '@aztec/telemetry-client';
|
|
56
59
|
import { type MerkleTreeOperations } from '@aztec/world-state';
|
|
57
60
|
|
|
58
61
|
import { inspect } from 'util';
|
|
@@ -91,7 +94,16 @@ export class ProvingOrchestrator {
|
|
|
91
94
|
private pendingProvingJobs: AbortController[] = [];
|
|
92
95
|
private paddingTx: PaddingProcessedTx | undefined = undefined;
|
|
93
96
|
|
|
94
|
-
|
|
97
|
+
public readonly tracer: Tracer;
|
|
98
|
+
|
|
99
|
+
constructor(
|
|
100
|
+
private db: MerkleTreeOperations,
|
|
101
|
+
private prover: ServerCircuitProver,
|
|
102
|
+
telemetryClient: TelemetryClient,
|
|
103
|
+
private initialHeader?: Header,
|
|
104
|
+
) {
|
|
105
|
+
this.tracer = telemetryClient.getTracer('ProvingOrchestrator');
|
|
106
|
+
}
|
|
95
107
|
|
|
96
108
|
/**
|
|
97
109
|
* Resets the orchestrator's cached padding tx.
|
|
@@ -108,6 +120,10 @@ export class ProvingOrchestrator {
|
|
|
108
120
|
* @param verificationKeys - The private kernel verification keys
|
|
109
121
|
* @returns A proving ticket, containing a promise notifying of proving completion
|
|
110
122
|
*/
|
|
123
|
+
@trackSpan('ProvingOrchestrator.startNewBlock', (numTxs, globalVariables) => ({
|
|
124
|
+
[Attributes.BLOCK_SIZE]: numTxs,
|
|
125
|
+
[Attributes.BLOCK_NUMBER]: globalVariables.blockNumber.toNumber(),
|
|
126
|
+
}))
|
|
111
127
|
public async startNewBlock(
|
|
112
128
|
numTxs: number,
|
|
113
129
|
globalVariables: GlobalVariables,
|
|
@@ -193,6 +209,9 @@ export class ProvingOrchestrator {
|
|
|
193
209
|
* The interface to add a simulated transaction to the scheduler
|
|
194
210
|
* @param tx - The transaction to be proven
|
|
195
211
|
*/
|
|
212
|
+
@trackSpan('ProvingOrchestrator.addNewTx', tx => ({
|
|
213
|
+
[Attributes.TX_HASH]: tx.hash.toString(),
|
|
214
|
+
}))
|
|
196
215
|
public async addNewTx(tx: ProcessedTx): Promise<void> {
|
|
197
216
|
if (!this.provingState) {
|
|
198
217
|
throw new Error(`Invalid proving state, call startNewBlock before adding transactions`);
|
|
@@ -213,6 +232,17 @@ export class ProvingOrchestrator {
|
|
|
213
232
|
/**
|
|
214
233
|
* Marks the block as full and pads it to the full power of 2 block size, no more transactions will be accepted.
|
|
215
234
|
*/
|
|
235
|
+
@trackSpan('ProvingOrchestrator.setBlockCompleted', function () {
|
|
236
|
+
if (!this.provingState) {
|
|
237
|
+
return {};
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return {
|
|
241
|
+
[Attributes.BLOCK_NUMBER]: this.provingState!.globalVariables.blockNumber.toNumber(),
|
|
242
|
+
[Attributes.BLOCK_SIZE]: this.provingState!.totalNumTxs,
|
|
243
|
+
[Attributes.BLOCK_TXS_COUNT]: this.provingState!.transactionsReceived,
|
|
244
|
+
};
|
|
245
|
+
})
|
|
216
246
|
public async setBlockCompleted() {
|
|
217
247
|
if (!this.provingState) {
|
|
218
248
|
throw new Error(`Invalid proving state, call startNewBlock before adding transactions or completing the block`);
|
|
@@ -264,18 +294,26 @@ export class ProvingOrchestrator {
|
|
|
264
294
|
logger.debug(`Enqueuing deferred proving for padding txs to enqueue ${txInputs.length} paddings`);
|
|
265
295
|
this.deferredProving(
|
|
266
296
|
provingState,
|
|
267
|
-
|
|
268
|
-
this.
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
297
|
+
wrapCallbackInSpan(
|
|
298
|
+
this.tracer,
|
|
299
|
+
'ProvingOrchestrator.prover.getEmptyPrivateKernelProof',
|
|
300
|
+
{
|
|
301
|
+
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
302
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'private-kernel-empty' as CircuitName,
|
|
303
|
+
},
|
|
304
|
+
signal =>
|
|
305
|
+
this.prover.getEmptyPrivateKernelProof(
|
|
306
|
+
{
|
|
307
|
+
// Chain id and version should not change even if the proving state does, so it's safe to use them for the padding tx
|
|
308
|
+
// which gets cached across multiple runs of the orchestrator with different proving states. If they were to change,
|
|
309
|
+
// we'd have to clear out the paddingTx here and regenerate it when they do.
|
|
310
|
+
chainId: unprovenPaddingTx.data.constants.txContext.chainId,
|
|
311
|
+
version: unprovenPaddingTx.data.constants.txContext.version,
|
|
312
|
+
header: unprovenPaddingTx.data.constants.historicalHeader,
|
|
313
|
+
},
|
|
314
|
+
signal,
|
|
315
|
+
),
|
|
316
|
+
),
|
|
279
317
|
result => {
|
|
280
318
|
logger.debug(`Completed proof for padding tx, now enqueuing ${txInputs.length} padding txs`);
|
|
281
319
|
this.paddingTx = makePaddingProcessedTx(result);
|
|
@@ -319,6 +357,13 @@ export class ProvingOrchestrator {
|
|
|
319
357
|
* Performs the final tree update for the block and returns the fully proven block.
|
|
320
358
|
* @returns The fully proven block and proof.
|
|
321
359
|
*/
|
|
360
|
+
@trackSpan('ProvingOrchestrator.finaliseBlock', function () {
|
|
361
|
+
return {
|
|
362
|
+
[Attributes.BLOCK_NUMBER]: this.provingState!.globalVariables.blockNumber.toNumber(),
|
|
363
|
+
[Attributes.BLOCK_TXS_COUNT]: this.provingState!.transactionsReceived,
|
|
364
|
+
[Attributes.BLOCK_SIZE]: this.provingState!.totalNumTxs,
|
|
365
|
+
};
|
|
366
|
+
})
|
|
322
367
|
public async finaliseBlock() {
|
|
323
368
|
try {
|
|
324
369
|
if (
|
|
@@ -496,6 +541,9 @@ export class ProvingOrchestrator {
|
|
|
496
541
|
}
|
|
497
542
|
|
|
498
543
|
// Updates the merkle trees for a transaction. The first enqueued job for a transaction
|
|
544
|
+
@trackSpan('ProvingOrchestrator.prepareBaseRollupInputs', (_, tx) => ({
|
|
545
|
+
[Attributes.TX_HASH]: tx.hash.toString(),
|
|
546
|
+
}))
|
|
499
547
|
private async prepareBaseRollupInputs(
|
|
500
548
|
provingState: ProvingState | undefined,
|
|
501
549
|
tx: ProcessedTx,
|
|
@@ -593,7 +641,16 @@ export class ProvingOrchestrator {
|
|
|
593
641
|
|
|
594
642
|
this.deferredProving(
|
|
595
643
|
provingState,
|
|
596
|
-
|
|
644
|
+
wrapCallbackInSpan(
|
|
645
|
+
this.tracer,
|
|
646
|
+
'ProvingOrchestrator.prover.getBaseRollupProof',
|
|
647
|
+
{
|
|
648
|
+
[Attributes.TX_HASH]: tx.processedTx.hash.toString(),
|
|
649
|
+
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
650
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'base-rollup' as CircuitName,
|
|
651
|
+
},
|
|
652
|
+
signal => this.prover.getBaseRollupProof(tx.baseRollupInputs, signal),
|
|
653
|
+
),
|
|
597
654
|
result => {
|
|
598
655
|
logger.debug(`Completed proof for base rollup for tx ${tx.processedTx.hash.toString()}`);
|
|
599
656
|
validatePartialState(result.inputs.end, tx.treeSnapshots);
|
|
@@ -622,7 +679,15 @@ export class ProvingOrchestrator {
|
|
|
622
679
|
|
|
623
680
|
this.deferredProving(
|
|
624
681
|
provingState,
|
|
625
|
-
|
|
682
|
+
wrapCallbackInSpan(
|
|
683
|
+
this.tracer,
|
|
684
|
+
'ProvingOrchestrator.prover.getMergeRollupProof',
|
|
685
|
+
{
|
|
686
|
+
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
687
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'merge-rollup' as CircuitName,
|
|
688
|
+
},
|
|
689
|
+
signal => this.prover.getMergeRollupProof(inputs, signal),
|
|
690
|
+
),
|
|
626
691
|
result => {
|
|
627
692
|
this.storeAndExecuteNextMergeLevel(provingState, level, index, [
|
|
628
693
|
result.inputs,
|
|
@@ -658,7 +723,15 @@ export class ProvingOrchestrator {
|
|
|
658
723
|
|
|
659
724
|
this.deferredProving(
|
|
660
725
|
provingState,
|
|
661
|
-
|
|
726
|
+
wrapCallbackInSpan(
|
|
727
|
+
this.tracer,
|
|
728
|
+
'ProvingOrchestrator.prover.getRootRollupProof',
|
|
729
|
+
{
|
|
730
|
+
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
731
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'root-rollup' as CircuitName,
|
|
732
|
+
},
|
|
733
|
+
signal => this.prover.getRootRollupProof(inputs, signal),
|
|
734
|
+
),
|
|
662
735
|
result => {
|
|
663
736
|
provingState.rootRollupPublicInputs = result.inputs;
|
|
664
737
|
provingState.finalAggregationObject = extractAggregationObject(
|
|
@@ -680,7 +753,15 @@ export class ProvingOrchestrator {
|
|
|
680
753
|
private enqueueBaseParityCircuit(provingState: ProvingState, inputs: BaseParityInputs, index: number) {
|
|
681
754
|
this.deferredProving(
|
|
682
755
|
provingState,
|
|
683
|
-
|
|
756
|
+
wrapCallbackInSpan(
|
|
757
|
+
this.tracer,
|
|
758
|
+
'ProvingOrchestrator.prover.getBaseParityProof',
|
|
759
|
+
{
|
|
760
|
+
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
761
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'base-parity' as CircuitName,
|
|
762
|
+
},
|
|
763
|
+
signal => this.prover.getBaseParityProof(inputs, signal),
|
|
764
|
+
),
|
|
684
765
|
rootInput => {
|
|
685
766
|
provingState.setRootParityInputs(rootInput, index);
|
|
686
767
|
if (provingState.areRootParityInputsReady()) {
|
|
@@ -701,7 +782,15 @@ export class ProvingOrchestrator {
|
|
|
701
782
|
private enqueueRootParityCircuit(provingState: ProvingState | undefined, inputs: RootParityInputs) {
|
|
702
783
|
this.deferredProving(
|
|
703
784
|
provingState,
|
|
704
|
-
|
|
785
|
+
wrapCallbackInSpan(
|
|
786
|
+
this.tracer,
|
|
787
|
+
'ProvingOrchestrator.prover.getRootParityProof',
|
|
788
|
+
{
|
|
789
|
+
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
790
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'root-parity' as CircuitName,
|
|
791
|
+
},
|
|
792
|
+
signal => this.prover.getRootParityProof(inputs, signal),
|
|
793
|
+
),
|
|
705
794
|
async rootInput => {
|
|
706
795
|
provingState!.finalRootParityInput = rootInput;
|
|
707
796
|
await this.checkAndEnqueueRootRollup(provingState);
|
|
@@ -770,25 +859,34 @@ export class ProvingOrchestrator {
|
|
|
770
859
|
if (publicFunction.vmRequest) {
|
|
771
860
|
// This function tries to do AVM proving. If there is a failure, it fakes the proof unless AVM_PROVING_STRICT is defined.
|
|
772
861
|
// Nothing downstream depends on the AVM proof yet. So having this mode lets us incrementally build the AVM circuit.
|
|
773
|
-
const doAvmProving =
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
publicFunction.vmRequest!.
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
862
|
+
const doAvmProving = wrapCallbackInSpan(
|
|
863
|
+
this.tracer,
|
|
864
|
+
'ProvingOrchestrator.prover.getAvmProof',
|
|
865
|
+
{
|
|
866
|
+
[Attributes.TX_HASH]: txProvingState.processedTx.hash.toString(),
|
|
867
|
+
[Attributes.APP_CIRCUIT_NAME]: publicFunction.vmRequest!.functionName,
|
|
868
|
+
},
|
|
869
|
+
async (signal: AbortSignal) => {
|
|
870
|
+
const inputs: AvmCircuitInputs = new AvmCircuitInputs(
|
|
871
|
+
publicFunction.vmRequest!.functionName,
|
|
872
|
+
publicFunction.vmRequest!.bytecode,
|
|
873
|
+
publicFunction.vmRequest!.calldata,
|
|
874
|
+
publicFunction.vmRequest!.kernelRequest.inputs.publicCall.callStackItem.publicInputs,
|
|
875
|
+
publicFunction.vmRequest!.avmHints,
|
|
876
|
+
);
|
|
877
|
+
try {
|
|
878
|
+
return await this.prover.getAvmProof(inputs, signal);
|
|
879
|
+
} catch (err) {
|
|
880
|
+
if (process.env.AVM_PROVING_STRICT) {
|
|
881
|
+
throw err;
|
|
882
|
+
} else {
|
|
883
|
+
logger.warn(`Error thrown when proving AVM circuit: ${err}`);
|
|
884
|
+
logger.warn(`AVM_PROVING_STRICT is off, faking AVM proof and carrying on...`);
|
|
885
|
+
return { proof: makeEmptyProof(), verificationKey: VerificationKeyData.makeFake() };
|
|
886
|
+
}
|
|
789
887
|
}
|
|
790
|
-
}
|
|
791
|
-
|
|
888
|
+
},
|
|
889
|
+
);
|
|
792
890
|
this.deferredProving(provingState, doAvmProving, proofAndVk => {
|
|
793
891
|
logger.debug(`Proven VM for function index ${functionIndex} of tx index ${txIndex}`);
|
|
794
892
|
this.checkAndEnqueuePublicKernel(provingState, txIndex, functionIndex, proofAndVk.proof);
|
|
@@ -834,13 +932,25 @@ export class ProvingOrchestrator {
|
|
|
834
932
|
|
|
835
933
|
this.deferredProving(
|
|
836
934
|
provingState,
|
|
837
|
-
(
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
935
|
+
wrapCallbackInSpan(
|
|
936
|
+
this.tracer,
|
|
937
|
+
request.type === PublicKernelType.TAIL
|
|
938
|
+
? 'ProvingOrchestrator.prover.getPublicTailProof'
|
|
939
|
+
: 'ProvingOrchestrator.prover.getPublicKernelProof',
|
|
940
|
+
{
|
|
941
|
+
[Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
|
|
942
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: mapPublicKernelToCircuitName(request.type),
|
|
943
|
+
},
|
|
944
|
+
(
|
|
945
|
+
signal,
|
|
946
|
+
): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs | PublicKernelCircuitPublicInputs>> => {
|
|
947
|
+
if (request.type === PublicKernelType.TAIL) {
|
|
948
|
+
return this.prover.getPublicTailProof(request, signal);
|
|
949
|
+
} else {
|
|
950
|
+
return this.prover.getPublicKernelProof(request, signal);
|
|
951
|
+
}
|
|
952
|
+
},
|
|
953
|
+
),
|
|
844
954
|
result => {
|
|
845
955
|
const nextKernelRequest = txProvingState.getNextPublicKernelFromKernelProof(
|
|
846
956
|
functionIndex,
|
|
@@ -879,5 +989,9 @@ function extractAggregationObject(proof: Proof, numPublicInputs: number): Fr[] {
|
|
|
879
989
|
Fr.SIZE_IN_BYTES * (numPublicInputs - AGGREGATION_OBJECT_LENGTH),
|
|
880
990
|
Fr.SIZE_IN_BYTES * numPublicInputs,
|
|
881
991
|
);
|
|
992
|
+
// TODO(#7159): Remove the following workaround
|
|
993
|
+
if (buffer.length === 0) {
|
|
994
|
+
return Array.from({ length: AGGREGATION_OBJECT_LENGTH }, () => Fr.ZERO);
|
|
995
|
+
}
|
|
882
996
|
return BufferReader.asReader(buffer).readArray(AGGREGATION_OBJECT_LENGTH, Fr);
|
|
883
997
|
}
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
} from '@aztec/circuit-types/interfaces';
|
|
10
10
|
import { type Fr, type GlobalVariables, type Header, type VerificationKeys } from '@aztec/circuits.js';
|
|
11
11
|
import { NativeACVMSimulator } from '@aztec/simulator';
|
|
12
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
12
13
|
import { type WorldStateSynchronizer } from '@aztec/world-state';
|
|
13
14
|
|
|
14
15
|
import { type ProverClientConfig } from '../config.js';
|
|
@@ -28,11 +29,17 @@ export class TxProver implements ProverClient {
|
|
|
28
29
|
private config: ProverClientConfig,
|
|
29
30
|
private worldStateSynchronizer: WorldStateSynchronizer,
|
|
30
31
|
private vks: VerificationKeys,
|
|
32
|
+
private telemetry: TelemetryClient,
|
|
31
33
|
private agent?: ProverAgent,
|
|
32
34
|
initialHeader?: Header,
|
|
33
35
|
) {
|
|
34
36
|
this.queue = new MemoryProvingQueue(config.proverJobTimeoutMs, config.proverJobPollIntervalMs);
|
|
35
|
-
this.orchestrator = new ProvingOrchestrator(
|
|
37
|
+
this.orchestrator = new ProvingOrchestrator(
|
|
38
|
+
worldStateSynchronizer.getLatest(),
|
|
39
|
+
this.queue,
|
|
40
|
+
telemetry,
|
|
41
|
+
initialHeader,
|
|
42
|
+
);
|
|
36
43
|
}
|
|
37
44
|
|
|
38
45
|
async updateProverConfig(config: Partial<ProverClientConfig & { vks: VerificationKeys }>): Promise<void> {
|
|
@@ -43,7 +50,7 @@ export class TxProver implements ProverClient {
|
|
|
43
50
|
}
|
|
44
51
|
|
|
45
52
|
if (newConfig.realProofs !== this.config.realProofs && this.agent) {
|
|
46
|
-
const circuitProver = await TxProver.buildCircuitProver(newConfig);
|
|
53
|
+
const circuitProver = await TxProver.buildCircuitProver(newConfig, this.telemetry);
|
|
47
54
|
this.agent.setCircuitProver(circuitProver);
|
|
48
55
|
}
|
|
49
56
|
|
|
@@ -95,31 +102,35 @@ export class TxProver implements ProverClient {
|
|
|
95
102
|
config: ProverClientConfig,
|
|
96
103
|
vks: VerificationKeys,
|
|
97
104
|
worldStateSynchronizer: WorldStateSynchronizer,
|
|
105
|
+
telemetry: TelemetryClient,
|
|
98
106
|
initialHeader?: Header,
|
|
99
107
|
) {
|
|
100
108
|
const agent = config.proverAgentEnabled
|
|
101
109
|
? new ProverAgent(
|
|
102
|
-
await TxProver.buildCircuitProver(config),
|
|
110
|
+
await TxProver.buildCircuitProver(config, telemetry),
|
|
103
111
|
config.proverAgentConcurrency,
|
|
104
112
|
config.proverAgentPollInterval,
|
|
105
113
|
)
|
|
106
114
|
: undefined;
|
|
107
115
|
|
|
108
|
-
const prover = new TxProver(config, worldStateSynchronizer, vks, agent, initialHeader);
|
|
116
|
+
const prover = new TxProver(config, worldStateSynchronizer, vks, telemetry, agent, initialHeader);
|
|
109
117
|
await prover.start();
|
|
110
118
|
return prover;
|
|
111
119
|
}
|
|
112
120
|
|
|
113
|
-
private static async buildCircuitProver(
|
|
121
|
+
private static async buildCircuitProver(
|
|
122
|
+
config: ProverClientConfig,
|
|
123
|
+
telemetry: TelemetryClient,
|
|
124
|
+
): Promise<ServerCircuitProver> {
|
|
114
125
|
if (config.realProofs) {
|
|
115
|
-
return await BBNativeRollupProver.new(config);
|
|
126
|
+
return await BBNativeRollupProver.new(config, telemetry);
|
|
116
127
|
}
|
|
117
128
|
|
|
118
129
|
const simulationProvider = config.acvmBinaryPath
|
|
119
130
|
? new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath)
|
|
120
131
|
: undefined;
|
|
121
132
|
|
|
122
|
-
return new TestCircuitProver(simulationProvider);
|
|
133
|
+
return new TestCircuitProver(telemetry, simulationProvider);
|
|
123
134
|
}
|
|
124
135
|
|
|
125
136
|
/**
|