@aztec/prover-node 0.0.1-commit.2f68f620 → 0.0.1-commit.3100065

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +511 -0
  2. package/dest/actions/rerun-epoch-proving-job.d.ts +3 -3
  3. package/dest/actions/rerun-epoch-proving-job.d.ts.map +1 -1
  4. package/dest/actions/rerun-epoch-proving-job.js +106 -104
  5. package/dest/checkpoint-store.d.ts +88 -0
  6. package/dest/checkpoint-store.d.ts.map +1 -0
  7. package/dest/checkpoint-store.js +169 -0
  8. package/dest/config.d.ts +1 -3
  9. package/dest/config.d.ts.map +1 -1
  10. package/dest/config.js +1 -8
  11. package/dest/factory.d.ts +1 -1
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +1 -7
  14. package/dest/index.d.ts +2 -1
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +1 -0
  17. package/dest/job/checkpoint-prover.d.ts +124 -0
  18. package/dest/job/checkpoint-prover.d.ts.map +1 -0
  19. package/dest/job/checkpoint-prover.js +330 -0
  20. package/dest/job/epoch-session.d.ts +146 -0
  21. package/dest/job/epoch-session.d.ts.map +1 -0
  22. package/dest/job/epoch-session.js +720 -0
  23. package/dest/job/top-tree-job.d.ts +82 -0
  24. package/dest/job/top-tree-job.d.ts.map +1 -0
  25. package/dest/job/top-tree-job.js +152 -0
  26. package/dest/metrics.d.ts +25 -8
  27. package/dest/metrics.d.ts.map +1 -1
  28. package/dest/metrics.js +64 -14
  29. package/dest/proof-publishing-service.d.ts +161 -0
  30. package/dest/proof-publishing-service.d.ts.map +1 -0
  31. package/dest/proof-publishing-service.js +335 -0
  32. package/dest/prover-node-publisher.d.ts +7 -22
  33. package/dest/prover-node-publisher.d.ts.map +1 -1
  34. package/dest/prover-node-publisher.js +41 -101
  35. package/dest/prover-node.d.ts +105 -67
  36. package/dest/prover-node.d.ts.map +1 -1
  37. package/dest/prover-node.js +472 -261
  38. package/dest/prover-publisher-factory.d.ts +1 -3
  39. package/dest/prover-publisher-factory.d.ts.map +1 -1
  40. package/dest/prover-publisher-factory.js +0 -1
  41. package/dest/session-manager.d.ts +158 -0
  42. package/dest/session-manager.d.ts.map +1 -0
  43. package/dest/session-manager.js +482 -0
  44. package/dest/test/index.d.ts +7 -6
  45. package/dest/test/index.d.ts.map +1 -1
  46. package/package.json +23 -23
  47. package/src/actions/rerun-epoch-proving-job.ts +102 -27
  48. package/src/checkpoint-store.ts +194 -0
  49. package/src/config.ts +2 -11
  50. package/src/factory.ts +0 -9
  51. package/src/index.ts +1 -0
  52. package/src/job/checkpoint-prover.ts +442 -0
  53. package/src/job/epoch-session.ts +436 -0
  54. package/src/job/top-tree-job.ts +227 -0
  55. package/src/metrics.ts +65 -23
  56. package/src/proof-publishing-service.ts +427 -0
  57. package/src/prover-node-publisher.ts +54 -127
  58. package/src/prover-node.ts +545 -282
  59. package/src/prover-publisher-factory.ts +0 -3
  60. package/src/session-manager.ts +583 -0
  61. package/src/test/index.ts +6 -6
  62. package/dest/job/epoch-proving-job.d.ts +0 -67
  63. package/dest/job/epoch-proving-job.d.ts.map +0 -1
  64. package/dest/job/epoch-proving-job.js +0 -912
  65. package/src/job/epoch-proving-job.ts +0 -531
@@ -1,120 +1,122 @@
1
- function _ts_add_disposable_resource(env, value, async) {
2
- if (value !== null && value !== void 0) {
3
- if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
- var dispose, inner;
5
- if (async) {
6
- if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
- dispose = value[Symbol.asyncDispose];
8
- }
9
- if (dispose === void 0) {
10
- if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
- dispose = value[Symbol.dispose];
12
- if (async) inner = dispose;
13
- }
14
- if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
- if (inner) dispose = function() {
16
- try {
17
- inner.call(this);
18
- } catch (e) {
19
- return Promise.reject(e);
20
- }
21
- };
22
- env.stack.push({
23
- value: value,
24
- dispose: dispose,
25
- async: async
26
- });
27
- } else if (async) {
28
- env.stack.push({
29
- async: true
30
- });
31
- }
32
- return value;
33
- }
34
- function _ts_dispose_resources(env) {
35
- var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
36
- var e = new Error(message);
37
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
38
- };
39
- return (_ts_dispose_resources = function _ts_dispose_resources(env) {
40
- function fail(e) {
41
- env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
42
- env.hasError = true;
43
- }
44
- var r, s = 0;
45
- function next() {
46
- while(r = env.stack.pop()){
47
- try {
48
- if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
49
- if (r.dispose) {
50
- var result = r.dispose.call(r.value);
51
- if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
52
- fail(e);
53
- return next();
54
- });
55
- } else s |= 1;
56
- } catch (e) {
57
- fail(e);
58
- }
59
- }
60
- if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
61
- if (env.hasError) throw env.error;
62
- }
63
- return next();
64
- })(env);
65
- }
66
1
  import { createArchiverStore, createContractDataSource } from '@aztec/archiver';
2
+ import { BlockNumber } from '@aztec/foundation/branded-types';
3
+ import { DateProvider } from '@aztec/foundation/timer';
67
4
  import { createProverClient } from '@aztec/prover-client';
68
5
  import { createAndStartProvingBroker } from '@aztec/prover-client/broker';
6
+ import { getLastSiblingPath } from '@aztec/prover-client/helpers';
7
+ import { ChonkCache } from '@aztec/prover-client/orchestrator';
69
8
  import { PublicProcessorFactory } from '@aztec/simulator/server';
