@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.
Files changed (36) hide show
  1. package/README.md +73 -68
  2. package/dest/actions/rerun-epoch-proving-job.d.ts +2 -2
  3. package/dest/actions/rerun-epoch-proving-job.d.ts.map +1 -1
  4. package/dest/checkpoint-store.d.ts +42 -37
  5. package/dest/checkpoint-store.d.ts.map +1 -1
  6. package/dest/checkpoint-store.js +65 -77
  7. package/dest/job/checkpoint-prover.d.ts +6 -16
  8. package/dest/job/checkpoint-prover.d.ts.map +1 -1
  9. package/dest/job/checkpoint-prover.js +15 -35
  10. package/dest/job/epoch-session.d.ts +2 -2
  11. package/dest/job/epoch-session.d.ts.map +1 -1
  12. package/dest/job/epoch-session.js +20 -9
  13. package/dest/metrics.d.ts +7 -4
  14. package/dest/metrics.d.ts.map +1 -1
  15. package/dest/metrics.js +14 -6
  16. package/dest/proof-publishing-service.d.ts +4 -2
  17. package/dest/proof-publishing-service.d.ts.map +1 -1
  18. package/dest/proof-publishing-service.js +1 -0
  19. package/dest/prover-node-publisher.d.ts +5 -5
  20. package/dest/prover-node-publisher.d.ts.map +1 -1
  21. package/dest/prover-node-publisher.js +2 -3
  22. package/dest/prover-node.d.ts +25 -15
  23. package/dest/prover-node.d.ts.map +1 -1
  24. package/dest/prover-node.js +152 -51
  25. package/dest/session-manager.d.ts +2 -2
  26. package/dest/session-manager.d.ts.map +1 -1
  27. package/dest/session-manager.js +38 -8
  28. package/package.json +23 -23
  29. package/src/checkpoint-store.ts +66 -85
  30. package/src/job/checkpoint-prover.ts +17 -40
  31. package/src/job/epoch-session.ts +21 -9
  32. package/src/metrics.ts +15 -12
  33. package/src/proof-publishing-service.ts +4 -1
  34. package/src/prover-node-publisher.ts +11 -10
  35. package/src/prover-node.ts +170 -60
  36. package/src/session-manager.ts +38 -7
