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