@aztec-labs/stdlib 6.0.0 → 6.1.0-nightly.20261023

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.
@@ -1,4 +1,4 @@
1
- import type { CheckpointNumber, SlotNumber } from '@aztec-labs/foundation/branded-types';
1
+ import type { CheckpointNumber, CheckpointProposalHash, SlotNumber } from '@aztec-labs/foundation/branded-types';
2
2
  import type { Fr } from '@aztec-labs/foundation/curves/bn254';
3
3
  /**
4
4
  * Outcome of attempting to re-execute a checkpoint proposal locally.
@@ -11,6 +11,24 @@ import type { Fr } from '@aztec-labs/foundation/curves/bn254';
11
11
  * slashing but surfaced separately for telemetry.
12
12
  */
13
13
  export type ReexecutionOutcome = 'valid' | 'invalid' | 'unvalidated';
14
+ /** What the tracker recorded about the checkpoint proposal evaluated for a slot. */
15
+ export type ReexecutionRecord = {
16
+ outcome: ReexecutionOutcome;
17
+ checkpointNumber?: CheckpointNumber;
18
+ /** Archive root in the evaluated proposal. */
19
+ archiveRoot?: string;
20
+ /** Archive root of the parent checkpoint the proposal builds on, when known. */
21
+ lastArchiveRoot?: string;
22
+ /** Hash of the evaluated proposal's signed payload, which its attestations sign. */
23
+ payloadHash?: CheckpointProposalHash;
24
+ };
25
+ /** Optional details of an evaluated checkpoint proposal, beyond what identifies it. */
26
+ export type ReexecutionDetails = {
27
+ /** Archive root of the parent checkpoint the proposal builds on (the checkpoint header's `lastArchiveRoot`). */
28
+ lastArchiveRoot?: Fr;
29
+ /** Hash of the proposal's signed payload. */
30
+ payloadHash?: CheckpointProposalHash;
31
+ };
14
32
  export declare class CheckpointReexecutionTracker {
15
33
  private readonly byCheckpoint;
16
34
  private readonly bySlot;
@@ -21,8 +39,10 @@ export declare class CheckpointReexecutionTracker {
21
39
  * @param outcome - Outcome of evaluation.
22
40
  * @param checkpointNumber - Checkpoint number, if known. Required for `valid` outcomes; optional
23
41
  * for `invalid`/`unvalidated` because some early rejections fire before blocks are loaded.
42
+ * @param details - The proposal's parent archive root and payload hash, if known. They let the sentinel tell whether
43
+ * a valid proposal that never landed was built on a parent that is on L1, and count only the attestations for it.
24
44
  */
25
- recordOutcome(slot: SlotNumber, archiveRoot: Fr, outcome: ReexecutionOutcome, checkpointNumber?: CheckpointNumber): void;
45
+ recordOutcome(slot: SlotNumber, archiveRoot: Fr, outcome: ReexecutionOutcome, checkpointNumber?: CheckpointNumber, details?: ReexecutionDetails): void;
26
46
  /**
27
47
  * Record whether the local node successfully collected the transactions for a block proposal.
28
48
  * Called from the validator's proposal handler immediately after tx collection completes
@@ -51,6 +71,8 @@ export declare class CheckpointReexecutionTracker {
51
71
  hasReexecuted(checkpointNumber: CheckpointNumber, archiveRoot: Fr): boolean;
52
72
  /** Returns the recorded outcome for a given slot, or undefined if no proposal was evaluated. */
53
73
  getOutcomeForSlot(slot: SlotNumber): ReexecutionOutcome | undefined;
74
+ /** Returns the full record of the proposal evaluated for a slot, or undefined if none was evaluated. */
75
+ getRecordForSlot(slot: SlotNumber): ReexecutionRecord | undefined;
54
76
  /**
55
77
  * Whether this slot's recorded outcome is `valid` *and* was recorded for this archive root.
56
78
  *
@@ -75,4 +97,4 @@ export declare class CheckpointReexecutionTracker {
75
97
  /** Drops entries for checkpoints with `number < checkpointNumber`. */
76
98
  removeBefore(checkpointNumber: CheckpointNumber): void;
77
99
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9yZWV4ZWN1dGlvbl90cmFja2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hlY2twb2ludC9jaGVja3BvaW50X3JlZXhlY3V0aW9uX3RyYWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekYsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFOUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxNQUFNLGtCQUFrQixHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsYUFBYSxDQUFDO0FBZ0NyRSxxQkFBYSw0QkFBNEI7SUFDdkMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQW1EO0lBQ2hGLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFnQztJQUV2RDs7Ozs7OztPQU9HO0lBQ0ksYUFBYSxDQUNsQixJQUFJLEVBQUUsVUFBVSxFQUNoQixXQUFXLEVBQUUsRUFBRSxFQUNmLE9BQU8sRUFBRSxrQkFBa0IsRUFDM0IsZ0JBQWdCLENBQUMsRUFBRSxnQkFBZ0IsR0FDbEMsSUFBSSxDQXdCTjtJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksa0JBQWtCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sR0FBRyxJQUFJLENBY25HO0lBRUQ7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsSUFBSSxDQWNoRDtJQUVELHlFQUF5RTtJQUNsRSxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBRWhEO0lBRUQ7OztPQUdHO0lBQ0ksYUFBYSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUVqRjtJQUVELGdHQUFnRztJQUN6RixpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLGtCQUFrQixHQUFHLFNBQVMsQ0FFekU7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLHNCQUFzQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBR3hFO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0kscUJBQXFCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FFakc7SUFFRCxzRUFBc0U7SUFDL0QsWUFBWSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLElBQUksQ0E0QjVEO0NBQ0YifQ==
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9yZWV4ZWN1dGlvbl90cmFja2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hlY2twb2ludC9jaGVja3BvaW50X3JlZXhlY3V0aW9uX3RyYWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakgsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFOUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxNQUFNLGtCQUFrQixHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsYUFBYSxDQUFDO0FBRXJFLG9GQUFvRjtBQUNwRixNQUFNLE1BQU0saUJBQWlCLEdBQUc7SUFDOUIsT0FBTyxFQUFFLGtCQUFrQixDQUFDO0lBQzVCLGdCQUFnQixDQUFDLEVBQUUsZ0JBQWdCLENBQUM7SUFDcEMsOENBQThDO0lBQzlDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNyQixnRkFBZ0Y7SUFDaEYsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLG9GQUFvRjtJQUNwRixXQUFXLENBQUMsRUFBRSxzQkFBc0IsQ0FBQztDQUN0QyxDQUFDO0FBRUYsdUZBQXVGO0FBQ3ZGLE1BQU0sTUFBTSxrQkFBa0IsR0FBRztJQUMvQixnSEFBZ0g7SUFDaEgsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3JCLDZDQUE2QztJQUM3QyxXQUFXLENBQUMsRUFBRSxzQkFBc0IsQ0FBQztDQUN0QyxDQUFDO0FBa0NGLHFCQUFhLDRCQUE0QjtJQUN2QyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBbUQ7SUFDaEYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQWdDO0lBRXZEOzs7Ozs7Ozs7T0FTRztJQUNJLGFBQWEsQ0FDbEIsSUFBSSxFQUFFLFVBQVUsRUFDaEIsV0FBVyxFQUFFLEVBQUUsRUFDZixPQUFPLEVBQUUsa0JBQWtCLEVBQzNCLGdCQUFnQixDQUFDLEVBQUUsZ0JBQWdCLEVBQ25DLE9BQU8sR0FBRSxrQkFBdUIsR0FDL0IsSUFBSSxDQTBCTjtJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksa0JBQWtCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sR0FBRyxJQUFJLENBZ0JuRztJQUVEOzs7O09BSUc7SUFDSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FnQmhEO0lBRUQseUVBQXlFO0lBQ2xFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FFaEQ7SUFFRDs7O09BR0c7SUFDSSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBRWpGO0lBRUQsZ0dBQWdHO0lBQ3pGLGlCQUFpQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsa0JBQWtCLEdBQUcsU0FBUyxDQUV6RTtJQUVELHdHQUF3RztJQUNqRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLGlCQUFpQixHQUFHLFNBQVMsQ0FZdkU7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLHNCQUFzQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBR3hFO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0kscUJBQXFCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FFakc7SUFFRCxzRUFBc0U7SUFDL0QsWUFBWSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLElBQUksQ0E0QjVEO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint_reexecution_tracker.d.ts","sourceRoot":"","sources":["../../src/checkpoint/checkpoint_reexecution_tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AACzF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AAE9D;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AAgCrE,qBAAa,4BAA4B;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmD;IAChF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEvD;;;;;;;OAOG;IACI,aAAa,CAClB,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,EAAE,EACf,OAAO,EAAE,kBAAkB,EAC3B,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,IAAI,CAwBN;IAED;;;;;;;;;;;OAWG;IACI,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAcnG;IAED;;;;OAIG;IACI,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAchD;IAED,yEAAyE;IAClE,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEhD;IAED;;;OAGG;IACI,aAAa,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,GAAG,OAAO,CAEjF;IAED,gGAAgG;IACzF,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB,GAAG,SAAS,CAEzE;IAED;;;;;;;;OAQG;IACI,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,GAAG,OAAO,CAGxE;IAED;;;;;;;;;OASG;IACI,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEjG;IAED,sEAAsE;IAC/D,YAAY,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CA4B5D;CACF"}
1
+ {"version":3,"file":"checkpoint_reexecution_tracker.d.ts","sourceRoot":"","sources":["../../src/checkpoint/checkpoint_reexecution_tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AACjH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AAE9D;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AAErE,oFAAoF;AACpF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC,CAAC;AAEF,uFAAuF;AACvF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gHAAgH;IAChH,eAAe,CAAC,EAAE,EAAE,CAAC;IACrB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC,CAAC;AAkCF,qBAAa,4BAA4B;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmD;IAChF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEvD;;;;;;;;;OASG;IACI,aAAa,CAClB,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,EAAE,EACf,OAAO,EAAE,kBAAkB,EAC3B,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,OAAO,GAAE,kBAAuB,GAC/B,IAAI,CA0BN;IAED;;;;;;;;;;;OAWG;IACI,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAgBnG;IAED;;;;OAIG;IACI,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAgBhD;IAED,yEAAyE;IAClE,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEhD;IAED;;;OAGG;IACI,aAAa,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,GAAG,OAAO,CAEjF;IAED,gGAAgG;IACzF,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB,GAAG,SAAS,CAEzE;IAED,wGAAwG;IACjG,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,SAAS,CAYvE;IAED;;;;;;;;OAQG;IACI,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,GAAG,OAAO,CAGxE;IAED;;;;;;;;;OASG;IACI,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEjG;IAED,sEAAsE;IAC/D,YAAY,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CA4B5D;CACF"}
@@ -8,13 +8,17 @@ export class CheckpointReexecutionTracker {
8
8
  * @param outcome - Outcome of evaluation.
9
9
  * @param checkpointNumber - Checkpoint number, if known. Required for `valid` outcomes; optional
10
10
  * for `invalid`/`unvalidated` because some early rejections fire before blocks are loaded.
11
- */ recordOutcome(slot, archiveRoot, outcome, checkpointNumber) {
11
+ * @param details - The proposal's parent archive root and payload hash, if known. They let the sentinel tell whether
12
+ * a valid proposal that never landed was built on a parent that is on L1, and count only the attestations for it.
13
+ */ recordOutcome(slot, archiveRoot, outcome, checkpointNumber, details = {}) {
12
14
  const archiveRootStr = archiveRoot.toString();
13
15
  // Preserve any per-block txsCollected already accumulated for this slot.
14
16
  const existing = this.bySlot.get(slot);
15
17
  const entry = {
16
18
  checkpointNumber,
17
19
  archiveRoot: archiveRootStr,
20
+ lastArchiveRoot: details.lastArchiveRoot?.toString(),
21
+ payloadHash: details.payloadHash,
18
22
  slot,
19
23
  outcome,
20
24
  txsCollected: existing?.txsCollected ?? new Map(),
@@ -47,6 +51,8 @@ export class CheckpointReexecutionTracker {
47
51
  entry = {
48
52
  checkpointNumber: undefined,
49
53
  archiveRoot: undefined,
54
+ lastArchiveRoot: undefined,
55
+ payloadHash: undefined,
50
56
  slot,
51
57
  outcome: undefined,
52
58
  txsCollected: new Map(),
@@ -66,6 +72,8 @@ export class CheckpointReexecutionTracker {
66
72
  this.bySlot.set(slot, {
67
73
  checkpointNumber: undefined,
68
74
  archiveRoot: undefined,
75
+ lastArchiveRoot: undefined,
76
+ payloadHash: undefined,
69
77
  slot,
70
78
  outcome: undefined,
71
79
  txsCollected: new Map(),
@@ -87,6 +95,19 @@ export class CheckpointReexecutionTracker {
87
95
  /** Returns the recorded outcome for a given slot, or undefined if no proposal was evaluated. */ getOutcomeForSlot(slot) {
88
96
  return this.bySlot.get(slot)?.outcome;
89
97
  }
98
+ /** Returns the full record of the proposal evaluated for a slot, or undefined if none was evaluated. */ getRecordForSlot(slot) {
99
+ const entry = this.bySlot.get(slot);
100
+ if (entry?.outcome === undefined) {
101
+ return undefined;
102
+ }
103
+ return {
104
+ outcome: entry.outcome,
105
+ checkpointNumber: entry.checkpointNumber,
106
+ archiveRoot: entry.archiveRoot,
107
+ lastArchiveRoot: entry.lastArchiveRoot,
108
+ payloadHash: entry.payloadHash
109
+ };
110
+ }
90
111
  /**
91
112
  * Whether this slot's recorded outcome is `valid` *and* was recorded for this archive root.
92
113
  *
@@ -202,4 +202,4 @@ export declare class CheckpointProposal extends Gossipable implements Signable {
202
202
  * This type makes it clear that lastBlock and getBlockProposal() are not available.
203
203
  */
204
204
  export type CheckpointProposalCore = Omit<CheckpointProposal, 'lastBlock' | 'getBlockProposal' | 'toCore'>;
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3AycC9jaGVja3BvaW50X3Byb3Bvc2FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGdCQUFnQixFQUNyQixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLFVBQVUsRUFDWCxNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBWSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBNEMsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRyxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQVksS0FBSyxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENB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
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3AycC9jaGVja3BvaW50X3Byb3Bvc2FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGdCQUFnQixFQUNyQixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLFVBQVUsRUFDWCxNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBWSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBNEMsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRyxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQVksS0FBSyxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENB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
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint_proposal.d.ts","sourceRoot":"","sources":["../../src/p2p/checkpoint_proposal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkpoint_proposal.d.ts","sourceRoot":"","sources":["../../src/p2p/checkpoint_proposal.ts"],"names":[],"mappings":"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"}
@@ -169,9 +169,11 @@ import { TopicType } from './topic_type.js';
169
169
  const reader = BufferReader.asReader(buf);
170
170
  // Decoding is lenient on purpose, for forward compatibility: trailing bytes are ignored and any non-zero
171
171
  // presence flag reads as present, so a newer version can append fields that older nodes skip over. Rejecting
172
- // them would make every wire extension a coordinated upgrade. Lenient decoding does not let one proposal take
173
- // several identities, since the P2P message identifier and the signature both cover the signed payload rather
174
- // than the raw bytes.
172
+ // them would make every wire extension a coordinated upgrade. One signed payload can therefore reach the
173
+ // network under several encodings, each with its own P2P message identifier, which hashes the raw bytes. In
174
+ // particular the signature and the payload hash cover the checkpoint header, archive and fee modifier but not
175
+ // the embedded last block, so the same signed payload can travel with or without that block. The gossip layer
176
+ // must not treat a stored payload hash as covering the embedded block.
175
177
  const checkpointHeader = reader.readObject(CheckpointHeader);
176
178
  const archive = reader.readObject(Fr);
177
179
  const feeAssetPriceModifier = reader.readInt256();
@@ -6,6 +6,8 @@ export declare const ValidatorStatusInSlotSchema: z.ZodEnum<{
6
6
  "checkpoint-invalid": "checkpoint-invalid";
7
7
  "checkpoint-mined": "checkpoint-mined";
8
8
  "checkpoint-missed": "checkpoint-missed";
9
+ "checkpoint-orphaned": "checkpoint-orphaned";
10
+ "checkpoint-unpublished": "checkpoint-unpublished";
9
11
  "checkpoint-unvalidated": "checkpoint-unvalidated";
10
12
  "checkpoint-valid": "checkpoint-valid";
11
13
  }>;
@@ -18,6 +20,8 @@ export declare const ValidatorStatusHistorySchema: z.ZodArray<z.ZodObject<{
18
20
  "checkpoint-invalid": "checkpoint-invalid";
19
21
  "checkpoint-mined": "checkpoint-mined";
20
22
  "checkpoint-missed": "checkpoint-missed";
23
+ "checkpoint-orphaned": "checkpoint-orphaned";
24
+ "checkpoint-unpublished": "checkpoint-unpublished";
21
25
  "checkpoint-unvalidated": "checkpoint-unvalidated";
22
26
  "checkpoint-valid": "checkpoint-valid";
23
27
  }>;
@@ -31,6 +35,8 @@ export declare const ValidatorStatusHistorySchemaArray: z.ZodArray<z.ZodArray<z.
31
35
  "checkpoint-invalid": "checkpoint-invalid";
32
36
  "checkpoint-mined": "checkpoint-mined";
33
37
  "checkpoint-missed": "checkpoint-missed";
38
+ "checkpoint-orphaned": "checkpoint-orphaned";
39
+ "checkpoint-unpublished": "checkpoint-unpublished";
34
40
  "checkpoint-unvalidated": "checkpoint-unvalidated";
35
41
  "checkpoint-valid": "checkpoint-valid";
36
42
  }>;
@@ -44,6 +50,8 @@ export declare const ValidatorStatusHistorySchemaMap: z.ZodRecord<z.ZodString, z
44
50
  "checkpoint-invalid": "checkpoint-invalid";
45
51
  "checkpoint-mined": "checkpoint-mined";
46
52
  "checkpoint-missed": "checkpoint-missed";
53
+ "checkpoint-orphaned": "checkpoint-orphaned";
54
+ "checkpoint-unpublished": "checkpoint-unpublished";
47
55
  "checkpoint-unvalidated": "checkpoint-unvalidated";
48
56
  "checkpoint-valid": "checkpoint-valid";
49
57
  }>;
@@ -82,6 +90,8 @@ export declare const ValidatorStatsSchema: z.ZodObject<{
82
90
  "checkpoint-invalid": "checkpoint-invalid";
83
91
  "checkpoint-mined": "checkpoint-mined";
84
92
  "checkpoint-missed": "checkpoint-missed";
93
+ "checkpoint-orphaned": "checkpoint-orphaned";
94
+ "checkpoint-unpublished": "checkpoint-unpublished";
85
95
  "checkpoint-unvalidated": "checkpoint-unvalidated";
86
96
  "checkpoint-valid": "checkpoint-valid";
87
97
  }>;
@@ -122,6 +132,8 @@ export declare const ValidatorsStatsSchema: z.ZodObject<{
122
132
  "checkpoint-invalid": "checkpoint-invalid";
123
133
  "checkpoint-mined": "checkpoint-mined";
124
134
  "checkpoint-missed": "checkpoint-missed";
135
+ "checkpoint-orphaned": "checkpoint-orphaned";
136
+ "checkpoint-unpublished": "checkpoint-unpublished";
125
137
  "checkpoint-unvalidated": "checkpoint-unvalidated";
126
138
  "checkpoint-valid": "checkpoint-valid";
127
139
  }>;
@@ -166,6 +178,8 @@ export declare const SingleValidatorStatsSchema: z.ZodObject<{
166
178
  "checkpoint-invalid": "checkpoint-invalid";
167
179
  "checkpoint-mined": "checkpoint-mined";
168
180
  "checkpoint-missed": "checkpoint-missed";
181
+ "checkpoint-orphaned": "checkpoint-orphaned";
182
+ "checkpoint-unpublished": "checkpoint-unpublished";
169
183
  "checkpoint-unvalidated": "checkpoint-unvalidated";
170
184
  "checkpoint-valid": "checkpoint-valid";
171
185
  }>;
@@ -180,4 +194,4 @@ export declare const SingleValidatorStatsSchema: z.ZodObject<{
180
194
  initialSlot: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt, z.ZodString]>, z.ZodCoercedNumber<string | number | bigint>>, z.ZodTransform<import("@aztec-labs/foundation/schemas").SlotNumber, number>>>;
181
195
  slotWindow: z.ZodPipe<z.ZodUnion<readonly [z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodCoercedNumber<string | number | bigint>>;
182
196
  }, z.core.$strip>;
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRvcnMvc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBV3hCLGVBQU8sTUFBTSwyQkFBMkI7Ozs7Ozs7OztFQVd2QyxDQUFDO0FBRUYsZUFBTyxNQUFNLDRCQUE0Qjs7Ozs7Ozs7Ozs7O2tCQU94QyxDQUFDO0FBRUYsZUFBTyxNQUFNLGlDQUFpQzs7Ozs7Ozs7Ozs7O21CQUF3QyxDQUFDO0FBRXZGLGVBQU8sTUFBTSwrQkFBK0I7Ozs7Ozs7Ozs7OztvQkFBMEQsQ0FBQztBQWlCdkcsZUFBTyxNQUFNLG9CQUFvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUJBVWhDLENBQUM7QUFFRixlQUFPLE1BQU0scUJBQXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQU9qQyxDQUFDO0FBRUYsZUFBTyxNQUFNLDBCQUEwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQWN0QyxDQUFDIn0=
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRvcnMvc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBV3hCLGVBQU8sTUFBTSwyQkFBMkI7Ozs7Ozs7Ozs7O0VBYXZDLENBQUM7QUFFRixlQUFPLE1BQU0sNEJBQTRCOzs7Ozs7Ozs7Ozs7OztrQkFPeEMsQ0FBQztBQUVGLGVBQU8sTUFBTSxpQ0FBaUM7Ozs7Ozs7Ozs7Ozs7O21CQUF3QyxDQUFDO0FBRXZGLGVBQU8sTUFBTSwrQkFBK0I7Ozs7Ozs7Ozs7Ozs7O29CQUEwRCxDQUFDO0FBaUJ2RyxlQUFPLE1BQU0sb0JBQW9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQVVoQyxDQUFDO0FBRUYsZUFBTyxNQUFNLHFCQUFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQU9qQyxDQUFDO0FBRUYsZUFBTyxNQUFNLDBCQUEwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUJBY3RDLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/validators/schemas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,2BAA2B;;;;;;;;;EAWvC,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;kBAOxC,CAAC;AAEF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;mBAAwC,CAAC;AAEvF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;oBAA0D,CAAC;AAiBvG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUhC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOjC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBActC,CAAC"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/validators/schemas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,2BAA2B;;;;;;;;;;;EAavC,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;kBAOxC,CAAC;AAEF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;mBAAwC,CAAC;AAEvF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;oBAA0D,CAAC;AAiBvG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUhC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOjC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBActC,CAAC"}
@@ -2,6 +2,8 @@ import { schemas, zodFor } from '@aztec-labs/foundation/schemas';
2
2
  import { z } from 'zod';
3
3
  export const ValidatorStatusInSlotSchema = zodFor()(z.enum([
4
4
  'checkpoint-mined',
5
+ 'checkpoint-unpublished',
6
+ 'checkpoint-orphaned',
5
7
  'checkpoint-valid',
6
8
  'checkpoint-invalid',
7
9
  'checkpoint-unvalidated',
@@ -4,13 +4,19 @@ export type ValidatorStatusType = 'proposer' | 'attestation';
4
4
  /**
5
5
  * Per-slot status for a validator.
6
6
  *
7
- * Proposer statuses (six-case taxonomy):
7
+ * Proposer statuses (six-case taxonomy, with case 5 refined into 5a and 5b):
8
8
  * - `blocks-missed` — no block proposals seen for the slot (case 1).
9
9
  * - `checkpoint-missed` — block proposals seen but no checkpoint proposal (case 2).
10
10
  * - `checkpoint-unvalidated` — checkpoint proposal seen but local re-execution couldn't
11
11
  * validate (missing txs, timeouts, etc.) (case 3).
12
12
  * - `checkpoint-invalid` — checkpoint proposal re-executed and rejected as invalid (case 4).
13
- * - `checkpoint-valid` — checkpoint proposal re-executed locally as valid (case 5).
13
+ * - `checkpoint-valid` — checkpoint proposal re-executed locally as valid, but it did not reach L1 and
14
+ * could not be refined into 5a or 5b (e.g. below quorum, equivocation) (case 5).
15
+ * - `checkpoint-orphaned` — valid checkpoint proposal that could not land because the parent it built on never
16
+ * landed on L1, or because an earlier slot landed its checkpoint number after it reached
17
+ * quorum (case 5b).
18
+ * - `checkpoint-unpublished` — valid checkpoint proposal with its parent on L1 and a quorum of attestations,
19
+ * which the proposer still failed to land on L1 (case 5a).
14
20
  * - `checkpoint-mined` — checkpoint published on L1 (case 6).
15
21
  *
16
22
  * Attestor statuses:
@@ -18,7 +24,7 @@ export type ValidatorStatusType = 'proposer' | 'attestation';
18
24
  * - `attestation-missed` — committee member did not attest to a checkpoint proposal that
19
25
  * was observed locally or published on L1.
20
26
  */
21
- export type ValidatorStatusInSlot = 'checkpoint-mined' | 'checkpoint-valid' | 'checkpoint-invalid' | 'checkpoint-unvalidated' | 'checkpoint-missed' | 'blocks-missed' | 'attestation-sent' | 'attestation-missed';
27
+ export type ValidatorStatusInSlot = 'checkpoint-mined' | 'checkpoint-unpublished' | 'checkpoint-orphaned' | 'checkpoint-valid' | 'checkpoint-invalid' | 'checkpoint-unvalidated' | 'checkpoint-missed' | 'blocks-missed' | 'attestation-sent' | 'attestation-missed';
22
28
  export type ValidatorStatusHistory = {
23
29
  slot: SlotNumber;
24
30
  status: ValidatorStatusInSlot;
@@ -67,4 +73,4 @@ export type SingleValidatorStats = {
67
73
  initialSlot?: SlotNumber;
68
74
  slotWindow: number;
69
75
  };
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0b3JzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRixPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRSxNQUFNLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxHQUFHLGFBQWEsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sTUFBTSxxQkFBcUIsR0FDN0Isa0JBQWtCLEdBQ2xCLGtCQUFrQixHQUNsQixvQkFBb0IsR0FDcEIsd0JBQXdCLEdBQ3hCLG1CQUFtQixHQUNuQixlQUFlLEdBQ2Ysa0JBQWtCLEdBQ2xCLG9CQUFvQixDQUFDO0FBRXpCLE1BQU0sTUFBTSxzQkFBc0IsR0FBRztJQUFFLElBQUksRUFBRSxVQUFVLENBQUM7SUFBQyxNQUFNLEVBQUUscUJBQXFCLENBQUE7Q0FBRSxFQUFFLENBQUM7QUFFM0YsTUFBTSxNQUFNLG9CQUFvQixHQUFHO0lBQ2pDLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2QsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUNkLEtBQUssRUFBRSxNQUFNLENBQUM7Q0FDZixDQUFDO0FBRUYsTUFBTSxNQUFNLGNBQWMsR0FBRztJQUMzQixPQUFPLEVBQUUsVUFBVSxDQUFDO0lBQ3BCLFlBQVksQ0FBQyxFQUFFO1FBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQztRQUFDLElBQUksRUFBRSxVQUFVLENBQUM7UUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUNyRSxlQUFlLENBQUMsRUFBRTtRQUFFLFNBQVMsRUFBRSxNQUFNLENBQUM7UUFBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO1FBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQTtLQUFFLENBQUM7SUFDeEUsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixlQUFlLEVBQUUsb0JBQW9CLENBQUM7SUFDdEMsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUM7SUFDekMsT0FBTyxFQUFFLHNCQUFzQixDQUFDO0NBQ2pDLENBQUM7QUFFRixNQUFNLE1BQU0sZUFBZSxHQUFHO0lBQzVCLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RDLGlCQUFpQixDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQy9CLFdBQVcsQ0FBQyxFQUFFLFVBQVUsQ0FBQztJQUN6QixVQUFVLEVBQUUsTUFBTSxDQUFDO0NBQ3BCLENBQUM7QUFFRixNQUFNLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDLEtBQUssTUFBTSxFQUFFLEVBQUU7SUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQTtDQUFFLENBQUMsQ0FBQztBQUVsRyxNQUFNLE1BQU0sb0JBQW9CLEdBQUc7SUFDakMsU0FBUyxFQUFFLGNBQWMsQ0FBQztJQUMxQix1QkFBdUIsRUFBRTtRQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQTtLQUFFLEVBQUUsQ0FBQztJQUNqRixpQkFBaUIsQ0FBQyxFQUFFLFVBQVUsQ0FBQztJQUMvQixXQUFXLENBQUMsRUFBRSxVQUFVLENBQUM7SUFDekIsVUFBVSxFQUFFLE1BQU0sQ0FBQztDQUNwQixDQUFDIn0=
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0b3JzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRixPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRSxNQUFNLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxHQUFHLGFBQWEsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sTUFBTSxxQkFBcUIsR0FDN0Isa0JBQWtCLEdBQ2xCLHdCQUF3QixHQUN4QixxQkFBcUIsR0FDckIsa0JBQWtCLEdBQ2xCLG9CQUFvQixHQUNwQix3QkFBd0IsR0FDeEIsbUJBQW1CLEdBQ25CLGVBQWUsR0FDZixrQkFBa0IsR0FDbEIsb0JBQW9CLENBQUM7QUFFekIsTUFBTSxNQUFNLHNCQUFzQixHQUFHO0lBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQztJQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQTtDQUFFLEVBQUUsQ0FBQztBQUUzRixNQUFNLE1BQU0sb0JBQW9CLEdBQUc7SUFDakMsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUN0QixJQUFJLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDZCxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQ2QsS0FBSyxFQUFFLE1BQU0sQ0FBQztDQUNmLENBQUM7QUFFRixNQUFNLE1BQU0sY0FBYyxHQUFHO0lBQzNCLE9BQU8sRUFBRSxVQUFVLENBQUM7SUFDcEIsWUFBWSxDQUFDLEVBQUU7UUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDO1FBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztRQUFDLElBQUksRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDO0lBQ3JFLGVBQWUsQ0FBQyxFQUFFO1FBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQztRQUFDLElBQUksRUFBRSxVQUFVLENBQUM7UUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUN4RSxVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQztJQUN0QyxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQztJQUN6QyxPQUFPLEVBQUUsc0JBQXNCLENBQUM7Q0FDakMsQ0FBQztBQUVGLE1BQU0sTUFBTSxlQUFlLEdBQUc7SUFDNUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdEMsaUJBQWlCLENBQUMsRUFBRSxVQUFVLENBQUM7SUFDL0IsV0FBVyxDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQ3pCLFVBQVUsRUFBRSxNQUFNLENBQUM7Q0FDcEIsQ0FBQztBQUVGLE1BQU0sTUFBTSwwQkFBMEIsR0FBRyxNQUFNLENBQUMsS0FBSyxNQUFNLEVBQUUsRUFBRTtJQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFBO0NBQUUsQ0FBQyxDQUFDO0FBRWxHLE1BQU0sTUFBTSxvQkFBb0IsR0FBRztJQUNqQyxTQUFTLEVBQUUsY0FBYyxDQUFDO0lBQzFCLHVCQUF1QixFQUFFO1FBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7UUFBQyxLQUFLLEVBQUUsV0FBVyxDQUFBO0tBQUUsRUFBRSxDQUFDO0lBQ2pGLGlCQUFpQixDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQy9CLFdBQVcsQ0FBQyxFQUFFLFVBQVUsQ0FBQztJQUN6QixVQUFVLEVBQUUsTUFBTSxDQUFDO0NBQ3BCLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/validators/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAErE,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,aAAa,CAAC;AAE7D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,qBAAqB,GAC7B,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,wBAAwB,GACxB,mBAAmB,GACnB,eAAe,GACf,kBAAkB,GAClB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,sBAAsB,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,EAAE,CAAC;AAE3F,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,UAAU,CAAC;IACpB,YAAY,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,eAAe,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,oBAAoB,CAAC;IACtC,kBAAkB,EAAE,oBAAoB,CAAC;IACzC,OAAO,EAAE,sBAAsB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACtC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElG,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,cAAc,CAAC;IAC1B,uBAAuB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,EAAE,CAAC;IACjF,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/validators/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAErE,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,aAAa,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,qBAAqB,GAC7B,kBAAkB,GAClB,wBAAwB,GACxB,qBAAqB,GACrB,kBAAkB,GAClB,oBAAoB,GACpB,wBAAwB,GACxB,mBAAmB,GACnB,eAAe,GACf,kBAAkB,GAClB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,sBAAsB,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,EAAE,CAAC;AAE3F,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,UAAU,CAAC;IACpB,YAAY,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,eAAe,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,oBAAoB,CAAC;IACtC,kBAAkB,EAAE,oBAAoB,CAAC;IACzC,OAAO,EAAE,sBAAsB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACtC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElG,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,cAAc,CAAC;IAC1B,uBAAuB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,EAAE,CAAC;IACjF,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec-labs/stdlib",
3
- "version": "6.0.0",
3
+ "version": "6.1.0-nightly.20261023",
4
4
  "type": "module",
5
5
  "inherits": [
6
6
  "../package.common.json",
@@ -92,12 +92,12 @@
92
92
  },
93
93
  "dependencies": {
94
94
  "@aws-sdk/client-s3": "^3.892.0",
95
- "@aztec-foundation/bb.js": "6.0.0",
96
- "@aztec-foundation/noir-noirc_abi": "6.0.0",
97
- "@aztec-labs/blob-lib": "6.0.0",
98
- "@aztec-labs/constants": "6.0.0",
99
- "@aztec-labs/ethereum": "6.0.0",
100
- "@aztec-labs/foundation": "6.0.0",
95
+ "@aztec-foundation/bb.js": "6.0.0-rc.7",
96
+ "@aztec-foundation/noir-noirc_abi": "6.0.0-rc.7",
97
+ "@aztec-labs/blob-lib": "6.1.0-nightly.20261023",
98
+ "@aztec-labs/constants": "6.1.0-nightly.20261023",
99
+ "@aztec-labs/ethereum": "6.1.0-nightly.20261023",
100
+ "@aztec-labs/foundation": "6.1.0-nightly.20261023",
101
101
  "@google-cloud/storage": "^7.15.0",
102
102
  "axios": "^1.15.1",
103
103
  "buffer": "^6.0.3",
@@ -1,4 +1,4 @@
1
- import type { CheckpointNumber, SlotNumber } from '@aztec-labs/foundation/branded-types';
1
+ import type { CheckpointNumber, CheckpointProposalHash, SlotNumber } from '@aztec-labs/foundation/branded-types';
2
2
  import type { Fr } from '@aztec-labs/foundation/curves/bn254';
3
3
 
4
4
  /**
@@ -13,6 +13,26 @@ import type { Fr } from '@aztec-labs/foundation/curves/bn254';
13
13
  */
14
14
  export type ReexecutionOutcome = 'valid' | 'invalid' | 'unvalidated';
15
15
 
16
+ /** What the tracker recorded about the checkpoint proposal evaluated for a slot. */
17
+ export type ReexecutionRecord = {
18
+ outcome: ReexecutionOutcome;
19
+ checkpointNumber?: CheckpointNumber;
20
+ /** Archive root in the evaluated proposal. */
21
+ archiveRoot?: string;
22
+ /** Archive root of the parent checkpoint the proposal builds on, when known. */
23
+ lastArchiveRoot?: string;
24
+ /** Hash of the evaluated proposal's signed payload, which its attestations sign. */
25
+ payloadHash?: CheckpointProposalHash;
26
+ };
27
+
28
+ /** Optional details of an evaluated checkpoint proposal, beyond what identifies it. */
29
+ export type ReexecutionDetails = {
30
+ /** Archive root of the parent checkpoint the proposal builds on (the checkpoint header's `lastArchiveRoot`). */
31
+ lastArchiveRoot?: Fr;
32
+ /** Hash of the proposal's signed payload. */
33
+ payloadHash?: CheckpointProposalHash;
34
+ };
35
+
16
36
  /**
17
37
  * Tracks two pieces of per-slot state collected during proposal handling:
18
38
  *
@@ -20,7 +40,7 @@ export type ReexecutionOutcome = 'valid' | 'invalid' | 'unvalidated';
20
40
  * (keyed by `slot` + `indexWithinCheckpoint`). Consumed by the data-withholding watcher.
21
41
  * 2. The outcome of locally re-executing each checkpoint proposal (keyed by
22
42
  * `(checkpointNumber, archiveRoot)` and by `slot`). Consumed by the data-withholding
23
- * watcher (via `hasReexecuted`) and the sentinel (via `getOutcomeForSlot`).
43
+ * watcher (via `hasReexecuted`) and the sentinel (via `getOutcomeForSlot` and `getRecordForSlot`).
24
44
  *
25
45
  * Both pieces of state live on the same per-slot `Entry`, so cleanup via `removeBefore`
26
46
  * naturally drops everything for a pruned slot in one step.
@@ -30,6 +50,8 @@ interface Entry {
30
50
  // evaluated. recordTxsCollected may create an Entry before any of them are known.
31
51
  checkpointNumber: CheckpointNumber | undefined;
32
52
  archiveRoot: string | undefined;
53
+ lastArchiveRoot: string | undefined;
54
+ payloadHash: CheckpointProposalHash | undefined;
33
55
  outcome: ReexecutionOutcome | undefined;
34
56
 
35
57
  slot: SlotNumber;
@@ -54,12 +76,15 @@ export class CheckpointReexecutionTracker {
54
76
  * @param outcome - Outcome of evaluation.
55
77
  * @param checkpointNumber - Checkpoint number, if known. Required for `valid` outcomes; optional
56
78
  * for `invalid`/`unvalidated` because some early rejections fire before blocks are loaded.
79
+ * @param details - The proposal's parent archive root and payload hash, if known. They let the sentinel tell whether
80
+ * a valid proposal that never landed was built on a parent that is on L1, and count only the attestations for it.
57
81
  */
58
82
  public recordOutcome(
59
83
  slot: SlotNumber,
60
84
  archiveRoot: Fr,
61
85
  outcome: ReexecutionOutcome,
62
86
  checkpointNumber?: CheckpointNumber,
87
+ details: ReexecutionDetails = {},
63
88
  ): void {
64
89
  const archiveRootStr = archiveRoot.toString();
65
90
 
@@ -68,6 +93,8 @@ export class CheckpointReexecutionTracker {
68
93
  const entry: Entry = {
69
94
  checkpointNumber,
70
95
  archiveRoot: archiveRootStr,
96
+ lastArchiveRoot: details.lastArchiveRoot?.toString(),
97
+ payloadHash: details.payloadHash,
71
98
  slot,
72
99
  outcome,
73
100
  txsCollected: existing?.txsCollected ?? new Map(),
@@ -104,6 +131,8 @@ export class CheckpointReexecutionTracker {
104
131
  entry = {
105
132
  checkpointNumber: undefined,
106
133
  archiveRoot: undefined,
134
+ lastArchiveRoot: undefined,
135
+ payloadHash: undefined,
107
136
  slot,
108
137
  outcome: undefined,
109
138
  txsCollected: new Map(),
@@ -125,6 +154,8 @@ export class CheckpointReexecutionTracker {
125
154
  this.bySlot.set(slot, {
126
155
  checkpointNumber: undefined,
127
156
  archiveRoot: undefined,
157
+ lastArchiveRoot: undefined,
158
+ payloadHash: undefined,
128
159
  slot,
129
160
  outcome: undefined,
130
161
  txsCollected: new Map(),
@@ -153,6 +184,21 @@ export class CheckpointReexecutionTracker {
153
184
  return this.bySlot.get(slot)?.outcome;
154
185
  }
155
186
 
187
+ /** Returns the full record of the proposal evaluated for a slot, or undefined if none was evaluated. */
188
+ public getRecordForSlot(slot: SlotNumber): ReexecutionRecord | undefined {
189
+ const entry = this.bySlot.get(slot);
190
+ if (entry?.outcome === undefined) {
191
+ return undefined;
192
+ }
193
+ return {
194
+ outcome: entry.outcome,
195
+ checkpointNumber: entry.checkpointNumber,
196
+ archiveRoot: entry.archiveRoot,
197
+ lastArchiveRoot: entry.lastArchiveRoot,
198
+ payloadHash: entry.payloadHash,
199
+ };
200
+ }
201
+
156
202
  /**
157
203
  * Whether this slot's recorded outcome is `valid` *and* was recorded for this archive root.
158
204
  *
@@ -310,9 +310,11 @@ export class CheckpointProposal extends Gossipable implements Signable {
310
310
 
311
311
  // Decoding is lenient on purpose, for forward compatibility: trailing bytes are ignored and any non-zero
312
312
  // presence flag reads as present, so a newer version can append fields that older nodes skip over. Rejecting
313
- // them would make every wire extension a coordinated upgrade. Lenient decoding does not let one proposal take
314
- // several identities, since the P2P message identifier and the signature both cover the signed payload rather
315
- // than the raw bytes.
313
+ // them would make every wire extension a coordinated upgrade. One signed payload can therefore reach the
314
+ // network under several encodings, each with its own P2P message identifier, which hashes the raw bytes. In
315
+ // particular the signature and the payload hash cover the checkpoint header, archive and fee modifier but not
316
+ // the embedded last block, so the same signed payload can travel with or without that block. The gossip layer
317
+ // must not treat a stored payload hash as covering the embedded block.
316
318
 
317
319
  const checkpointHeader = reader.readObject(CheckpointHeader);
318
320
  const archive = reader.readObject(Fr);
@@ -13,6 +13,8 @@ import type {
13
13
  export const ValidatorStatusInSlotSchema = zodFor<ValidatorStatusInSlot>()(
14
14
  z.enum([
15
15
  'checkpoint-mined',
16
+ 'checkpoint-unpublished',
17
+ 'checkpoint-orphaned',
16
18
  'checkpoint-valid',
17
19
  'checkpoint-invalid',
18
20
  'checkpoint-unvalidated',
@@ -6,13 +6,19 @@ export type ValidatorStatusType = 'proposer' | 'attestation';
6
6
  /**
7
7
  * Per-slot status for a validator.
8
8
  *
9
- * Proposer statuses (six-case taxonomy):
9
+ * Proposer statuses (six-case taxonomy, with case 5 refined into 5a and 5b):
10
10
  * - `blocks-missed` — no block proposals seen for the slot (case 1).
11
11
  * - `checkpoint-missed` — block proposals seen but no checkpoint proposal (case 2).
12
12
  * - `checkpoint-unvalidated` — checkpoint proposal seen but local re-execution couldn't
13
13
  * validate (missing txs, timeouts, etc.) (case 3).
14
14
  * - `checkpoint-invalid` — checkpoint proposal re-executed and rejected as invalid (case 4).
15
- * - `checkpoint-valid` — checkpoint proposal re-executed locally as valid (case 5).
15
+ * - `checkpoint-valid` — checkpoint proposal re-executed locally as valid, but it did not reach L1 and
16
+ * could not be refined into 5a or 5b (e.g. below quorum, equivocation) (case 5).
17
+ * - `checkpoint-orphaned` — valid checkpoint proposal that could not land because the parent it built on never
18
+ * landed on L1, or because an earlier slot landed its checkpoint number after it reached
19
+ * quorum (case 5b).
20
+ * - `checkpoint-unpublished` — valid checkpoint proposal with its parent on L1 and a quorum of attestations,
21
+ * which the proposer still failed to land on L1 (case 5a).
16
22
  * - `checkpoint-mined` — checkpoint published on L1 (case 6).
17
23
  *
18
24
  * Attestor statuses:
@@ -22,6 +28,8 @@ export type ValidatorStatusType = 'proposer' | 'attestation';
22
28
  */
23
29
  export type ValidatorStatusInSlot =
24
30
  | 'checkpoint-mined'
31
+ | 'checkpoint-unpublished'
32
+ | 'checkpoint-orphaned'
25
33
  | 'checkpoint-valid'
26
34
  | 'checkpoint-invalid'
27
35
  | 'checkpoint-unvalidated'