@aztec/prover-node 5.0.0-rc.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -68
- package/dest/actions/rerun-epoch-proving-job.d.ts +2 -2
- package/dest/actions/rerun-epoch-proving-job.d.ts.map +1 -1
- package/dest/checkpoint-store.d.ts +42 -37
- package/dest/checkpoint-store.d.ts.map +1 -1
- package/dest/checkpoint-store.js +65 -77
- package/dest/job/checkpoint-prover.d.ts +6 -16
- package/dest/job/checkpoint-prover.d.ts.map +1 -1
- package/dest/job/checkpoint-prover.js +15 -35
- package/dest/job/epoch-session.d.ts +2 -2
- package/dest/job/epoch-session.d.ts.map +1 -1
- package/dest/job/epoch-session.js +20 -9
- package/dest/metrics.d.ts +7 -4
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +14 -6
- package/dest/proof-publishing-service.d.ts +4 -2
- package/dest/proof-publishing-service.d.ts.map +1 -1
- package/dest/proof-publishing-service.js +1 -0
- package/dest/prover-node-publisher.d.ts +5 -5
- package/dest/prover-node-publisher.d.ts.map +1 -1
- package/dest/prover-node-publisher.js +2 -3
- package/dest/prover-node.d.ts +25 -15
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +152 -51
- package/dest/session-manager.d.ts +2 -2
- package/dest/session-manager.d.ts.map +1 -1
- package/dest/session-manager.js +38 -8
- package/package.json +23 -23
- package/src/checkpoint-store.ts +66 -85
- package/src/job/checkpoint-prover.ts +17 -40
- package/src/job/epoch-session.ts +21 -9
- package/src/metrics.ts +15 -12
- package/src/proof-publishing-service.ts +4 -1
- package/src/prover-node-publisher.ts +11 -10
- package/src/prover-node.ts +170 -60
- package/src/session-manager.ts +38 -7
package/dest/checkpoint-store.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
-
import { RunningPromise } from '@aztec/foundation/promise';
|
|
3
2
|
import { getEpochAtSlot, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
4
3
|
import { CheckpointProver } from './job/checkpoint-prover.js';
|
|
5
4
|
/**
|
|
@@ -8,63 +7,78 @@ import { CheckpointProver } from './job/checkpoint-prover.js';
|
|
|
8
7
|
*
|
|
9
8
|
* The store survives every epoch / session boundary. A prover lives from its first
|
|
10
9
|
* `addOrUpdate` call until either:
|
|
11
|
-
* -
|
|
10
|
+
* - its checkpoint is pruned by an L1 reorg (`cancelAndRemoveAboveBlock`), or
|
|
12
11
|
* - its epoch's proof-submission window has closed (`reapExpired`), so the proof could no
|
|
13
12
|
* longer be accepted on L1 even if produced.
|
|
14
13
|
*
|
|
15
|
-
* A
|
|
16
|
-
*
|
|
17
|
-
*
|
|
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.
|
|
18
17
|
*/ export class CheckpointStore {
|
|
19
18
|
l2BlockSource;
|
|
20
19
|
proverDeps;
|
|
21
|
-
options;
|
|
22
20
|
proverFactoryFn;
|
|
23
21
|
provers;
|
|
24
|
-
|
|
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;
|
|
25
28
|
log;
|
|
26
|
-
constructor(l2BlockSource, proverDeps,
|
|
29
|
+
constructor(l2BlockSource, proverDeps, bindings, proverFactoryFn = (args, deps)=>new CheckpointProver(args, deps)){
|
|
27
30
|
this.l2BlockSource = l2BlockSource;
|
|
28
31
|
this.proverDeps = proverDeps;
|
|
29
|
-
this.options = options;
|
|
30
32
|
this.proverFactoryFn = proverFactoryFn;
|
|
31
33
|
this.provers = new Map();
|
|
34
|
+
this.pendingTeardowns = new Map();
|
|
35
|
+
this.nextTeardownId = 0;
|
|
32
36
|
this.log = createLogger('prover-node:checkpoint-store', bindings);
|
|
33
|
-
this.slotWatcher = new RunningPromise(()=>this.reapPrunedPastSlot(), this.log, this.options.slotWatcherPollIntervalMs);
|
|
34
37
|
}
|
|
35
38
|
start() {
|
|
36
|
-
this.slotWatcher.start();
|
|
37
39
|
return Promise.resolve();
|
|
38
40
|
}
|
|
39
41
|
async stop() {
|
|
40
|
-
await
|
|
41
|
-
//
|
|
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.
|
|
42
44
|
const provers = Array.from(this.provers.values());
|
|
43
45
|
this.provers.clear();
|
|
44
46
|
for (const prover of provers){
|
|
45
47
|
prover.cancel();
|
|
46
48
|
}
|
|
47
|
-
await Promise.allSettled(
|
|
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));
|
|
48
62
|
}
|
|
49
63
|
/**
|
|
50
64
|
* Registers a checkpoint with the store. If a prover already exists for the
|
|
51
|
-
* `(number, slot, archive root)` content key
|
|
52
|
-
* otherwise a new prover is constructed.
|
|
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.
|
|
53
67
|
*/ async addOrUpdate(checkpoint, data) {
|
|
54
68
|
const l1Constants = await this.l2BlockSource.getL1Constants();
|
|
55
69
|
const epochNumber = getEpochAtSlot(checkpoint.header.slotNumber, l1Constants);
|
|
56
70
|
const id = CheckpointProver.idFor(checkpoint);
|
|
57
71
|
const existing = this.provers.get(id);
|
|
58
72
|
if (existing) {
|
|
59
|
-
existing.markCanonical();
|
|
60
73
|
return existing;
|
|
61
74
|
}
|
|
62
|
-
// At most one canonical checkpoint per slot. A different
|
|
63
|
-
//
|
|
64
|
-
//
|
|
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.
|
|
65
79
|
for (const prover of this.provers.values()){
|
|
66
|
-
if (prover.slotNumber === checkpoint.header.slotNumber
|
|
67
|
-
throw new Error(`Cannot add checkpoint ${checkpoint.number} (archive ${checkpoint.archive.root}) at slot ${checkpoint.header.slotNumber}: ` + `a different
|
|
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.`);
|
|
68
82
|
}
|
|
69
83
|
}
|
|
70
84
|
const prover = this.proverFactoryFn({
|
|
@@ -79,29 +93,36 @@ import { CheckpointProver } from './job/checkpoint-prover.js';
|
|
|
79
93
|
return prover;
|
|
80
94
|
}
|
|
81
95
|
/**
|
|
82
|
-
*
|
|
83
|
-
* `
|
|
84
|
-
*
|
|
85
|
-
|
|
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) {
|
|
86
107
|
const affected = [];
|
|
87
|
-
for (const prover of this.provers.
|
|
88
|
-
|
|
89
|
-
|
|
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);
|
|
90
114
|
affected.push(prover);
|
|
91
115
|
}
|
|
92
116
|
}
|
|
93
117
|
return affected;
|
|
94
118
|
}
|
|
95
119
|
/**
|
|
96
|
-
* Drops
|
|
97
|
-
*
|
|
98
|
-
*
|
|
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.
|
|
99
123
|
*/ reapExpired(expiredEpoch) {
|
|
100
124
|
const reaped = [];
|
|
101
125
|
for (const [id, prover] of Array.from(this.provers.entries())){
|
|
102
|
-
if (prover.isPruned()) {
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
126
|
if (prover.epochNumber <= expiredEpoch) {
|
|
106
127
|
reaped.push({
|
|
107
128
|
id,
|
|
@@ -111,7 +132,7 @@ import { CheckpointProver } from './job/checkpoint-prover.js';
|
|
|
111
132
|
prover.cancel({
|
|
112
133
|
routine: true
|
|
113
134
|
});
|
|
114
|
-
|
|
135
|
+
this.trackTeardown(prover);
|
|
115
136
|
this.provers.delete(id);
|
|
116
137
|
}
|
|
117
138
|
}
|
|
@@ -129,53 +150,20 @@ import { CheckpointProver } from './job/checkpoint-prover.js';
|
|
|
129
150
|
/** Returns the prover for the supplied checkpoint (by its content-addressed id), or undefined. */ getByCheckpoint(checkpoint) {
|
|
130
151
|
return this.provers.get(CheckpointProver.idFor(checkpoint));
|
|
131
152
|
}
|
|
132
|
-
/** Every prover currently in the store
|
|
153
|
+
/** Every prover currently in the store, in insertion order. */ listAll() {
|
|
133
154
|
return Array.from(this.provers.values());
|
|
134
155
|
}
|
|
135
|
-
/**
|
|
136
|
-
return Array.from(this.provers.values()).
|
|
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);
|
|
137
158
|
}
|
|
138
159
|
/**
|
|
139
|
-
*
|
|
140
|
-
|
|
141
|
-
*/ async listCanonicalForEpoch(epoch) {
|
|
160
|
+
* Provers whose slot is in the supplied epoch's slot range, sorted by checkpoint number.
|
|
161
|
+
*/ async listForEpoch(epoch) {
|
|
142
162
|
const l1Constants = await this.l2BlockSource.getL1Constants();
|
|
143
163
|
const [fromSlot, toSlot] = getSlotRangeForEpoch(epoch, l1Constants);
|
|
144
|
-
return this.
|
|
164
|
+
return this.listInSlotRange(fromSlot, toSlot);
|
|
145
165
|
}
|
|
146
|
-
/**
|
|
147
|
-
return this.
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* SlotWatcher tick: reap pruned provers whose slot has passed the chain's synced
|
|
151
|
-
* slot. Once the chain has moved past, no re-add can revive the prover and its
|
|
152
|
-
* content key is unique enough that an actual re-add would create a new entry.
|
|
153
|
-
*
|
|
154
|
-
* Protected so unit tests can drive a single tick without spinning up the
|
|
155
|
-
* `RunningPromise` and waiting on its interval.
|
|
156
|
-
*/ async reapPrunedPastSlot() {
|
|
157
|
-
let syncedSlot;
|
|
158
|
-
try {
|
|
159
|
-
syncedSlot = await this.l2BlockSource.getSyncedL2SlotNumber();
|
|
160
|
-
} catch (err) {
|
|
161
|
-
this.log.debug(`SlotWatcher could not read synced slot`, {
|
|
162
|
-
error: `${err}`
|
|
163
|
-
});
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
if (syncedSlot === undefined) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
for (const [id, prover] of Array.from(this.provers.entries())){
|
|
170
|
-
if (prover.isPruned() && prover.slotNumber < syncedSlot) {
|
|
171
|
-
this.log.info(`Reaping pruned CheckpointProver ${id}: slot ${prover.slotNumber} < synced ${syncedSlot}`, {
|
|
172
|
-
checkpointNumber: prover.checkpoint.number,
|
|
173
|
-
slotNumber: prover.slotNumber
|
|
174
|
-
});
|
|
175
|
-
prover.cancel();
|
|
176
|
-
void prover.whenDone();
|
|
177
|
-
this.provers.delete(id);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
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);
|
|
180
168
|
}
|
|
181
169
|
}
|
|
@@ -48,16 +48,16 @@ export type CheckpointProverArgs = {
|
|
|
48
48
|
* The store creates a CheckpointProver once per content-key. Keying on the checkpoint's
|
|
49
49
|
* own archive root (its post-state) means two checkpoints are "the same" iff they
|
|
50
50
|
* produce the same archive — so a reorg branch, or a replacement built on the same
|
|
51
|
-
* predecessor but with different content, keys to a distinct prover
|
|
52
|
-
* re-add keys to the same one and reuses its in-flight sub-tree work.
|
|
51
|
+
* predecessor but with different content, keys to a distinct prover.
|
|
53
52
|
*
|
|
54
53
|
* The prover eagerly starts its own tx gather and sub-tree work in the constructor, so
|
|
55
54
|
* callers only need to call `whenBlockProofsReady()` to obtain the resulting block-rollup
|
|
56
55
|
* proofs.
|
|
57
56
|
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* a
|
|
57
|
+
* A CheckpointProver does not survive a prune: its sub-tree work forks world-state per
|
|
58
|
+
* block, and an L1 prune of a base block faults those reads. The store therefore cancels and
|
|
59
|
+
* discards a prover when its checkpoint is pruned, and a re-add (even of identical content)
|
|
60
|
+
* constructs a fresh prover.
|
|
61
61
|
*
|
|
62
62
|
* `cancel()` is idempotent. It aborts the gather + sub-tree, rejects the block-proof
|
|
63
63
|
* promise, and exposes a `whenDone()` that resolves once teardown has unwound.
|
|
@@ -79,8 +79,6 @@ export declare class CheckpointProver {
|
|
|
79
79
|
private cancelled;
|
|
80
80
|
private subTree?;
|
|
81
81
|
private completed;
|
|
82
|
-
/** Pruned in the canonical chain but not yet reaped — sub-tree continues running. */
|
|
83
|
-
private pruned;
|
|
84
82
|
private readonly abortController;
|
|
85
83
|
/** Tracks the eager gather+execute task so `cancel()` and `whenDone()` can await its unwind. */
|
|
86
84
|
private readonly runPromise;
|
|
@@ -96,14 +94,6 @@ export declare class CheckpointProver {
|
|
|
96
94
|
isCancelled(): boolean;
|
|
97
95
|
/** True once block-level proving has been fully *enqueued* (sub-tree completion may still be pending). */
|
|
98
96
|
isCompleted(): boolean;
|
|
99
|
-
isPruned(): boolean;
|
|
100
|
-
/**
|
|
101
|
-
* Mark this prover as no longer present in the canonical chain. Sub-tree proving keeps
|
|
102
|
-
* running so the work survives if the checkpoint is re-added. Idempotent.
|
|
103
|
-
*/
|
|
104
|
-
markPruned(): void;
|
|
105
|
-
/** Mark this prover as part of the canonical chain again after a re-add. Idempotent. */
|
|
106
|
-
markCanonical(): void;
|
|
107
97
|
/** AbortSignal that fires on cancel — for callers that want to wire their own tasks. */
|
|
108
98
|
getAbortSignal(): AbortSignal;
|
|
109
99
|
/** Promise that resolves with the block-rollup proofs for this checkpoint (or rejects on cancel/failure). */
|
|
@@ -131,4 +121,4 @@ export declare class CheckpointProver {
|
|
|
131
121
|
private processTxs;
|
|
132
122
|
private createFork;
|
|
133
123
|
}
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC1wcm92ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qb2IvY2hlY2twb2ludC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUF1QyxNQUFNLGtCQUFrQixDQUFDO0FBQzVGLE9BQU8sRUFBZSxLQUFLLFdBQVcsRUFBRSxLQUFLLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVMsTUFBTSx5QkFBeUIsQ0FBQztBQUduRSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFpQyxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEgsT0FBTyxLQUFLLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkYsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQVcsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUc3RixPQUFPLEtBQUssRUFBRSxXQUFXLEVBQWUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUQsK0RBQStEO0FBQy9ELE1BQU0sTUFBTSxvQkFBb0IsR0FBRztJQUNqQyxhQUFhLEVBQUUsa0JBQWtCLENBQUM7SUFDbEMsMEVBQTBFO0lBQzFFLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDdkIsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUM7SUFDL0MsVUFBVSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRCxVQUFVLEVBQUUsV0FBVyxDQUFDO0lBQ3hCLDZGQUEyRjtJQUMzRixZQUFZLEVBQUUsWUFBWSxDQUFDO0lBQzNCLFFBQVEsRUFBRSxVQUFVLENBQUM7SUFDckIsT0FBTyxFQUFFLG9CQUFvQixDQUFDO0lBQzlCLDZCQUE2QjtJQUM3QixvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDN0IsaUNBQWlDO0lBQ2pDLFFBQVEsRUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDO0lBQzNCLEdBQUcsRUFBRSxNQUFNLENBQUM7Q0FDYixDQUFDO0FBRUYsZ0VBQWdFO0FBQ2hFLE1BQU0sTUFBTSxvQkFBb0IsR0FBRztJQUNqQyxVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLHFHQUFxRztJQUNyRyxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQ3pCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0lBQ3JDLG1CQUFtQixFQUFFLFdBQVcsQ0FBQztJQUNqQyxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDckIsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLGNBQWMsQ0FBQyxDQUFDO0NBQzlELENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxxQkFBYSxnQkFBZ0I7SUE0QnpCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSTtJQTNCdkIsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDcEIsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDaEMsUUFBUSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUM7SUFDbEMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDaEMsUUFBUSxDQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0lBQzlDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUM7SUFDMUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM5QixRQUFRLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLGNBQWMsQ0FBQyxDQUFDO0lBRXRFLGdGQUE4RTtJQUM5RSxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQWE7SUFFMUMsdUVBQXVFO0lBQ3ZFLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFvRjtJQUVoSCxPQUFPLENBQUMsU0FBUyxDQUFTO0lBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBZ0M7SUFDaEQsT0FBTyxDQUFDLFNBQVMsQ0FBUztJQUMxQixPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBeUI7SUFFekQsZ0dBQWdHO0lBQ2hHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFnQjtJQUMzQyxzRUFBc0U7SUFDdEUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFnQjtJQUV0QyxZQUNFLElBQUksRUFBRSxvQkFBb0IsRUFDVCxJQUFJLEVBQUUsb0JBQW9CLEVBdUI1QztJQUVEOzs7O09BSUc7SUFDSCxPQUFjLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FFbEQ7SUFFTSxXQUFXLElBQUksT0FBTyxDQUU1QjtJQUVELDBHQUEwRztJQUNuRyxXQUFXLElBQUksT0FBTyxDQUU1QjtJQUVELDBGQUF3RjtJQUNqRixjQUFjLElBQUksV0FBVyxDQUVuQztJQUVELDZHQUE2RztJQUN0RyxvQkFBb0IsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FFekU7SUFFRCwwRUFBMEU7SUFDN0QsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FLckM7WUFFYSxnQkFBZ0I7WUFxQmhCLFNBQVM7WUFnQlQsaUJBQWlCO0lBc0kvQjs7Ozs7Ozs7T0FRRztJQUNJLE1BQU0sQ0FBQyxFQUFFLE9BQWUsRUFBRSxHQUFFO1FBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQU8sR0FBRyxJQUFJLENBcUJuRTtZQUVhLFNBQVM7WUFjVCxlQUFlO0lBZTdCLE9BQU8sQ0FBQyxjQUFjO1lBSVIsVUFBVTtZQTBCVixVQUFVO0NBZXpCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint-prover.d.ts","sourceRoot":"","sources":["../../src/job/checkpoint-prover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAuC,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAe,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAEjG,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAGnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAiC,UAAU,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClH,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,OAAO,KAAK,EAAE,oBAAoB,EAAW,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAG7F,OAAO,KAAK,EAAE,WAAW,EAAe,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D,+DAA+D;AAC/D,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,kBAAkB,CAAC;IAClC,0EAA0E;IAC1E,UAAU,EAAE,UAAU,CAAC;IACvB,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IACnD,UAAU,EAAE,WAAW,CAAC;IACxB,6FAA2F;IAC3F,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,6BAA6B;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iCAAiC;IACjC,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,qGAAqG;IACrG,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,mBAAmB,EAAE,WAAW,CAAC;IACjC,cAAc,EAAE,EAAE,EAAE,CAAC;IACrB,0BAA0B,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,CAAC;CAC9D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,gBAAgB;
|
|
1
|
+
{"version":3,"file":"checkpoint-prover.d.ts","sourceRoot":"","sources":["../../src/job/checkpoint-prover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAuC,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAe,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAEjG,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAGnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAiC,UAAU,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClH,OAAO,KAAK,EAAmB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,OAAO,KAAK,EAAE,oBAAoB,EAAW,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAG7F,OAAO,KAAK,EAAE,WAAW,EAAe,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D,+DAA+D;AAC/D,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,kBAAkB,CAAC;IAClC,0EAA0E;IAC1E,UAAU,EAAE,UAAU,CAAC;IACvB,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IACnD,UAAU,EAAE,WAAW,CAAC;IACxB,6FAA2F;IAC3F,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,6BAA6B;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iCAAiC;IACjC,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,qGAAqG;IACrG,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,mBAAmB,EAAE,WAAW,CAAC;IACjC,cAAc,EAAE,EAAE,EAAE,CAAC;IACrB,0BAA0B,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,CAAC;CAC9D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,gBAAgB;IA4BzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IA3BvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,EAAE,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,EAAE,WAAW,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,EAAE,EAAE,CAAC;IAC9B,QAAQ,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,cAAc,CAAC,CAAC;IAEtE,gFAA8E;IAC9E,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAa;IAE1C,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoF;IAEhH,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAgC;IAChD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAEzD,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,sEAAsE;IACtE,OAAO,CAAC,aAAa,CAAC,CAAgB;IAEtC,YACE,IAAI,EAAE,oBAAoB,EACT,IAAI,EAAE,oBAAoB,EAuB5C;IAED;;;;OAIG;IACH,OAAc,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAElD;IAEM,WAAW,IAAI,OAAO,CAE5B;IAED,0GAA0G;IACnG,WAAW,IAAI,OAAO,CAE5B;IAED,0FAAwF;IACjF,cAAc,IAAI,WAAW,CAEnC;IAED,6GAA6G;IACtG,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAEzE;IAED,0EAA0E;IAC7D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAKrC;YAEa,gBAAgB;YAqBhB,SAAS;YAgBT,iBAAiB;IAsI/B;;;;;;;;OAQG;IACI,MAAM,CAAC,EAAE,OAAe,EAAE,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI,CAqBnE;YAEa,SAAS;YAcT,eAAe;IAe7B,OAAO,CAAC,cAAc;YAIR,UAAU;YA0BV,UAAU;CAezB"}
|
|
@@ -16,16 +16,16 @@ import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
|
16
16
|
* The store creates a CheckpointProver once per content-key. Keying on the checkpoint's
|
|
17
17
|
* own archive root (its post-state) means two checkpoints are "the same" iff they
|
|
18
18
|
* produce the same archive — so a reorg branch, or a replacement built on the same
|
|
19
|
-
* predecessor but with different content, keys to a distinct prover
|
|
20
|
-
* re-add keys to the same one and reuses its in-flight sub-tree work.
|
|
19
|
+
* predecessor but with different content, keys to a distinct prover.
|
|
21
20
|
*
|
|
22
21
|
* The prover eagerly starts its own tx gather and sub-tree work in the constructor, so
|
|
23
22
|
* callers only need to call `whenBlockProofsReady()` to obtain the resulting block-rollup
|
|
24
23
|
* proofs.
|
|
25
24
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* a
|
|
25
|
+
* A CheckpointProver does not survive a prune: its sub-tree work forks world-state per
|
|
26
|
+
* block, and an L1 prune of a base block faults those reads. The store therefore cancels and
|
|
27
|
+
* discards a prover when its checkpoint is pruned, and a re-add (even of identical content)
|
|
28
|
+
* constructs a fresh prover.
|
|
29
29
|
*
|
|
30
30
|
* `cancel()` is idempotent. It aborts the gather + sub-tree, rejects the block-proof
|
|
31
31
|
* promise, and exposes a `whenDone()` that resolves once teardown has unwound.
|
|
@@ -44,7 +44,6 @@ import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
|
44
44
|
cancelled;
|
|
45
45
|
subTree;
|
|
46
46
|
completed;
|
|
47
|
-
/** Pruned in the canonical chain but not yet reaped — sub-tree continues running. */ pruned;
|
|
48
47
|
abortController;
|
|
49
48
|
/** Tracks the eager gather+execute task so `cancel()` and `whenDone()` can await its unwind. */ runPromise;
|
|
50
49
|
/** Tracks the cancel-driven teardown so `whenDone()` can await it. */ cancelPromise;
|
|
@@ -54,7 +53,6 @@ import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
|
54
53
|
this.blockProofs = promiseWithResolvers();
|
|
55
54
|
this.cancelled = false;
|
|
56
55
|
this.completed = false;
|
|
57
|
-
this.pruned = false;
|
|
58
56
|
this.abortController = new AbortController();
|
|
59
57
|
this.checkpoint = args.checkpoint;
|
|
60
58
|
this.epochNumber = args.epochNumber;
|
|
@@ -91,32 +89,6 @@ import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
|
91
89
|
/** True once block-level proving has been fully *enqueued* (sub-tree completion may still be pending). */ isCompleted() {
|
|
92
90
|
return this.completed;
|
|
93
91
|
}
|
|
94
|
-
isPruned() {
|
|
95
|
-
return this.pruned;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Mark this prover as no longer present in the canonical chain. Sub-tree proving keeps
|
|
99
|
-
* running so the work survives if the checkpoint is re-added. Idempotent.
|
|
100
|
-
*/ markPruned() {
|
|
101
|
-
if (this.pruned) {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
this.pruned = true;
|
|
105
|
-
this.deps.log.info(`Marking CheckpointProver ${this.id} as pruned`, {
|
|
106
|
-
checkpointNumber: this.checkpoint.number,
|
|
107
|
-
slotNumber: this.slotNumber
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
/** Mark this prover as part of the canonical chain again after a re-add. Idempotent. */ markCanonical() {
|
|
111
|
-
if (!this.pruned) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
this.pruned = false;
|
|
115
|
-
this.deps.log.info(`Marking CheckpointProver ${this.id} as canonical`, {
|
|
116
|
-
checkpointNumber: this.checkpoint.number,
|
|
117
|
-
slotNumber: this.slotNumber
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
92
|
/** AbortSignal that fires on cancel — for callers that want to wire their own tasks. */ getAbortSignal() {
|
|
121
93
|
return this.abortController.signal;
|
|
122
94
|
}
|
|
@@ -197,6 +169,8 @@ import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
|
197
169
|
checkpointNumber: this.checkpoint.number,
|
|
198
170
|
blockProofCount: result.blockProofOutputs.length
|
|
199
171
|
});
|
|
172
|
+
// Spans processing + proving (from executeCheckpoint start, after tx gathering) to proofs ready.
|
|
173
|
+
this.deps.metrics.recordCheckpointProving(checkpointTimer.ms());
|
|
200
174
|
this.blockProofs.resolve(result.blockProofOutputs);
|
|
201
175
|
}, (err)=>this.blockProofs.reject(err));
|
|
202
176
|
if (signal.aborted) {
|
|
@@ -251,7 +225,8 @@ import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
|
251
225
|
}
|
|
252
226
|
}
|
|
253
227
|
this.completed = true;
|
|
254
|
-
this.
|
|
228
|
+
const numTxs = this.checkpoint.blocks.reduce((acc, block)=>acc + block.body.txEffects.length, 0);
|
|
229
|
+
this.deps.metrics.recordCheckpointProcessing(checkpointTimer.ms(), this.checkpoint.blocks.length, numTxs);
|
|
255
230
|
this.deps.log.info(`Finished enqueueing block-level proving for checkpoint ${this.checkpoint.number} in ${checkpointTimer.ms()}ms`, {
|
|
256
231
|
checkpointNumber: this.checkpoint.number,
|
|
257
232
|
blockCount: this.checkpoint.blocks.length,
|
|
@@ -327,8 +302,13 @@ import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
|
327
302
|
return block.body.txEffects.map((txEffect)=>txs.get(txEffect.txHash.toString()));
|
|
328
303
|
}
|
|
329
304
|
async processTxs(publicProcessor, txs) {
|
|
305
|
+
// Pass the abort signal so a prune-driven cancel stops the current block's public execution
|
|
306
|
+
// immediately, rather than running it to completion before the next `signal.aborted` check.
|
|
307
|
+
// On abort `process` returns a partial result, the length check below throws, and
|
|
308
|
+
// `gatherAndExecute` swallows it via its `cancelled` guard.
|
|
330
309
|
const [processedTxs, failedTxs] = await publicProcessor.process(txs, {
|
|
331
|
-
deadline: this.deps.deadline
|
|
310
|
+
deadline: this.deps.deadline,
|
|
311
|
+
signal: this.abortController.signal
|
|
332
312
|
});
|
|
333
313
|
if (failedTxs.length) {
|
|
334
314
|
const failedTxHashes = await Promise.all(failedTxs.map(({ tx })=>tx.getTxHash()));
|
|
@@ -77,7 +77,7 @@ export type EpochSessionDeps = {
|
|
|
77
77
|
*
|
|
78
78
|
* Lifecycle (happy path):
|
|
79
79
|
*
|
|
80
|
-
* initialized → awaiting-checkpoints → completed
|
|
80
|
+
* initialized → awaiting-checkpoints → awaiting-root → publishing-proof → completed
|
|
81
81
|
*
|
|
82
82
|
* Terminal states map the publishing outcome: `published` → `completed`, `superseded` →
|
|
83
83
|
* `superseded`, `failed` → `failed`, `expired` → `timed-out`, `withdrawn` → `cancelled`.
|
|
@@ -143,4 +143,4 @@ export declare class EpochSession implements Traceable {
|
|
|
143
143
|
protected handleDeadline(): Promise<void>;
|
|
144
144
|
private toTopTreeHooks;
|
|
145
145
|
}
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtc2Vzc2lvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pvYi9lcG9jaC1zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQXlCLEtBQUssV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEgsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0QsT0FBTyxFQUFFLEtBQUssb0JBQW9CLEVBQWdDLE1BQU0saUNBQWlDLENBQUM7QUFDMUcsT0FBTyxFQUFjLEtBQUssU0FBUyxFQUFFLEtBQUssTUFBTSxFQUFhLE1BQU0seUJBQXlCLENBQUM7QUFJN0YsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQW9DLEtBQUssWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeEYsWUFBWSxFQUFFLG9CQUFvQixFQUFFLENBQUM7QUFFckMsd0ZBQXNGO0FBQ3RGLE1BQU0sTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUU3Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxXQUFXLFdBQVc7SUFDMUIsSUFBSSxFQUFFLFdBQVcsQ0FBQztJQUNsQixXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQ3pCLFFBQVEsRUFBRSxVQUFVLENBQUM7SUFDckIsTUFBTSxFQUFFLFVBQVUsQ0FBQztDQUNwQjtBQUVELHlDQUF5QztBQUN6Qyx3QkFBZ0IsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLEdBQUcsTUFBTSxDQUVqRDtBQUVELHNGQUFzRjtBQUN0RixNQUFNLE1BQU0saUJBQWlCLEdBQUc7SUFDOUIsa0JBQWtCLENBQUMsRUFBRSxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDaEQsaUJBQWlCLENBQUMsRUFBRSxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0Msb0JBQW9CLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7Q0FDN0YsQ0FBQztBQUVGLE1BQU0sTUFBTSxtQkFBbUIsR0FBRztJQUNoQzs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDOUIsQ0FBQztBQUVGLDREQUE0RDtBQUM1RCxNQUFNLE1BQU0sZ0JBQWdCLEdBQUc7SUFDN0IsYUFBYSxFQUFFLGtCQUFrQixDQUFDO0lBQ2xDLFFBQVEsRUFBRSxVQUFVLENBQUM7SUFDckIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUN2RSxPQUFPLEVBQUUsb0JBQW9CLENBQUM7SUFDOUIsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUMzQiw2RUFBNkU7SUFDN0UsUUFBUSxFQUFFLElBQUksR0FBRyxTQUFTLENBQUM7SUFDM0IsTUFBTSxFQUFFLG1CQUFtQixDQUFDO0lBQzVCLFFBQVEsQ0FBQyxFQUFFLGNBQWMsQ0FBQztJQUMxQixLQUFLLENBQUMsRUFBRSxpQkFBaUIsQ0FBQztDQUMzQixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxxQkFBYSxZQUFhLFlBQVcsU0FBUztJQWtCMUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO0lBRXJCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSTtJQW5CdkIsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUMvQixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBUztJQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBUztJQUM3QixPQUFPLENBQUMsS0FBSyxDQUF1QztJQUNwRCxPQUFPLENBQUMsc0JBQXNCLENBQTZCO0lBRTNELE9BQU8sQ0FBQyxVQUFVLENBQXlCO0lBQzNDLDBGQUEwRjtJQUMxRixPQUFPLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFvQjtJQUUzRCxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFnQztJQUNsRSxPQUFPLENBQUMsaUJBQWlCLENBQXlDO0lBRWxFLDBEQUEwRDtJQUMxRCxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBOEI7SUFFMUQsWUFDbUIsSUFBSSxFQUFFLFdBQVcsRUFDbEMsV0FBVyxFQUFFLFNBQVMsZ0JBQWdCLEVBQUUsRUFDdkIsSUFBSSxFQUFFLGdCQUFnQixFQXNCeEM7SUFFTSxLQUFLLElBQUksTUFBTSxDQUVyQjtJQUVNLE9BQU8sSUFBSSxXQUFXLENBRTVCO0lBRU0sUUFBUSxJQUFJLG9CQUFvQixDQUV0QztJQUVNLGNBQWMsSUFBSSxXQUFXLENBRW5DO0lBRU0sT0FBTyxJQUFJLFdBQVcsQ0FFNUI7SUFFTSxXQUFXLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FFckM7SUFFTSxjQUFjLElBQUksU0FBUyxnQkFBZ0IsRUFBRSxDQUVuRDtJQUVELDBEQUEwRDtJQUNuRCxRQUFRLElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBRS9DO0lBRUQsa0RBQWtEO0lBQzNDLFVBQVUsSUFBSSxPQUFPLENBRTNCO0lBRUQsdUNBQXVDO0lBQ2hDLG1CQUFtQixJQUFJLFdBQVcsQ0FFeEM7SUFFRCxzQ0FBc0M7SUFDL0IsaUJBQWlCLElBQUksV0FBVyxDQUd0QztJQUVEOzs7T0FHRztJQUlVLEtBQUssSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FpQmxEO0lBRUQ7OztPQUdHO0lBQ1UsTUFBTSxDQUFDLE1BQU0sU0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0F3QnZEO1lBRWEsR0FBRztZQWlESCxXQUFXO1lBeUVYLHVCQUF1QjtJQWFyQyxPQUFPLENBQUMsb0JBQW9CO0lBVzVCOzs7O09BSUc7SUFDSCxVQUFnQixjQUFjLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQVU5QztJQUVELE9BQU8sQ0FBQyxjQUFjO0NBZ0J2QiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"epoch-session.d.ts","sourceRoot":"","sources":["../../src/job/epoch-session.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"epoch-session.d.ts","sourceRoot":"","sources":["../../src/job/epoch-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -407,7 +407,7 @@ _dec = trackSpan('EpochSession.start', function() {
|
|
|
407
407
|
*
|
|
408
408
|
* Lifecycle (happy path):
|
|
409
409
|
*
|
|
410
|
-
* initialized → awaiting-checkpoints → completed
|
|
410
|
+
* initialized → awaiting-checkpoints → awaiting-root → publishing-proof → completed
|
|
411
411
|
*
|
|
412
412
|
* Terminal states map the publishing outcome: `published` → `completed`, `superseded` →
|
|
413
413
|
* `superseded`, `failed` → `failed`, `expired` → `timed-out`, `withdrawn` → `cancelled`.
|
|
@@ -606,6 +606,11 @@ _dec = trackSpan('EpochSession.start', function() {
|
|
|
606
606
|
const attestations = lastCheckpoint.attestations.map((a)=>a.toViem());
|
|
607
607
|
const epochSizeBlocks = this.checkpoints.reduce((acc, c)=>acc + c.checkpoint.blocks.length, 0);
|
|
608
608
|
const epochSizeTxs = this.checkpoints.reduce((acc, c)=>acc + c.checkpoint.blocks.reduce((bAcc, block)=>bAcc + block.body.txEffects.length, 0), 0);
|
|
609
|
+
// Reflect the publish phase. Guard against a terminal state set concurrently by cancel() — the
|
|
610
|
+
// post-submit isTerminal() check below relies on cancel still winning.
|
|
611
|
+
if (!this.isTerminal()) {
|
|
612
|
+
this.state = 'publishing-proof';
|
|
613
|
+
}
|
|
609
614
|
const outcome = await this.deps.publishingService.submit({
|
|
610
615
|
id: this.uuid,
|
|
611
616
|
epoch: this.spec.epochNumber,
|
|
@@ -618,7 +623,8 @@ _dec = trackSpan('EpochSession.start', function() {
|
|
|
618
623
|
publicInputs: proof.publicInputs,
|
|
619
624
|
proof: proof.proof,
|
|
620
625
|
batchedBlobInputs: proof.batchedBlobInputs,
|
|
621
|
-
attestations
|
|
626
|
+
attestations,
|
|
627
|
+
headers: this.checkpoints.map((c)=>c.checkpoint.header)
|
|
622
628
|
});
|
|
623
629
|
if (this.isTerminal()) {
|
|
624
630
|
// cancel() already set the terminal state — don't clobber it.
|
|
@@ -631,7 +637,7 @@ _dec = trackSpan('EpochSession.start', function() {
|
|
|
631
637
|
...this.spec
|
|
632
638
|
});
|
|
633
639
|
this.state = 'completed';
|
|
634
|
-
this.deps.metrics.recordProvingJob(timer.ms(),
|
|
640
|
+
this.deps.metrics.recordProvingJob(timer.ms(), checkpointCount, epochSizeBlocks, epochSizeTxs);
|
|
635
641
|
return;
|
|
636
642
|
case 'superseded':
|
|
637
643
|
this.log.info(`EpochSession ${this.uuid} superseded by a longer candidate`, {
|
|
@@ -697,13 +703,18 @@ _dec = trackSpan('EpochSession.start', function() {
|
|
|
697
703
|
}
|
|
698
704
|
toTopTreeHooks() {
|
|
699
705
|
const hooks = this.deps.hooks;
|
|
700
|
-
if (!hooks?.beforeTopTreeProve && !hooks?.afterTopTreeProve && !hooks?.topTreeProveOverride) {
|
|
701
|
-
return undefined;
|
|
702
|
-
}
|
|
703
706
|
return {
|
|
704
|
-
beforeProve
|
|
705
|
-
|
|
706
|
-
|
|
707
|
+
// `beforeProve` fires once the sub-tree (checkpoint block) proofs are ready and the root prove is
|
|
708
|
+
// about to start — the boundary between `awaiting-checkpoints` and proving the top tree. Don't
|
|
709
|
+
// clobber a terminal state set concurrently by cancel().
|
|
710
|
+
beforeProve: async ()=>{
|
|
711
|
+
if (!this.isTerminal()) {
|
|
712
|
+
this.state = 'awaiting-root';
|
|
713
|
+
}
|
|
714
|
+
await hooks?.beforeTopTreeProve?.();
|
|
715
|
+
},
|
|
716
|
+
afterProve: hooks?.afterTopTreeProve,
|
|
717
|
+
proveOverride: hooks?.topTreeProveOverride
|
|
707
718
|
};
|
|
708
719
|
}
|
|
709
720
|
}
|
package/dest/metrics.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ export declare class ProverNodeJobMetrics {
|
|
|
8
8
|
private meter;
|
|
9
9
|
readonly tracer: Tracer;
|
|
10
10
|
private logger;
|
|
11
|
-
proverEpochExecutionDuration: Histogram;
|
|
12
11
|
provingJobDuration: Histogram;
|
|
13
12
|
provingJobCheckpoints: Gauge;
|
|
14
13
|
provingJobBlocks: Gauge;
|
|
@@ -16,6 +15,9 @@ export declare class ProverNodeJobMetrics {
|
|
|
16
15
|
private blobProcessingDuration;
|
|
17
16
|
private blockProcessingDuration;
|
|
18
17
|
private checkpointProcessingDuration;
|
|
18
|
+
private checkpointProvingDuration;
|
|
19
|
+
private checkpointBlocks;
|
|
20
|
+
private checkpointTransactions;
|
|
19
21
|
/** Observable gauges for live state. Registered via `observeState(...)` once the
|
|
20
22
|
* CheckpointStore and SessionManager are available. */
|
|
21
23
|
private activeCheckpoints;
|
|
@@ -23,10 +25,11 @@ export declare class ProverNodeJobMetrics {
|
|
|
23
25
|
private stateObserver;
|
|
24
26
|
private stateObservedMetrics;
|
|
25
27
|
constructor(meter: Meter, tracer: Tracer, logger?: import("@aztec/foundation/log").Logger);
|
|
26
|
-
recordProvingJob(
|
|
28
|
+
recordProvingJob(totalTimeMs: number, numCheckpoints: number, numBlocks: number, numTxs: number): void;
|
|
27
29
|
recordBlobProcessing(durationMs: number): void;
|
|
28
30
|
recordBlockProcessing(durationMs: number): void;
|
|
29
|
-
recordCheckpointProcessing(durationMs: number): void;
|
|
31
|
+
recordCheckpointProcessing(durationMs: number, numBlocks: number, numTxs: number): void;
|
|
32
|
+
recordCheckpointProving(durationMs: number): void;
|
|
30
33
|
/**
|
|
31
34
|
* Registers observable gauges for the prover-node's live state: how many canonical
|
|
32
35
|
* checkpoint provers are in the store, and how many epoch sessions are live (broken
|
|
@@ -82,4 +85,4 @@ export declare class ProverNodePublisherMetrics {
|
|
|
82
85
|
recordSenderBalance(wei: bigint, senderAddress: string): void;
|
|
83
86
|
private recordTx;
|
|
84
87
|
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUdMLEtBQUssS0FBSyxFQUNWLEtBQUssU0FBUyxFQUNkLEtBQUssS0FBSyxFQUdWLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFDWCxLQUFLLGFBQWEsRUFFbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUlqQyxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxxQkFBYSxvQkFBb0I7SUFxQjdCLE9BQU8sQ0FBQyxLQUFLO2FBQ0csTUFBTSxFQUFFLE1BQU07SUFDOUIsT0FBTyxDQUFDLE1BQU07SUF0QmhCLGtCQUFrQixFQUFFLFNBQVMsQ0FBQztJQUM5QixxQkFBcUIsRUFBRSxLQUFLLENBQUM7SUFDN0IsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDO0lBQ3hCLHNCQUFzQixFQUFFLEtBQUssQ0FBQztJQUU5QixPQUFPLENBQUMsc0JBQXNCLENBQVE7SUFDdEMsT0FBTyxDQUFDLHVCQUF1QixDQUFZO0lBQzNDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBWTtJQUNoRCxPQUFPLENBQUMseUJBQXlCLENBQVk7SUFDN0MsT0FBTyxDQUFDLGdCQUFnQixDQUFZO0lBQ3BDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBWTtJQUUxQzs0REFDd0Q7SUFDeEQsT0FBTyxDQUFDLGlCQUFpQixDQUE4QjtJQUN2RCxPQUFPLENBQUMsbUJBQW1C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
|
package/dest/metrics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAkB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,KAAK,EAGV,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,qBAAa,oBAAoB;
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|