@lodestar/fork-choice 1.44.0-dev.51165b8806 → 1.44.0-dev.551b8b0a3d
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/lib/forkChoice/fastConfirmation/fastConfirmationRule.d.ts.map +1 -1
- package/lib/forkChoice/fastConfirmation/fastConfirmationRule.js +12 -3
- package/lib/forkChoice/fastConfirmation/fastConfirmationRule.js.map +1 -1
- package/lib/forkChoice/fastConfirmation/metrics.d.ts +5 -2
- package/lib/forkChoice/fastConfirmation/metrics.d.ts.map +1 -1
- package/lib/forkChoice/fastConfirmation/metrics.js +19 -6
- package/lib/forkChoice/fastConfirmation/metrics.js.map +1 -1
- package/lib/forkChoice/fastConfirmation/rules.d.ts +2 -2
- package/lib/forkChoice/fastConfirmation/rules.d.ts.map +1 -1
- package/lib/forkChoice/fastConfirmation/rules.js +20 -1
- package/lib/forkChoice/fastConfirmation/rules.js.map +1 -1
- package/lib/forkChoice/fastConfirmation/types.d.ts +8 -0
- package/lib/forkChoice/fastConfirmation/types.d.ts.map +1 -1
- package/lib/metrics.d.ts +5 -2
- package/lib/metrics.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/forkChoice/fastConfirmation/fastConfirmationRule.ts +17 -4
- package/src/forkChoice/fastConfirmation/metrics.ts +19 -6
- package/src/forkChoice/fastConfirmation/rules.ts +24 -2
- package/src/forkChoice/fastConfirmation/types.ts +9 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastConfirmationRule.d.ts","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/fastConfirmationRule.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAC,MAAM,EAAuB,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAC,uBAAuB,EAAwB,MAAM,cAAc,CAAC;AAE5E,OAAO,EACL,uBAAuB,EACvB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"fastConfirmationRule.d.ts","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/fastConfirmationRule.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAC,MAAM,EAAuB,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAC,uBAAuB,EAAwB,MAAM,cAAc,CAAC;AAE5E,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EAEtB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAE3B,qBAAa,oBAAqB,YAAW,qBAAqB;IAE9D,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,QAAQ,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAChD,QAAQ,CAAC,MAAM,CAAC;IAHlB,YACmB,KAAK,EAAE,sBAAsB,EACrC,OAAO,EAAE,uBAAuB,GAAG,IAAI,EACvC,MAAM,CAAC,oBAAQ,EACtB;IAEJ,gBAAgB,IAAI,OAAO,CAE1B;IAED,uCAAuC,CAAC,GAAG,EAAE,uBAAuB,GAAG,sBAAsB,CAqE5F;IAED,OAAO,CAAC,+BAA+B;IAgDvC,OAAO,CAAC,6BAA6B;CAwBtC"}
|
|
@@ -42,7 +42,7 @@ export class FastConfirmationRule {
|
|
|
42
42
|
observedJustifiedRoot: snapshot.observedJustified.rootHex,
|
|
43
43
|
observedJustifiedEpoch: snapshot.observedJustified.epoch,
|
|
44
44
|
});
|
|
45
|
-
const { confirmedRoot, didReset, reason } = withObservedDuration(this.metrics?.fastConfirmation.stepsDuration.startTimer({ step: FastConfirmationSteps.runRules }), () => runFastConfirmationRules(snapshot, ctx, this.store, cache, this.logger));
|
|
45
|
+
const { confirmedRoot, didReset, reason, didReorg, didFallback, didRestart } = withObservedDuration(this.metrics?.fastConfirmation.stepsDuration.startTimer({ step: FastConfirmationSteps.runRules }), () => runFastConfirmationRules(snapshot, ctx, this.store, cache, this.logger));
|
|
46
46
|
const changed = confirmedRoot !== previousConfirmedRoot;
|
|
47
47
|
const confirmedBlock = cache.blockByRoot.get(confirmedRoot) ?? null;
|
|
48
48
|
const confirmedSlot = confirmedBlock?.slot ?? null;
|
|
@@ -68,7 +68,7 @@ export class FastConfirmationRule {
|
|
|
68
68
|
this.logger?.debug("Unchanged fast confirmation", logContext);
|
|
69
69
|
}
|
|
70
70
|
this.store.confirmedRoot = confirmedRoot;
|
|
71
|
-
this.updateFastConfirmationMetrics(ctx, { confirmedRoot, didReset });
|
|
71
|
+
this.updateFastConfirmationMetrics(ctx, { confirmedRoot, didReset, didReorg, didFallback, didRestart });
|
|
72
72
|
return { confirmedRoot, didReset };
|
|
73
73
|
}
|
|
74
74
|
updateFastConfirmationVariables(ctx) {
|
|
@@ -117,12 +117,21 @@ export class FastConfirmationRule {
|
|
|
117
117
|
return;
|
|
118
118
|
const confirmedBlock = ctx.getBlock(result.confirmedRoot);
|
|
119
119
|
if (confirmedBlock) {
|
|
120
|
-
this.metrics.fastConfirmation.confirmedSlot.set(confirmedBlock.slot);
|
|
121
120
|
this.metrics.fastConfirmation.confirmedEpoch.set(computeEpochAtSlot(confirmedBlock.slot));
|
|
121
|
+
this.metrics.fastConfirmation.slot.set(confirmedBlock.slot);
|
|
122
122
|
}
|
|
123
123
|
if (result.didReset) {
|
|
124
124
|
this.metrics.fastConfirmation.resets.inc();
|
|
125
125
|
}
|
|
126
|
+
if (result.didReorg) {
|
|
127
|
+
this.metrics.fastConfirmation.reorgs.inc();
|
|
128
|
+
}
|
|
129
|
+
if (result.didFallback) {
|
|
130
|
+
this.metrics.fastConfirmation.fallbacks.inc();
|
|
131
|
+
}
|
|
132
|
+
if (result.didRestart) {
|
|
133
|
+
this.metrics.fastConfirmation.restarts.inc();
|
|
134
|
+
}
|
|
126
135
|
this.metrics.fastConfirmation.votesTracked.set(ctx.getTrackedVotesCount());
|
|
127
136
|
}
|
|
128
137
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastConfirmationRule.js","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/fastConfirmationRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAElF,OAAO,EAAS,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAC,6BAA6B,EAAE,2BAA2B,EAAC,MAAM,WAAW,CAAC;AACrF,OAAO,EAA0B,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAC,wBAAwB,EAAC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"fastConfirmationRule.js","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/fastConfirmationRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAElF,OAAO,EAAS,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAC,6BAA6B,EAAE,2BAA2B,EAAC,MAAM,WAAW,CAAC;AACrF,OAAO,EAA0B,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAC,wBAAwB,EAAC,MAAM,YAAY,CAAC;AASpD,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAE3B,MAAM,OAAO,oBAAoB;IAEZ,KAAK;IACb,OAAO;IACP,MAAM;IAHjB,YACmB,KAA6B,EACrC,OAAuC,EACvC,MAAe,EACxB;qBAHiB,KAAK;uBACb,OAAO;sBACP,MAAM;IACd,CAAC;IAEJ,gBAAgB,GAAY;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IAAA,CACjC;IAED,uCAAuC,CAAC,GAA4B,EAA0B;QAC5F,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAEvD,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,gCAAgC,EAAE;YACnD,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,kBAAkB,CAAC,WAAW,CAAC;SACvC,CAAC,CAAC;QACH,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,CAAC;QAE1C,MAAM,KAAK,GAAG,oBAAoB,CAChC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,aAAa,CAAC,UAAU,CAAC;YACtD,IAAI,EAAE,qBAAqB,CAAC,UAAU;SACvC,CAAC,EACF,2BAA2B,CAC5B,CAAC;QAEF,MAAM,QAAQ,GAAG,oBAAoB,CACnC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,aAAa,CAAC,UAAU,CAAC;YACtD,IAAI,EAAE,qBAAqB,CAAC,aAAa;SAC1C,CAAC,EACF,GAAG,EAAE,CAAC,6BAA6B,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAC5D,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,kCAAkC,EAAE;YACvD,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,kBAAkB,EAAE,QAAQ,CAAC,cAAc,EAAE,OAAO;YACpD,mBAAmB,EAAE,QAAQ,CAAC,cAAc,EAAE,KAAK;YACnD,qBAAqB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,OAAO;YACzD,sBAAsB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,KAAK;SACzD,CAAC,CAAC;QAEH,MAAM,EAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAC,GAAG,oBAAoB,CAC/F,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,aAAa,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,qBAAqB,CAAC,QAAQ,EAAC,CAAC,EAC/F,GAAG,EAAE,CAAC,wBAAwB,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAC9E,CAAC;QAEF,MAAM,OAAO,GAAG,aAAa,KAAK,qBAAqB,CAAC;QACxD,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;QACpE,MAAM,aAAa,GAAG,cAAc,EAAE,IAAI,IAAI,IAAI,CAAC;QACnD,MAAM,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,MAAM,UAAU,GAAG;YACjB,qBAAqB;YACrB,aAAa;YACb,OAAO;YACP,QAAQ;YACR,MAAM;YACN,aAAa;YACb,cAAc;SACf,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,2BAA2B,EAAE,UAAU,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,6BAA6B,EAAE,UAAU,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;QACzC,IAAI,CAAC,6BAA6B,CAAC,GAAG,EAAE,EAAC,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAC,CAAC,CAAC;QAEtG,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAC,CAAC;IAAA,CAClC;IAEO,+BAA+B,CAAC,GAA4B,EAAQ;QAC1E,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;QACpD,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC;QAChD,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAClE,MAAM,wBAAwB,GAAG,kBAAkB,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAErE,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;QAE7C,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,sCAAsC,EAAE;YAC3D,gBAAgB;YAChB,eAAe;YACf,WAAW;YACX,yBAAyB;YACzB,wBAAwB;SACzB,CAAC,CAAC;QAEH,0EAA0E;QAC1E,uEAAuE;QACvE,IAAI,wBAAwB,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,GAAG,CAAC,sBAAsB,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,yCAAyC,GAAG,UAAU,CAAC,UAAU,CAAC;YAC7E,IAAI,CAAC,KAAK,CAAC,uCAAuC,GAAG,UAAU,CAAC,QAAQ,CAAC;YAEzE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,wDAAwD,EAAE;gBAC7E,6CAA6C,EAAE,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,OAAO;gBAC3G,8CAA8C,EAAE,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,KAAK;aAC3G,CAAC,CAAC;QACL,CAAC;QAED,0EAA0E;QAC1E,2EAA2E;QAC3E,IAAI,yBAAyB,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,wCAAwC,GAAG,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC;YACzG,IAAI,CAAC,KAAK,CAAC,sCAAsC,GAAG,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC;YACrG,IAAI,CAAC,KAAK,CAAC,uCAAuC,GAAG,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC;YAC1G,IAAI,CAAC,KAAK,CAAC,qCAAqC,GAAG,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC;YAEtG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,0DAA0D,EAAE;gBAC/E,4CAA4C,EAAE,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,OAAO;gBACzG,6CAA6C,EAAE,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,KAAK;gBACxG,2CAA2C,EAAE,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,OAAO;gBACvG,4CAA4C,EAAE,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,KAAK;aACvG,CAAC,CAAC;QACL,CAAC;IAAA,CACF;IAEO,6BAA6B,CACnC,GAA4B,EAC5B,MAAiD,EAC3C;QACN,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1F,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QAChD,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAAA,CAC5E;CACF"}
|
|
@@ -13,9 +13,12 @@ export declare function getFastConfirmationMetrics(register: MetricsRegisterExtr
|
|
|
13
13
|
step: FastConfirmationSteps;
|
|
14
14
|
}>;
|
|
15
15
|
confirmedEpoch: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
16
|
-
confirmedSlot: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
17
16
|
votesTracked: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
18
|
-
resets: import("@lodestar/utils").
|
|
17
|
+
resets: import("@lodestar/utils").Counter<import("@lodestar/utils").NoLabels>;
|
|
18
|
+
slot: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
19
|
+
reorgs: import("@lodestar/utils").Counter<import("@lodestar/utils").NoLabels>;
|
|
20
|
+
fallbacks: import("@lodestar/utils").Counter<import("@lodestar/utils").NoLabels>;
|
|
21
|
+
restarts: import("@lodestar/utils").Counter<import("@lodestar/utils").NoLabels>;
|
|
19
22
|
};
|
|
20
23
|
};
|
|
21
24
|
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAErD,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEpF,oBAAY,qBAAqB;IAC/B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;CACtB;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,oBAAoB
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAErD,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEpF,oBAAY,qBAAqB;IAC/B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;CACtB;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,oBAAoB;;;;;;;;;;;;;;EA6CxE"}
|
|
@@ -24,17 +24,30 @@ export function getFastConfirmationMetrics(register) {
|
|
|
24
24
|
name: "lodestar_fast_confirmation_confirmed_epoch",
|
|
25
25
|
help: "Current confirmed epoch from fast confirmation",
|
|
26
26
|
}),
|
|
27
|
-
confirmedSlot: register.gauge({
|
|
28
|
-
name: "lodestar_fast_confirmation_confirmed_slot",
|
|
29
|
-
help: "Current confirmed slot from fast confirmation",
|
|
30
|
-
}),
|
|
31
27
|
votesTracked: register.gauge({
|
|
32
28
|
name: "lodestar_fast_confirmation_votes_tracked",
|
|
33
29
|
help: "Number of checkpoint votes tracked by fast confirmation",
|
|
34
30
|
}),
|
|
35
|
-
resets: register.
|
|
31
|
+
resets: register.counter({
|
|
36
32
|
name: "lodestar_fast_confirmation_resets_total",
|
|
37
|
-
help: "
|
|
33
|
+
help: "Total number of fast confirmation resets (any cause)",
|
|
34
|
+
}),
|
|
35
|
+
// Standardized Fast Confirmation metrics
|
|
36
|
+
slot: register.gauge({
|
|
37
|
+
name: "beacon_fast_confirmation_slot",
|
|
38
|
+
help: "Slot of the most recent confirmed block",
|
|
39
|
+
}),
|
|
40
|
+
reorgs: register.counter({
|
|
41
|
+
name: "beacon_fast_confirmation_reorgs_total",
|
|
42
|
+
help: "Total number of confirmed block reorganizations",
|
|
43
|
+
}),
|
|
44
|
+
fallbacks: register.counter({
|
|
45
|
+
name: "beacon_fast_confirmation_fallbacks_total",
|
|
46
|
+
help: "Total number of fallbacks to finality",
|
|
47
|
+
}),
|
|
48
|
+
restarts: register.counter({
|
|
49
|
+
name: "beacon_fast_confirmation_restarts_total",
|
|
50
|
+
help: "Total number of restarts from a safe unrealized justified block",
|
|
38
51
|
}),
|
|
39
52
|
},
|
|
40
53
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/metrics.ts"],"names":[],"mappings":"SAIY,qBAAqB;AAAjC,IAAY,qBAKX;AALD,WAAY,qBAAqB;IAC/B,kDAAyB,CAAA;IACzB,kDAAyB,CAAA;IACzB,wDAA+B,CAAA;IAC/B,8CAAqB,CAAA;AAAC,CACxB,EALY,qBAAqB,KAArB,qBAAqB,QAKhC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAA8B,EAAE;IACzE,OAAO;QACL,gBAAgB,EAAE;YAChB,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC;gBAChC,IAAI,EAAE,6CAA6C;gBACnD,IAAI,EAAE,8CAA8C;gBACpD,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;aACpD,CAAC;YACF,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAgC;gBAC/D,IAAI,EAAE,mDAAmD;gBACzD,IAAI,EAAE,qCAAqC;gBAC3C,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACnD,UAAU,EAAE,CAAC,MAAM,CAAC;aACrB,CAAC;YACF,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC;gBAC7B,IAAI,EAAE,4CAA4C;gBAClD,IAAI,EAAE,gDAAgD;aACvD,CAAC;YACF,
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/metrics.ts"],"names":[],"mappings":"SAIY,qBAAqB;AAAjC,IAAY,qBAKX;AALD,WAAY,qBAAqB;IAC/B,kDAAyB,CAAA;IACzB,kDAAyB,CAAA;IACzB,wDAA+B,CAAA;IAC/B,8CAAqB,CAAA;AAAC,CACxB,EALY,qBAAqB,KAArB,qBAAqB,QAKhC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAA8B,EAAE;IACzE,OAAO;QACL,gBAAgB,EAAE;YAChB,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC;gBAChC,IAAI,EAAE,6CAA6C;gBACnD,IAAI,EAAE,8CAA8C;gBACpD,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;aACpD,CAAC;YACF,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAgC;gBAC/D,IAAI,EAAE,mDAAmD;gBACzD,IAAI,EAAE,qCAAqC;gBAC3C,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACnD,UAAU,EAAE,CAAC,MAAM,CAAC;aACrB,CAAC;YACF,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC;gBAC7B,IAAI,EAAE,4CAA4C;gBAClD,IAAI,EAAE,gDAAgD;aACvD,CAAC;YACF,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC;gBAC3B,IAAI,EAAE,0CAA0C;gBAChD,IAAI,EAAE,yDAAyD;aAChE,CAAC;YACF,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC;gBACvB,IAAI,EAAE,yCAAyC;gBAC/C,IAAI,EAAE,sDAAsD;aAC7D,CAAC;YACF,yCAAyC;YACzC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;gBACnB,IAAI,EAAE,+BAA+B;gBACrC,IAAI,EAAE,yCAAyC;aAChD,CAAC;YACF,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC;gBACvB,IAAI,EAAE,uCAAuC;gBAC7C,IAAI,EAAE,iDAAiD;aACxD,CAAC;YACF,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;gBAC1B,IAAI,EAAE,0CAA0C;gBAChD,IAAI,EAAE,uCAAuC;aAC9C,CAAC;YACF,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC;gBACzB,IAAI,EAAE,yCAAyC;gBAC/C,IAAI,EAAE,iEAAiE;aACxE,CAAC;SACH;KACF,CAAC;AAAA,CACH"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Logger } from "@lodestar/utils";
|
|
2
|
-
import { FastConfirmationCache, FastConfirmationContext,
|
|
2
|
+
import { FastConfirmationCache, FastConfirmationContext, FastConfirmationRule, FastConfirmationRunResult, FastConfirmationSnapshot, IFastConfirmationStore } from "./types.ts";
|
|
3
3
|
export declare const resetIfConfirmedUnavailable: FastConfirmationRule;
|
|
4
4
|
export declare const resetIfBehindOrNotAncestorOrUnsafe: FastConfirmationRule;
|
|
5
5
|
export declare const advanceIfObservedJustified: FastConfirmationRule;
|
|
6
6
|
export declare const advanceToLatestConfirmedDescendant: FastConfirmationRule;
|
|
7
7
|
export declare const FAST_CONFIRMATION_RULES: FastConfirmationRule[];
|
|
8
|
-
export declare function runFastConfirmationRules(snapshot: FastConfirmationSnapshot, ctx: FastConfirmationContext, store: IFastConfirmationStore, cache: FastConfirmationCache, logger?: Logger):
|
|
8
|
+
export declare function runFastConfirmationRules(snapshot: FastConfirmationSnapshot, ctx: FastConfirmationContext, store: IFastConfirmationStore, cache: FastConfirmationCache, logger?: Logger): FastConfirmationRunResult;
|
|
9
9
|
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EAGvB,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,2BAA2B,EAAE,oBAUzC,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,oBA4BhD,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,oBAkBxC,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,oBAmBhD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,oBAAoB,EAKzD,CAAC;AAIF,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,wBAAwB,EAClC,GAAG,EAAE,uBAAuB,EAC5B,KAAK,EAAE,sBAAsB,EAC7B,KAAK,EAAE,qBAAqB,EAC5B,MAAM,CAAC,EAAE,MAAM,GACd,yBAAyB,CAgC3B"}
|
|
@@ -83,9 +83,28 @@ export function runFastConfirmationRules(snapshot, ctx, store, cache, logger) {
|
|
|
83
83
|
didReset: false,
|
|
84
84
|
reason: FastConfirmationDecisionReason.Unchanged,
|
|
85
85
|
};
|
|
86
|
+
// Track every reason a rule decided on, the final `decision.reason` is overwritten by
|
|
87
|
+
// later rules (eg. a restart is followed by advancing to the latest confirmed descendant)
|
|
88
|
+
const reasons = new Set();
|
|
86
89
|
for (const rule of FAST_CONFIRMATION_RULES) {
|
|
87
90
|
decision = rule(snapshot, ctx, store, cache, decision, logger);
|
|
91
|
+
reasons.add(decision.reason);
|
|
88
92
|
}
|
|
89
|
-
|
|
93
|
+
// Detect a reorg directly from ancestry instead of the reset reason: when the confirmed block is
|
|
94
|
+
// both epoch-behind and not an ancestor of head, `resetIfBehindOrNotAncestorOrUnsafe` records
|
|
95
|
+
// `ResetBehind` (it takes precedence), so keying off `ResetNotAncestor` alone would miss reorgs
|
|
96
|
+
// that cross an epoch boundary.
|
|
97
|
+
const initialConfirmedBlock = getBlock(ctx, cache, snapshot.confirmedRoot);
|
|
98
|
+
const didReorg = initialConfirmedBlock !== null && !isAncestor(ctx, cache, snapshot.headRoot, snapshot.confirmedRoot);
|
|
99
|
+
return {
|
|
100
|
+
confirmedRoot: decision.confirmedRoot,
|
|
101
|
+
didReset: decision.didReset,
|
|
102
|
+
reason: decision.reason,
|
|
103
|
+
didReorg,
|
|
104
|
+
// A fallback is a revert to finality: a reset whose final confirmed root is the finalized
|
|
105
|
+
// checkpoint. A later rule may advance the confirmed root forward, which is not a fallback.
|
|
106
|
+
didFallback: decision.didReset && decision.confirmedRoot === snapshot.finalizedRoot,
|
|
107
|
+
didRestart: reasons.has(FastConfirmationDecisionReason.ObservedJustified),
|
|
108
|
+
};
|
|
90
109
|
}
|
|
91
110
|
//# sourceMappingURL=rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAElF,OAAO,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AACnD,OAAO,EAIL,8BAA8B,
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,14 @@ export type FastConfirmationDecision = {
|
|
|
58
58
|
didReset: boolean;
|
|
59
59
|
reason: FastConfirmationDecisionReason;
|
|
60
60
|
};
|
|
61
|
+
export type FastConfirmationRunResult = FastConfirmationDecision & {
|
|
62
|
+
/** Confirmed block became non-canonical (no longer an ancestor of head) */
|
|
63
|
+
didReorg: boolean;
|
|
64
|
+
/** Confirmed block reverted to the finalized checkpoint */
|
|
65
|
+
didFallback: boolean;
|
|
66
|
+
/** Restarted confirmation from the observed unrealized justified checkpoint */
|
|
67
|
+
didRestart: boolean;
|
|
68
|
+
};
|
|
61
69
|
export type FastConfirmationRule = (snapshot: FastConfirmationSnapshot, ctx: FastConfirmationContext, store: IFastConfirmationStore, cache: FastConfirmationCache, decision: FastConfirmationDecision, logger?: Logger) => FastConfirmationDecision;
|
|
62
70
|
export type BalanceSourceKey = "current" | "previous";
|
|
63
71
|
export type FastConfirmationCache = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/forkChoice/fastConfirmation/types.ts"],"names":[],"mappings":"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"}
|
package/lib/metrics.d.ts
CHANGED
|
@@ -10,9 +10,12 @@ export declare function getForkChoiceMetrics(register: MetricsRegisterExtra): {
|
|
|
10
10
|
step: import("./forkChoice/fastConfirmation/metrics.ts").FastConfirmationSteps;
|
|
11
11
|
}>;
|
|
12
12
|
confirmedEpoch: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
13
|
-
confirmedSlot: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
14
13
|
votesTracked: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
15
|
-
resets: import("@lodestar/utils").
|
|
14
|
+
resets: import("@lodestar/utils").Counter<import("@lodestar/utils").NoLabels>;
|
|
15
|
+
slot: import("@lodestar/utils").GaugeExtra<import("@lodestar/utils").NoLabels>;
|
|
16
|
+
reorgs: import("@lodestar/utils").Counter<import("@lodestar/utils").NoLabels>;
|
|
17
|
+
fallbacks: import("@lodestar/utils").Counter<import("@lodestar/utils").NoLabels>;
|
|
18
|
+
restarts: import("@lodestar/utils").Counter<import("@lodestar/utils").NoLabels>;
|
|
16
19
|
};
|
|
17
20
|
forkChoice: {
|
|
18
21
|
findHead: import("@lodestar/utils").Histogram<{
|
package/lib/metrics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAA6B,MAAM,0CAA0C,CAAC;AAC7G,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,GAAG,uBAAuB,CAAC;AAElG,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAC,uBAAuB,EAA6B,MAAM,0CAA0C,CAAC;AAC7G,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,GAAG,uBAAuB,CAAC;AAElG,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoGlE"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.44.0-dev.
|
|
14
|
+
"version": "1.44.0-dev.551b8b0a3d",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@chainsafe/ssz": "^1.4.0",
|
|
43
|
-
"@lodestar/config": "^1.44.0-dev.
|
|
44
|
-
"@lodestar/params": "^1.44.0-dev.
|
|
45
|
-
"@lodestar/state-transition": "^1.44.0-dev.
|
|
46
|
-
"@lodestar/types": "^1.44.0-dev.
|
|
47
|
-
"@lodestar/utils": "^1.44.0-dev.
|
|
43
|
+
"@lodestar/config": "^1.44.0-dev.551b8b0a3d",
|
|
44
|
+
"@lodestar/params": "^1.44.0-dev.551b8b0a3d",
|
|
45
|
+
"@lodestar/state-transition": "^1.44.0-dev.551b8b0a3d",
|
|
46
|
+
"@lodestar/types": "^1.44.0-dev.551b8b0a3d",
|
|
47
|
+
"@lodestar/utils": "^1.44.0-dev.551b8b0a3d"
|
|
48
48
|
},
|
|
49
49
|
"keywords": [
|
|
50
50
|
"ethereum",
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"beacon",
|
|
53
53
|
"blockchain"
|
|
54
54
|
],
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "938930cfc9093d552862a5d589b47f672cbbc407"
|
|
56
56
|
}
|
|
@@ -7,6 +7,7 @@ import {runFastConfirmationRules} from "./rules.ts";
|
|
|
7
7
|
import {
|
|
8
8
|
FastConfirmationContext,
|
|
9
9
|
FastConfirmationResult,
|
|
10
|
+
FastConfirmationRunResult,
|
|
10
11
|
IFastConfirmationRule,
|
|
11
12
|
IFastConfirmationStore,
|
|
12
13
|
} from "./types.ts";
|
|
@@ -61,7 +62,7 @@ export class FastConfirmationRule implements IFastConfirmationRule {
|
|
|
61
62
|
observedJustifiedEpoch: snapshot.observedJustified.epoch,
|
|
62
63
|
});
|
|
63
64
|
|
|
64
|
-
const {confirmedRoot, didReset, reason} = withObservedDuration(
|
|
65
|
+
const {confirmedRoot, didReset, reason, didReorg, didFallback, didRestart} = withObservedDuration(
|
|
65
66
|
this.metrics?.fastConfirmation.stepsDuration.startTimer({step: FastConfirmationSteps.runRules}),
|
|
66
67
|
() => runFastConfirmationRules(snapshot, ctx, this.store, cache, this.logger)
|
|
67
68
|
);
|
|
@@ -91,7 +92,7 @@ export class FastConfirmationRule implements IFastConfirmationRule {
|
|
|
91
92
|
}
|
|
92
93
|
|
|
93
94
|
this.store.confirmedRoot = confirmedRoot;
|
|
94
|
-
this.updateFastConfirmationMetrics(ctx, {confirmedRoot, didReset});
|
|
95
|
+
this.updateFastConfirmationMetrics(ctx, {confirmedRoot, didReset, didReorg, didFallback, didRestart});
|
|
95
96
|
|
|
96
97
|
return {confirmedRoot, didReset};
|
|
97
98
|
}
|
|
@@ -144,16 +145,28 @@ export class FastConfirmationRule implements IFastConfirmationRule {
|
|
|
144
145
|
}
|
|
145
146
|
}
|
|
146
147
|
|
|
147
|
-
private updateFastConfirmationMetrics(
|
|
148
|
+
private updateFastConfirmationMetrics(
|
|
149
|
+
ctx: FastConfirmationContext,
|
|
150
|
+
result: Omit<FastConfirmationRunResult, "reason">
|
|
151
|
+
): void {
|
|
148
152
|
if (!this.metrics) return;
|
|
149
153
|
const confirmedBlock = ctx.getBlock(result.confirmedRoot);
|
|
150
154
|
if (confirmedBlock) {
|
|
151
|
-
this.metrics.fastConfirmation.confirmedSlot.set(confirmedBlock.slot);
|
|
152
155
|
this.metrics.fastConfirmation.confirmedEpoch.set(computeEpochAtSlot(confirmedBlock.slot));
|
|
156
|
+
this.metrics.fastConfirmation.slot.set(confirmedBlock.slot);
|
|
153
157
|
}
|
|
154
158
|
if (result.didReset) {
|
|
155
159
|
this.metrics.fastConfirmation.resets.inc();
|
|
156
160
|
}
|
|
161
|
+
if (result.didReorg) {
|
|
162
|
+
this.metrics.fastConfirmation.reorgs.inc();
|
|
163
|
+
}
|
|
164
|
+
if (result.didFallback) {
|
|
165
|
+
this.metrics.fastConfirmation.fallbacks.inc();
|
|
166
|
+
}
|
|
167
|
+
if (result.didRestart) {
|
|
168
|
+
this.metrics.fastConfirmation.restarts.inc();
|
|
169
|
+
}
|
|
157
170
|
this.metrics.fastConfirmation.votesTracked.set(ctx.getTrackedVotesCount());
|
|
158
171
|
}
|
|
159
172
|
}
|
|
@@ -27,17 +27,30 @@ export function getFastConfirmationMetrics(register: MetricsRegisterExtra) {
|
|
|
27
27
|
name: "lodestar_fast_confirmation_confirmed_epoch",
|
|
28
28
|
help: "Current confirmed epoch from fast confirmation",
|
|
29
29
|
}),
|
|
30
|
-
confirmedSlot: register.gauge({
|
|
31
|
-
name: "lodestar_fast_confirmation_confirmed_slot",
|
|
32
|
-
help: "Current confirmed slot from fast confirmation",
|
|
33
|
-
}),
|
|
34
30
|
votesTracked: register.gauge({
|
|
35
31
|
name: "lodestar_fast_confirmation_votes_tracked",
|
|
36
32
|
help: "Number of checkpoint votes tracked by fast confirmation",
|
|
37
33
|
}),
|
|
38
|
-
resets: register.
|
|
34
|
+
resets: register.counter({
|
|
39
35
|
name: "lodestar_fast_confirmation_resets_total",
|
|
40
|
-
help: "
|
|
36
|
+
help: "Total number of fast confirmation resets (any cause)",
|
|
37
|
+
}),
|
|
38
|
+
// Standardized Fast Confirmation metrics
|
|
39
|
+
slot: register.gauge({
|
|
40
|
+
name: "beacon_fast_confirmation_slot",
|
|
41
|
+
help: "Slot of the most recent confirmed block",
|
|
42
|
+
}),
|
|
43
|
+
reorgs: register.counter({
|
|
44
|
+
name: "beacon_fast_confirmation_reorgs_total",
|
|
45
|
+
help: "Total number of confirmed block reorganizations",
|
|
46
|
+
}),
|
|
47
|
+
fallbacks: register.counter({
|
|
48
|
+
name: "beacon_fast_confirmation_fallbacks_total",
|
|
49
|
+
help: "Total number of fallbacks to finality",
|
|
50
|
+
}),
|
|
51
|
+
restarts: register.counter({
|
|
52
|
+
name: "beacon_fast_confirmation_restarts_total",
|
|
53
|
+
help: "Total number of restarts from a safe unrealized justified block",
|
|
41
54
|
}),
|
|
42
55
|
},
|
|
43
56
|
};
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
FastConfirmationDecision,
|
|
8
8
|
FastConfirmationDecisionReason,
|
|
9
9
|
FastConfirmationRule,
|
|
10
|
+
FastConfirmationRunResult,
|
|
10
11
|
FastConfirmationSnapshot,
|
|
11
12
|
IFastConfirmationStore,
|
|
12
13
|
} from "./types.ts";
|
|
@@ -110,15 +111,36 @@ export function runFastConfirmationRules(
|
|
|
110
111
|
store: IFastConfirmationStore,
|
|
111
112
|
cache: FastConfirmationCache,
|
|
112
113
|
logger?: Logger
|
|
113
|
-
):
|
|
114
|
+
): FastConfirmationRunResult {
|
|
114
115
|
let decision: FastConfirmationDecision = {
|
|
115
116
|
confirmedRoot: snapshot.confirmedRoot,
|
|
116
117
|
didReset: false,
|
|
117
118
|
reason: FastConfirmationDecisionReason.Unchanged,
|
|
118
119
|
};
|
|
119
120
|
|
|
121
|
+
// Track every reason a rule decided on, the final `decision.reason` is overwritten by
|
|
122
|
+
// later rules (eg. a restart is followed by advancing to the latest confirmed descendant)
|
|
123
|
+
const reasons = new Set<FastConfirmationDecisionReason>();
|
|
120
124
|
for (const rule of FAST_CONFIRMATION_RULES) {
|
|
121
125
|
decision = rule(snapshot, ctx, store, cache, decision, logger);
|
|
126
|
+
reasons.add(decision.reason);
|
|
122
127
|
}
|
|
123
|
-
|
|
128
|
+
|
|
129
|
+
// Detect a reorg directly from ancestry instead of the reset reason: when the confirmed block is
|
|
130
|
+
// both epoch-behind and not an ancestor of head, `resetIfBehindOrNotAncestorOrUnsafe` records
|
|
131
|
+
// `ResetBehind` (it takes precedence), so keying off `ResetNotAncestor` alone would miss reorgs
|
|
132
|
+
// that cross an epoch boundary.
|
|
133
|
+
const initialConfirmedBlock = getBlock(ctx, cache, snapshot.confirmedRoot);
|
|
134
|
+
const didReorg = initialConfirmedBlock !== null && !isAncestor(ctx, cache, snapshot.headRoot, snapshot.confirmedRoot);
|
|
135
|
+
|
|
136
|
+
return {
|
|
137
|
+
confirmedRoot: decision.confirmedRoot,
|
|
138
|
+
didReset: decision.didReset,
|
|
139
|
+
reason: decision.reason,
|
|
140
|
+
didReorg,
|
|
141
|
+
// A fallback is a revert to finality: a reset whose final confirmed root is the finalized
|
|
142
|
+
// checkpoint. A later rule may advance the confirmed root forward, which is not a fallback.
|
|
143
|
+
didFallback: decision.didReset && decision.confirmedRoot === snapshot.finalizedRoot,
|
|
144
|
+
didRestart: reasons.has(FastConfirmationDecisionReason.ObservedJustified),
|
|
145
|
+
};
|
|
124
146
|
}
|
|
@@ -64,6 +64,15 @@ export type FastConfirmationDecision = {
|
|
|
64
64
|
reason: FastConfirmationDecisionReason;
|
|
65
65
|
};
|
|
66
66
|
|
|
67
|
+
export type FastConfirmationRunResult = FastConfirmationDecision & {
|
|
68
|
+
/** Confirmed block became non-canonical (no longer an ancestor of head) */
|
|
69
|
+
didReorg: boolean;
|
|
70
|
+
/** Confirmed block reverted to the finalized checkpoint */
|
|
71
|
+
didFallback: boolean;
|
|
72
|
+
/** Restarted confirmation from the observed unrealized justified checkpoint */
|
|
73
|
+
didRestart: boolean;
|
|
74
|
+
};
|
|
75
|
+
|
|
67
76
|
export type FastConfirmationRule = (
|
|
68
77
|
snapshot: FastConfirmationSnapshot,
|
|
69
78
|
ctx: FastConfirmationContext,
|