@lodestar/validator 1.35.0-rc.0 → 1.35.0-rc.1
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/metrics.js +14 -14
- package/lib/metrics.js.map +1 -1
- package/lib/services/attestation.d.ts.map +1 -1
- package/lib/services/attestation.js +35 -27
- package/lib/services/attestation.js.map +1 -1
- package/lib/services/attestationDuties.d.ts.map +1 -1
- package/lib/services/attestationDuties.js +1 -0
- package/lib/services/attestationDuties.js.map +1 -1
- package/lib/services/blockDuties.d.ts +2 -2
- package/lib/services/blockDuties.d.ts.map +1 -1
- package/lib/services/blockDuties.js +4 -3
- package/lib/services/blockDuties.js.map +1 -1
- package/lib/services/syncCommittee.d.ts.map +1 -1
- package/lib/services/syncCommittee.js +30 -22
- package/lib/services/syncCommittee.js.map +1 -1
- package/lib/util/clock.d.ts +3 -0
- package/lib/util/clock.d.ts.map +1 -1
- package/lib/util/clock.js +4 -0
- package/lib/util/clock.js.map +1 -1
- package/lib/util/params.js +8 -1
- package/lib/util/params.js.map +1 -1
- package/package.json +10 -10
- package/src/metrics.ts +14 -14
- package/src/services/attestation.ts +37 -24
- package/src/services/attestationDuties.ts +1 -0
- package/src/services/blockDuties.ts +7 -5
- package/src/services/syncCommittee.ts +43 -22
- package/src/util/clock.ts +6 -0
- package/src/util/params.ts +8 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isForkPostAltair } from "@lodestar/params";
|
|
2
|
+
import { isSyncCommitteeAggregator } from "@lodestar/state-transition";
|
|
2
3
|
import { sleep } from "@lodestar/utils";
|
|
3
4
|
import { SyncCommitteeDutiesService } from "./syncCommitteeDuties.js";
|
|
4
5
|
import { groupSyncDutiesBySubcommitteeIndex } from "./utils.js";
|
|
@@ -38,9 +39,10 @@ export class SyncCommitteeService {
|
|
|
38
39
|
this.dutiesService.removeDutiesForKey(pubkey);
|
|
39
40
|
}
|
|
40
41
|
runSyncCommitteeTasks = async (slot, signal) => {
|
|
42
|
+
const fork = this.config.getForkName(slot);
|
|
41
43
|
try {
|
|
42
44
|
// Before altair fork no need to check duties
|
|
43
|
-
if (
|
|
45
|
+
if (!isForkPostAltair(fork)) {
|
|
44
46
|
return;
|
|
45
47
|
}
|
|
46
48
|
// Fetch info first so a potential delay is absorbed by the sleep() below
|
|
@@ -55,20 +57,25 @@ export class SyncCommitteeService {
|
|
|
55
57
|
// This will run in parallel to other sync committee tasks but must be finished before starting
|
|
56
58
|
// sync committee contributions as it is required to correctly determine if validator is aggregator
|
|
57
59
|
// and to produce a ContributionAndProof that can be threshold aggregated by the middleware client.
|
|
58
|
-
this.runDistributedAggregationSelectionTasks(dutiesAtSlot, slot, signal).catch((e) => this.logger.error("Error on sync committee aggregation selection", { slot }, e));
|
|
60
|
+
this.runDistributedAggregationSelectionTasks(fork, dutiesAtSlot, slot, signal).catch((e) => this.logger.error("Error on sync committee aggregation selection", { slot }, e));
|
|
59
61
|
}
|
|
60
62
|
// unlike Attestation, SyncCommitteeSignature could be published asap
|
|
61
|
-
// especially with lodestar, it's very busy at
|
|
63
|
+
// especially with lodestar, it's very busy at ATTESTATION_DUE_BPS of the slot
|
|
62
64
|
// see https://github.com/ChainSafe/lodestar/issues/4608
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
const syncMessageDueMs = this.config.getSyncMessageDueMs(fork);
|
|
66
|
+
await Promise.race([
|
|
67
|
+
sleep(syncMessageDueMs - this.clock.msFromSlot(slot), signal),
|
|
68
|
+
this.emitter.waitForBlockSlot(slot),
|
|
69
|
+
]);
|
|
70
|
+
this.metrics?.syncCommitteeStepCallProduceMessage.observe(this.clock.secFromSlot(slot) - syncMessageDueMs / 1000);
|
|
65
71
|
// Step 1. Download, sign and publish an `SyncCommitteeMessage` for each validator.
|
|
66
72
|
// Differs from AttestationService, `SyncCommitteeMessage` are equal for all
|
|
67
|
-
const beaconBlockRoot = await this.produceAndPublishSyncCommittees(slot, dutiesAtSlot);
|
|
73
|
+
const beaconBlockRoot = await this.produceAndPublishSyncCommittees(fork, slot, dutiesAtSlot);
|
|
68
74
|
// Step 2. If an attestation was produced, make an aggregate.
|
|
69
|
-
// First, wait until the `
|
|
70
|
-
|
|
71
|
-
|
|
75
|
+
// First, wait until the `CONTRIBUTION_DUE_BPS` of the slot
|
|
76
|
+
const syncContributionDueMs = this.config.getSyncContributionDueMs(fork);
|
|
77
|
+
await sleep(syncContributionDueMs - this.clock.msFromSlot(slot), signal);
|
|
78
|
+
this.metrics?.syncCommitteeStepCallProduceAggregate.observe(this.clock.secFromSlot(slot) - syncContributionDueMs / 1000);
|
|
72
79
|
// await for all so if the Beacon node is overloaded it auto-throttles
|
|
73
80
|
// TODO: This approach is conservative to reduce the node's load, review
|
|
74
81
|
const dutiesBySubcommitteeIndex = groupSyncDutiesBySubcommitteeIndex(dutiesAtSlot);
|
|
@@ -77,7 +84,7 @@ export class SyncCommitteeService {
|
|
|
77
84
|
return;
|
|
78
85
|
// Then download, sign and publish a `SignedAggregateAndProof` for each
|
|
79
86
|
// validator that is elected to aggregate for this `slot` and `subcommitteeIndex`.
|
|
80
|
-
await this.produceAndPublishAggregates(slot, subcommitteeIndex, beaconBlockRoot, duties).catch((e) => {
|
|
87
|
+
await this.produceAndPublishAggregates(fork, slot, subcommitteeIndex, beaconBlockRoot, duties).catch((e) => {
|
|
81
88
|
this.logger.error("Error on SyncCommitteeContribution", { slot, index: subcommitteeIndex }, e);
|
|
82
89
|
});
|
|
83
90
|
}));
|
|
@@ -95,7 +102,7 @@ export class SyncCommitteeService {
|
|
|
95
102
|
* Only one `SyncCommittee` is downloaded from the BN. It is then signed by each
|
|
96
103
|
* validator and the list of individually-signed `SyncCommittee` objects is returned to the BN.
|
|
97
104
|
*/
|
|
98
|
-
async produceAndPublishSyncCommittees(slot, duties) {
|
|
105
|
+
async produceAndPublishSyncCommittees(fork, slot, duties) {
|
|
99
106
|
const logCtx = { slot };
|
|
100
107
|
// /eth/v1/beacon/blocks/:blockId/root -> at slot -1
|
|
101
108
|
// Produce one attestation data per slot and subcommitteeIndex
|
|
@@ -117,13 +124,14 @@ export class SyncCommitteeService {
|
|
|
117
124
|
// by default we want to submit SyncCommitteeSignature asap after we receive block
|
|
118
125
|
// provide a delay option just in case any client implementation validate the existence of block in
|
|
119
126
|
// SyncCommitteeSignature gossip validation.
|
|
120
|
-
const
|
|
127
|
+
const syncMessageDueMs = this.config.getSyncMessageDueMs(fork);
|
|
128
|
+
const msToCutoffTime = syncMessageDueMs - this.clock.msFromSlot(slot);
|
|
121
129
|
const afterBlockDelayMs = 1000 * this.clock.secondsPerSlot * (this.opts?.scAfterBlockDelaySlotFraction ?? 0);
|
|
122
|
-
const toDelayMs = Math.min(
|
|
130
|
+
const toDelayMs = Math.min(msToCutoffTime, afterBlockDelayMs);
|
|
123
131
|
if (toDelayMs > 0) {
|
|
124
132
|
await sleep(toDelayMs);
|
|
125
133
|
}
|
|
126
|
-
this.metrics?.syncCommitteeStepCallPublishMessage.observe(this.clock.secFromSlot(slot
|
|
134
|
+
this.metrics?.syncCommitteeStepCallPublishMessage.observe(this.clock.secFromSlot(slot) - syncMessageDueMs / 1000);
|
|
127
135
|
if (signatures.length > 0) {
|
|
128
136
|
try {
|
|
129
137
|
(await this.api.beacon.submitPoolSyncCommitteeSignatures({ signatures })).assertOk();
|
|
@@ -146,7 +154,7 @@ export class SyncCommitteeService {
|
|
|
146
154
|
* by each validator and the list of individually-signed `SignedAggregateAndProof` objects is
|
|
147
155
|
* returned to the BN.
|
|
148
156
|
*/
|
|
149
|
-
async produceAndPublishAggregates(slot, subcommitteeIndex, beaconBlockRoot, duties) {
|
|
157
|
+
async produceAndPublishAggregates(fork, slot, subcommitteeIndex, beaconBlockRoot, duties) {
|
|
150
158
|
const logCtx = { slot, index: subcommitteeIndex };
|
|
151
159
|
// No validator is aggregator, skip
|
|
152
160
|
if (duties.every(({ selectionProof }) => selectionProof === null)) {
|
|
@@ -168,7 +176,7 @@ export class SyncCommitteeService {
|
|
|
168
176
|
this.logger.error("Error signing SyncCommitteeContribution", logCtxValidator, e);
|
|
169
177
|
}
|
|
170
178
|
}));
|
|
171
|
-
this.metrics?.syncCommitteeStepCallPublishAggregate.observe(this.clock.secFromSlot(slot
|
|
179
|
+
this.metrics?.syncCommitteeStepCallPublishAggregate.observe(this.clock.secFromSlot(slot) - this.config.getSyncContributionDueMs(fork) / 1000);
|
|
172
180
|
if (signedContributions.length > 0) {
|
|
173
181
|
try {
|
|
174
182
|
(await this.api.validator.publishContributionAndProofs({ contributionAndProofs: signedContributions })).assertOk();
|
|
@@ -189,7 +197,7 @@ export class SyncCommitteeService {
|
|
|
189
197
|
*
|
|
190
198
|
* See https://docs.google.com/document/d/1q9jOTPcYQa-3L8luRvQJ-M0eegtba4Nmon3dpO79TMk/mobilebasic
|
|
191
199
|
*/
|
|
192
|
-
async runDistributedAggregationSelectionTasks(duties, slot, signal) {
|
|
200
|
+
async runDistributedAggregationSelectionTasks(fork, duties, slot, signal) {
|
|
193
201
|
const partialSelections = [];
|
|
194
202
|
for (const { duty, selectionProofs } of duties) {
|
|
195
203
|
const validatorSelections = selectionProofs.map(({ subcommitteeIndex, partialSelectionProof }) => ({
|
|
@@ -203,17 +211,17 @@ export class SyncCommitteeService {
|
|
|
203
211
|
this.logger.debug("Submitting partial sync committee selection proofs", { slot, count: partialSelections.length });
|
|
204
212
|
const res = await Promise.race([
|
|
205
213
|
this.api.validator.submitSyncCommitteeSelections({ selections: partialSelections }),
|
|
206
|
-
// Exit sync committee contributions flow if there is no response after
|
|
207
|
-
// This is in contrast to attestations aggregations flow which is already exited at
|
|
214
|
+
// Exit sync committee contributions flow if there is no response after CONTRIBUTION_DUE_BPS of the slot.
|
|
215
|
+
// This is in contrast to attestations aggregations flow which is already exited at ATTESTATION_DUE_BPS of the slot
|
|
208
216
|
// because for sync committee is not required to resubscribe to subnets as beacon node will assume
|
|
209
217
|
// validator always aggregates. This allows us to wait until we have to produce sync committee contributions.
|
|
210
218
|
// Note that the sync committee contributions flow is not explicitly exited but rather will be skipped
|
|
211
219
|
// due to the fact that calculation of `is_sync_committee_aggregator` in SyncCommitteeDutiesService is not done
|
|
212
220
|
// and selectionProof is set to null, meaning no validator will be considered an aggregator.
|
|
213
|
-
sleep(this.clock.
|
|
221
|
+
sleep(this.config.getSyncContributionDueMs(fork) - this.clock.msFromSlot(slot), signal),
|
|
214
222
|
]);
|
|
215
223
|
if (!res) {
|
|
216
|
-
throw new Error("Failed to receive combined selection proofs before
|
|
224
|
+
throw new Error("Failed to receive combined selection proofs before CONTRIBUTION_DUE_BPS of the slot");
|
|
217
225
|
}
|
|
218
226
|
const combinedSelections = res.value();
|
|
219
227
|
this.logger.debug("Received combined sync committee selection proofs", { slot, count: combinedSelections.length });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncCommittee.js","sourceRoot":"","sources":["../../src/services/syncCommittee.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"syncCommittee.js","sourceRoot":"","sources":["../../src/services/syncCommittee.ts"],"names":[],"mappings":"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"}
|
package/lib/util/clock.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export interface IClock {
|
|
|
10
10
|
runEverySlot(fn: (slot: Slot, signal: AbortSignal) => Promise<void>): void;
|
|
11
11
|
runEveryEpoch(fn: (epoch: Epoch, signal: AbortSignal) => Promise<void>): void;
|
|
12
12
|
msToSlot(slot: Slot): number;
|
|
13
|
+
msFromSlot(slot: Slot): number;
|
|
13
14
|
secFromSlot(slot: Slot): number;
|
|
14
15
|
getCurrentSlot(): Slot;
|
|
15
16
|
getCurrentEpoch(): Epoch;
|
|
@@ -35,6 +36,8 @@ export declare class Clock implements IClock {
|
|
|
35
36
|
runEveryEpoch(fn: RunEveryFn): void;
|
|
36
37
|
/** Milliseconds from now to a specific slot */
|
|
37
38
|
msToSlot(slot: Slot): number;
|
|
39
|
+
/** Milliseconds elapsed from a specific slot to now */
|
|
40
|
+
msFromSlot(slot: Slot): number;
|
|
38
41
|
/** Seconds elapsed from a specific slot to now */
|
|
39
42
|
secFromSlot(slot: Slot): number;
|
|
40
43
|
/**
|
package/lib/util/clock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/util/clock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAC,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAe,MAAM,EAAwB,MAAM,iBAAiB,CAAC;AAE5E,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErE,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3E,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9E,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAC7B,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAChC,cAAc,IAAI,IAAI,CAAC;IACvB,eAAe,IAAI,KAAK,CAAC;CAC1B;AAED,oBAAY,QAAQ;IAClB,IAAI,IAAA;IACJ,KAAK,IAAA;CACN;AAED,qBAAa,KAAM,YAAW,MAAM;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA8C;gBAEtD,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC;IAOhF,IAAI,YAAY,IAAI,KAAK,CAExB;IAED,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAUhC,cAAc,IAAI,IAAI;IAItB,eAAe,IAAI,KAAK;IAIxB,YAAY,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAIlC,aAAa,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAInC,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAK5B,kDAAkD;IAClD,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAI/B;;;;;OAKG;YACW,cAAc;IAsC5B,OAAO,CAAC,aAAa;CAgBtB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAI5F"}
|
|
1
|
+
{"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/util/clock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAC,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAe,MAAM,EAAwB,MAAM,iBAAiB,CAAC;AAE5E,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErE,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3E,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9E,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAC/B,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAChC,cAAc,IAAI,IAAI,CAAC;IACvB,eAAe,IAAI,KAAK,CAAC;CAC1B;AAED,oBAAY,QAAQ;IAClB,IAAI,IAAA;IACJ,KAAK,IAAA;CACN;AAED,qBAAa,KAAM,YAAW,MAAM;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA8C;gBAEtD,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC;IAOhF,IAAI,YAAY,IAAI,KAAK,CAExB;IAED,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAUhC,cAAc,IAAI,IAAI;IAItB,eAAe,IAAI,KAAK;IAIxB,YAAY,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAIlC,aAAa,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAInC,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAK5B,uDAAuD;IACvD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAI9B,kDAAkD;IAClD,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAI/B;;;;;OAKG;YACW,cAAc;IAsC5B,OAAO,CAAC,aAAa;CAgBtB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAI5F"}
|
package/lib/util/clock.js
CHANGED
|
@@ -47,6 +47,10 @@ export class Clock {
|
|
|
47
47
|
const timeAt = this.genesisTime + this.config.SECONDS_PER_SLOT * slot;
|
|
48
48
|
return timeAt * 1000 - Date.now();
|
|
49
49
|
}
|
|
50
|
+
/** Milliseconds elapsed from a specific slot to now */
|
|
51
|
+
msFromSlot(slot) {
|
|
52
|
+
return Date.now() - (this.genesisTime * 1000 + this.config.SLOT_DURATION_MS * slot);
|
|
53
|
+
}
|
|
50
54
|
/** Seconds elapsed from a specific slot to now */
|
|
51
55
|
secFromSlot(slot) {
|
|
52
56
|
return Date.now() / 1000 - (this.genesisTime + this.config.SECONDS_PER_SLOT * slot);
|
package/lib/util/clock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/util/clock.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAC,kBAAkB,EAAE,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAC,YAAY,EAAU,cAAc,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/util/clock.ts"],"names":[],"mappings":"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"}
|
package/lib/util/params.js
CHANGED
|
@@ -124,11 +124,18 @@ function getSpecCriticalParams(localConfig) {
|
|
|
124
124
|
GLOAS_FORK_VERSION: gloasForkRelevant,
|
|
125
125
|
GLOAS_FORK_EPOCH: gloasForkRelevant,
|
|
126
126
|
// Time parameters
|
|
127
|
-
SECONDS_PER_SLOT: true,
|
|
127
|
+
SECONDS_PER_SLOT: true, // Deprecated
|
|
128
|
+
SLOT_DURATION_MS: true,
|
|
128
129
|
SECONDS_PER_ETH1_BLOCK: false, // Legacy
|
|
129
130
|
MIN_VALIDATOR_WITHDRAWABILITY_DELAY: true,
|
|
130
131
|
SHARD_COMMITTEE_PERIOD: true,
|
|
131
132
|
ETH1_FOLLOW_DISTANCE: true,
|
|
133
|
+
PROPOSER_REORG_CUTOFF_BPS: true,
|
|
134
|
+
ATTESTATION_DUE_BPS: true,
|
|
135
|
+
AGGREGATE_DUE_BPS: true,
|
|
136
|
+
// Altair
|
|
137
|
+
SYNC_MESSAGE_DUE_BPS: altairForkRelevant,
|
|
138
|
+
CONTRIBUTION_DUE_BPS: altairForkRelevant,
|
|
132
139
|
// Validator cycle
|
|
133
140
|
INACTIVITY_SCORE_BIAS: true,
|
|
134
141
|
INACTIVITY_SCORE_RECOVERY_RATE: true,
|
package/lib/util/params.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/util/params.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/util/params.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodestar/validator",
|
|
3
|
-
"version": "1.35.0-rc.
|
|
3
|
+
"version": "1.35.0-rc.1",
|
|
4
4
|
"description": "A Typescript implementation of the validator client",
|
|
5
5
|
"author": "ChainSafe Systems",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -50,19 +50,19 @@
|
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@chainsafe/blst": "^2.2.0",
|
|
52
52
|
"@chainsafe/ssz": "^1.2.2",
|
|
53
|
-
"@lodestar/api": "1.35.0-rc.
|
|
54
|
-
"@lodestar/config": "1.35.0-rc.
|
|
55
|
-
"@lodestar/db": "1.35.0-rc.
|
|
56
|
-
"@lodestar/params": "1.35.0-rc.
|
|
57
|
-
"@lodestar/state-transition": "1.35.0-rc.
|
|
58
|
-
"@lodestar/types": "1.35.0-rc.
|
|
59
|
-
"@lodestar/utils": "1.35.0-rc.
|
|
53
|
+
"@lodestar/api": "1.35.0-rc.1",
|
|
54
|
+
"@lodestar/config": "1.35.0-rc.1",
|
|
55
|
+
"@lodestar/db": "1.35.0-rc.1",
|
|
56
|
+
"@lodestar/params": "1.35.0-rc.1",
|
|
57
|
+
"@lodestar/state-transition": "1.35.0-rc.1",
|
|
58
|
+
"@lodestar/types": "1.35.0-rc.1",
|
|
59
|
+
"@lodestar/utils": "1.35.0-rc.1",
|
|
60
60
|
"strict-event-emitter-types": "^2.0.0"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
|
-
"@lodestar/test-utils": "1.35.0-rc.
|
|
63
|
+
"@lodestar/test-utils": "1.35.0-rc.1",
|
|
64
64
|
"bigint-buffer": "^1.1.5",
|
|
65
65
|
"rimraf": "^4.4.1"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "b1684761700608aae6e77328a87fc902c695b8cd"
|
|
68
68
|
}
|
package/src/metrics.ts
CHANGED
|
@@ -49,58 +49,58 @@ export function getMetrics(register: MetricsRegisterExtra, gitData: LodestarGitD
|
|
|
49
49
|
}),
|
|
50
50
|
|
|
51
51
|
// Attestation journey:
|
|
52
|
-
// - Wait for block or
|
|
52
|
+
// - Wait for block or ATTESTATION_DUE_BPS, call prepare attestation
|
|
53
53
|
// - Get attestation, sign, call publish
|
|
54
|
-
// - Wait
|
|
54
|
+
// - Wait AGGREGATE_DUE_BPS, call prepare aggregate
|
|
55
55
|
// - Get aggregate, sign, call publish
|
|
56
56
|
|
|
57
57
|
attesterStepCallProduceAttestation: register.histogram({
|
|
58
58
|
name: "vc_attester_step_call_produce_attestation_seconds",
|
|
59
|
-
help: "Time between
|
|
60
|
-
// Attester flow can start early if block is imported before
|
|
59
|
+
help: "Time between ATTESTATION_DUE_BPS of slot and call produce attestation",
|
|
60
|
+
// Attester flow can start early if block is imported before ATTESTATION_DUE_BPS of the slot
|
|
61
61
|
// This measure is critical so we need very good resolution around the 0 second mark
|
|
62
62
|
buckets: [-3, -1, 0, 1, 2, 3, 6, 12],
|
|
63
63
|
}),
|
|
64
64
|
attesterStepCallPublishAttestation: register.histogram({
|
|
65
65
|
name: "vc_attester_step_call_publish_attestation_seconds",
|
|
66
|
-
help: "Time between
|
|
66
|
+
help: "Time between ATTESTATION_DUE_BPS of slot and call publish attestation",
|
|
67
67
|
buckets: [-3, -1, 0, 1, 2, 3, 6, 12],
|
|
68
68
|
}),
|
|
69
69
|
|
|
70
70
|
attesterStepCallProduceAggregate: register.histogram({
|
|
71
71
|
name: "vc_attester_step_call_produce_aggregate_seconds",
|
|
72
|
-
help: "Time between
|
|
73
|
-
// Aggregate production starts at
|
|
72
|
+
help: "Time between AGGREGATE_DUE_BPS of slot and call produce aggregate",
|
|
73
|
+
// Aggregate production starts at AGGREGATE_DUE_BPS the earliest.
|
|
74
74
|
// Track values close to 0 (expected) in greater resolution, values over 12 overflow into the next slot.
|
|
75
75
|
buckets: [0.5, 1, 2, 3, 6, 12],
|
|
76
76
|
}),
|
|
77
77
|
attesterStepCallPublishAggregate: register.histogram({
|
|
78
78
|
name: "vc_attester_step_call_publish_aggregate_seconds",
|
|
79
|
-
help: "Time between
|
|
79
|
+
help: "Time between AGGREGATE_DUE_BPS of slot and call publish aggregate",
|
|
80
80
|
buckets: [0.5, 1, 2, 3, 6, 12],
|
|
81
81
|
}),
|
|
82
82
|
|
|
83
83
|
syncCommitteeStepCallProduceMessage: register.histogram({
|
|
84
84
|
name: "vc_sync_committee_step_call_produce_message_seconds",
|
|
85
|
-
help: "Time between
|
|
86
|
-
// Max wait time is
|
|
85
|
+
help: "Time between SYNC_MESSAGE_DUE_BPS of slot and call produce message",
|
|
86
|
+
// Max wait time is SYNC_MESSAGE_DUE_BPS of slot
|
|
87
87
|
buckets: [0.5, 1, 2, 3, 6, 12],
|
|
88
88
|
}),
|
|
89
89
|
syncCommitteeStepCallPublishMessage: register.histogram({
|
|
90
90
|
name: "vc_sync_committee_step_call_publish_message_seconds",
|
|
91
|
-
help: "Time between
|
|
91
|
+
help: "Time between SYNC_MESSAGE_DUE_BPS of slot and call publish message",
|
|
92
92
|
buckets: [0.5, 1, 2, 3, 6, 12],
|
|
93
93
|
}),
|
|
94
94
|
|
|
95
95
|
syncCommitteeStepCallProduceAggregate: register.histogram({
|
|
96
96
|
name: "vc_sync_committee_step_call_produce_aggregate_seconds",
|
|
97
|
-
help: "Time between
|
|
98
|
-
// Min wait time is
|
|
97
|
+
help: "Time between CONTRIBUTION_DUE_BPS of slot and call produce aggregate",
|
|
98
|
+
// Min wait time is CONTRIBUTION_DUE_BPS of slot
|
|
99
99
|
buckets: [0.5, 1, 2, 3, 6, 12],
|
|
100
100
|
}),
|
|
101
101
|
syncCommitteeStepCallPublishAggregate: register.histogram({
|
|
102
102
|
name: "vc_sync_committee_step_call_publish_aggregate_seconds",
|
|
103
|
-
help: "Time between
|
|
103
|
+
help: "Time between CONTRIBUTION_DUE_BPS of slot and call publish aggregate",
|
|
104
104
|
buckets: [0.5, 1, 2, 3, 6, 12],
|
|
105
105
|
}),
|
|
106
106
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {ApiClient, routes} from "@lodestar/api";
|
|
2
2
|
import {ChainForkConfig} from "@lodestar/config";
|
|
3
|
-
import {
|
|
3
|
+
import {ForkName, isForkPostElectra} from "@lodestar/params";
|
|
4
4
|
import {computeEpochAtSlot, isAggregatorFromCommitteeLength} from "@lodestar/state-transition";
|
|
5
5
|
import {BLSSignature, SignedAggregateAndProof, SingleAttestation, Slot, phase0, ssz} from "@lodestar/types";
|
|
6
6
|
import {prettyBytes, sleep, toRootHex} from "@lodestar/utils";
|
|
@@ -73,6 +73,7 @@ export class AttestationService {
|
|
|
73
73
|
if (duties.length === 0) {
|
|
74
74
|
return;
|
|
75
75
|
}
|
|
76
|
+
const fork = this.config.getForkName(slot);
|
|
76
77
|
|
|
77
78
|
if (this.opts?.distributedAggregationSelection) {
|
|
78
79
|
// Validator in distributed cluster only has a key share, not the full private key.
|
|
@@ -81,16 +82,20 @@ export class AttestationService {
|
|
|
81
82
|
// This will run in parallel to other attestation tasks but must be finished before starting
|
|
82
83
|
// attestation aggregation as it is required to correctly determine if validator is aggregator
|
|
83
84
|
// and to produce a AggregateAndProof that can be threshold aggregated by the middleware client.
|
|
84
|
-
this.runDistributedAggregationSelectionTasks(duties, slot, signal).catch((e) =>
|
|
85
|
+
this.runDistributedAggregationSelectionTasks(fork, duties, slot, signal).catch((e) =>
|
|
85
86
|
this.logger.error("Error on attestation aggregation selection", {slot}, e)
|
|
86
87
|
);
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
// A validator should create and broadcast the attestation to the associated attestation subnet when either
|
|
90
91
|
// (a) the validator has received a valid block from the expected block proposer for the assigned slot or
|
|
91
|
-
// (b)
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
// (b) ATTESTATION_DUE_BPS of the slot has transpired -- whichever comes first.
|
|
93
|
+
const attestationDueMs = this.config.getAttestationDueMs(fork);
|
|
94
|
+
await Promise.race([
|
|
95
|
+
sleep(attestationDueMs - this.clock.msFromSlot(slot), signal),
|
|
96
|
+
this.emitter.waitForBlockSlot(slot),
|
|
97
|
+
]);
|
|
98
|
+
this.metrics?.attesterStepCallProduceAttestation.observe(this.clock.secFromSlot(slot) - attestationDueMs / 1000);
|
|
94
99
|
|
|
95
100
|
// Beacon node's endpoint produceAttestationData return data is not dependent on committeeIndex.
|
|
96
101
|
// Produce a single attestation for all committees and submit unaggregated attestations in one go.
|
|
@@ -99,22 +104,25 @@ export class AttestationService {
|
|
|
99
104
|
const attestationNoCommittee = await this.produceAttestation(0, slot);
|
|
100
105
|
|
|
101
106
|
// Step 1. Mutate, and sign `Attestation` for each validator. Then publish all `Attestations` in one go
|
|
102
|
-
await this.signAndPublishAttestations(slot, attestationNoCommittee, duties);
|
|
107
|
+
await this.signAndPublishAttestations(fork, slot, attestationNoCommittee, duties);
|
|
103
108
|
|
|
104
109
|
// Step 2. after all attestations are submitted, make an aggregate.
|
|
105
|
-
// First, wait until the `aggregation_production_instant` (
|
|
106
|
-
|
|
107
|
-
|
|
110
|
+
// First, wait until the `aggregation_production_instant` (AGGREGATE_DUE_BPS of the way through the slot)
|
|
111
|
+
const aggregateDueMs = this.config.getAggregateDueMs(fork);
|
|
112
|
+
await sleep(aggregateDueMs - this.clock.msFromSlot(slot), signal);
|
|
113
|
+
this.metrics?.attesterStepCallProduceAggregate.observe(this.clock.secFromSlot(slot) - aggregateDueMs / 1000);
|
|
108
114
|
|
|
109
115
|
const dutiesByCommitteeIndex = groupAttDutiesByCommitteeIndex(duties);
|
|
110
|
-
const isPostElectra = this.config.getForkSeq(slot) >= ForkSeq.electra;
|
|
111
116
|
|
|
112
117
|
// Then download, sign and publish a `SignedAggregateAndProof` for each
|
|
113
118
|
// validator that is elected to aggregate for this `slot` and `committeeIndex`.
|
|
114
119
|
await Promise.all(
|
|
115
120
|
Array.from(dutiesByCommitteeIndex.entries()).map(([index, dutiesSameCommittee]) => {
|
|
116
|
-
const attestationData: phase0.AttestationData = {
|
|
117
|
-
|
|
121
|
+
const attestationData: phase0.AttestationData = {
|
|
122
|
+
...attestationNoCommittee,
|
|
123
|
+
index: isForkPostElectra(fork) ? 0 : index,
|
|
124
|
+
};
|
|
125
|
+
return this.produceAndPublishAggregates(fork, attestationData, index, dutiesSameCommittee);
|
|
118
126
|
})
|
|
119
127
|
);
|
|
120
128
|
} catch (e) {
|
|
@@ -138,6 +146,7 @@ export class AttestationService {
|
|
|
138
146
|
* validator and the list of individually-signed `Attestation` objects is returned to the BN.
|
|
139
147
|
*/
|
|
140
148
|
private async signAndPublishAttestations(
|
|
149
|
+
fork: ForkName,
|
|
141
150
|
slot: Slot,
|
|
142
151
|
attestationNoCommittee: phase0.AttestationData,
|
|
143
152
|
duties: AttDutyAndProof[]
|
|
@@ -145,11 +154,10 @@ export class AttestationService {
|
|
|
145
154
|
const signedAttestations: SingleAttestation[] = [];
|
|
146
155
|
const headRootHex = toRootHex(attestationNoCommittee.beaconBlockRoot);
|
|
147
156
|
const currentEpoch = computeEpochAtSlot(slot);
|
|
148
|
-
const isPostElectra = this.config.getForkSeq(slot) >= ForkSeq.electra;
|
|
149
157
|
|
|
150
158
|
await Promise.all(
|
|
151
159
|
duties.map(async ({duty}) => {
|
|
152
|
-
const index =
|
|
160
|
+
const index = isForkPostElectra(fork) ? 0 : duty.committeeIndex;
|
|
153
161
|
const attestationData: phase0.AttestationData = {...attestationNoCommittee, index};
|
|
154
162
|
const logCtxValidator = {slot, index, head: headRootHex, validatorIndex: duty.validatorIndex};
|
|
155
163
|
|
|
@@ -163,20 +171,21 @@ export class AttestationService {
|
|
|
163
171
|
})
|
|
164
172
|
);
|
|
165
173
|
|
|
166
|
-
// signAndPublishAttestations() may be called before the
|
|
174
|
+
// signAndPublishAttestations() may be called before the ATTESTATION_DUE_BPS cutoff time if the block was received early.
|
|
167
175
|
// If we produced the block or we got the block sooner than our peers, our attestations can be dropped because
|
|
168
176
|
// they reach our peers before the block. To prevent that, we wait 2 extra seconds AFTER block arrival, but
|
|
169
|
-
// never beyond the
|
|
177
|
+
// never beyond the ATTESTATION_DUE_BPS cutoff time.
|
|
170
178
|
// https://github.com/status-im/nimbus-eth2/blob/7b64c1dce4392731a4a59ee3a36caef2e0a8357a/beacon_chain/validators/validator_duties.nim#L1123
|
|
171
|
-
const
|
|
172
|
-
|
|
179
|
+
const attestationDueMs = this.config.getAttestationDueMs(fork);
|
|
180
|
+
const msToCutoffTime = attestationDueMs - this.clock.msFromSlot(slot);
|
|
181
|
+
// submitting attestations asap to avoid busy time at around ATTESTATION_DUE_BPS of slot
|
|
173
182
|
const afterBlockDelayMs =
|
|
174
183
|
1000 *
|
|
175
184
|
this.clock.secondsPerSlot *
|
|
176
185
|
(this.opts?.afterBlockDelaySlotFraction ?? DEFAULT_AFTER_BLOCK_DELAY_SLOT_FRACTION);
|
|
177
|
-
await sleep(Math.min(
|
|
186
|
+
await sleep(Math.min(msToCutoffTime, afterBlockDelayMs));
|
|
178
187
|
|
|
179
|
-
this.metrics?.attesterStepCallPublishAttestation.observe(this.clock.secFromSlot(slot
|
|
188
|
+
this.metrics?.attesterStepCallPublishAttestation.observe(this.clock.secFromSlot(slot) - attestationDueMs / 1000);
|
|
180
189
|
|
|
181
190
|
// Step 2. Publish all `Attestations` in one go
|
|
182
191
|
try {
|
|
@@ -205,6 +214,7 @@ export class AttestationService {
|
|
|
205
214
|
* returned to the BN.
|
|
206
215
|
*/
|
|
207
216
|
private async produceAndPublishAggregates(
|
|
217
|
+
fork: ForkName,
|
|
208
218
|
attestation: phase0.AttestationData,
|
|
209
219
|
committeeIndex: number,
|
|
210
220
|
duties: AttDutyAndProof[]
|
|
@@ -246,7 +256,9 @@ export class AttestationService {
|
|
|
246
256
|
})
|
|
247
257
|
);
|
|
248
258
|
|
|
249
|
-
this.metrics?.attesterStepCallPublishAggregate.observe(
|
|
259
|
+
this.metrics?.attesterStepCallPublishAggregate.observe(
|
|
260
|
+
this.clock.secFromSlot(attestation.slot) - this.config.getAggregateDueMs(fork) / 1000
|
|
261
|
+
);
|
|
250
262
|
|
|
251
263
|
if (signedAggregateAndProofs.length > 0) {
|
|
252
264
|
try {
|
|
@@ -274,6 +286,7 @@ export class AttestationService {
|
|
|
274
286
|
* See https://docs.google.com/document/d/1q9jOTPcYQa-3L8luRvQJ-M0eegtba4Nmon3dpO79TMk/mobilebasic
|
|
275
287
|
*/
|
|
276
288
|
private async runDistributedAggregationSelectionTasks(
|
|
289
|
+
fork: ForkName,
|
|
277
290
|
duties: AttDutyAndProof[],
|
|
278
291
|
slot: number,
|
|
279
292
|
signal: AbortSignal
|
|
@@ -290,16 +303,16 @@ export class AttestationService {
|
|
|
290
303
|
|
|
291
304
|
const res = await Promise.race([
|
|
292
305
|
this.api.validator.submitBeaconCommitteeSelections({selections: partialSelections}),
|
|
293
|
-
// Exit attestation aggregation flow if there is no response after
|
|
306
|
+
// Exit attestation aggregation flow if there is no response after ATTESTATION_DUE_BPS of the slot as
|
|
294
307
|
// beacon node would likely not have enough time to prepare an aggregate attestation.
|
|
295
308
|
// Note that the aggregations flow is not explicitly exited but rather will be skipped
|
|
296
309
|
// due to the fact that calculation of `is_aggregator` in AttestationDutiesService is not done
|
|
297
310
|
// and selectionProof is set to null, meaning no validator will be considered an aggregator.
|
|
298
|
-
sleep(this.clock.
|
|
311
|
+
sleep(this.config.getAttestationDueMs(fork) - this.clock.msFromSlot(slot), signal),
|
|
299
312
|
]);
|
|
300
313
|
|
|
301
314
|
if (!res) {
|
|
302
|
-
throw new Error("Failed to receive combined selection proofs before
|
|
315
|
+
throw new Error("Failed to receive combined selection proofs before ATTESTATION_DUE_BPS of the slot");
|
|
303
316
|
}
|
|
304
317
|
|
|
305
318
|
const combinedSelections = res.value();
|