@aztec/prover-node 3.0.0-nightly.20250930 → 3.0.0-nightly.20251002

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/config.d.ts CHANGED
@@ -17,6 +17,7 @@ export type SpecificProverNodeConfig = {
17
17
  proverNodeMaxParallelBlocksPerEpoch: number;
18
18
  proverNodeFailedEpochStore: string | undefined;
19
19
  proverNodeEpochProvingDelayMs: number | undefined;
20
+ proverNodeDisableProofPublish?: boolean;
20
21
  txGatheringTimeoutMs: number;
21
22
  txGatheringIntervalMs: number;
22
23
  txGatheringBatchSize: number;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,wBAAwB,CAAC;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAA+C,MAAM,sBAAsB,CAAC;AACvH,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,sBAAsB,EAAgD,MAAM,6BAA6B,CAAC;AACxH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAGpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,2BAA2B,CAAC;AAE5F,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,sBAAsB,GACtB,SAAS,GACT,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,cAAc,GACd,gBAAgB,GAChB,wBAAwB,GACxB,kBAAkB,CAAC;AAErB,MAAM,MAAM,wBAAwB,GAAG;IACrC,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,0BAA0B,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,6BAA6B,EAAE,MAAM,GAAG,SAAS,CAAC;IAClD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qCAAqC,EAAE,MAAM,CAAC;CAC/C,CAAC;AAiDF,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAYzE,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,gBAAgB,CAE7D;AAED,wBAAgB,gCAAgC,IAAI,kBAAkB,CAIrE;AAED,wBAAgB,+BAA+B,IAAI,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAK3F;AA0DD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,QAAQ,GAAG,SAAS,CAMtF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,wBAAwB,CAAC;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,iBAAiB,CAAC;AACtF,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAA+C,MAAM,sBAAsB,CAAC;AACvH,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,sBAAsB,EAAgD,MAAM,6BAA6B,CAAC;AACxH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EAGpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,2BAA2B,CAAC;AAE5F,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAC3C,sBAAsB,GACtB,SAAS,GACT,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,cAAc,GACd,gBAAgB,GAChB,wBAAwB,GACxB,kBAAkB,CAAC;AAErB,MAAM,MAAM,wBAAwB,GAAG;IACrC,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,0BAA0B,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,6BAA6B,EAAE,MAAM,GAAG,SAAS,CAAC;IAClD,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qCAAqC,EAAE,MAAM,CAAC;CAC/C,CAAC;AAsDF,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAYzE,CAAC;AAEF,wBAAgB,0BAA0B,IAAI,gBAAgB,CAE7D;AAED,wBAAgB,gCAAgC,IAAI,kBAAkB,CAIrE;AAED,wBAAgB,+BAA+B,IAAI,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAK3F;AA0DD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,QAAQ,GAAG,SAAS,CAMtF"}
package/dest/config.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { archiverConfigMappings } from '@aztec/archiver/config';
2
2
  import { genesisStateConfigMappings } from '@aztec/ethereum';
3
- import { getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
3
+ import { booleanConfigHelper, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
4
4
  import { dataConfigMappings } from '@aztec/kv-store/config';
5
5
  import { ethPrivateKeySchema, keyStoreConfigMappings } from '@aztec/node-keystore';
6
6
  import { sharedNodeConfigMappings } from '@aztec/node-lib/config';
@@ -53,6 +53,11 @@ const specificProverNodeConfigMappings = {
53
53
  env: 'PROVER_NODE_TX_GATHERING_TIMEOUT_MS',
54
54
  description: 'How long to wait for tx data to be available before giving up',
55
55
  ...numberConfigHelper(120_000)
56
+ },
57
+ proverNodeDisableProofPublish: {
58
+ env: 'PROVER_NODE_DISABLE_PROOF_PUBLISH',
59
+ description: 'Whether the prover node skips publishing proofs to L1',
60
+ ...booleanConfigHelper(false)
56
61
  }
57
62
  };
58
63
  export const proverNodeConfigMappings = {
@@ -5,6 +5,11 @@ import { type Traceable, type Tracer } from '@aztec/telemetry-client';
5
5
  import type { ProverNodeJobMetrics } from '../metrics.js';
6
6
  import type { ProverNodePublisher } from '../prover-node-publisher.js';
7
7
  import { type EpochProvingJobData } from './epoch-proving-job-data.js';
8
+ export type EpochProvingJobOptions = {
9
+ parallelBlockLimit?: number;
10
+ skipEpochCheck?: boolean;
11
+ skipSubmitProof?: boolean;
12
+ };
8
13
  /**
9
14
  * Job that grabs a range of blocks from the unfinalized chain from L1, gets their txs given their hashes,
10
15
  * re-executes their public calls, generates a rollup proof, and submits it to L1. This job will update the
@@ -27,10 +32,7 @@ export declare class EpochProvingJob implements Traceable {
27
32
  private epochCheckPromise;
28
33
  private deadlineTimeoutHandler;
29
34
  readonly tracer: Tracer;
30
- constructor(data: EpochProvingJobData, dbProvider: Pick<ForkMerkleTreeOperations, 'fork'>, prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: Pick<ProverNodePublisher, 'submitEpochProof'>, l2BlockSource: L2BlockSource | undefined, metrics: ProverNodeJobMetrics, deadline: Date | undefined, config: {
31
- parallelBlockLimit?: number;
32
- skipEpochCheck?: boolean;
33
- });
35
+ constructor(data: EpochProvingJobData, dbProvider: Pick<ForkMerkleTreeOperations, 'fork'>, prover: EpochProver, publicProcessorFactory: PublicProcessorFactory, publisher: Pick<ProverNodePublisher, 'submitEpochProof'>, l2BlockSource: L2BlockSource | undefined, metrics: ProverNodeJobMetrics, deadline: Date | undefined, config: EpochProvingJobOptions);
34
36
  getId(): string;
35
37
  getState(): EpochProvingJobState;
36
38
  getEpochNumber(): bigint;
@@ -1 +1 @@
1
- {"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAW,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAIzC,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAI7F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,KAAK,mBAAmB,EAA+B,MAAM,6BAA6B,CAAC;AAEpG;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAY7C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAnBhB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAClD,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,EACxD,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,EAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAOpE,KAAK,IAAI,MAAM;IAIf,QAAQ,IAAI,oBAAoB;IAIhC,cAAc,IAAI,MAAM;IAIxB,WAAW,IAAI,IAAI,GAAG,SAAS;IAI/B,cAAc,IAAI,mBAAmB;IAI5C,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;OAEG;IAIU,GAAG;IAoJhB;;;OAGG;YACW,UAAU;IAgBxB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAML,IAAI,CAAC,KAAK,GAAE,4BAAwC;IASjE,OAAO,CAAC,oBAAoB;IAoB5B;;;OAGG;YACW,kBAAkB;IAiChC,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAmBzB;AASD,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"epoch-proving-job.d.ts","sourceRoot":"","sources":["../../src/job/epoch-proving-job.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAW,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,4BAA4B,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAIzC,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAI7F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,KAAK,mBAAmB,EAA+B,MAAM,6BAA6B,CAAC;AAEpG,MAAM,MAAM,sBAAsB,GAAG;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAY7C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAnBhB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,GAAG,CAAiD;IAC5D,OAAO,CAAC,IAAI,CAAS;IAErB,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAClD,MAAM,EAAE,WAAW,EACnB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,EACxD,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,IAAI,GAAG,SAAS,EAC1B,MAAM,EAAE,sBAAsB;IAOjC,KAAK,IAAI,MAAM;IAIf,QAAQ,IAAI,oBAAoB;IAIhC,cAAc,IAAI,MAAM;IAIxB,WAAW,IAAI,IAAI,GAAG,SAAS;IAI/B,cAAc,IAAI,mBAAmB;IAI5C,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;OAEG;IAIU,GAAG;IAiKhB;;;OAGG;YACW,UAAU;IAgBxB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAML,IAAI,CAAC,KAAK,GAAE,4BAAwC;IAQjE,OAAO,CAAC,oBAAoB;IAoB5B;;;OAGG;YACW,kBAAkB;IAiChC,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,iBAAiB;YAIX,UAAU;CAmBzB;AASD,OAAO,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
@@ -155,7 +155,11 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
155
155
  await this.prover.startNewBlock(block.number, globalVariables.timestamp, txs.length);
156
156
  // Process public fns
157
157
  const db = await this.createFork(block.number - 1, l1ToL2Messages);
158
- const publicProcessor = this.publicProcessorFactory.create(db, globalVariables, true);
158
+ const publicProcessor = this.publicProcessorFactory.create(db, globalVariables, {
159
+ skipFeeEnforcement: true,
160
+ clientInitiatedSimulation: false,
161
+ proverId: this.prover.getProverId().toField()
162
+ });
159
163
  const processed = await this.processTxs(publicProcessor, txs);
160
164
  await this.prover.addTxs(processed);
161
165
  await db.close();
@@ -177,6 +181,12 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
177
181
  duration: timer.ms()
178
182
  });
179
183
  this.progressState('publishing-proof');
184
+ if (this.config.skipSubmitProof) {
185
+ this.log.info(`Proof publishing is disabled. Dropping valid proof for epoch ${epochNumber} (blocks ${fromBlock} to ${toBlock})`);
186
+ this.state = 'completed';
187
+ this.metrics.recordProvingJob(executionTime, timer.ms(), epochSizeBlocks, epochSizeTxs);
188
+ return;
189
+ }
180
190
  const success = await this.publisher.submitEpochProof({
181
191
  fromBlock,
182
192
  toBlock,
@@ -243,7 +253,6 @@ import { validateEpochProvingJobData } from './epoch-proving-job-data.js';
243
253
  async stop(state = 'stopped') {
244
254
  this.state = state;
245
255
  this.prover.cancel();
246
- // TODO(palla/prover): Stop the publisher as well
247
256
  if (this.runPromise) {
248
257
  await this.runPromise;
249
258
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prover-node-publisher.d.ts","sourceRoot":"","sources":["../src/prover-node-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAoC,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAG3F,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAIzD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAOnF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,EAAE,CAAC;IACpB,UAAU,EAAE,EAAE,CAAC;IACf,YAAY,EAAE,EAAE,CAAC;IACjB,OAAO,EAAE,EAAE,CAAC;IACZ,QAAQ,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,wBAAwB,CAAC,CAAC;IAC3D,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAA6B;IAE5C,SAAS,CAAC,GAAG,yCAA+C;IAE5D,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IAEzC,SAAgB,SAAS,EAAE,SAAS,CAAC;gBAGnC,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,IAAI,EAAE;QACJ,cAAc,EAAE,cAAc,CAAC;QAC/B,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B;IAYI,iBAAiB;IAIxB;;;;;OAKG;IACI,SAAS;IAKhB,wDAAwD;IACjD,OAAO;IAIP,gBAAgB;IAIV,gBAAgB,CAAC,IAAI,EAAE;QAClC,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,sBAAsB,CAAC;QACrC,KAAK,EAAE,KAAK,CAAC;QACb,iBAAiB,EAAE,WAAW,CAAC;QAC/B,YAAY,EAAE,wBAAwB,EAAE,CAAC;KAC1C,GAAG,OAAO,CAAC,OAAO,CAAC;YAkDN,4BAA4B;YA0D5B,sBAAsB;IAyCpC,OAAO,CAAC,6BAA6B;IAyBrC,OAAO,CAAC,uBAAuB;cAwBf,kBAAkB;CAGnC"}
1
+ {"version":3,"file":"prover-node-publisher.d.ts","sourceRoot":"","sources":["../src/prover-node-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAoC,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAG3F,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAIzD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAOnF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,EAAE,CAAC;IACpB,UAAU,EAAE,EAAE,CAAC;IACf,YAAY,EAAE,EAAE,CAAC;IACjB,OAAO,EAAE,EAAE,CAAC;IACZ,QAAQ,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,wBAAwB,CAAC,CAAC;IAC3D,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAA6B;IAE5C,SAAS,CAAC,GAAG,yCAA+C;IAE5D,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IAEzC,SAAgB,SAAS,EAAE,SAAS,CAAC;gBAGnC,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,IAAI,EAAE;QACJ,cAAc,EAAE,cAAc,CAAC;QAC/B,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B;IAYI,iBAAiB;IAIxB;;;;;OAKG;IACI,SAAS;IAMhB,wDAAwD;IACjD,OAAO;IAIP,gBAAgB;IAIV,gBAAgB,CAAC,IAAI,EAAE;QAClC,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,sBAAsB,CAAC;QACrC,KAAK,EAAE,KAAK,CAAC;QACb,iBAAiB,EAAE,WAAW,CAAC;QAC/B,YAAY,EAAE,wBAAwB,EAAE,CAAC;KAC1C,GAAG,OAAO,CAAC,OAAO,CAAC;YAmDN,4BAA4B;YA0D5B,sBAAsB;IAyCpC,OAAO,CAAC,6BAA6B;IAyBrC,OAAO,CAAC,uBAAuB;cAwBf,kBAAkB;CAGnC"}
@@ -39,6 +39,7 @@ export class ProverNodePublisher {
39
39
  */ interrupt() {
40
40
  this.interrupted = true;
41
41
  this.interruptibleSleep.interrupt();
42
+ this.l1TxUtils.interrupt();
42
43
  }
43
44
  /** Restarts the publisher after calling `interrupt`. */ restart() {
44
45
  this.interrupted = false;
@@ -289,9 +289,10 @@ import { ProverNodeJobMetrics, ProverNodeRewardsMetrics } from './metrics.js';
289
289
  return header;
290
290
  }
291
291
  /** Extracted for testing purposes. */ doCreateEpochProvingJob(data, deadline, publicProcessorFactory, publisher, opts = {}) {
292
- const { proverNodeMaxParallelBlocksPerEpoch: parallelBlockLimit } = this.config;
292
+ const { proverNodeMaxParallelBlocksPerEpoch: parallelBlockLimit, proverNodeDisableProofPublish } = this.config;
293
293
  return new EpochProvingJob(data, this.worldState, this.prover.createEpochProver(), publicProcessorFactory, publisher, this.l2BlockSource, this.jobMetrics, deadline, {
294
294
  parallelBlockLimit,
295
+ skipSubmitProof: proverNodeDisableProofPublish,
295
296
  ...opts
296
297
  });
297
298
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/prover-node",
3
- "version": "3.0.0-nightly.20250930",
3
+ "version": "3.0.0-nightly.20251002",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -56,27 +56,27 @@
56
56
  ]
57
57
  },
58
58
  "dependencies": {
59
- "@aztec/archiver": "3.0.0-nightly.20250930",
60
- "@aztec/bb-prover": "3.0.0-nightly.20250930",
61
- "@aztec/blob-lib": "3.0.0-nightly.20250930",
62
- "@aztec/blob-sink": "3.0.0-nightly.20250930",
63
- "@aztec/constants": "3.0.0-nightly.20250930",
64
- "@aztec/epoch-cache": "3.0.0-nightly.20250930",
65
- "@aztec/ethereum": "3.0.0-nightly.20250930",
66
- "@aztec/foundation": "3.0.0-nightly.20250930",
67
- "@aztec/kv-store": "3.0.0-nightly.20250930",
68
- "@aztec/l1-artifacts": "3.0.0-nightly.20250930",
69
- "@aztec/node-keystore": "3.0.0-nightly.20250930",
70
- "@aztec/node-lib": "3.0.0-nightly.20250930",
71
- "@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20250930",
72
- "@aztec/p2p": "3.0.0-nightly.20250930",
73
- "@aztec/protocol-contracts": "3.0.0-nightly.20250930",
74
- "@aztec/prover-client": "3.0.0-nightly.20250930",
75
- "@aztec/sequencer-client": "3.0.0-nightly.20250930",
76
- "@aztec/simulator": "3.0.0-nightly.20250930",
77
- "@aztec/stdlib": "3.0.0-nightly.20250930",
78
- "@aztec/telemetry-client": "3.0.0-nightly.20250930",
79
- "@aztec/world-state": "3.0.0-nightly.20250930",
59
+ "@aztec/archiver": "3.0.0-nightly.20251002",
60
+ "@aztec/bb-prover": "3.0.0-nightly.20251002",
61
+ "@aztec/blob-lib": "3.0.0-nightly.20251002",
62
+ "@aztec/blob-sink": "3.0.0-nightly.20251002",
63
+ "@aztec/constants": "3.0.0-nightly.20251002",
64
+ "@aztec/epoch-cache": "3.0.0-nightly.20251002",
65
+ "@aztec/ethereum": "3.0.0-nightly.20251002",
66
+ "@aztec/foundation": "3.0.0-nightly.20251002",
67
+ "@aztec/kv-store": "3.0.0-nightly.20251002",
68
+ "@aztec/l1-artifacts": "3.0.0-nightly.20251002",
69
+ "@aztec/node-keystore": "3.0.0-nightly.20251002",
70
+ "@aztec/node-lib": "3.0.0-nightly.20251002",
71
+ "@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20251002",
72
+ "@aztec/p2p": "3.0.0-nightly.20251002",
73
+ "@aztec/protocol-contracts": "3.0.0-nightly.20251002",
74
+ "@aztec/prover-client": "3.0.0-nightly.20251002",
75
+ "@aztec/sequencer-client": "3.0.0-nightly.20251002",
76
+ "@aztec/simulator": "3.0.0-nightly.20251002",
77
+ "@aztec/stdlib": "3.0.0-nightly.20251002",
78
+ "@aztec/telemetry-client": "3.0.0-nightly.20251002",
79
+ "@aztec/world-state": "3.0.0-nightly.20251002",
80
80
  "source-map-support": "^0.5.21",
81
81
  "tslib": "^2.4.0",
82
82
  "viem": "2.23.7"
package/src/config.ts CHANGED
@@ -1,7 +1,12 @@
1
1
  import { type ArchiverConfig, archiverConfigMappings } from '@aztec/archiver/config';
2
2
  import type { ACVMConfig, BBConfig } from '@aztec/bb-prover/config';
3
3
  import { type GenesisStateConfig, genesisStateConfigMappings } from '@aztec/ethereum';
4
- import { type ConfigMappingsType, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
4
+ import {
5
+ type ConfigMappingsType,
6
+ booleanConfigHelper,
7
+ getConfigFromMappings,
8
+ numberConfigHelper,
9
+ } from '@aztec/foundation/config';
5
10
  import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
6
11
  import { type KeyStore, type KeyStoreConfig, ethPrivateKeySchema, keyStoreConfigMappings } from '@aztec/node-keystore';
7
12
  import { type SharedNodeConfig, sharedNodeConfigMappings } from '@aztec/node-lib/config';
@@ -39,6 +44,7 @@ export type SpecificProverNodeConfig = {
39
44
  proverNodeMaxParallelBlocksPerEpoch: number;
40
45
  proverNodeFailedEpochStore: string | undefined;
41
46
  proverNodeEpochProvingDelayMs: number | undefined;
47
+ proverNodeDisableProofPublish?: boolean;
42
48
  txGatheringTimeoutMs: number;
43
49
  txGatheringIntervalMs: number;
44
50
  txGatheringBatchSize: number;
@@ -90,6 +96,11 @@ const specificProverNodeConfigMappings: ConfigMappingsType<SpecificProverNodeCon
90
96
  description: 'How long to wait for tx data to be available before giving up',
91
97
  ...numberConfigHelper(120_000),
92
98
  },
99
+ proverNodeDisableProofPublish: {
100
+ env: 'PROVER_NODE_DISABLE_PROOF_PUBLISH',
101
+ description: 'Whether the prover node skips publishing proofs to L1',
102
+ ...booleanConfigHelper(false),
103
+ },
93
104
  };
94
105
 
95
106
  export const proverNodeConfigMappings: ConfigMappingsType<ProverNodeConfig> = {
@@ -27,6 +27,12 @@ import type { ProverNodeJobMetrics } from '../metrics.js';
27
27
  import type { ProverNodePublisher } from '../prover-node-publisher.js';
28
28
  import { type EpochProvingJobData, validateEpochProvingJobData } from './epoch-proving-job-data.js';
29
29
 
30
+ export type EpochProvingJobOptions = {
31
+ parallelBlockLimit?: number;
32
+ skipEpochCheck?: boolean;
33
+ skipSubmitProof?: boolean;
34
+ };
35
+
30
36
  /**
31
37
  * Job that grabs a range of blocks from the unfinalized chain from L1, gets their txs given their hashes,
32
38
  * re-executes their public calls, generates a rollup proof, and submits it to L1. This job will update the
@@ -52,7 +58,7 @@ export class EpochProvingJob implements Traceable {
52
58
  private l2BlockSource: L2BlockSource | undefined,
53
59
  private metrics: ProverNodeJobMetrics,
54
60
  private deadline: Date | undefined,
55
- private config: { parallelBlockLimit?: number; skipEpochCheck?: boolean },
61
+ private config: EpochProvingJobOptions,
56
62
  ) {
57
63
  validateEpochProvingJobData(data);
58
64
  this.uuid = crypto.randomUUID();
@@ -186,7 +192,11 @@ export class EpochProvingJob implements Traceable {
186
192
 
187
193
  // Process public fns
188
194
  const db = await this.createFork(block.number - 1, l1ToL2Messages);
189
- const publicProcessor = this.publicProcessorFactory.create(db, globalVariables, true);
195
+ const publicProcessor = this.publicProcessorFactory.create(db, globalVariables, {
196
+ skipFeeEnforcement: true,
197
+ clientInitiatedSimulation: false,
198
+ proverId: this.prover.getProverId().toField(),
199
+ });
190
200
  const processed = await this.processTxs(publicProcessor, txs);
191
201
  await this.prover.addTxs(processed);
192
202
  await db.close();
@@ -209,6 +219,15 @@ export class EpochProvingJob implements Traceable {
209
219
 
210
220
  this.progressState('publishing-proof');
211
221
 
222
+ if (this.config.skipSubmitProof) {
223
+ this.log.info(
224
+ `Proof publishing is disabled. Dropping valid proof for epoch ${epochNumber} (blocks ${fromBlock} to ${toBlock})`,
225
+ );
226
+ this.state = 'completed';
227
+ this.metrics.recordProvingJob(executionTime, timer.ms(), epochSizeBlocks, epochSizeTxs);
228
+ return;
229
+ }
230
+
212
231
  const success = await this.publisher.submitEpochProof({
213
232
  fromBlock,
214
233
  toBlock,
@@ -283,7 +302,6 @@ export class EpochProvingJob implements Traceable {
283
302
  public async stop(state: EpochProvingJobTerminalState = 'stopped') {
284
303
  this.state = state;
285
304
  this.prover.cancel();
286
- // TODO(palla/prover): Stop the publisher as well
287
305
  if (this.runPromise) {
288
306
  await this.runPromise;
289
307
  }
@@ -77,6 +77,7 @@ export class ProverNodePublisher {
77
77
  public interrupt() {
78
78
  this.interrupted = true;
79
79
  this.interruptibleSleep.interrupt();
80
+ this.l1TxUtils.interrupt();
80
81
  }
81
82
 
82
83
  /** Restarts the publisher after calling `interrupt`. */
@@ -99,6 +100,7 @@ export class ProverNodePublisher {
99
100
  }): Promise<boolean> {
100
101
  const { epochNumber, fromBlock, toBlock } = args;
101
102
  const ctx = { epochNumber, fromBlock, toBlock };
103
+
102
104
  if (!this.interrupted) {
103
105
  const timer = new Timer();
104
106
  // Validate epoch proof range and hashes are correct before submitting
@@ -367,7 +367,7 @@ export class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable
367
367
  publisher: ProverNodePublisher,
368
368
  opts: { skipEpochCheck?: boolean } = {},
369
369
  ) {
370
- const { proverNodeMaxParallelBlocksPerEpoch: parallelBlockLimit } = this.config;
370
+ const { proverNodeMaxParallelBlocksPerEpoch: parallelBlockLimit, proverNodeDisableProofPublish } = this.config;
371
371
  return new EpochProvingJob(
372
372
  data,
373
373
  this.worldState,
@@ -377,7 +377,7 @@ export class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable
377
377
  this.l2BlockSource,
378
378
  this.jobMetrics,
379
379
  deadline,
380
- { parallelBlockLimit, ...opts },
380
+ { parallelBlockLimit, skipSubmitProof: proverNodeDisableProofPublish, ...opts },
381
381
  );
382
382
  }
383
383