@aztec/prover-node 0.0.1-commit.2f68f620 → 0.0.1-commit.321f6a9
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 +572 -0
- package/dest/actions/rerun-epoch-proving-job.d.ts +12 -3
- package/dest/actions/rerun-epoch-proving-job.d.ts.map +1 -1
- package/dest/actions/rerun-epoch-proving-job.js +170 -28
- package/dest/checkpoint-store.d.ts +95 -0
- package/dest/checkpoint-store.d.ts.map +1 -0
- package/dest/checkpoint-store.js +178 -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 +4 -1
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +1 -6
- 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 +154 -0
- package/dest/job/checkpoint-prover.d.ts.map +1 -0
- package/dest/job/checkpoint-prover.js +363 -0
- package/dest/job/epoch-session.d.ts +160 -0
- package/dest/job/epoch-session.d.ts.map +1 -0
- package/dest/job/epoch-session.js +744 -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 +25 -8
- package/dest/metrics.d.ts.map +1 -1
- package/dest/metrics.js +64 -14
- package/dest/proof-publishing-service.d.ts +161 -0
- package/dest/proof-publishing-service.d.ts.map +1 -0
- package/dest/proof-publishing-service.js +335 -0
- package/dest/prover-node-publisher.d.ts +7 -19
- package/dest/prover-node-publisher.d.ts.map +1 -1
- package/dest/prover-node-publisher.js +38 -96
- package/dest/prover-node.d.ts +133 -66
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +529 -255
- package/dest/session-manager.d.ts +158 -0
- package/dest/session-manager.d.ts.map +1 -0
- package/dest/session-manager.js +486 -0
- package/dest/test/index.d.ts +7 -6
- package/dest/test/index.d.ts.map +1 -1
- package/package.json +24 -23
- package/src/actions/rerun-epoch-proving-job.ts +178 -30
- package/src/checkpoint-store.ts +212 -0
- package/src/config.ts +2 -1
- package/src/factory.ts +4 -8
- package/src/index.ts +1 -0
- package/src/job/checkpoint-prover.ts +496 -0
- package/src/job/epoch-session.ts +462 -0
- package/src/job/top-tree-job.ts +227 -0
- package/src/metrics.ts +65 -23
- package/src/proof-publishing-service.ts +427 -0
- package/src/prover-node-publisher.ts +52 -121
- package/src/prover-node.ts +617 -277
- package/src/session-manager.ts +589 -0
- package/src/test/index.ts +6 -6
- package/dest/job/epoch-proving-job.d.ts +0 -67
- package/dest/job/epoch-proving-job.d.ts.map +0 -1
- package/dest/job/epoch-proving-job.js +0 -912
- package/src/job/epoch-proving-job.ts +0 -531
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { BlockNumber, type EpochNumber, type SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
+
import { type LoggerBindings } from '@aztec/foundation/log';
|
|
4
|
+
import { type DateProvider } from '@aztec/foundation/timer';
|
|
5
|
+
import type { EpochProverFactory } from '@aztec/prover-client';
|
|
6
|
+
import { type EpochProvingJobState } from '@aztec/stdlib/interfaces/server';
|
|
7
|
+
import { type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
8
|
+
import type { ProverNodeJobMetrics } from '../metrics.js';
|
|
9
|
+
import type { ProofPublishingService } from '../proof-publishing-service.js';
|
|
10
|
+
import { CheckpointProver } from './checkpoint-prover.js';
|
|
11
|
+
import { type TopTreeProof } from './top-tree-job.js';
|
|
12
|
+
export type { EpochProvingJobState };
|
|
13
|
+
/** Full vs partial — the only behavioural difference is at the L1 submission step. */
|
|
14
|
+
export type SessionKind = 'full' | 'partial';
|
|
15
|
+
/**
|
|
16
|
+
* Identifies what a session proves: a contiguous slot range within an epoch. The
|
|
17
|
+
* concrete prover set the session holds is the *implementation* of the spec — frozen
|
|
18
|
+
* at construction time, derived from the canonical content for `[fromSlot, toSlot]`.
|
|
19
|
+
*
|
|
20
|
+
* Reconciliation in `ProverNode` is uniform across kinds: whenever the canonical
|
|
21
|
+
* content for the slot range changes, the session is cancelled and replaced with a
|
|
22
|
+
* fresh session that **preserves the slot range** but adopts the new checkpoints.
|
|
23
|
+
*
|
|
24
|
+
* Kind affects only the publishing decision (see `EpochSession`).
|
|
25
|
+
*/
|
|
26
|
+
export interface SessionSpec {
|
|
27
|
+
kind: SessionKind;
|
|
28
|
+
epochNumber: EpochNumber;
|
|
29
|
+
fromSlot: SlotNumber;
|
|
30
|
+
toSlot: SlotNumber;
|
|
31
|
+
}
|
|
32
|
+
/** Stable string key for use in maps. */
|
|
33
|
+
export declare function specKey(spec: SessionSpec): string;
|
|
34
|
+
/** Hooks tests use to interpose around the top-tree prove without monkey-patching. */
|
|
35
|
+
export type EpochSessionHooks = {
|
|
36
|
+
beforeTopTreeProve?: () => Promise<void> | void;
|
|
37
|
+
afterTopTreeProve?: () => Promise<void> | void;
|
|
38
|
+
topTreeProveOverride?: (defaultProve: () => Promise<TopTreeProof>) => Promise<TopTreeProof>;
|
|
39
|
+
};
|
|
40
|
+
export type EpochSessionOptions = {
|
|
41
|
+
/**
|
|
42
|
+
* If set, the session sleeps this many ms after `start()` (before the TopTreeJob is
|
|
43
|
+
* constructed). Lets late-arriving events (e.g. a prune) be processed before
|
|
44
|
+
* top-tree proving begins.
|
|
45
|
+
*/
|
|
46
|
+
finalizationDelayMs?: number;
|
|
47
|
+
};
|
|
48
|
+
/** Dependencies an `EpochSession` needs at construction. */
|
|
49
|
+
export type EpochSessionDeps = {
|
|
50
|
+
proverFactory: EpochProverFactory;
|
|
51
|
+
proverId: EthAddress;
|
|
52
|
+
publishingService: Pick<ProofPublishingService, 'submit' | 'withdraw'>;
|
|
53
|
+
metrics: ProverNodeJobMetrics;
|
|
54
|
+
dateProvider: DateProvider;
|
|
55
|
+
/** Optional proving deadline. The session enters `timed-out` if exceeded. */
|
|
56
|
+
deadline: Date | undefined;
|
|
57
|
+
config: EpochSessionOptions;
|
|
58
|
+
bindings?: LoggerBindings;
|
|
59
|
+
hooks?: EpochSessionHooks;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* One attempt at proving and publishing a contiguous slot range. The `SessionSpec` and
|
|
63
|
+
* the prover set are both frozen at construction time; the session does not adapt to
|
|
64
|
+
* reorgs or extensions of canonical content. Instead, `SessionManager` owns the
|
|
65
|
+
* reconciliation loop and replaces invalidated sessions wholesale (cancel + construct
|
|
66
|
+
* a fresh session with the new prover set).
|
|
67
|
+
*
|
|
68
|
+
* Each session does three things in sequence:
|
|
69
|
+
*
|
|
70
|
+
* 1. Run a `TopTreeJob` over its frozen prover subset to produce the epoch proof.
|
|
71
|
+
* 2. Hand the proof to the shared `ProofPublishingService` as a `PublishCandidate`.
|
|
72
|
+
* 3. Translate the service's outcome into a terminal session state.
|
|
73
|
+
*
|
|
74
|
+
* Everything to do with submission — predecessor gating, same-epoch dedup, deadline
|
|
75
|
+
* enforcement, and the L1 transaction itself — is the publishing service's concern.
|
|
76
|
+
* The session is just the producer of one candidate and the observer of its outcome.
|
|
77
|
+
*
|
|
78
|
+
* Lifecycle (happy path):
|
|
79
|
+
*
|
|
80
|
+
* initialized → awaiting-checkpoints → awaiting-root → publishing-proof → completed
|
|
81
|
+
*
|
|
82
|
+
* Terminal states map the publishing outcome: `published` → `completed`, `superseded` →
|
|
83
|
+
* `superseded`, `expired` → `timed-out`, `withdrawn` → `cancelled`. A fault ends the attempt in one
|
|
84
|
+
* of two terminal states depending on its cause: `stopped` if a checkpoint prover under it failed
|
|
85
|
+
* (possibly a prune — the reconciler will rebuild over a fresh prover on re-add), or `failed` if the
|
|
86
|
+
* session's own top-tree/submit work failed while every prover was healthy (a genuine, non-prune
|
|
87
|
+
* failure the reconciler retains and uploads — see `hasFailed()`).
|
|
88
|
+
* Additionally, the session-level deadline fires `cancel('deadline')` and transitions
|
|
89
|
+
* to `timed-out` for the pre-submit window (top-tree proving) — the publishing service
|
|
90
|
+
* handles the post-submit window via the candidate's `deadline`.
|
|
91
|
+
*
|
|
92
|
+
* `cancel()` is idempotent. It marks the session terminal, calls
|
|
93
|
+
* `publishingService.withdraw(uuid)` to drop any queued candidate (an in-flight publish
|
|
94
|
+
* runs to natural completion; the session has already settled), and tears down the
|
|
95
|
+
* top-tree job if proving is still in progress.
|
|
96
|
+
*/
|
|
97
|
+
export declare class EpochSession implements Traceable {
|
|
98
|
+
private readonly spec;
|
|
99
|
+
private readonly deps;
|
|
100
|
+
readonly tracer: Tracer;
|
|
101
|
+
private readonly uuid;
|
|
102
|
+
private readonly log;
|
|
103
|
+
private state;
|
|
104
|
+
private deadlineTimeoutHandler;
|
|
105
|
+
private topTreeJob;
|
|
106
|
+
/** Cancelled top-tree jobs whose teardown is still in flight. Awaited at session stop. */
|
|
107
|
+
private readonly pendingTopTreeCleanups;
|
|
108
|
+
private readonly completionPromise;
|
|
109
|
+
private resolveCompletion;
|
|
110
|
+
/** Stable reference; never mutated after construction. */
|
|
111
|
+
private readonly checkpoints;
|
|
112
|
+
constructor(spec: SessionSpec, checkpoints: readonly CheckpointProver[], deps: EpochSessionDeps);
|
|
113
|
+
getId(): string;
|
|
114
|
+
getSpec(): SessionSpec;
|
|
115
|
+
getState(): EpochProvingJobState;
|
|
116
|
+
getEpochNumber(): EpochNumber;
|
|
117
|
+
getKind(): SessionKind;
|
|
118
|
+
getDeadline(): Date | undefined;
|
|
119
|
+
getCheckpoints(): readonly CheckpointProver[];
|
|
120
|
+
/** Resolves when the session reaches a terminal state. */
|
|
121
|
+
whenDone(): Promise<EpochProvingJobState>;
|
|
122
|
+
/** True if the session is in a terminal state. */
|
|
123
|
+
isTerminal(): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* True if the session ended in its own genuine failure — top-tree proving or L1 submission failed
|
|
126
|
+
* while every checkpoint prover succeeded. Because healthy provers rule out a prune-induced fault,
|
|
127
|
+
* this is a race-free "the epoch could not be proven" signal: the reconciler retains such a (full)
|
|
128
|
+
* session rather than re-proving it, and uploads a post-mortem. A `stopped` session (a checkpoint
|
|
129
|
+
* prover failed under it) is NOT a session failure in this sense.
|
|
130
|
+
*/
|
|
131
|
+
hasFailed(): boolean;
|
|
132
|
+
/** First block this session proves. */
|
|
133
|
+
getStartBlockNumber(): BlockNumber;
|
|
134
|
+
/** Last block this session proves. */
|
|
135
|
+
getEndBlockNumber(): BlockNumber;
|
|
136
|
+
/**
|
|
137
|
+
* Kicks off proving + submission. Fires and forgets — callers should await `whenDone()`.
|
|
138
|
+
* Returns a promise that resolves to the final state for callers that want to wait inline.
|
|
139
|
+
*/
|
|
140
|
+
start(): Promise<EpochProvingJobState>;
|
|
141
|
+
/**
|
|
142
|
+
* Cancels the session. Idempotent. Withdraws any submitted candidate from the
|
|
143
|
+
* publishing service so the in-flight publisher (if any) is interrupted.
|
|
144
|
+
*/
|
|
145
|
+
cancel(reason?: string, { abortJobs }?: {
|
|
146
|
+
abortJobs?: boolean;
|
|
147
|
+
}): Promise<void>;
|
|
148
|
+
private run;
|
|
149
|
+
private submitProof;
|
|
150
|
+
private teardownTopTreeIfNeeded;
|
|
151
|
+
private scheduleDeadlineStop;
|
|
152
|
+
/**
|
|
153
|
+
* Returns a promise that resolves once cancellation has propagated and the state has
|
|
154
|
+
* been flipped from 'cancelled' to 'timed-out'. Protected so unit tests can drive the
|
|
155
|
+
* deadline path without waiting on the real `setTimeout` to fire.
|
|
156
|
+
*/
|
|
157
|
+
protected handleDeadline(): Promise<void>;
|
|
158
|
+
private toTopTreeHooks;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2gtc2Vzc2lvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pvYi9lcG9jaC1zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQXlCLEtBQUssV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEgsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0QsT0FBTyxFQUFFLEtBQUssb0JBQW9CLEVBQWdDLE1BQU0saUNBQWlDLENBQUM7QUFDMUcsT0FBTyxFQUFjLEtBQUssU0FBUyxFQUFFLEtBQUssTUFBTSxFQUFhLE1BQU0seUJBQXlCLENBQUM7QUFJN0YsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQW9DLEtBQUssWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeEYsWUFBWSxFQUFFLG9CQUFvQixFQUFFLENBQUM7QUFFckMsd0ZBQXNGO0FBQ3RGLE1BQU0sTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUU3Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxXQUFXLFdBQVc7SUFDMUIsSUFBSSxFQUFFLFdBQVcsQ0FBQztJQUNsQixXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQ3pCLFFBQVEsRUFBRSxV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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epoch-session.d.ts","sourceRoot":"","sources":["../../src/job/epoch-session.ts"],"names":[],"mappings":"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"}
|