@aztec/prover-node 5.0.0-private.20260319 → 5.0.0-rc.1
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/README.md +506 -0
- package/dest/actions/download-epoch-proving-job.js +1 -1
- package/dest/actions/rerun-epoch-proving-job.d.ts +4 -3
- package/dest/actions/rerun-epoch-proving-job.d.ts.map +1 -1
- package/dest/actions/rerun-epoch-proving-job.js +103 -21
- package/dest/bin/run-failed-epoch.js +1 -3
- package/dest/checkpoint-store.d.ts +83 -0
- package/dest/checkpoint-store.d.ts.map +1 -0
- package/dest/checkpoint-store.js +181 -0
- package/dest/config.d.ts +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +1 -1
- package/dest/factory.d.ts +1 -1
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +22 -8
- package/dest/index.d.ts +2 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -0
- package/dest/job/checkpoint-prover.d.ts +134 -0
- package/dest/job/checkpoint-prover.d.ts.map +1 -0
- package/dest/job/checkpoint-prover.js +350 -0
- package/dest/job/epoch-session.d.ts +146 -0
- package/dest/job/epoch-session.d.ts.map +1 -0
- package/dest/job/epoch-session.js +709 -0
- package/dest/job/top-tree-job.d.ts +82 -0
- package/dest/job/top-tree-job.d.ts.map +1 -0
- package/dest/job/top-tree-job.js +152 -0
- package/dest/metrics.d.ts +29 -5
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +73 -9
- package/dest/monitors/epoch-monitor.js +6 -2
- package/dest/proof-publishing-service.d.ts +159 -0
- package/dest/proof-publishing-service.d.ts.map +1 -0
- package/dest/proof-publishing-service.js +334 -0
- package/dest/prover-node-publisher.d.ts +18 -11
- package/dest/prover-node-publisher.d.ts.map +1 -1
- package/dest/prover-node-publisher.js +195 -57
- package/dest/prover-node.d.ts +96 -68
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +382 -227
- package/dest/prover-publisher-factory.d.ts +2 -2
- package/dest/prover-publisher-factory.d.ts.map +1 -1
- package/dest/prover-publisher-factory.js +3 -3
- package/dest/session-manager.d.ts +158 -0
- package/dest/session-manager.d.ts.map +1 -0
- package/dest/session-manager.js +452 -0
- package/dest/test/index.d.ts +7 -6
- package/dest/test/index.d.ts.map +1 -1
- package/package.json +23 -23
- package/src/actions/download-epoch-proving-job.ts +1 -1
- package/src/actions/rerun-epoch-proving-job.ts +114 -28
- package/src/bin/run-failed-epoch.ts +1 -2
- package/src/checkpoint-store.ts +213 -0
- package/src/config.ts +2 -1
- package/src/factory.ts +18 -10
- package/src/index.ts +1 -0
- package/src/job/checkpoint-prover.ts +465 -0
- package/src/job/epoch-session.ts +424 -0
- package/src/job/top-tree-job.ts +227 -0
- package/src/metrics.ts +88 -12
- package/src/monitors/epoch-monitor.ts +2 -2
- package/src/proof-publishing-service.ts +424 -0
- package/src/prover-node-publisher.ts +220 -67
- package/src/prover-node.ts +439 -249
- package/src/prover-publisher-factory.ts +3 -3
- package/src/session-manager.ts +552 -0
- package/src/test/index.ts +6 -6
- package/dest/job/epoch-proving-job.d.ts +0 -63
- package/dest/job/epoch-proving-job.d.ts.map +0 -1
- package/dest/job/epoch-proving-job.js +0 -762
- package/src/job/epoch-proving-job.ts +0 -465
|
@@ -3,6 +3,7 @@ import { MAX_CHECKPOINTS_PER_EPOCH } from '@aztec/constants';
|
|
|
3
3
|
import { makeTuple } from '@aztec/foundation/array';
|
|
4
4
|
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
5
5
|
import { areArraysEqual } from '@aztec/foundation/collection';
|
|
6
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
6
7
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
7
8
|
import { createLogger } from '@aztec/foundation/log';
|
|
8
9
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -10,10 +11,9 @@ import { RollupAbi } from '@aztec/l1-artifacts';
|
|
|
10
11
|
import { CommitteeAttestation, CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
11
12
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
12
13
|
import { inspect } from 'util';
|
|
13
|
-
import { encodeFunctionData } from 'viem';
|
|
14
|
+
import { encodeFunctionData, formatEther, formatGwei } from 'viem';
|
|
14
15
|
import { ProverNodePublisherMetrics } from './metrics.js';
|
|
15
16
|
export class ProverNodePublisher {
|
|
16
|
-
interrupted = false;
|
|
17
17
|
metrics;
|
|
18
18
|
log;
|
|
19
19
|
rollupContract;
|
|
@@ -28,19 +28,6 @@ export class ProverNodePublisher {
|
|
|
28
28
|
getRollupContract() {
|
|
29
29
|
return this.rollupContract;
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Calling `interrupt` will cause any in progress call to `publishRollup` to return `false` asap.
|
|
33
|
-
* Be warned, the call may return false even if the tx subsequently gets successfully mined.
|
|
34
|
-
* In practice this shouldn't matter, as we'll only ever be calling `interrupt` when we know it's going to fail.
|
|
35
|
-
* A call to `restart` is required before you can continue publishing.
|
|
36
|
-
*/ interrupt() {
|
|
37
|
-
this.interrupted = true;
|
|
38
|
-
this.l1TxUtils.interrupt();
|
|
39
|
-
}
|
|
40
|
-
/** Restarts the publisher after calling `interrupt`. */ restart() {
|
|
41
|
-
this.interrupted = false;
|
|
42
|
-
this.l1TxUtils.restart();
|
|
43
|
-
}
|
|
44
31
|
getSenderAddress() {
|
|
45
32
|
return this.l1TxUtils.getSenderAddress();
|
|
46
33
|
}
|
|
@@ -51,45 +38,42 @@ export class ProverNodePublisher {
|
|
|
51
38
|
fromCheckpoint,
|
|
52
39
|
toCheckpoint
|
|
53
40
|
};
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
this.log.warn(`Failed to record the ETH balance of the prover node: ${err}`);
|
|
67
|
-
}
|
|
68
|
-
// Tx was mined successfully
|
|
69
|
-
if (txReceipt.status === 'success') {
|
|
70
|
-
const tx = await this.l1TxUtils.getTransactionStats(txReceipt.transactionHash);
|
|
71
|
-
const stats = {
|
|
72
|
-
gasPrice: txReceipt.effectiveGasPrice,
|
|
73
|
-
gasUsed: txReceipt.gasUsed,
|
|
74
|
-
transactionHash: txReceipt.transactionHash,
|
|
75
|
-
calldataGas: tx.calldataGas,
|
|
76
|
-
calldataSize: tx.calldataSize,
|
|
77
|
-
sender: tx.sender,
|
|
78
|
-
blobDataGas: 0n,
|
|
79
|
-
blobGasUsed: 0n,
|
|
80
|
-
eventName: 'proof-published-to-l1'
|
|
81
|
-
};
|
|
82
|
-
this.log.info(`Published epoch proof to L1 rollup contract`, {
|
|
83
|
-
...stats,
|
|
84
|
-
...ctx
|
|
85
|
-
});
|
|
86
|
-
this.metrics.recordSubmitProof(timer.ms(), stats);
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
this.metrics.recordFailedTx();
|
|
90
|
-
this.log.error(`Rollup submitEpochProof tx reverted ${txReceipt.transactionHash}`, undefined, ctx);
|
|
41
|
+
const timer = new Timer();
|
|
42
|
+
// Validate epoch proof range and hashes are correct before submitting
|
|
43
|
+
await this.validateEpochProofSubmission(args);
|
|
44
|
+
const txReceipt = await this.sendSubmitEpochProofTx(args);
|
|
45
|
+
if (!txReceipt) {
|
|
46
|
+
this.log.error(`Failed to mine submitEpochProof tx`, undefined, ctx);
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
this.metrics.recordSenderBalance(await this.l1TxUtils.getSenderBalance(), this.l1TxUtils.getSenderAddress().toString());
|
|
51
|
+
} catch (err) {
|
|
52
|
+
this.log.warn(`Failed to record the ETH balance of the prover node: ${err}`);
|
|
91
53
|
}
|
|
92
|
-
|
|
54
|
+
// Tx was mined successfully
|
|
55
|
+
if (txReceipt.status === 'success') {
|
|
56
|
+
const tx = await this.l1TxUtils.getTransactionStats(txReceipt.transactionHash);
|
|
57
|
+
const stats = {
|
|
58
|
+
gasPrice: txReceipt.effectiveGasPrice,
|
|
59
|
+
gasUsed: txReceipt.gasUsed,
|
|
60
|
+
transactionHash: txReceipt.transactionHash,
|
|
61
|
+
calldataGas: tx.calldataGas,
|
|
62
|
+
calldataSize: tx.calldataSize,
|
|
63
|
+
sender: tx.sender,
|
|
64
|
+
blobDataGas: 0n,
|
|
65
|
+
blobGasUsed: 0n,
|
|
66
|
+
eventName: 'proof-published-to-l1'
|
|
67
|
+
};
|
|
68
|
+
this.log.info(`Published epoch proof to L1 rollup contract`, {
|
|
69
|
+
...stats,
|
|
70
|
+
...ctx
|
|
71
|
+
});
|
|
72
|
+
this.metrics.recordSubmitProof(timer.ms(), stats);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
this.metrics.recordFailedTx();
|
|
76
|
+
this.log.error(`Rollup submitEpochProof tx reverted ${txReceipt.transactionHash}`, undefined, ctx);
|
|
93
77
|
return false;
|
|
94
78
|
}
|
|
95
79
|
async validateEpochProofSubmission(args) {
|
|
@@ -102,7 +86,7 @@ export class ProverNodePublisher {
|
|
|
102
86
|
}
|
|
103
87
|
// toCheckpoint can't be greater than pending
|
|
104
88
|
if (toCheckpoint > pending) {
|
|
105
|
-
throw new Error(`Cannot submit epoch proof for ${fromCheckpoint}-${toCheckpoint} as
|
|
89
|
+
throw new Error(`Cannot submit epoch proof for ${fromCheckpoint}-${toCheckpoint} as proposed checkpoint is ${pending}`);
|
|
106
90
|
}
|
|
107
91
|
// Check the archive for the immediate checkpoint before the epoch
|
|
108
92
|
const checkpointLog = await this.rollupContract.getCheckpoint(CheckpointNumber(fromCheckpoint - 1));
|
|
@@ -125,10 +109,65 @@ export class ProverNodePublisher {
|
|
|
125
109
|
...publicInputs.toFields()
|
|
126
110
|
];
|
|
127
111
|
if (!areArraysEqual(rollupPublicInputs, argsPublicInputs, (a, b)=>a.equals(b))) {
|
|
128
|
-
|
|
129
|
-
|
|
112
|
+
throw await reportPublicInputsMismatch({
|
|
113
|
+
rollupPublicInputs,
|
|
114
|
+
argsPublicInputs,
|
|
115
|
+
fromCheckpoint,
|
|
116
|
+
toCheckpoint,
|
|
117
|
+
rollupContract: this.rollupContract,
|
|
118
|
+
log: this.log
|
|
119
|
+
});
|
|
130
120
|
}
|
|
131
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Estimates what submitting the epoch proof would have cost on L1 without actually sending it.
|
|
124
|
+
* Runs the same validation as `submitEpochProof`, encodes the calldata, estimates gas, and records metrics.
|
|
125
|
+
* Used when proof publishing is disabled (e.g. PROVER_NODE_DISABLE_PROOF_PUBLISH=true on mainnet).
|
|
126
|
+
*/ async analyzeEpochProofSubmission(args) {
|
|
127
|
+
const { epochNumber, fromCheckpoint, toCheckpoint } = args;
|
|
128
|
+
await this.validateEpochProofSubmission(args);
|
|
129
|
+
const data = this.encodeSubmitEpochProofCalldata(args);
|
|
130
|
+
const senderAddress = this.l1TxUtils.getSenderAddress();
|
|
131
|
+
const [gasLimit, gasPrice, latestBlock] = await Promise.all([
|
|
132
|
+
this.l1TxUtils.estimateGas(senderAddress.toString(), {
|
|
133
|
+
to: this.rollupContract.address,
|
|
134
|
+
data
|
|
135
|
+
}),
|
|
136
|
+
this.l1TxUtils.getGasPrice(),
|
|
137
|
+
this.l1TxUtils.client.getBlock({
|
|
138
|
+
blockTag: 'latest'
|
|
139
|
+
})
|
|
140
|
+
]);
|
|
141
|
+
const baseFeePerGas = latestBlock.baseFeePerGas ?? 0n;
|
|
142
|
+
const { maxPriorityFeePerGas } = gasPrice;
|
|
143
|
+
const effectiveFeePerGas = baseFeePerGas + maxPriorityFeePerGas;
|
|
144
|
+
const estimatedTotalFee = gasLimit * effectiveFeePerGas;
|
|
145
|
+
const stats = {
|
|
146
|
+
gasLimit,
|
|
147
|
+
baseFeePerGas,
|
|
148
|
+
maxPriorityFeePerGas,
|
|
149
|
+
estimatedTotalFee
|
|
150
|
+
};
|
|
151
|
+
this.log.info(`Estimated epoch proof submission cost (not submitted)`, {
|
|
152
|
+
epochNumber,
|
|
153
|
+
fromCheckpoint,
|
|
154
|
+
toCheckpoint,
|
|
155
|
+
gasLimit: gasLimit.toString(),
|
|
156
|
+
baseFeePerGas: formatGwei(baseFeePerGas),
|
|
157
|
+
maxPriorityFeePerGas: formatGwei(maxPriorityFeePerGas),
|
|
158
|
+
estimatedTotalFeeEth: formatEther(estimatedTotalFee)
|
|
159
|
+
});
|
|
160
|
+
this.metrics.recordEstimatedSubmitProof(stats);
|
|
161
|
+
}
|
|
162
|
+
encodeSubmitEpochProofCalldata(args) {
|
|
163
|
+
return encodeFunctionData({
|
|
164
|
+
abi: RollupAbi,
|
|
165
|
+
functionName: 'submitEpochRootProof',
|
|
166
|
+
args: [
|
|
167
|
+
this.getSubmitEpochProofArgs(args)
|
|
168
|
+
]
|
|
169
|
+
});
|
|
170
|
+
}
|
|
132
171
|
async sendSubmitEpochProofTx(args) {
|
|
133
172
|
const txArgs = [
|
|
134
173
|
this.getSubmitEpochProofArgs(args)
|
|
@@ -147,6 +186,8 @@ export class ProverNodePublisher {
|
|
|
147
186
|
const { receipt } = await this.l1TxUtils.sendAndMonitorTransaction({
|
|
148
187
|
to: this.rollupContract.address,
|
|
149
188
|
data
|
|
189
|
+
}, {
|
|
190
|
+
txTimeoutAt: args.deadline
|
|
150
191
|
});
|
|
151
192
|
if (receipt.status !== 'success') {
|
|
152
193
|
const errorMsg = await this.l1TxUtils.tryGetErrorFromRevertedTx(data, {
|
|
@@ -190,9 +231,106 @@ export class ProverNodePublisher {
|
|
|
190
231
|
end: argsArray[1],
|
|
191
232
|
args: argsArray[2],
|
|
192
233
|
fees: argsArray[3],
|
|
193
|
-
attestations:
|
|
234
|
+
attestations: CommitteeAttestationsAndSigners.packAttestations(args.attestations.map((a)=>CommitteeAttestation.fromViem(a))),
|
|
194
235
|
blobInputs: argsArray[4],
|
|
195
236
|
proof: proofHex
|
|
196
237
|
};
|
|
197
238
|
}
|
|
198
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* Decodes a `Root rollup public inputs mismatch`, fetches the on-chain CheckpointLog for any
|
|
242
|
+
* mismatching `checkpointHeaderHashes[i]`, emits a structured error log, and returns a thrown-ready
|
|
243
|
+
* Error with a human-readable summary.
|
|
244
|
+
*
|
|
245
|
+
* Layout of `RootRollupPublicInputs.toFields()`:
|
|
246
|
+
* [0] previousArchiveRoot
|
|
247
|
+
* [1] endArchiveRoot
|
|
248
|
+
* [2] outHash
|
|
249
|
+
* [3 .. 3+N-1] checkpointHeaderHashes[i] for i in 0..N-1 (N = MAX_CHECKPOINTS_PER_EPOCH)
|
|
250
|
+
* [3+N .. 3+3N-1] fees[i] = (recipient, value) for i in 0..N-1
|
|
251
|
+
* [3+3N .. 3+3N+4] EpochConstantData (chainId, version, vkTreeRoot, protocolContractsHash, proverId)
|
|
252
|
+
* [3+3N+5 ..] blobPublicInputs (FinalBlobAccumulator)
|
|
253
|
+
*/ async function reportPublicInputsMismatch(input) {
|
|
254
|
+
const { rollupPublicInputs, argsPublicInputs, fromCheckpoint, toCheckpoint, rollupContract, log } = input;
|
|
255
|
+
const N = MAX_CHECKPOINTS_PER_EPOCH;
|
|
256
|
+
const constantsStart = 3 + 3 * N;
|
|
257
|
+
const blobStart = constantsStart + 5;
|
|
258
|
+
const constantLabels = [
|
|
259
|
+
'chainId',
|
|
260
|
+
'version',
|
|
261
|
+
'vkTreeRoot',
|
|
262
|
+
'protocolContractsHash',
|
|
263
|
+
'proverId'
|
|
264
|
+
];
|
|
265
|
+
const diffs = [];
|
|
266
|
+
const len = Math.max(rollupPublicInputs.length, argsPublicInputs.length);
|
|
267
|
+
for(let i = 0; i < len; i++){
|
|
268
|
+
const a = rollupPublicInputs[i] ?? Fr.ZERO;
|
|
269
|
+
const b = argsPublicInputs[i] ?? Fr.ZERO;
|
|
270
|
+
if (a.equals(b)) {
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
let label;
|
|
274
|
+
let checkpointIndex;
|
|
275
|
+
if (i === 0) {
|
|
276
|
+
label = 'previousArchiveRoot';
|
|
277
|
+
} else if (i === 1) {
|
|
278
|
+
label = 'endArchiveRoot';
|
|
279
|
+
} else if (i === 2) {
|
|
280
|
+
label = 'outHash';
|
|
281
|
+
} else if (i < 3 + N) {
|
|
282
|
+
checkpointIndex = i - 3;
|
|
283
|
+
label = `checkpointHeaderHashes[${checkpointIndex}]`;
|
|
284
|
+
} else if (i < 3 + 3 * N) {
|
|
285
|
+
const feePairIndex = i - (3 + N);
|
|
286
|
+
const feeIndex = Math.floor(feePairIndex / 2);
|
|
287
|
+
const sub = feePairIndex % 2 === 0 ? 'recipient' : 'value';
|
|
288
|
+
label = `fees[${feeIndex}].${sub}`;
|
|
289
|
+
} else if (i < blobStart) {
|
|
290
|
+
label = `constants.${constantLabels[i - constantsStart]}`;
|
|
291
|
+
} else {
|
|
292
|
+
label = `blobPublicInputs[${i - blobStart}]`;
|
|
293
|
+
}
|
|
294
|
+
diffs.push({
|
|
295
|
+
index: i,
|
|
296
|
+
label,
|
|
297
|
+
rollup: a,
|
|
298
|
+
computed: b,
|
|
299
|
+
checkpointIndex
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
// For each mismatching checkpointHeaderHash, fetch the L1 CheckpointLog so the operator can
|
|
303
|
+
// see what was published on-chain alongside the prover's recomputed hash.
|
|
304
|
+
const onChainCheckpoints = await Promise.all(diffs.filter((d)=>d.checkpointIndex !== undefined).map(async (d)=>{
|
|
305
|
+
const checkpointNumber = CheckpointNumber(fromCheckpoint + d.checkpointIndex);
|
|
306
|
+
try {
|
|
307
|
+
const cp = await rollupContract.getCheckpoint(checkpointNumber);
|
|
308
|
+
return {
|
|
309
|
+
checkpointIndex: d.checkpointIndex,
|
|
310
|
+
checkpointNumber,
|
|
311
|
+
headerHash: cp.headerHash.toString()
|
|
312
|
+
};
|
|
313
|
+
} catch (err) {
|
|
314
|
+
return {
|
|
315
|
+
checkpointIndex: d.checkpointIndex,
|
|
316
|
+
checkpointNumber,
|
|
317
|
+
error: err.message
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
}));
|
|
321
|
+
log.error(`Root rollup public inputs mismatch`, undefined, {
|
|
322
|
+
fromCheckpoint,
|
|
323
|
+
toCheckpoint,
|
|
324
|
+
numDiffs: diffs.length,
|
|
325
|
+
diffs: diffs.map((d)=>({
|
|
326
|
+
index: d.index,
|
|
327
|
+
label: d.label,
|
|
328
|
+
rollup: d.rollup.toString(),
|
|
329
|
+
computed: d.computed.toString()
|
|
330
|
+
})),
|
|
331
|
+
onChainCheckpoints
|
|
332
|
+
});
|
|
333
|
+
const fmt = (inputs)=>inputs.map((x)=>x.toString()).join(', ');
|
|
334
|
+
const summary = diffs.map((d)=>`[${d.index} ${d.label}] L1=${d.rollup} prover=${d.computed}`).join('\n');
|
|
335
|
+
return new Error(`Root rollup public inputs mismatch (${diffs.length} fields differ):\n${summary}\n` + `Rollup: ${fmt(rollupPublicInputs)}\nComputed:${fmt(argsPublicInputs)}`);
|
|
336
|
+
}
|
package/dest/prover-node.d.ts
CHANGED
|
@@ -1,30 +1,37 @@
|
|
|
1
1
|
import type { RollupContract } from '@aztec/ethereum/contracts';
|
|
2
2
|
import type { Delayer } from '@aztec/ethereum/l1-tx-utils';
|
|
3
|
-
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { BlockNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
5
|
+
import type { EpochProverFactory } from '@aztec/prover-client';
|
|
6
|
+
import { ChonkCache } from '@aztec/prover-client/orchestrator';
|
|
7
|
+
import { type L2BlockSource, type L2BlockStreamEvent, type L2BlockStreamEventHandler } from '@aztec/stdlib/block';
|
|
7
8
|
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
8
9
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
9
|
-
import { type
|
|
10
|
+
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
11
|
+
import { type EpochProverManager, type EpochProvingJobState, EpochProvingJobTerminalState, type ITxProvider, type ProverNodeApi, type Service, type WorldStateSyncStatus, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
10
12
|
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
11
13
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
12
14
|
import { L1Metrics, type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
15
|
+
import { CheckpointStore } from './checkpoint-store.js';
|
|
13
16
|
import type { SpecificProverNodeConfig } from './config.js';
|
|
14
|
-
import type {
|
|
15
|
-
import {
|
|
16
|
-
import type { EpochMonitor, EpochMonitorHandler } from './monitors/epoch-monitor.js';
|
|
17
|
-
import type { ProverNodePublisher } from './prover-node-publisher.js';
|
|
17
|
+
import type { EpochSession, EpochSessionHooks } from './job/epoch-session.js';
|
|
18
|
+
import { ProofPublishingService } from './proof-publishing-service.js';
|
|
18
19
|
import type { ProverPublisherFactory } from './prover-publisher-factory.js';
|
|
20
|
+
import { SessionManager } from './session-manager.js';
|
|
19
21
|
type ProverNodeOptions = SpecificProverNodeConfig & Partial<DataStoreOptions>;
|
|
20
22
|
type DataStoreOptions = Pick<DataStoreConfig, 'dataDirectory'> & Pick<ChainConfig, 'l1ChainId' | 'rollupVersion'>;
|
|
21
23
|
/**
|
|
22
|
-
* An Aztec Prover Node is a standalone process that monitors the
|
|
23
|
-
*
|
|
24
|
-
*
|
|
24
|
+
* An Aztec Prover Node is a standalone process that monitors the chain for new checkpoints,
|
|
25
|
+
* starts proving them optimistically as they arrive, and submits epoch proofs to L1 once
|
|
26
|
+
* complete.
|
|
27
|
+
*
|
|
28
|
+
* The class is intentionally thin: it owns the long-lived collections (`CheckpointStore`,
|
|
29
|
+
* `ChonkCache`, `SessionManager`), the L2BlockStream, and a periodic ticker that nudges the
|
|
30
|
+
* manager to pick up newly-complete epochs. Every session lifecycle decision is delegated to
|
|
31
|
+
* the `SessionManager`. Each chain event is translated here into a single method call on it.
|
|
25
32
|
*/
|
|
26
|
-
export declare class ProverNode implements
|
|
27
|
-
protected readonly prover: EpochProverManager;
|
|
33
|
+
export declare class ProverNode implements L2BlockStreamEventHandler, ProverNodeApi, Traceable {
|
|
34
|
+
protected readonly prover: EpochProverManager & EpochProverFactory;
|
|
28
35
|
protected readonly publisherFactory: ProverPublisherFactory;
|
|
29
36
|
protected readonly l2BlockSource: L2BlockSource & Partial<Service>;
|
|
30
37
|
protected readonly l1ToL2MessageSource: L1ToL2MessageSource;
|
|
@@ -33,85 +40,106 @@ export declare class ProverNode implements EpochMonitorHandler, ProverNodeApi, T
|
|
|
33
40
|
protected readonly p2pClient: {
|
|
34
41
|
getTxProvider(): ITxProvider;
|
|
35
42
|
} & Partial<Service>;
|
|
36
|
-
protected readonly epochsMonitor: EpochMonitor;
|
|
37
43
|
protected readonly rollupContract: RollupContract;
|
|
38
44
|
protected readonly l1Metrics: L1Metrics;
|
|
39
45
|
protected readonly telemetryClient: TelemetryClient;
|
|
40
46
|
private delayer?;
|
|
41
47
|
private readonly dateProvider;
|
|
42
48
|
private log;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
private
|
|
49
|
+
protected readonly checkpointStore: CheckpointStore;
|
|
50
|
+
protected readonly chonkCache: ChonkCache;
|
|
51
|
+
protected sessionManager: SessionManager | undefined;
|
|
52
|
+
private readonly config;
|
|
53
|
+
private readonly jobMetrics;
|
|
54
|
+
private readonly rewardsMetrics;
|
|
55
|
+
/** In-memory store for the L2BlockStream's local data provider. */
|
|
56
|
+
private tipsStore;
|
|
57
|
+
/** Block stream for checkpoint and reorg detection. */
|
|
58
|
+
private blockStream;
|
|
59
|
+
/**
|
|
60
|
+
* Highest epoch whose proof-submission window has passed. Monotonic high-water mark.
|
|
61
|
+
* Seeded from the last fully-proven epoch at start(); advanced on every block-stream
|
|
62
|
+
* event by comparing the archiver's latest synced L2 slot against each epoch's
|
|
63
|
+
* submission deadline. Protected so tests can verify the start() seeding.
|
|
64
|
+
*/
|
|
65
|
+
protected lastExpiredEpoch: EpochNumber | undefined;
|
|
47
66
|
readonly tracer: Tracer;
|
|
48
|
-
protected
|
|
49
|
-
constructor(prover: EpochProverManager, publisherFactory: ProverPublisherFactory, l2BlockSource: L2BlockSource & Partial<Service>, l1ToL2MessageSource: L1ToL2MessageSource, contractDataSource: ContractDataSource, worldState: WorldStateSynchronizer, p2pClient: {
|
|
67
|
+
protected publishingService: ProofPublishingService | undefined;
|
|
68
|
+
constructor(prover: EpochProverManager & EpochProverFactory, publisherFactory: ProverPublisherFactory, l2BlockSource: L2BlockSource & Partial<Service>, l1ToL2MessageSource: L1ToL2MessageSource, contractDataSource: ContractDataSource, worldState: WorldStateSynchronizer, p2pClient: {
|
|
50
69
|
getTxProvider(): ITxProvider;
|
|
51
|
-
} & Partial<Service>,
|
|
70
|
+
} & Partial<Service>, rollupContract: RollupContract, l1Metrics: L1Metrics, config?: Partial<ProverNodeOptions>, telemetryClient?: TelemetryClient, delayer?: Delayer | undefined, dateProvider?: DateProvider);
|
|
52
71
|
getProverId(): import("@aztec/foundation/eth-address").EthAddress;
|
|
53
72
|
getP2P(): {
|
|
54
73
|
getTxProvider(): ITxProvider;
|
|
55
74
|
} & Partial<Service>;
|
|
56
|
-
/**
|
|
75
|
+
/** Test-only: the shared L1 tx delayer, if enabled. */
|
|
57
76
|
getDelayer(): Delayer | undefined;
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
* Stops the prover node and all its dependencies.
|
|
71
|
-
* Resources not owned by this node (shared with the parent aztec-node) are skipped.
|
|
72
|
-
*/
|
|
73
|
-
stop(): Promise<void>;
|
|
77
|
+
/** Observability summary for the ProverNodeApi. */
|
|
78
|
+
getJobs(): Promise<{
|
|
79
|
+
uuid: string;
|
|
80
|
+
status: EpochProvingJobState;
|
|
81
|
+
epochNumber: EpochNumber;
|
|
82
|
+
}[]>;
|
|
83
|
+
/** Tests inspect this when validating reconcile behaviour. */
|
|
84
|
+
getCheckpointStore(): CheckpointStore;
|
|
85
|
+
/** Tests inspect this to verify chonk-cache release semantics. */
|
|
86
|
+
getChonkCache(): ChonkCache;
|
|
87
|
+
/** Tests inspect this when looking up live sessions. */
|
|
88
|
+
getSessionManager(): SessionManager;
|
|
74
89
|
/** Returns world state status. */
|
|
75
90
|
getWorldStateSyncStatus(): Promise<WorldStateSyncStatus>;
|
|
76
91
|
/** Returns archiver status. */
|
|
77
92
|
getL2Tips(): Promise<import("@aztec/stdlib/block").L2Tips>;
|
|
93
|
+
/** Returns the underlying prover instance. */
|
|
94
|
+
getProver(): EpochProverManager & EpochProverFactory;
|
|
95
|
+
handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
|
|
96
|
+
private handleCheckpointEvent;
|
|
97
|
+
private collectRegisterData;
|
|
98
|
+
private handlePruneEvent;
|
|
99
|
+
private isEpochPastProofSubmissionWindow;
|
|
100
|
+
private checkEpochExpiry;
|
|
101
|
+
private expireEpoch;
|
|
78
102
|
/**
|
|
79
|
-
*
|
|
103
|
+
* Schedules proving for the given epoch and returns the job id without waiting for completion.
|
|
80
104
|
*/
|
|
81
|
-
startProof(epochNumber: EpochNumber): Promise<
|
|
82
|
-
|
|
83
|
-
|
|
105
|
+
startProof(epochNumber: EpochNumber): Promise<string>;
|
|
106
|
+
start(): Promise<void>;
|
|
107
|
+
stop(): Promise<void>;
|
|
84
108
|
/**
|
|
85
|
-
*
|
|
109
|
+
* Constructs the session manager. Extracted so subclasses (test harness) can swap
|
|
110
|
+
* the implementation. Wired to `tryUploadSessionFailure` so failed sessions get
|
|
111
|
+
* their proving data uploaded.
|
|
86
112
|
*/
|
|
87
|
-
|
|
113
|
+
protected createSessionManager(publishingService: ProofPublishingService): SessionManager;
|
|
88
114
|
/**
|
|
89
|
-
*
|
|
115
|
+
* Installs session hooks for the e2e harness to interpose around top-tree proving
|
|
116
|
+
* (gate, override, or observe it) without monkey-patching the orchestrator factory.
|
|
117
|
+
* Applies to every session constructed after this call.
|
|
90
118
|
*/
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
epochNumber: EpochNumber;
|
|
95
|
-
}[]>;
|
|
96
|
-
protected getActiveJobsForEpoch(epochNumber: EpochNumber): Promise<{
|
|
97
|
-
uuid: string;
|
|
98
|
-
status: EpochProvingJobState;
|
|
99
|
-
}[]>;
|
|
100
|
-
private checkMaximumPendingJobs;
|
|
101
|
-
private createProvingJob;
|
|
119
|
+
setSessionHooks(hooks: EpochSessionHooks): void;
|
|
120
|
+
/** Uploads failure snapshots when sessions exit with `failed`. Exposed as a method so tests can spy on it. */
|
|
121
|
+
tryUploadSessionFailure(session: EpochSession): Promise<string | undefined>;
|
|
102
122
|
private getL1Constants;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
123
|
+
/**
|
|
124
|
+
* Returns true if every block in the given epoch is proven on L1. An epoch is only
|
|
125
|
+
* fully proven when its *last* block is proven. Protected for direct unit-test access.
|
|
126
|
+
*/
|
|
127
|
+
protected isEpochFullyProven(epochNumber: EpochNumber, l1Constants: Pick<L1RollupConstants, 'epochDuration'>): Promise<boolean>;
|
|
128
|
+
/** Protected for direct unit-test access. */
|
|
129
|
+
protected isProvenBlockLastOfItsEpoch(provenBlockNumber: BlockNumber, provenEpoch: EpochNumber, l1Constants: Pick<L1RollupConstants, 'epochDuration'>): Promise<boolean>;
|
|
130
|
+
/**
|
|
131
|
+
* Resolves the L2BlockStream's starting block and the last fully-proven epoch in one
|
|
132
|
+
* pass. The starting block is the first block of the next unproven epoch (or the start
|
|
133
|
+
* of the partially-proven epoch if the proven tip falls mid-epoch). The fully-proven
|
|
134
|
+
* epoch is `provenEpoch` when the proven tip is the last block of its epoch, otherwise
|
|
135
|
+
* `provenEpoch - 1`, or `undefined` if no block is proven yet.
|
|
136
|
+
*/
|
|
137
|
+
protected computeStartupState(): Promise<{
|
|
138
|
+
startingBlock: BlockNumber;
|
|
139
|
+
lastFullyProvenEpoch: EpochNumber | undefined;
|
|
140
|
+
}>;
|
|
107
141
|
private gatherPreviousBlockHeader;
|
|
108
|
-
/** Extracted for testing purposes. */
|
|
109
|
-
protected doCreateEpochProvingJob(data: EpochProvingJobData, deadline: Date | undefined, publicProcessorFactory: PublicProcessorFactory, publisher: ProverNodePublisher, opts?: {
|
|
110
|
-
skipEpochCheck?: boolean;
|
|
111
|
-
}): EpochProvingJob;
|
|
112
|
-
/** Extracted for testing purposes. */
|
|
113
|
-
protected triggerMonitors(): Promise<void>;
|
|
114
142
|
private validateConfig;
|
|
115
143
|
}
|
|
116
|
-
export {};
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
144
|
+
export { EpochProvingJobTerminalState };
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm92ZXItbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFvQixXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUk3RixPQUFPLEVBQUUsWUFBWSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRS9ELE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFFbEIsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyx5QkFBeUIsRUFFL0IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUFtRCxNQUFNLDZCQUE2QixDQUFDO0FBQ3RILE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUN2QixLQUFLLG9CQUFvQixFQUN6Qiw0QkFBNEIsRUFDNUIsS0FBSyxXQUFXLEVBQ2hCLEtBQUssYUFBYSxFQUNsQixLQUFLLE9BQU8sRUFDWixLQUFLLG9CQUFvQixFQUN6QixLQUFLLHNCQUFzQixFQUU1QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"prover-node.d.ts","sourceRoot":"","sources":["../src/prover-node.ts"],"names":[],"mappings":"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"}
|