@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.
- package/dest/checkpoint/checkpoint_reexecution_tracker.d.ts +25 -3
- package/dest/checkpoint/checkpoint_reexecution_tracker.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint_reexecution_tracker.js +22 -1
- package/dest/p2p/checkpoint_proposal.d.ts +1 -1
- package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
- package/dest/p2p/checkpoint_proposal.js +5 -3
- package/dest/validators/schemas.d.ts +15 -1
- package/dest/validators/schemas.d.ts.map +1 -1
- package/dest/validators/schemas.js +2 -0
- package/dest/validators/types.d.ts +10 -4
- package/dest/validators/types.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/checkpoint/checkpoint_reexecution_tracker.ts +48 -2
- package/src/p2p/checkpoint_proposal.ts +5 -3
- package/src/validators/schemas.ts +2 -0
- package/src/validators/types.ts +10 -2
|
@@ -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,
|
|
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;
|
|
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
|
-
|
|
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,
|
|
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.
|
|
173
|
-
// several
|
|
174
|
-
//
|
|
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,
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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.
|
|
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.
|
|
98
|
-
"@aztec-labs/constants": "6.0.
|
|
99
|
-
"@aztec-labs/ethereum": "6.0.
|
|
100
|
-
"@aztec-labs/foundation": "6.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.
|
|
314
|
-
// several
|
|
315
|
-
//
|
|
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);
|
package/src/validators/types.ts
CHANGED
|
@@ -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
|
|
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'
|