@@ -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
- * - it has been pruned and the L2 chain has moved past its slot (no re-add possible), or
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 re-add of a checkpoint that matches an existing prover's content key reuses the
16
- * existing prover (and flips it back to canonical); the in-flight sub-tree work never
17
- * stops, so a prune-then-re-add of the same content avoids re-proving entirely.
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
- slotWatcher;
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, options, bindings, proverFactoryFn = (args, deps)=>new CheckpointProver(args, deps)){
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 this.slotWatcher.stop();
41
- // Cancel every live prover; await teardown.
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(provers.map((p)=>p.whenDone()));
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, it is reused and marked canonical;
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 canonical checkpoint at the
63
- // same slot means the caller forgot to prune the old chain before adding the replacement
64
- // — surface it rather than silently creating a parallel canonical chain.
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 && !prover.isPruned()) {
67
- throw new Error(`Cannot add checkpoint ${checkpoint.number} (archive ${checkpoint.archive.root}) at slot ${checkpoint.header.slotNumber}: ` + `a different canonical checkpoint already occupies this slot. Prune it first.`);
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
- * Marks every canonical prover whose checkpoint number is strictly greater than
83
- * `prunedNumber` as pruned. Sub-tree work keeps running so a re-add of the same
84
- * content can pick it up. Returns the affected provers.
85
- */ markPrunedAfter(prunedNumber) {
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.values()){
88
- if (prover.checkpoint.number > prunedNumber && !prover.isPruned()) {
89
- prover.markPruned();
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 canonical (non-pruned) provers whose epoch is at or below the supplied expired
97
- * epoch. Once an epoch's proof-submission window has closed, its proof can no longer be
98
- * accepted on L1, so the prover is no longer needed.
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
- void prover.whenDone();
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 (canonical and pruned), in insertion order. */ listAll() {
153
+ /** Every prover currently in the store, in insertion order. */ listAll() {
133
154
  return Array.from(this.provers.values());
134
155
  }
135
- /** Canonical (non-pruned) provers in the store, sorted by checkpoint number. */ listCanonical() {
136
- return Array.from(this.provers.values()).filter((p)=>!p.isPruned()).sort((a, b)=>a.checkpoint.number - b.checkpoint.number);
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
- * Canonical provers whose slot is in the supplied epoch's slot range, sorted by
140
- * checkpoint number.
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.listCanonicalInSlotRange(fromSlot, toSlot);
164
+ return this.listInSlotRange(fromSlot, toSlot);
145
165
  }
146
- /** Canonical provers whose slot falls within `[fromSlot, toSlot]`, sorted by checkpoint number. */ listCanonicalInSlotRange(fromSlot, toSlot) {
147
- return this.listCanonical().filter((p)=>p.slotNumber >= fromSlot && p.slotNumber <= toSlot);
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; an identical
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
- * The prover survives prune/re-add cycles via `markPruned()` / `markCanonical()`
59
- * sub-tree proving keeps running underneath, so a checkpoint that is re-added after
60
- * a brief reorg can be re-consumed with no re-proving.
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC1wcm92ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qb2IvY2hlY2twb2ludC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUF1QyxNQUFNLGtCQUFrQixDQUFDO0FBQzVGLE9BQU8sRUFBZSxLQUFLLFdBQVcsRUFBRSxLQUFLLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVMsTUFBTSx5QkFBeUIsQ0FBQztBQUduRSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFpQyxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEgsT0FBTyxLQUFLLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkYsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQVcsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUc3RixPQUFPLEtBQUssRUFBRSxXQUFXLEVBQWUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENB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
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC1wcm92ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qb2IvY2hlY2twb2ludC1wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUF1QyxNQUFNLGtCQUFrQixDQUFDO0FBQzVGLE9BQU8sRUFBZSxLQUFLLFdBQVcsRUFBRSxLQUFLLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVMsTUFBTSx5QkFBeUIsQ0FBQztBQUduRSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFpQyxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEgsT0FBTyxLQUFLLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkYsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQVcsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUc3RixPQUFPLEtBQUssRUFBRSxXQUFXLEVBQWUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENB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
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint-prover.d.ts","sourceRoot":"","sources":["../../src/job/checkpoint-prover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkpoint-prover.d.ts","sourceRoot":"","sources":["../../src/job/checkpoint-prover.ts"],"names":[],"mappings":"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"}
@@ -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; an identical
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
- * The prover survives prune/re-add cycles via `markPruned()` / `markCanonical()`
27
- * sub-tree proving keeps running underneath, so a checkpoint that is re-added after
28
- * a brief reorg can be re-consumed with no re-proving.
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.deps.metrics.recordCheckpointProcessing(checkpointTimer.ms());
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtc2Vzc2lvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pvYi9lcG9jaC1zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQXlCLEtBQUssV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEgsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0QsT0FBTyxFQUFFLEtBQUssb0JBQW9CLEVBQWdDLE1BQU0saUNBQWlDLENBQUM7QUFDMUcsT0FBTyxFQUFjLEtBQUssU0FBUyxFQUFFLEtBQUssTUFBTSxFQUFhLE1BQU0seUJBQXlCLENBQUM7QUFJN0YsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQW9DLEtBQUssWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeEYsWUFBWSxFQUFFLG9CQUFvQixFQUFFLENBQUM7QUFFckMsd0ZBQXNGO0FBQ3RGLE1BQU0sTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUU3Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxXQUFXLFdBQVc7SUFDMUIsSUFBSSxFQUFFLFdBQVcsQ0FBQztJQUNsQixXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQ3pCLFFBQVEsRUFBRSxV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
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtc2Vzc2lvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pvYi9lcG9jaC1zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQXlCLEtBQUssV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEgsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0QsT0FBTyxFQUFFLEtBQUssb0JBQW9CLEVBQWdDLE1BQU0saUNBQWlDLENBQUM7QUFDMUcsT0FBTyxFQUFjLEtBQUssU0FBUyxFQUFFLEtBQUssTUFBTSxFQUFhLE1BQU0seUJBQXlCLENBQUM7QUFJN0YsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQW9DLEtBQUssWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeEYsWUFBWSxFQUFFLG9CQUFvQixFQUFFLENBQUM7QUFFckMsd0ZBQXNGO0FBQ3RGLE1BQU0sTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUU3Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxXQUFXLFdBQVc7SUFDMUIsSUFBSSxFQUFFLFdBQVcsQ0FBQztJQUNsQixXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQ3pCLFFBQVEsRUFBRSxV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
@@ -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(), timer.ms(), checkpointCount, epochSizeBlocks, epochSizeTxs);
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: hooks.beforeTopTreeProve,
705
- afterProve: hooks.afterTopTreeProve,
706
- proveOverride: hooks.topTreeProveOverride
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(executionTimeMs: number, totalTimeMs: number, numCheckpoints: number, numBlocks: number, numTxs: number): void;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUdMLEtBQUssS0FBSyxFQUNWLEtBQUssU0FBUyxFQUNkLEtBQUssS0FBSyxFQUdWLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFDWCxLQUFLLGFBQWEsRUFFbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUlqQyxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxxQkFBYSxvQkFBb0I7SUFtQjdCLE9BQU8sQ0FBQyxLQUFLO2FBQ0csTUFBTSxFQUFFLE1BQU07SUFDOUIsT0FBTyxDQUFDLE1BQU07SUFwQmhCLDRCQUE0QixFQUFFLFNBQVMsQ0FBQztJQUN4QyxrQkFBa0IsRUFBRSxTQUFTLENBQUM7SUFDOUIscUJBQXFCLEVBQUUsS0FBSyxDQUFDO0lBQzdCLGdCQUFnQixFQUFFLEtBQUssQ0FBQztJQUN4QixzQkFBc0IsRUFBRSxLQUFLLENBQUM7SUFFOUIsT0FBTyxDQUFDLHNCQUFzQixDQUFRO0lBQ3RDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBWTtJQUMzQyxPQUFPLENBQUMsNEJBQTRCLENBQVk7SUFFaEQ7NERBQ3dEO0lBQ3hELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBOEI7SUFDdkQsT0FBTyxDQUFDLG1CQUFtQixDQUE4QjtJQUN6RCxPQUFPLENBQUMsYUFBYSxDQUEwRDtJQUMvRSxPQUFPLENBQUMsb0JBQW9C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
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUdMLEtBQUssS0FBSyxFQUNWLEtBQUssU0FBUyxFQUNkLEtBQUssS0FBSyxFQUdWLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFDWCxLQUFLLGFBQWEsRUFFbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUlqQyxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxxQkFBYSxvQkFBb0I7SUFxQjdCLE9BQU8sQ0FBQyxLQUFLO2FBQ0csTUFBTSxFQUFFLE1BQU07SUFDOUIsT0FBTyxDQUFDLE1BQU07SUF0QmhCLGtCQUFrQixFQUFFLFNBQVMsQ0FBQztJQUM5QixxQkFBcUIsRUFBRSxLQUFLLENBQUM7SUFDN0IsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDO0lBQ3hCLHNCQUFzQixFQUFFLEtBQUssQ0FBQztJQUU5QixPQUFPLENBQUMsc0JBQXNCLENBQVE7SUFDdEMsT0FBTyxDQUFDLHVCQUF1QixDQUFZO0lBQzNDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBWTtJQUNoRCxPQUFPLENBQUMseUJBQXlCLENBQVk7SUFDN0MsT0FBTyxDQUFDLGdCQUFnQixDQUFZO0lBQ3BDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBWTtJQUUxQzs0REFDd0Q7SUFDeEQsT0FBTyxDQUFDLGlCQUFpQixDQUE4QjtJQUN2RCxPQUFPLENBQUMsbUJBQW1C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
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}