@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.
@@ -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;IARhB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO;IAWD,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,aAAa,CAAC,EAAE,MAAM;mBAeH,kBAAkB;IAYvC;;;;;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"}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHgtcHJvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4LXByb3Zlci90eC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFVM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFLbkIsWUFDVSxNQUEwQixFQUMxQixzQkFBOEMsRUFDOUMsR0FBcUIsRUFDckIsS0FBbUIsRUFDM0IsYUFBc0I7UUFKZCxXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQ3JCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFOckIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQVN0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBK0Q7UUFDdEYsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FB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
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.43.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.43.0",
54
- "@aztec/circuit-types": "0.43.0",
55
- "@aztec/circuits.js": "0.43.0",
56
- "@aztec/foundation": "0.43.0",
57
- "@aztec/kv-store": "0.43.0",
58
- "@aztec/noir-protocol-circuits-types": "0.43.0",
59
- "@aztec/simulator": "0.43.0",
60
- "@aztec/world-state": "0.43.0",
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
- constructor(private db: MerkleTreeOperations, private prover: ServerCircuitProver, private initialHeader?: Header) {}
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
- signal =>
268
- this.prover.getEmptyPrivateKernelProof(
269
- {
270
- // Chain id and version should not change even if the proving state does, so it's safe to use them for the padding tx
271
- // which gets cached across multiple runs of the orchestrator with different proving states. If they were to change,
272
- // we'd have to clear out the paddingTx here and regenerate it when they do.
273
- chainId: unprovenPaddingTx.data.constants.txContext.chainId,
274
- version: unprovenPaddingTx.data.constants.txContext.version,
275
- header: unprovenPaddingTx.data.constants.historicalHeader,
276
- },
277
- signal,
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
- signal => this.prover.getBaseRollupProof(tx.baseRollupInputs, signal),
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
- signal => this.prover.getMergeRollupProof(inputs, signal),
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
- signal => this.prover.getRootRollupProof(inputs, signal),
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
- signal => this.prover.getBaseParityProof(inputs, signal),
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
- signal => this.prover.getRootParityProof(inputs, signal),
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 = async (signal: AbortSignal) => {
774
- const inputs: AvmCircuitInputs = new AvmCircuitInputs(
775
- publicFunction.vmRequest!.bytecode,
776
- publicFunction.vmRequest!.calldata,
777
- publicFunction.vmRequest!.kernelRequest.inputs.publicCall.callStackItem.publicInputs,
778
- publicFunction.vmRequest!.avmHints,
779
- );
780
- try {
781
- return await this.prover.getAvmProof(inputs, signal);
782
- } catch (err) {
783
- if (process.env.AVM_PROVING_STRICT) {
784
- throw err;
785
- } else {
786
- logger.warn(`Error thrown when proving AVM circuit: ${err}`);
787
- logger.warn(`AVM_PROVING_STRICT is off, faking AVM proof and carrying on...`);
788
- return { proof: makeEmptyProof(), verificationKey: VerificationKeyData.makeFake() };
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
- (signal): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs | PublicKernelCircuitPublicInputs>> => {
838
- if (request.type === PublicKernelType.TAIL) {
839
- return this.prover.getPublicTailProof(request, signal);
840
- } else {
841
- return this.prover.getPublicKernelProof(request, signal);
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(worldStateSynchronizer.getLatest(), this.queue, initialHeader);
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(config: ProverClientConfig): Promise<ServerCircuitProver> {
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
  /**