9
+ import { getEpochAtSlot, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
10
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
70
11
  import { getTelemetryClient } from '@aztec/telemetry-client';
71
12
  import { createWorldState } from '@aztec/world-state';
72
13
  import { readFileSync } from 'fs';
14
+ import { CheckpointProver } from '../job/checkpoint-prover.js';
73
15
  import { deserializeEpochProvingJobData } from '../job/epoch-proving-job-data.js';
74
- import { EpochProvingJob } from '../job/epoch-proving-job.js';
16
+ import { EpochSession } from '../job/epoch-session.js';
75
17
  import { ProverNodeJobMetrics } from '../metrics.js';
76
18
  /**
77
19
  * Given a local folder where `downloadEpochProvingJob` was called, creates a new archiver and world state
78
- * using the state snapshots, and creates a new epoch proving job to prove the downloaded proving job.
20
+ * using the state snapshots, and creates a new epoch proving session to prove the downloaded proving job.
79
21
  * Proving is done with a local proving broker and agents as specified by the config.
80
22
  */ export async function rerunEpochProvingJob(localPath, log, config, genesis) {
81
- const env = {
82
- stack: [],
83
- error: void 0,
84
- hasError: false
23
+ const jobData = deserializeEpochProvingJobData(readFileSync(localPath));
24
+ log.info(`Loaded proving job data for epoch ${jobData.epochNumber}`);
25
+ const telemetry = getTelemetryClient();
26
+ const metrics = new ProverNodeJobMetrics(telemetry.getMeter('prover-job'), telemetry.getTracer('prover-job'));
27
+ const worldState = await createWorldState(config, genesis);
28
+ const initialBlockHash = await worldState.getInitialHeader().hash();
29
+ const archiver = await createArchiverStore(config, initialBlockHash);
30
+ const publicProcessorFactory = new PublicProcessorFactory(createContractDataSource(archiver), undefined, undefined, log.getBindings());
31
+ // Local rerun never publishes — stub the service so submit() always resolves 'published'
32
+ // and withdraw is a no-op.
33
+ const publishingService = {
34
+ submit: ()=>Promise.resolve('published'),
35
+ withdraw: ()=>{}
85
36
  };
86
- try {
87
- const jobData = deserializeEpochProvingJobData(readFileSync(localPath));
88
- log.info(`Loaded proving job data for epoch ${jobData.epochNumber}`);
89
- const telemetry = getTelemetryClient();
90
- const metrics = new ProverNodeJobMetrics(telemetry.getMeter('prover-job'), telemetry.getTracer('prover-job'));
91
- const worldState = _ts_add_disposable_resource(env, await createWorldState(config, genesis), true);
92
- const initialBlockHash = await worldState.getInitialHeader().hash();
93
- const archiver = await createArchiverStore(config, initialBlockHash);
94
- const publicProcessorFactory = new PublicProcessorFactory(createContractDataSource(archiver), undefined, undefined, log.getBindings());
95
- const publisher = {
96
- submitEpochProof: ()=>Promise.resolve(true),
97
- analyzeEpochProofSubmission: ()=>Promise.resolve()
98
- };
99
- const l2BlockSourceForReorgDetection = undefined;
100
- const deadline = undefined;
101
- // This starts a local proving broker that does not get exposed as a service. This should be good enough for
102
- // smallish epochs to be proven if we run on a large machine, but as epochs grow larger, we may want to switch
103
- // this out for a live proving broker with multiple agents that we can connect to.
104
- const broker = await createAndStartProvingBroker(config, telemetry);
105
- const prover = await createProverClient(config, worldState, broker, telemetry);
106
- const provingJob = new EpochProvingJob(jobData, worldState, prover.createEpochProver(), publicProcessorFactory, publisher, l2BlockSourceForReorgDetection, metrics, deadline, {
107
- skipEpochCheck: true
108
- }, log.getBindings());
109
- log.info(`Rerunning epoch proving job for epoch ${jobData.epochNumber}`);
110
- await provingJob.run();
111
- log.info(`Completed job for epoch ${jobData.epochNumber} with status ${provingJob.getState()}`);
112
- return provingJob.getState();
113
- } catch (e) {
114
- env.error = e;
115
- env.hasError = true;
116
- } finally{
117
- const result = _ts_dispose_resources(env);
118
- if (result) await result;
37
+ const broker = await createAndStartProvingBroker(config, telemetry);
38
+ const prover = await createProverClient(config, worldState, broker, telemetry);
39
+ const chonkCache = new ChonkCache(log.getBindings());
40
+ const txProvider = makeReplayingTxProvider(jobData.txs);
41
+ log.info(`Rerunning epoch proving for epoch ${jobData.epochNumber}`);
42
+ const provers = [];
43
+ for(let i = 0; i < jobData.checkpoints.length; i++){
44
+ const checkpoint = jobData.checkpoints[i];
45
+ const previousBlockHeader = i === 0 ? jobData.previousBlockHeader : jobData.checkpoints[i - 1].blocks.at(-1).header;
46
+ const l1ToL2Messages = jobData.l1ToL2Messages[checkpoint.number] ?? [];
47
+ const previousArchiveSiblingPath = await getLastSiblingPath(MerkleTreeId.ARCHIVE, worldState.getSnapshot(BlockNumber(checkpoint.blocks[0].number - 1)));
48
+ const attestations = checkpoint.number === jobData.checkpoints.at(-1).number ? jobData.attestations : [];
49
+ provers.push(new CheckpointProver({
50
+ checkpoint,
51
+ epochNumber: jobData.epochNumber,
52
+ attestations,
53
+ previousBlockHeader,
54
+ l1ToL2Messages,
55
+ previousArchiveSiblingPath
56
+ }, {
57
+ proverFactory: prover,
58
+ chonkCache,
59
+ publicProcessorFactory,
60
+ dbProvider: worldState,
61
+ txProvider,
62
+ dateProvider: new DateProvider(),
63
+ proverId: prover.getProverId(),
64
+ metrics,
65
+ txGatheringTimeoutMs: 120_000,
66
+ deadline: undefined,
67
+ log
68
+ }));
119
69
  }
70
+ const l1Constants = {
71
+ epochDuration: config.aztecEpochDuration
72
+ };
73
+ const [fromSlot, toSlot] = getSlotRangeForEpoch(jobData.epochNumber, l1Constants);
74
+ const spec = {
75
+ kind: 'full',
76
+ epochNumber: jobData.epochNumber,
77
+ fromSlot,
78
+ toSlot
79
+ };
80
+ const session = new EpochSession(spec, provers, {
81
+ proverFactory: prover,
82
+ proverId: prover.getProverId(),
83
+ publishingService,
84
+ metrics,
85
+ dateProvider: new DateProvider(),
86
+ deadline: undefined,
87
+ config: {},
88
+ bindings: log.getBindings()
89
+ });
90
+ const finalState = await session.start();
91
+ log.info(`Completed proving for epoch ${jobData.epochNumber} with status ${finalState}`, {
92
+ derivedEpoch: getEpochAtSlot(provers[0].slotNumber, l1Constants)
93
+ });
94
+ return finalState;
95
+ }
96
+ /** Build a synthetic ITxProvider that returns the supplied txs map by lookup. */ function makeReplayingTxProvider(txs) {
97
+ const lookup = (hashes)=>{
98
+ const found = [];
99
+ const missing = [];
100
+ for (const hash of hashes){
101
+ const tx = txs.get(hash.toString());
102
+ if (tx) {
103
+ found.push(tx);
104
+ } else {
105
+ missing.push(hash);
106
+ }
107
+ }
108
+ return {
109
+ txs: found,
110
+ missingTxs: missing
111
+ };
112
+ };
113
+ return {
114
+ getAvailableTxs: (hashes)=>Promise.resolve(lookup(hashes)),
115
+ hasTxs: (hashes)=>Promise.resolve(hashes.map((h)=>txs.has(h.toString()))),
116
+ getTxsForBlockProposal: ()=>Promise.resolve({
117
+ txs: [],
118
+ missingTxs: []
119
+ }),
120
+ getTxsForBlock: (block)=>Promise.resolve(lookup(block.body.txEffects.map((e)=>e.txHash)))
121
+ };
120
122
  }
@@ -0,0 +1,88 @@
1
+ import type { BlockNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { type LoggerBindings } from '@aztec/foundation/log';
3
+ import type { L2BlockSource } from '@aztec/stdlib/block';
4
+ import type { Checkpoint } from '@aztec/stdlib/checkpoint';
5
+ import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
6
+ import { CheckpointProver, type CheckpointProverArgs, type CheckpointProverDeps } from './job/checkpoint-prover.js';
7
+ /** Register-time data needed to construct a `CheckpointProver` (everything except the checkpoint + epoch). */
8
+ export type RegisterCheckpointData = Omit<CheckpointProverArgs, 'checkpoint' | 'epochNumber'>;
9
+ /** Factory used by the store to construct new provers. Tests can inject a stub. */
10
+ export type CheckpointProverFactory = (args: CheckpointProverArgs, deps: CheckpointProverDeps) => CheckpointProver;
11
+ /**
12
+ * Prover-node-wide registry of `CheckpointProver` instances, content-addressed by
13
+ * `(checkpoint number, slot, checkpoint archive root)`.
14
+ *
15
+ * The store survives every epoch / session boundary. A prover lives from its first
16
+ * `addOrUpdate` call until either:
17
+ * - its checkpoint is pruned by an L1 reorg (`cancelAndRemoveAboveBlock`), or
18
+ * - its epoch's proof-submission window has closed (`reapExpired`), so the proof could no
19
+ * longer be accepted on L1 even if produced.
20
+ *
21
+ * A prover's sub-tree work forks world-state per block and does not survive a prune of a base
22
+ * block, so there is nothing to preserve across a reorg: a pruned prover is cancelled and
23
+ * dropped, and a re-add (even of identical content) constructs a fresh prover.
24
+ */
25
+ export declare class CheckpointStore {
26
+ private readonly l2BlockSource;
27
+ private readonly proverDeps;
28
+ private readonly proverFactoryFn;
29
+ private readonly provers;
30
+ /**
31
+ * Teardowns of provers already removed from `provers` (by prune or reap), awaited on `stop()`.
32
+ * Keyed by a monotonic id rather than the prover's content id: a prune-then-re-add can leave two
33
+ * teardowns for the same content id in flight at once, which a content-id key would clobber.
34
+ */
35
+ private readonly pendingTeardowns;
36
+ private nextTeardownId;
37
+ private readonly log;
38
+ constructor(l2BlockSource: Pick<L2BlockSource, 'getL1Constants'>, proverDeps: Omit<CheckpointProverDeps, 'log'>, bindings?: LoggerBindings, proverFactoryFn?: CheckpointProverFactory);
39
+ start(): Promise<void>;
40
+ stop(): Promise<void>;
41
+ /**
42
+ * Tracks the teardown of a prover just removed from the store so `stop()` can await it. The entry
43
+ * removes itself once teardown settles, so the map stays bounded by the number in flight.
44
+ */
45
+ private trackTeardown;
46
+ /**
47
+ * Registers a checkpoint with the store. If a prover already exists for the
48
+ * `(number, slot, archive root)` content key it is reused (an at-least-once re-registration of
49
+ * still-canonical content); otherwise a new prover is constructed.
50
+ */
51
+ addOrUpdate(checkpoint: Checkpoint, data: RegisterCheckpointData): Promise<CheckpointProver>;
52
+ /**
53
+ * Cancels and removes every prover that holds a block above the prune target. A checkpoint is orphaned by a prune to
54
+ * block `targetBlockNumber` iff its last block sits above the target — including a checkpoint whose range straddles
55
+ * the target (partially orphaned), which block-range marking catches without boundary ambiguity. Keying off the
56
+ * surviving block number (rather than a checkpoint number) is correct even when the source has already
57
+ * re-checkpointed past the divergence: the prune event reports the highest surviving block, which by construction
58
+ * survives on the source, whereas the source's current checkpointed tip can sit above the prune target.
59
+ *
60
+ * The prover's in-flight sub-tree work forks world-state per block and faults once its base block is pruned, so it
61
+ * cannot be reused; it is cancelled (aborting the fork reads) and dropped. A subsequent re-add constructs a fresh
62
+ * prover. Returns the removed provers.
63
+ */
64
+ cancelAndRemoveAboveBlock(targetBlockNumber: BlockNumber): CheckpointProver[];
65
+ /**
66
+ * Drops provers whose epoch is at or below the supplied expired epoch. Once an epoch's
67
+ * proof-submission window has closed, its proof can no longer be accepted on L1, so the
68
+ * prover is no longer needed.
69
+ */
70
+ reapExpired(expiredEpoch: EpochNumber): void;
71
+ /** Returns the prover with the supplied id, or undefined. */
72
+ get(id: string): CheckpointProver | undefined;
73
+ /** Returns the prover for the supplied checkpoint (by its content-addressed id), or undefined. */
74
+ getByCheckpoint(checkpoint: Checkpoint): CheckpointProver | undefined;
75
+ /** Every prover currently in the store, in insertion order. */
76
+ listAll(): CheckpointProver[];
77
+ /** Provers in the store, sorted by checkpoint number. */
78
+ list(): CheckpointProver[];
79
+ /**
80
+ * Provers whose slot is in the supplied epoch's slot range, sorted by checkpoint number.
81
+ */
82
+ listForEpoch(epoch: EpochNumber): Promise<CheckpointProver[]>;
83
+ /** Provers whose slot falls within `[fromSlot, toSlot]`, sorted by checkpoint number. */
84
+ listInSlotRange(fromSlot: SlotNumber, toSlot: SlotNumber): CheckpointProver[];
85
+ }
86
+ /** Sub-set of `L1RollupConstants` actually consumed by the store's slot helpers. */
87
+ export type CheckpointStoreL1Constants = Pick<L1RollupConstants, 'epochDuration'>;
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC1zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NoZWNrcG9pbnQtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFvQixXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUcsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQ3ZGLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUF3QyxNQUFNLDZCQUE2QixDQUFDO0FBRTNHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLG9CQUFvQixFQUFFLEtBQUssb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVwSCw4R0FBOEc7QUFDOUcsTUFBTSxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUM7QUFFOUYsbUZBQW1GO0FBQ25GLE1BQU0sTUFBTSx1QkFBdUIsR0FBRyxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEtBQUssZ0JBQWdCLENBQUM7QUFFbkg7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILHFCQUFhLGVBQWU7SUFZeEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhO0lBQzlCLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVTtJQUUzQixPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWU7SUFkbEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQXVDO0lBQy9EOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFvQztJQUNyRSxPQUFPLENBQUMsY0FBYyxDQUFLO0lBQzNCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFTO0lBRTdCLFlBQ21CLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLEVBQ3BELFVBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLEVBQzlELFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFDUixlQUFlLEdBQUUsdUJBQTBFLEVBRzdHO0lBRU0sS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFNUI7SUFFWSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQVNqQztJQUVEOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxhQUFhO0lBT3JCOzs7O09BSUc7SUFDVSxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBMEJ4RztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0kseUJBQXlCLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxHQUFHLGdCQUFnQixFQUFFLENBWW5GO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FpQmxEO0lBRUQsNkRBQTZEO0lBQ3RELEdBQUcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxHQUFHLGdCQUFnQixHQUFHLFNBQVMsQ0FFbkQ7SUFFRCxrR0FBa0c7SUFDM0YsZUFBZSxDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsZ0JBQWdCLEdBQUcsU0FBUyxDQUUzRTtJQUVELCtEQUErRDtJQUN4RCxPQUFPLElBQUksZ0JBQWdCLEVBQUUsQ0FFbkM7SUFFRCx5REFBeUQ7SUFDbEQsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBRWhDO0lBRUQ7O09BRUc7SUFDVSxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUl6RTtJQUVELHlGQUF5RjtJQUNsRixlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxHQUFHLGdCQUFnQixFQUFFLENBRW5GO0NBQ0Y7QUFFRCxvRkFBb0Y7QUFDcEYsTUFBTSxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-store.d.ts","sourceRoot":"","sources":["../src/checkpoint-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC9G,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,KAAK,iBAAiB,EAAwC,MAAM,6BAA6B,CAAC;AAE3G,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEpH,8GAA8G;AAC9G,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,EAAE,YAAY,GAAG,aAAa,CAAC,CAAC;AAE9F,mFAAmF;AACnF,MAAM,MAAM,uBAAuB,GAAG,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,KAAK,gBAAgB,CAAC;AAEnH;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAe;IAYxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAE3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAdlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoC;IACrE,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,YACmB,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,EACpD,UAAU,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,EAC9D,QAAQ,CAAC,EAAE,cAAc,EACR,eAAe,GAAE,uBAA0E,EAG7G;IAEM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE5B;IAEY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CASjC;IAED;;;OAGG;IACH,OAAO,CAAC,aAAa;IAOrB;;;;OAIG;IACU,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0BxG;IAED;;;;;;;;;;;OAWG;IACI,yBAAyB,CAAC,iBAAiB,EAAE,WAAW,GAAG,gBAAgB,EAAE,CAYnF;IAED;;;;OAIG;IACI,WAAW,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAiBlD;IAED,6DAA6D;IACtD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEnD;IAED,kGAAkG;IAC3F,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS,CAE3E;IAED,+DAA+D;IACxD,OAAO,IAAI,gBAAgB,EAAE,CAEnC;IAED,yDAAyD;IAClD,IAAI,IAAI,gBAAgB,EAAE,CAEhC;IAED;;OAEG;IACU,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAIzE;IAED,yFAAyF;IAClF,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAEnF;CACF;AAED,oFAAoF;AACpF,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC"}
@@ -0,0 +1,169 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { getEpochAtSlot, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
3
+ import { CheckpointProver } from './job/checkpoint-prover.js';
4
+ /**
5
+ * Prover-node-wide registry of `CheckpointProver` instances, content-addressed by
6
+ * `(checkpoint number, slot, checkpoint archive root)`.
7
+ *
8
+ * The store survives every epoch / session boundary. A prover lives from its first
9
+ * `addOrUpdate` call until either:
10
+ * - its checkpoint is pruned by an L1 reorg (`cancelAndRemoveAboveBlock`), or
11
+ * - its epoch's proof-submission window has closed (`reapExpired`), so the proof could no
12
+ * longer be accepted on L1 even if produced.
13
+ *
14
+ * A prover's sub-tree work forks world-state per block and does not survive a prune of a base
15
+ * block, so there is nothing to preserve across a reorg: a pruned prover is cancelled and
16
+ * dropped, and a re-add (even of identical content) constructs a fresh prover.
17
+ */ export class CheckpointStore {
18
+ l2BlockSource;
19
+ proverDeps;
20
+ proverFactoryFn;
21
+ provers;
22
+ /**
23
+ * Teardowns of provers already removed from `provers` (by prune or reap), awaited on `stop()`.
24
+ * Keyed by a monotonic id rather than the prover's content id: a prune-then-re-add can leave two
25
+ * teardowns for the same content id in flight at once, which a content-id key would clobber.
26
+ */ pendingTeardowns;
27
+ nextTeardownId;
28
+ log;
29
+ constructor(l2BlockSource, proverDeps, bindings, proverFactoryFn = (args, deps)=>new CheckpointProver(args, deps)){
30
+ this.l2BlockSource = l2BlockSource;
31
+ this.proverDeps = proverDeps;
32
+ this.proverFactoryFn = proverFactoryFn;
33
+ this.provers = new Map();
34
+ this.pendingTeardowns = new Map();
35
+ this.nextTeardownId = 0;
36
+ this.log = createLogger('prover-node:checkpoint-store', bindings);
37
+ }
38
+ start() {
39
+ return Promise.resolve();
40
+ }
41
+ async stop() {
42
+ // Cancel every live prover, then await both their teardown and any still in flight for provers
43
+ // already removed by a prune or reap.
44
+ const provers = Array.from(this.provers.values());
45
+ this.provers.clear();
46
+ for (const prover of provers){
47
+ prover.cancel();
48
+ }
49
+ await Promise.allSettled([
50
+ ...provers.map((p)=>p.whenDone()),
51
+ ...this.pendingTeardowns.values()
52
+ ]);
53
+ }
54
+ /**
55
+ * Tracks the teardown of a prover just removed from the store so `stop()` can await it. The entry
56
+ * removes itself once teardown settles, so the map stays bounded by the number in flight.
57
+ */ trackTeardown(prover) {
58
+ const id = this.nextTeardownId++;
59
+ const done = prover.whenDone();
60
+ this.pendingTeardowns.set(id, done);
61
+ void done.finally(()=>this.pendingTeardowns.delete(id));
62
+ }
63
+ /**
64
+ * Registers a checkpoint with the store. If a prover already exists for the
65
+ * `(number, slot, archive root)` content key it is reused (an at-least-once re-registration of
66
+ * still-canonical content); otherwise a new prover is constructed.
67
+ */ async addOrUpdate(checkpoint, data) {
68
+ const l1Constants = await this.l2BlockSource.getL1Constants();
69
+ const epochNumber = getEpochAtSlot(checkpoint.header.slotNumber, l1Constants);
70
+ const id = CheckpointProver.idFor(checkpoint);
71
+ const existing = this.provers.get(id);
72
+ if (existing) {
73
+ return existing;
74
+ }
75
+ // At most one canonical checkpoint per slot. A different checkpoint at the same slot means the
76
+ // caller forgot to prune the old chain before adding the replacement — surface it rather than
77
+ // silently creating a parallel canonical chain. A pruned checkpoint has already been removed,
78
+ // so every prover still in the store is canonical.
79
+ for (const prover of this.provers.values()){
80
+ if (prover.slotNumber === checkpoint.header.slotNumber) {
81
+ throw new Error(`Cannot add checkpoint ${checkpoint.number} (archive ${checkpoint.archive.root}) at slot ${checkpoint.header.slotNumber}: ` + `a different checkpoint already occupies this slot. Prune it first.`);
82
+ }
83
+ }
84
+ const prover = this.proverFactoryFn({
85
+ ...data,
86
+ checkpoint,
87
+ epochNumber
88
+ }, {
89
+ ...this.proverDeps,
90
+ log: this.log
91
+ });
92
+ this.provers.set(id, prover);
93
+ return prover;
94
+ }
95
+ /**
96
+ * Cancels and removes every prover that holds a block above the prune target. A checkpoint is orphaned by a prune to
97
+ * block `targetBlockNumber` iff its last block sits above the target — including a checkpoint whose range straddles
98
+ * the target (partially orphaned), which block-range marking catches without boundary ambiguity. Keying off the
99
+ * surviving block number (rather than a checkpoint number) is correct even when the source has already
100
+ * re-checkpointed past the divergence: the prune event reports the highest surviving block, which by construction
101
+ * survives on the source, whereas the source's current checkpointed tip can sit above the prune target.
102
+ *
103
+ * The prover's in-flight sub-tree work forks world-state per block and faults once its base block is pruned, so it
104
+ * cannot be reused; it is cancelled (aborting the fork reads) and dropped. A subsequent re-add constructs a fresh
105
+ * prover. Returns the removed provers.
106
+ */ cancelAndRemoveAboveBlock(targetBlockNumber) {
107
+ const affected = [];
108
+ for (const [id, prover] of Array.from(this.provers.entries())){
109
+ const lastBlockNumber = prover.checkpoint.blocks.at(-1).number;
110
+ if (lastBlockNumber > targetBlockNumber) {
111
+ prover.cancel();
112
+ this.trackTeardown(prover);
113
+ this.provers.delete(id);
114
+ affected.push(prover);
115
+ }
116
+ }
117
+ return affected;
118
+ }
119
+ /**
120
+ * Drops provers whose epoch is at or below the supplied expired epoch. Once an epoch's
121
+ * proof-submission window has closed, its proof can no longer be accepted on L1, so the
122
+ * prover is no longer needed.
123
+ */ reapExpired(expiredEpoch) {
124
+ const reaped = [];
125
+ for (const [id, prover] of Array.from(this.provers.entries())){
126
+ if (prover.epochNumber <= expiredEpoch) {
127
+ reaped.push({
128
+ id,
129
+ checkpointNumber: prover.checkpoint.number,
130
+ epochNumber: prover.epochNumber
131
+ });
132
+ prover.cancel({
133
+ routine: true
134
+ });
135
+ this.trackTeardown(prover);
136
+ this.provers.delete(id);
137
+ }
138
+ }
139
+ if (reaped.length > 0) {
140
+ this.log.info(`Reaped ${reaped.length} expired CheckpointProver(s) for expiredEpoch ${expiredEpoch}`, {
141
+ expiredEpoch,
142
+ reapedCount: reaped.length,
143
+ reaped
144
+ });
145
+ }
146
+ }
147
+ /** Returns the prover with the supplied id, or undefined. */ get(id) {
148
+ return this.provers.get(id);
149
+ }
150
+ /** Returns the prover for the supplied checkpoint (by its content-addressed id), or undefined. */ getByCheckpoint(checkpoint) {
151
+ return this.provers.get(CheckpointProver.idFor(checkpoint));
152
+ }
153
+ /** Every prover currently in the store, in insertion order. */ listAll() {
154
+ return Array.from(this.provers.values());
155
+ }
156
+ /** Provers in the store, sorted by checkpoint number. */ list() {
157
+ return Array.from(this.provers.values()).sort((a, b)=>a.checkpoint.number - b.checkpoint.number);
158
+ }
159
+ /**
160
+ * Provers whose slot is in the supplied epoch's slot range, sorted by checkpoint number.
161
+ */ async listForEpoch(epoch) {
162
+ const l1Constants = await this.l2BlockSource.getL1Constants();
163
+ const [fromSlot, toSlot] = getSlotRangeForEpoch(epoch, l1Constants);
164
+ return this.listInSlotRange(fromSlot, toSlot);
165
+ }
166
+ /** Provers whose slot falls within `[fromSlot, toSlot]`, sorted by checkpoint number. */ listInSlotRange(fromSlot, toSlot) {
167
+ return this.list().filter((p)=>p.slotNumber >= fromSlot && p.slotNumber <= toSlot);
168
+ }
169
+ }
package/dest/config.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import type { ACVMConfig, BBConfig } from '@aztec/bb-prover/config';
2
2
  import { type ConfigMappingsType } from '@aztec/foundation/config';
3
- import { EthAddress } from '@aztec/foundation/eth-address';
4
3
  import { type KeyStoreConfig } from '@aztec/node-keystore/config';
5
4
  import type { KeyStore } from '@aztec/node-keystore/types';
6
5
  import { type SharedNodeConfig } from '@aztec/node-lib/config';
@@ -20,7 +19,6 @@ export type SpecificProverNodeConfig = {
20
19
  txGatheringIntervalMs: number;
21
20
  txGatheringBatchSize: number;
22
21
  txGatheringMaxParallelRequestsPerNode: number;
23
- proofSubmissionTargetAddress?: EthAddress;
24
22
  };
25
23
  export declare const specificProverNodeConfigMappings: ConfigMappingsType<SpecificProverNodeConfig>;
26
24
  export declare const proverNodeConfigMappings: ConfigMappingsType<ProverNodeConfig>;
@@ -28,4 +26,4 @@ export declare function getProverNodeConfigFromEnv(): ProverNodeConfig;
28
26
  export declare function getProverNodeBrokerConfigFromEnv(): ProverBrokerConfig;
29
27
  export declare function getProverNodeAgentConfigFromEnv(): ProverAgentConfig & BBConfig & ACVMConfig;
30
28
  export declare function createKeyStoreForProver(config: ProverNodeConfig): KeyStore | undefined;
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFLeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUEwQixNQUFNLDZCQUE2QixDQUFDO0FBRTFGLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUE0QixNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLE9BQU8sRUFDTCxLQUFLLGlCQUFpQixFQUN0QixLQUFLLGtCQUFrQixFQUd4QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLHNCQUFzQixFQUFnRCxNQUFNLDZCQUE2QixDQUFDO0FBQ3hILE9BQU8sRUFDTCxLQUFLLHFCQUFxQixFQUMxQixLQUFLLG9CQUFvQixFQUcxQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRixNQUFNLE1BQU0sZ0JBQWdCLEdBQUcsc0JBQXNCLEdBQ25ELHFCQUFxQixHQUNyQixvQkFBb0IsR0FDcEIsZUFBZSxHQUNmLGNBQWMsR0FDZCx3QkFBd0IsR0FDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBRTFDLE1BQU0sTUFBTSx3QkFBd0IsR0FBRztJQUNyQyx3QkFBd0IsRUFBRSxNQUFNLENBQUM7SUFDakMsMkJBQTJCLEVBQUUsTUFBTSxDQUFDO0lBQ3BDLG1DQUFtQyxFQUFFLE1BQU0sQ0FBQztJQUM1QywwQkFBMEIsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQy9DLDZCQUE2QixFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDbEQsNkJBQTZCLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDeEMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDO0lBQzdCLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztJQUM5QixvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDN0IscUNBQXFDLEVBQUUsTUFBTSxDQUFDO0lBQzlDLDRCQUE0QixDQUFDLEVBQUUsVUFBVSxDQUFDO0NBQzNDLENBQUM7QUFFRixlQUFPLE1BQU0sZ0NBQWdDLEVBQUUsa0JBQWtCLENBQUMsd0JBQXdCLENBMER6RixDQUFDO0FBRUYsZUFBTyxNQUFNLHdCQUF3QixFQUFFLGtCQUFrQixDQUFDLGdCQUFnQixDQVF6RSxDQUFDO0FBRUYsd0JBQWdCLDBCQUEwQixJQUFJLGdCQUFnQixDQUU3RDtBQUVELHdCQUFnQixnQ0FBZ0MsSUFBSSxrQkFBa0IsQ0FJckU7QUFFRCx3QkFBZ0IsK0JBQStCLElBQUksaUJBQWlCLEdBQUcsUUFBUSxHQUFHLFVBQVUsQ0FLM0Y7QUEwREQsd0JBQWdCLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsR0FBRyxRQUFRLEdBQUcsU0FBUyxDQVN0RiJ9
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsS0FBSyxrQkFBa0IsRUFLeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQTBCLE1BQU0sNkJBQTZCLENBQUM7QUFFMUYsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQTRCLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUNMLEtBQUssaUJBQWlCLEVBQ3RCLEtBQUssa0JBQWtCLEVBR3hCLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLEtBQUssc0JBQXNCLEVBQWdELE1BQU0sNkJBQTZCLENBQUM7QUFDeEgsT0FBTyxFQUNMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssb0JBQW9CLEVBRzFCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBRWxGLE1BQU0sTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsR0FDbkQscUJBQXFCLEdBQ3JCLG9CQUFvQixHQUNwQixlQUFlLEdBQ2YsY0FBYyxHQUNkLHdCQUF3QixHQUN4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFFMUMsTUFBTSxNQUFNLHdCQUF3QixHQUFHO0lBQ3JDLHdCQUF3QixFQUFFLE1BQU0sQ0FBQztJQUNqQywyQkFBMkIsRUFBRSxNQUFNLENBQUM7SUFDcEMsbUNBQW1DLEVBQUUsTUFBTSxDQUFDO0lBQzVDLDBCQUEwQixFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDL0MsNkJBQTZCLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUNsRCw2QkFBNkIsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUN4QyxvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDN0IscUJBQXFCLEVBQUUsTUFBTSxDQUFDO0lBQzlCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQztJQUM3QixxQ0FBcUMsRUFBRSxNQUFNLENBQUM7Q0FDL0MsQ0FBQztBQUVGLGVBQU8sTUFBTSxnQ0FBZ0MsRUFBRSxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FtRHpGLENBQUM7QUFFRixlQUFPLE1BQU0sd0JBQXdCLEVBQUUsa0JBQWtCLENBQUMsZ0JBQWdCLENBUXpFLENBQUM7QUFFRix3QkFBZ0IsMEJBQTBCLElBQUksZ0JBQWdCLENBRTdEO0FBRUQsd0JBQWdCLGdDQUFnQyxJQUFJLGtCQUFrQixDQUlyRTtBQUVELHdCQUFnQiwrQkFBK0IsSUFBSSxpQkFBaUIsR0FBRyxRQUFRLEdBQUcsVUFBVSxDQUszRjtBQTBERCx3QkFBZ0IsdUJBQXVCLENBQUMsTUFBTSxFQUFFLGdCQUFnQixHQUFHLFFBQVEsR0FBRyxTQUFTLENBU3RGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,6BAA6B,CAAC;AAE1F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,wBAAwB,CAAC;AACzF,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,KAAK,sBAAsB,EAAgD,MAAM,6BAA6B,CAAC;AACxH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAG1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAElF,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,GACnD,qBAAqB,GACrB,oBAAoB,GACpB,eAAe,GACf,cAAc,GACd,wBAAwB,GACxB,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;AAE1C,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;IAC9C,4BAA4B,CAAC,EAAE,UAAU,CAAC;CAC3C,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,kBAAkB,CAAC,wBAAwB,CA0DzF,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAQzE,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,CAStF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,6BAA6B,CAAC;AAE1F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,wBAAwB,CAAC;AACzF,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAGxB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,KAAK,sBAAsB,EAAgD,MAAM,6BAA6B,CAAC;AACxH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAG1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAElF,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,GACnD,qBAAqB,GACrB,oBAAoB,GACpB,eAAe,GACf,cAAc,GACd,wBAAwB,GACxB,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;AAE1C,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;AAEF,eAAO,MAAM,gCAAgC,EAAE,kBAAkB,CAAC,wBAAwB,CAmDzF,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,kBAAkB,CAAC,gBAAgB,CAQzE,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,CAStF"}
package/dest/config.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { booleanConfigHelper, getConfigFromMappings, numberConfigHelper, pickConfigMappings } from '@aztec/foundation/config';
2
- import { EthAddress } from '@aztec/foundation/eth-address';
3
2
  import { keyStoreConfigMappings } from '@aztec/node-keystore/config';
4
3
  import { ethPrivateKeySchema } from '@aztec/node-keystore/schemas';
5
4
  import { sharedNodeConfigMappings } from '@aztec/node-lib/config';
@@ -29,7 +28,7 @@ export const specificProverNodeConfigMappings = {
29
28
  defaultValue: undefined
30
29
  },
31
30
  proverNodeEpochProvingDelayMs: {
32
- description: 'Optional delay in milliseconds to wait before proving a new epoch',
31
+ description: 'Optional delay in milliseconds to wait for late-arriving events (e.g. reorgs) to settle before starting top-tree proving for an epoch',
33
32
  defaultValue: undefined
34
33
  },
35
34
  txGatheringIntervalMs: {
@@ -56,12 +55,6 @@ export const specificProverNodeConfigMappings = {
56
55
  env: 'PROVER_NODE_DISABLE_PROOF_PUBLISH',
57
56
  description: 'Whether the prover node skips publishing proofs to L1',
58
57
  ...booleanConfigHelper(false)
59
- },
60
- proofSubmissionTargetAddress: {
61
- env: 'PROVER_NODE_PROOF_SUBMISSION_TARGET_ADDRESS',
62
- description: 'Optional L1 address the submitEpochRootProof tx is sent to. Must expose the identical submitEpochRootProof ABI ' + 'and forward to the rollup. Defaults to the rollup address.',
63
- parseEnv: (val)=>EthAddress.fromString(val),
64
- defaultValue: undefined
65
58
  }
66
59
  };
67
60
  export const proverNodeConfigMappings = {
package/dest/factory.d.ts CHANGED
@@ -30,4 +30,4 @@ export type ProverNodeDeps = {
30
30
  };
31
31
  /** Creates a new prover node subsystem given a config and dependencies */
32
32
  export declare function createProverNode(userConfig: SpecificProverNodeConfig & ProverConfig & ProverClientUserConfig & ProverPublisherConfig & ProverTxSenderConfig, deps: ProverNodeDeps): Promise<ProverNode>;
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQTJCLEtBQUssc0JBQXNCLEVBQXNCLE1BQU0sc0JBQXNCLENBQUM7QUFFaEgsT0FBTyxFQUNMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssb0JBQW9CLEVBRTFCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxLQUFLLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBYSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUk5RixPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdkUsTUFBTSxNQUFNLGNBQWMsR0FBRztJQUMzQixTQUFTLENBQUMsRUFBRSxlQUFlLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2IsUUFBUSxFQUFFLFFBQVEsQ0FBQztJQUNuQixnQkFBZ0IsQ0FBQyxFQUFFLHNCQUFzQixDQUFDO0lBQzFDLE1BQU0sQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQzFCLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUN0QixZQUFZLENBQUMsRUFBRSxZQUFZLENBQUM7SUFDNUIsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUM7SUFDL0MsU0FBUyxFQUFFO1FBQUUsYUFBYSxJQUFJLFdBQVcsQ0FBQTtLQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztJQUNoQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDaEMsZUFBZSxDQUFDLEVBQUUsZUFBZSxDQUFDO0NBQ25DLENBQUM7QUFFRiwwRUFBMEU7QUFDMUUsd0JBQXNCLGdCQUFnQixDQUNwQyxVQUFVLEVBQUUsd0JBQXdCLEdBQ2xDLFlBQVksR0FDWixzQkFBc0IsR0FDdEIscUJBQXFCLEdBQ3JCLG9CQUFvQixFQUN0QixJQUFJLEVBQUUsY0FBYyx1QkF3SXJCIn0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQTJCLEtBQUssc0JBQXNCLEVBQXNCLE1BQU0sc0JBQXNCLENBQUM7QUFFaEgsT0FBTyxFQUNMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssb0JBQW9CLEVBRTFCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxLQUFLLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBYSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUk5RixPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdkUsTUFBTSxNQUFNLGNBQWMsR0FBRztJQUMzQixTQUFTLENBQUMsRUFBRSxlQUFlLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2IsUUFBUSxFQUFFLFFBQVEsQ0FBQztJQUNuQixnQkFBZ0IsQ0FBQyxFQUFFLHNCQUFzQixDQUFDO0lBQzFDLE1BQU0sQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQzFCLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUN0QixZQUFZLENBQUMsRUFBRSxZQUFZLENBQUM7SUFDNUIsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUM7SUFDL0MsU0FBUyxFQUFFO1FBQUUsYUFBYSxJQUFJLFdBQVcsQ0FBQTtLQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztJQUNoQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDaEMsZUFBZSxDQUFDLEVBQUUsZUFBZSxDQUFDO0NBQ25DLENBQUM7QUFFRiwwRUFBMEU7QUFDMUUsd0JBQXNCLGdCQUFnQixDQUNwQyxVQUFVLEVBQUUsd0JBQXdCLEdBQ2xDLFlBQVksR0FDWixzQkFBc0IsR0FDdEIscUJBQXFCLEdBQ3JCLG9CQUFvQixFQUN0QixJQUFJLEVBQUUsY0FBYyx1QkFnSXJCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGxD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAA2B,KAAK,sBAAsB,EAAsB,MAAM,sBAAsB,CAAC;AAEhH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAE1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAa,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAI9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,SAAS,EAAE;QAAE,aAAa,IAAI,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,UAAU,EAAE,mBAAmB,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,0EAA0E;AAC1E,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,wBAAwB,GAClC,YAAY,GACZ,sBAAsB,GACtB,qBAAqB,GACrB,oBAAoB,EACtB,IAAI,EAAE,cAAc,uBAwIrB"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGxD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAA2B,KAAK,sBAAsB,EAAsB,MAAM,sBAAsB,CAAC;AAEhH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAE1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAa,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAI9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,SAAS,EAAE;QAAE,aAAa,IAAI,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,UAAU,EAAE,mBAAmB,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,0EAA0E;AAC1E,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,wBAAwB,GAClC,YAAY,GACZ,sBAAsB,GACtB,qBAAqB,GACrB,oBAAoB,EACtB,IAAI,EAAE,cAAc,uBAgIrB"}
package/dest/factory.js CHANGED
@@ -12,7 +12,6 @@ import { createAndStartProvingBroker } from '@aztec/prover-client/broker';
12
12
  import { getPublisherConfigFromProverConfig } from '@aztec/sequencer-client';
13
13
  import { L1Metrics, getTelemetryClient } from '@aztec/telemetry-client';
14
14
  import { createPublicClient } from 'viem';
15
- import { EpochMonitor } from './monitors/epoch-monitor.js';
16
15
  import { ProverNode } from './prover-node.js';
17
16
  import { ProverPublisherFactory } from './prover-publisher-factory.js';
18
17
  /** Creates a new prover node subsystem given a config and dependencies */ export async function createProverNode(userConfig, deps) {
@@ -89,7 +88,6 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
89
88
  }
90
89
  const publisherFactory = deps.publisherFactory ?? new ProverPublisherFactory(config, {
91
90
  rollupContract,
92
- proofSubmissionTarget: config.proofSubmissionTargetAddress,
93
91
  publisherManager: new PublisherManager(l1TxUtils, getPublisherConfigFromProverConfig(config), {
94
92
  bindings: log.getBindings(),
95
93
  funder: funderL1TxUtils
@@ -99,12 +97,8 @@ import { ProverPublisherFactory } from './prover-publisher-factory.js';
99
97
  const proverNodeConfig = {
100
98
  ...pick(config, 'proverNodeMaxPendingJobs', 'proverNodeMaxParallelBlocksPerEpoch', 'proverNodePollingIntervalMs', 'proverNodeEpochProvingDelayMs', 'txGatheringMaxParallelRequests', 'txGatheringIntervalMs', 'txGatheringTimeoutMs', 'proverNodeFailedEpochStore', 'proverNodeDisableProofPublish', 'dataDirectory', 'l1ChainId', 'rollupVersion')
101
99
  };
102
- const epochMonitor = await EpochMonitor.create(archiver, {
103
- pollingIntervalMs: config.proverNodePollingIntervalMs,
104
- provingDelayMs: config.proverNodeEpochProvingDelayMs
105
- }, telemetry);
106
100
  const l1Metrics = new L1Metrics(telemetry.getMeter('ProverNodeL1Metrics'), publicClient, l1TxUtils.map((utils)=>utils.getSenderAddress()));
107
101
  // Extract the shared delayer from the first L1TxUtils instance (all instances share the same delayer)
108
102
  const delayer = l1TxUtils[0]?.delayer;
109
- return new ProverNode(prover, publisherFactory, archiver, archiver, archiver, worldStateSynchronizer, p2pClient, epochMonitor, rollupContract, l1Metrics, proverNodeConfig, telemetry, delayer, dateProvider);
103
+ return new ProverNode(prover, publisherFactory, archiver, archiver, archiver, worldStateSynchronizer, p2pClient, rollupContract, l1Metrics, proverNodeConfig, telemetry, delayer, dateProvider);
110
104
  }
package/dest/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export * from './actions/index.js';
2
2
  export * from './config.js';
3
3
  export * from './factory.js';
4
4
  export * from './monitors/index.js';
5
+ export * from './proof-publishing-service.js';
5
6
  export * from './prover-node-publisher.js';
6
7
  export * from './prover-node.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGtCQUFrQixDQUFDIn0=
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsa0JBQWtCLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}