@lodestar/validator 1.20.0-dev.82a9384b27 → 1.20.0-dev.85dc0ba06d
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/README.md +1 -1
- package/lib/genesis.d.ts +2 -2
- package/lib/genesis.js +1 -4
- package/lib/genesis.js.map +1 -1
- package/lib/metrics.d.ts +1 -1
- package/lib/services/attestation.d.ts +2 -2
- package/lib/services/attestation.js +13 -16
- package/lib/services/attestation.js.map +1 -1
- package/lib/services/attestationDuties.d.ts +2 -2
- package/lib/services/attestationDuties.js +6 -8
- package/lib/services/attestationDuties.js.map +1 -1
- package/lib/services/block.d.ts +2 -2
- package/lib/services/block.js +25 -25
- package/lib/services/block.js.map +1 -1
- package/lib/services/blockDuties.d.ts +2 -2
- package/lib/services/blockDuties.js +4 -6
- package/lib/services/blockDuties.js.map +1 -1
- package/lib/services/chainHeaderTracker.d.ts +2 -2
- package/lib/services/chainHeaderTracker.js +11 -1
- package/lib/services/chainHeaderTracker.js.map +1 -1
- package/lib/services/doppelgangerService.d.ts +2 -2
- package/lib/services/doppelgangerService.js +3 -4
- package/lib/services/doppelgangerService.js.map +1 -1
- package/lib/services/indices.d.ts +2 -2
- package/lib/services/indices.js +11 -15
- package/lib/services/indices.js.map +1 -1
- package/lib/services/prepareBeaconProposer.d.ts +3 -3
- package/lib/services/prepareBeaconProposer.js +4 -4
- package/lib/services/prepareBeaconProposer.js.map +1 -1
- package/lib/services/syncCommittee.d.ts +2 -2
- package/lib/services/syncCommittee.js +7 -14
- package/lib/services/syncCommittee.js.map +1 -1
- package/lib/services/syncCommitteeDuties.d.ts +2 -2
- package/lib/services/syncCommitteeDuties.js +3 -6
- package/lib/services/syncCommitteeDuties.js.map +1 -1
- package/lib/validator.d.ts +6 -3
- package/lib/validator.js +22 -22
- package/lib/validator.js.map +1 -1
- package/package.json +10 -10
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Epoch } from "@lodestar/types";
|
|
2
|
-
import {
|
|
2
|
+
import { ApiClient } from "@lodestar/api";
|
|
3
3
|
import { Logger } from "@lodestar/utils";
|
|
4
4
|
import { ISlashingProtection } from "../slashingProtection/index.js";
|
|
5
5
|
import { ProcessShutdownCallback, PubkeyHex } from "../types.js";
|
|
@@ -29,7 +29,7 @@ export declare class DoppelgangerService {
|
|
|
29
29
|
private readonly processShutdownCallback;
|
|
30
30
|
private readonly metrics;
|
|
31
31
|
private readonly doppelgangerStateByPubkey;
|
|
32
|
-
constructor(logger: Logger, clock: IClock, api:
|
|
32
|
+
constructor(logger: Logger, clock: IClock, api: ApiClient, indicesService: IndicesService, slashingProtection: ISlashingProtection, processShutdownCallback: ProcessShutdownCallback, metrics: Metrics | null);
|
|
33
33
|
registerValidator(pubkeyHex: PubkeyHex): Promise<void>;
|
|
34
34
|
unregisterValidator(pubkeyHex: PubkeyHex): void;
|
|
35
35
|
getStatus(pubKeyHex: PubkeyHex): DoppelgangerStatus;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { fromHexString } from "@chainsafe/ssz";
|
|
2
|
-
import { ApiError } from "@lodestar/api";
|
|
3
2
|
import { sleep, truncBytes } from "@lodestar/utils";
|
|
4
3
|
import { computeStartSlotAtEpoch } from "@lodestar/state-transition";
|
|
5
4
|
// The number of epochs that must be checked before we assume that there are
|
|
@@ -129,12 +128,12 @@ export class DoppelgangerService {
|
|
|
129
128
|
if (epoch < 0) {
|
|
130
129
|
return { epoch, responses: [] };
|
|
131
130
|
}
|
|
132
|
-
const res = await this.api.validator.getLiveness(epoch, indicesToCheck);
|
|
131
|
+
const res = await this.api.validator.getLiveness({ epoch, indices: indicesToCheck });
|
|
133
132
|
if (!res.ok) {
|
|
134
|
-
this.logger.error(`Error getting liveness data for epoch ${epoch}`, {},
|
|
133
|
+
this.logger.error(`Error getting liveness data for epoch ${epoch}`, {}, res.error());
|
|
135
134
|
return { epoch, responses: [] };
|
|
136
135
|
}
|
|
137
|
-
return { epoch, responses: res.
|
|
136
|
+
return { epoch, responses: res.value() };
|
|
138
137
|
}
|
|
139
138
|
detectDoppelganger(currentEpoch, previousEpochLiveness, currentEpochLiveness, indicesToCheckMap) {
|
|
140
139
|
const previousEpoch = currentEpoch - 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doppelgangerService.js","sourceRoot":"","sources":["../../src/services/doppelgangerService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"doppelgangerService.js","sourceRoot":"","sources":["../../src/services/doppelgangerService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ValidatorIndex } from "@lodestar/types";
|
|
2
2
|
import { Logger } from "@lodestar/utils";
|
|
3
|
-
import {
|
|
3
|
+
import { ApiClient } from "@lodestar/api";
|
|
4
4
|
import { Metrics } from "../metrics.js";
|
|
5
5
|
type PubkeyHex = string;
|
|
6
6
|
export declare class IndicesService {
|
|
@@ -11,7 +11,7 @@ export declare class IndicesService {
|
|
|
11
11
|
/** Indexed by pubkey in hex 0x prefixed */
|
|
12
12
|
readonly pubkey2index: Map<string, number>;
|
|
13
13
|
private pollValidatorIndicesPromise;
|
|
14
|
-
constructor(logger: Logger, api:
|
|
14
|
+
constructor(logger: Logger, api: ApiClient, metrics: Metrics | null);
|
|
15
15
|
get indexCount(): number;
|
|
16
16
|
/** Returns the validator index for a given validator pubkey */
|
|
17
17
|
getValidatorIndex(pubKey: PubkeyHex): ValidatorIndex | undefined;
|
package/lib/services/indices.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { toHexString } from "@chainsafe/ssz";
|
|
2
2
|
import { MapDef } from "@lodestar/utils";
|
|
3
|
-
import { ApiError } from "@lodestar/api";
|
|
4
3
|
import { batchItems } from "../util/index.js";
|
|
5
4
|
/**
|
|
6
5
|
* URLs have a limitation on size, adding an unbounded num of pubkeys will break the request.
|
|
@@ -61,10 +60,8 @@ export class IndicesService {
|
|
|
61
60
|
if (this.pollValidatorIndicesPromise) {
|
|
62
61
|
return this.pollValidatorIndicesPromise;
|
|
63
62
|
}
|
|
64
|
-
this.pollValidatorIndicesPromise = this.pollValidatorIndicesInternal(pubkeysHex)
|
|
65
|
-
|
|
66
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
67
|
-
this.pollValidatorIndicesPromise.finally(() => {
|
|
63
|
+
this.pollValidatorIndicesPromise = this.pollValidatorIndicesInternal(pubkeysHex).finally(() => {
|
|
64
|
+
// Once the pollValidatorIndicesInternal() resolves or rejects null the cached promise so it can be called again.
|
|
68
65
|
this.pollValidatorIndicesPromise = null;
|
|
69
66
|
});
|
|
70
67
|
return this.pollValidatorIndicesPromise;
|
|
@@ -96,27 +93,26 @@ export class IndicesService {
|
|
|
96
93
|
return newIndices;
|
|
97
94
|
}
|
|
98
95
|
async fetchValidatorIndices(pubkeysHex) {
|
|
99
|
-
const
|
|
100
|
-
ApiError.assert(res, "Can not fetch state validators from beacon node");
|
|
96
|
+
const validators = (await this.api.beacon.getStateValidators({ stateId: "head", validatorIds: pubkeysHex })).value();
|
|
101
97
|
const newIndices = [];
|
|
102
98
|
const allValidatorStatuses = new MapDef(() => 0);
|
|
103
|
-
for (const
|
|
99
|
+
for (const validator of validators) {
|
|
104
100
|
// Group all validators by status
|
|
105
|
-
const status = statusToSimpleStatusMapping(
|
|
101
|
+
const status = statusToSimpleStatusMapping(validator.status);
|
|
106
102
|
allValidatorStatuses.set(status, allValidatorStatuses.getOrDefault(status) + 1);
|
|
107
|
-
const pubkeyHex = toHexString(
|
|
103
|
+
const pubkeyHex = toHexString(validator.validator.pubkey);
|
|
108
104
|
if (!this.pubkey2index.has(pubkeyHex)) {
|
|
109
105
|
this.logger.info("Validator seen on beacon chain", {
|
|
110
|
-
validatorIndex:
|
|
106
|
+
validatorIndex: validator.index,
|
|
111
107
|
pubKey: pubkeyHex,
|
|
112
108
|
});
|
|
113
|
-
this.pubkey2index.set(pubkeyHex,
|
|
114
|
-
this.index2pubkey.set(
|
|
115
|
-
newIndices.push(
|
|
109
|
+
this.pubkey2index.set(pubkeyHex, validator.index);
|
|
110
|
+
this.index2pubkey.set(validator.index, pubkeyHex);
|
|
111
|
+
newIndices.push(validator.index);
|
|
116
112
|
}
|
|
117
113
|
}
|
|
118
114
|
// The number of validators that are not in the beacon chain
|
|
119
|
-
const pendingCount = pubkeysHex.length -
|
|
115
|
+
const pendingCount = pubkeysHex.length - validators.length;
|
|
120
116
|
allValidatorStatuses.set("pending", allValidatorStatuses.getOrDefault("pending") + pendingCount);
|
|
121
117
|
// Retrieve the number of validators for each status
|
|
122
118
|
const statuses = Object.fromEntries(Array.from(allValidatorStatuses.entries()).filter((entry) => entry[1] > 0));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indices.js","sourceRoot":"","sources":["../../src/services/indices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAS,MAAM,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"indices.js","sourceRoot":"","sources":["../../src/services/indices.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ApiClient } from "@lodestar/api";
|
|
2
2
|
import { BeaconConfig } from "@lodestar/config";
|
|
3
3
|
import { IClock, LoggerVc } from "../util/index.js";
|
|
4
4
|
import { Metrics } from "../metrics.js";
|
|
@@ -11,7 +11,7 @@ import { ValidatorStore } from "./validatorStore.js";
|
|
|
11
11
|
* This needs to be done every epoch because the BN will cache it at most for
|
|
12
12
|
* two epochs.
|
|
13
13
|
*/
|
|
14
|
-
export declare function pollPrepareBeaconProposer(config: BeaconConfig, logger: LoggerVc, api:
|
|
14
|
+
export declare function pollPrepareBeaconProposer(config: BeaconConfig, logger: LoggerVc, api: ApiClient, clock: IClock, validatorStore: ValidatorStore, _metrics: Metrics | null): void;
|
|
15
15
|
/**
|
|
16
16
|
* This service is responsible for registering validators with the mev builder as they
|
|
17
17
|
* might prepare and keep ready the execution payloads of just registered validators.
|
|
@@ -19,5 +19,5 @@ export declare function pollPrepareBeaconProposer(config: BeaconConfig, logger:
|
|
|
19
19
|
* This needs to be done every epoch because the builder(s) will cache it at most for
|
|
20
20
|
* two epochs.
|
|
21
21
|
*/
|
|
22
|
-
export declare function pollBuilderValidatorRegistration(config: BeaconConfig, logger: LoggerVc, api:
|
|
22
|
+
export declare function pollBuilderValidatorRegistration(config: BeaconConfig, logger: LoggerVc, api: ApiClient, clock: IClock, validatorStore: ValidatorStore, _metrics: Metrics | null): void;
|
|
23
23
|
//# sourceMappingURL=prepareBeaconProposer.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { routes } from "@lodestar/api";
|
|
2
2
|
import { SLOTS_PER_EPOCH } from "@lodestar/params";
|
|
3
3
|
import { batchItems } from "../util/index.js";
|
|
4
4
|
const REGISTRATION_CHUNK_SIZE = 512;
|
|
@@ -24,10 +24,10 @@ export function pollPrepareBeaconProposer(config, logger, api, clock, validatorS
|
|
|
24
24
|
for (const indices of indicesChunks) {
|
|
25
25
|
try {
|
|
26
26
|
const proposers = indices.map((index) => ({
|
|
27
|
-
validatorIndex:
|
|
27
|
+
validatorIndex: index,
|
|
28
28
|
feeRecipient: validatorStore.getFeeRecipientByIndex(index),
|
|
29
29
|
}));
|
|
30
|
-
|
|
30
|
+
(await api.validator.prepareBeaconProposer({ proposers })).assertOk();
|
|
31
31
|
logger.debug("Registered proposers with beacon node", { epoch, count: proposers.length });
|
|
32
32
|
}
|
|
33
33
|
catch (e) {
|
|
@@ -70,7 +70,7 @@ export function pollBuilderValidatorRegistration(config, logger, api, clock, val
|
|
|
70
70
|
const gasLimit = validatorStore.getGasLimit(pubkeyHex);
|
|
71
71
|
return validatorStore.getValidatorRegistration(pubkeyHex, { feeRecipient, gasLimit }, slot);
|
|
72
72
|
}));
|
|
73
|
-
|
|
73
|
+
(await api.validator.registerValidator({ registrations })).assertOk();
|
|
74
74
|
logger.info("Published validator registrations to builder", { epoch, count: registrations.length });
|
|
75
75
|
}
|
|
76
76
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareBeaconProposer.js","sourceRoot":"","sources":["../../src/services/prepareBeaconProposer.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"prepareBeaconProposer.js","sourceRoot":"","sources":["../../src/services/prepareBeaconProposer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
-
import {
|
|
2
|
+
import { ApiClient } from "@lodestar/api";
|
|
3
3
|
import { IClock, LoggerVc } from "../util/index.js";
|
|
4
4
|
import { PubkeyHex } from "../types.js";
|
|
5
5
|
import { Metrics } from "../metrics.js";
|
|
@@ -24,7 +24,7 @@ export declare class SyncCommitteeService {
|
|
|
24
24
|
private readonly metrics;
|
|
25
25
|
private readonly opts?;
|
|
26
26
|
private readonly dutiesService;
|
|
27
|
-
constructor(config: ChainForkConfig, logger: LoggerVc, api:
|
|
27
|
+
constructor(config: ChainForkConfig, logger: LoggerVc, api: ApiClient, clock: IClock, validatorStore: ValidatorStore, emitter: ValidatorEventEmitter, chainHeaderTracker: ChainHeaderTracker, metrics: Metrics | null, opts?: SyncCommitteeServiceOpts | undefined);
|
|
28
28
|
removeDutiesForKey(pubkey: PubkeyHex): void;
|
|
29
29
|
private runSyncCommitteeTasks;
|
|
30
30
|
/**
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { sleep } from "@lodestar/utils";
|
|
2
2
|
import { computeEpochAtSlot, isSyncCommitteeAggregator } from "@lodestar/state-transition";
|
|
3
|
-
import { ApiError } from "@lodestar/api";
|
|
4
3
|
import { SyncCommitteeDutiesService } from "./syncCommitteeDuties.js";
|
|
5
4
|
import { groupSyncDutiesBySubcommitteeIndex } from "./utils.js";
|
|
6
5
|
/**
|
|
@@ -91,10 +90,7 @@ export class SyncCommitteeService {
|
|
|
91
90
|
// Spec: the validator should prepare a SyncCommitteeMessage for the previous slot (slot - 1)
|
|
92
91
|
// as soon as they have determined the head block of slot - 1
|
|
93
92
|
const blockRoot = this.chainHeaderTracker.getCurrentChainHead(slot) ??
|
|
94
|
-
(await this.api.beacon.getBlockRoot("head").
|
|
95
|
-
ApiError.assert(res, "Error producing SyncCommitteeMessage");
|
|
96
|
-
return res.response.data.root;
|
|
97
|
-
}));
|
|
93
|
+
(await this.api.beacon.getBlockRoot({ blockId: "head" })).value().root;
|
|
98
94
|
const signatures = [];
|
|
99
95
|
await Promise.all(duties.map(async ({ duty }) => {
|
|
100
96
|
const logCtxValidator = { ...logCtx, validatorIndex: duty.validatorIndex };
|
|
@@ -118,7 +114,7 @@ export class SyncCommitteeService {
|
|
|
118
114
|
this.metrics?.syncCommitteeStepCallPublishMessage.observe(this.clock.secFromSlot(slot + 1 / 3));
|
|
119
115
|
if (signatures.length > 0) {
|
|
120
116
|
try {
|
|
121
|
-
|
|
117
|
+
(await this.api.beacon.submitPoolSyncCommitteeSignatures({ signatures })).assertOk();
|
|
122
118
|
this.logger.info("Published SyncCommitteeMessage", { ...logCtx, count: signatures.length });
|
|
123
119
|
this.metrics?.publishedSyncCommitteeMessage.inc(signatures.length);
|
|
124
120
|
}
|
|
@@ -145,15 +141,14 @@ export class SyncCommitteeService {
|
|
|
145
141
|
return;
|
|
146
142
|
}
|
|
147
143
|
this.logger.verbose("Producing SyncCommitteeContribution", logCtx);
|
|
148
|
-
const res = await this.api.validator.produceSyncCommitteeContribution(slot, subcommitteeIndex, beaconBlockRoot);
|
|
149
|
-
ApiError.assert(res, "Error producing sync committee contribution during produceAndPublishAggregates");
|
|
144
|
+
const res = await this.api.validator.produceSyncCommitteeContribution({ slot, subcommitteeIndex, beaconBlockRoot });
|
|
150
145
|
const signedContributions = [];
|
|
151
146
|
await Promise.all(duties.map(async ({ duty, selectionProof }) => {
|
|
152
147
|
const logCtxValidator = { ...logCtx, validatorIndex: duty.validatorIndex };
|
|
153
148
|
try {
|
|
154
149
|
// Produce signed contributions only for validators that are subscribed aggregators.
|
|
155
150
|
if (selectionProof !== null) {
|
|
156
|
-
signedContributions.push(await this.validatorStore.signContributionAndProof(duty, selectionProof, res.
|
|
151
|
+
signedContributions.push(await this.validatorStore.signContributionAndProof(duty, selectionProof, res.value()));
|
|
157
152
|
this.logger.debug("Signed SyncCommitteeContribution", logCtxValidator);
|
|
158
153
|
}
|
|
159
154
|
}
|
|
@@ -164,8 +159,7 @@ export class SyncCommitteeService {
|
|
|
164
159
|
this.metrics?.syncCommitteeStepCallPublishAggregate.observe(this.clock.secFromSlot(slot + 2 / 3));
|
|
165
160
|
if (signedContributions.length > 0) {
|
|
166
161
|
try {
|
|
167
|
-
|
|
168
|
-
ApiError.assert(res);
|
|
162
|
+
(await this.api.validator.publishContributionAndProofs({ contributionAndProofs: signedContributions })).assertOk();
|
|
169
163
|
this.logger.info("Published SyncCommitteeContribution", { ...logCtx, count: signedContributions.length });
|
|
170
164
|
this.metrics?.publishedSyncCommitteeContribution.inc(signedContributions.length);
|
|
171
165
|
}
|
|
@@ -196,7 +190,7 @@ export class SyncCommitteeService {
|
|
|
196
190
|
}
|
|
197
191
|
this.logger.debug("Submitting partial sync committee selection proofs", { slot, count: partialSelections.length });
|
|
198
192
|
const res = await Promise.race([
|
|
199
|
-
this.api.validator.submitSyncCommitteeSelections(partialSelections),
|
|
193
|
+
this.api.validator.submitSyncCommitteeSelections({ selections: partialSelections }),
|
|
200
194
|
// Exit sync committee contributions flow if there is no response after 2/3 of slot.
|
|
201
195
|
// This is in contrast to attestations aggregations flow which is already exited at 1/3 of the slot
|
|
202
196
|
// because for sync committee is not required to resubscribe to subnets as beacon node will assume
|
|
@@ -209,8 +203,7 @@ export class SyncCommitteeService {
|
|
|
209
203
|
if (!res) {
|
|
210
204
|
throw new Error("Failed to receive combined selection proofs before 2/3 of slot");
|
|
211
205
|
}
|
|
212
|
-
|
|
213
|
-
const combinedSelections = res.response.data;
|
|
206
|
+
const combinedSelections = res.value();
|
|
214
207
|
this.logger.debug("Received combined sync committee selection proofs", { slot, count: combinedSelections.length });
|
|
215
208
|
for (const dutyAndProofs of duties) {
|
|
216
209
|
const { validatorIndex, subnets } = dutyAndProofs.duty;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncCommittee.js","sourceRoot":"","sources":["../../src/services/syncCommittee.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,kBAAkB,EAAE,yBAAyB,EAAC,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"syncCommittee.js","sourceRoot":"","sources":["../../src/services/syncCommittee.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
2
|
import { BLSSignature, Slot, ValidatorIndex } from "@lodestar/types";
|
|
3
|
-
import {
|
|
3
|
+
import { ApiClient } from "@lodestar/api";
|
|
4
4
|
import { IClock, LoggerVc } from "../util/index.js";
|
|
5
5
|
import { PubkeyHex } from "../types.js";
|
|
6
6
|
import { Metrics } from "../metrics.js";
|
|
@@ -49,7 +49,7 @@ export declare class SyncCommitteeDutiesService {
|
|
|
49
49
|
private readonly opts?;
|
|
50
50
|
/** Maps a validator public key to their duties for each slot */
|
|
51
51
|
private readonly dutiesByIndexByPeriod;
|
|
52
|
-
constructor(config: ChainForkConfig, logger: LoggerVc, api:
|
|
52
|
+
constructor(config: ChainForkConfig, logger: LoggerVc, api: ApiClient, clock: IClock, validatorStore: ValidatorStore, metrics: Metrics | null, opts?: SyncCommitteeDutiesServiceOpts | undefined);
|
|
53
53
|
/**
|
|
54
54
|
* Returns all `ValidatorDuty` for the given `slot`
|
|
55
55
|
*
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { toHexString } from "@chainsafe/ssz";
|
|
2
2
|
import { EPOCHS_PER_SYNC_COMMITTEE_PERIOD, SYNC_COMMITTEE_SUBNET_SIZE } from "@lodestar/params";
|
|
3
3
|
import { computeSyncPeriodAtEpoch, computeSyncPeriodAtSlot, isSyncCommitteeAggregator } from "@lodestar/state-transition";
|
|
4
|
-
import { ApiError } from "@lodestar/api";
|
|
5
4
|
import { syncCommitteeIndicesToSubnets } from "./utils.js";
|
|
6
5
|
/** Only retain `HISTORICAL_DUTIES_PERIODS` duties prior to the current periods. */
|
|
7
6
|
const HISTORICAL_DUTIES_PERIODS = 2;
|
|
@@ -157,8 +156,7 @@ export class SyncCommitteeDutiesService {
|
|
|
157
156
|
// If there are any subscriptions, push them out to the beacon node.
|
|
158
157
|
if (syncCommitteeSubscriptions.length > 0) {
|
|
159
158
|
// TODO: Should log or throw?
|
|
160
|
-
|
|
161
|
-
ApiError.assert(res, "Failed to subscribe to sync committee subnets");
|
|
159
|
+
(await this.api.validator.prepareSyncCommitteeSubnets({ subscriptions: syncCommitteeSubscriptions })).assertOk();
|
|
162
160
|
}
|
|
163
161
|
}
|
|
164
162
|
/**
|
|
@@ -169,11 +167,10 @@ export class SyncCommitteeDutiesService {
|
|
|
169
167
|
if (epoch < 0) {
|
|
170
168
|
return;
|
|
171
169
|
}
|
|
172
|
-
const
|
|
173
|
-
ApiError.assert(res, "Failed to obtain SyncDuties");
|
|
170
|
+
const duties = (await this.api.validator.getSyncCommitteeDuties({ epoch, indices: indexArr })).value();
|
|
174
171
|
const dutiesByIndex = new Map();
|
|
175
172
|
let count = 0;
|
|
176
|
-
for (const duty of
|
|
173
|
+
for (const duty of duties) {
|
|
177
174
|
const { validatorIndex } = duty;
|
|
178
175
|
if (!this.validatorStore.hasValidatorIndex(validatorIndex)) {
|
|
179
176
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncCommitteeDuties.js","sourceRoot":"","sources":["../../src/services/syncCommitteeDuties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,gCAAgC,EAAE,0BAA0B,EAAC,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAC,wBAAwB,EAAE,uBAAuB,EAAE,yBAAyB,EAAC,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"syncCommitteeDuties.js","sourceRoot":"","sources":["../../src/services/syncCommitteeDuties.ts"],"names":[],"mappings":"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"}
|
package/lib/validator.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { BLSPubkey, phase0 } from "@lodestar/types";
|
|
|
2
2
|
import { BeaconConfig, ChainForkConfig } from "@lodestar/config";
|
|
3
3
|
import { Genesis } from "@lodestar/types/phase0";
|
|
4
4
|
import { Logger } from "@lodestar/utils";
|
|
5
|
-
import {
|
|
5
|
+
import { ApiClient, routes, ApiRequestInit } from "@lodestar/api";
|
|
6
6
|
import { IClock } from "./util/clock.js";
|
|
7
7
|
import { BlockProposingService } from "./services/block.js";
|
|
8
8
|
import { AttestationService } from "./services/attestation.js";
|
|
@@ -22,7 +22,7 @@ export type ValidatorModules = {
|
|
|
22
22
|
attestationService: AttestationService;
|
|
23
23
|
syncCommitteeService: SyncCommitteeService;
|
|
24
24
|
config: BeaconConfig;
|
|
25
|
-
api:
|
|
25
|
+
api: ApiClient;
|
|
26
26
|
clock: IClock;
|
|
27
27
|
chainHeaderTracker: ChainHeaderTracker;
|
|
28
28
|
logger: Logger;
|
|
@@ -34,7 +34,10 @@ export type ValidatorOptions = {
|
|
|
34
34
|
slashingProtection: ISlashingProtection;
|
|
35
35
|
db: LodestarValidatorDatabaseController;
|
|
36
36
|
config: ChainForkConfig;
|
|
37
|
-
api:
|
|
37
|
+
api: {
|
|
38
|
+
clientOrUrls: ApiClient | string | string[];
|
|
39
|
+
globalInit?: ApiRequestInit;
|
|
40
|
+
};
|
|
38
41
|
signers: Signer[];
|
|
39
42
|
logger: Logger;
|
|
40
43
|
processShutdownCallback: ProcessShutdownCallback;
|
package/lib/validator.js
CHANGED
|
@@ -2,7 +2,7 @@ import { toHexString } from "@chainsafe/ssz";
|
|
|
2
2
|
import { ssz } from "@lodestar/types";
|
|
3
3
|
import { createBeaconConfig } from "@lodestar/config";
|
|
4
4
|
import { toSafePrintableUrl } from "@lodestar/utils";
|
|
5
|
-
import { getClient, routes,
|
|
5
|
+
import { getClient, routes, defaultInit } from "@lodestar/api";
|
|
6
6
|
import { computeEpochAtSlot, getCurrentSlot } from "@lodestar/state-transition";
|
|
7
7
|
import { Clock } from "./util/clock.js";
|
|
8
8
|
import { waitForGenesis } from "./genesis.js";
|
|
@@ -75,19 +75,19 @@ export class Validator {
|
|
|
75
75
|
const clock = new Clock(config, logger, { genesisTime: Number(genesis.genesisTime) });
|
|
76
76
|
const loggerVc = getLoggerVc(logger, clock);
|
|
77
77
|
let api;
|
|
78
|
-
|
|
78
|
+
const { clientOrUrls, globalInit } = opts.api;
|
|
79
|
+
if (typeof clientOrUrls === "string" || Array.isArray(clientOrUrls)) {
|
|
79
80
|
// This new api instance can make do with default timeout as a faster timeout is
|
|
80
81
|
// not necessary since this instance won't be used for validator duties
|
|
81
82
|
api = getClient({
|
|
82
|
-
urls: typeof
|
|
83
|
+
urls: typeof clientOrUrls === "string" ? [clientOrUrls] : clientOrUrls,
|
|
83
84
|
// Validator would need the beacon to respond within the slot
|
|
84
85
|
// See https://github.com/ChainSafe/lodestar/issues/5315 for rationale
|
|
85
|
-
timeoutMs: config.SECONDS_PER_SLOT * 1000,
|
|
86
|
-
getAbortSignal: () => controller.signal,
|
|
86
|
+
globalInit: { timeoutMs: config.SECONDS_PER_SLOT * 1000, signal: controller.signal, ...globalInit },
|
|
87
87
|
}, { config, logger, metrics: metrics?.restApiClient });
|
|
88
88
|
}
|
|
89
89
|
else {
|
|
90
|
-
api =
|
|
90
|
+
api = clientOrUrls;
|
|
91
91
|
}
|
|
92
92
|
const indicesService = new IndicesService(logger, api, metrics);
|
|
93
93
|
const doppelgangerService = opts.doppelgangerProtection
|
|
@@ -144,21 +144,25 @@ export class Validator {
|
|
|
144
144
|
static async initializeFromBeaconNode(opts, metrics) {
|
|
145
145
|
const { logger, config } = opts;
|
|
146
146
|
let api;
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
const { clientOrUrls, globalInit } = opts.api;
|
|
148
|
+
if (typeof clientOrUrls === "string" || Array.isArray(clientOrUrls)) {
|
|
149
|
+
const urls = typeof clientOrUrls === "string" ? [clientOrUrls] : clientOrUrls;
|
|
149
150
|
// This new api instance can make do with default timeout as a faster timeout is
|
|
150
151
|
// not necessary since this instance won't be used for validator duties
|
|
151
|
-
api = getClient({ urls,
|
|
152
|
-
logger.info("Beacon node", {
|
|
152
|
+
api = getClient({ urls, globalInit: { signal: opts.abortController.signal, ...globalInit } }, { config, logger });
|
|
153
|
+
logger.info("Beacon node", {
|
|
154
|
+
urls: urls.map(toSafePrintableUrl).toString(),
|
|
155
|
+
requestWireFormat: globalInit?.requestWireFormat ?? defaultInit.requestWireFormat,
|
|
156
|
+
responseWireFormat: globalInit?.responseWireFormat ?? defaultInit.responseWireFormat,
|
|
157
|
+
});
|
|
153
158
|
}
|
|
154
159
|
else {
|
|
155
|
-
api =
|
|
160
|
+
api = clientOrUrls;
|
|
156
161
|
}
|
|
157
162
|
const genesis = await waitForGenesis(api, opts.logger, opts.abortController.signal);
|
|
158
163
|
logger.info("Genesis fetched from the beacon node");
|
|
159
164
|
const res = await api.config.getSpec();
|
|
160
|
-
|
|
161
|
-
assertEqualParams(config, res.response.data);
|
|
165
|
+
assertEqualParams(config, res.value());
|
|
162
166
|
logger.info("Verified connected beacon node and validator have same the config");
|
|
163
167
|
await assertEqualGenesis(opts, genesis);
|
|
164
168
|
logger.info("Verified connected beacon node and validator have the same genesisValidatorRoot");
|
|
@@ -202,30 +206,26 @@ export class Validator {
|
|
|
202
206
|
*/
|
|
203
207
|
async voluntaryExit(publicKey, exitEpoch) {
|
|
204
208
|
const signedVoluntaryExit = await this.signVoluntaryExit(publicKey, exitEpoch);
|
|
205
|
-
|
|
209
|
+
(await this.api.beacon.submitPoolVoluntaryExit({ signedVoluntaryExit })).assertOk();
|
|
206
210
|
this.logger.info(`Submitted voluntary exit for ${publicKey} to the network`);
|
|
207
211
|
}
|
|
208
212
|
/**
|
|
209
213
|
* Create a signed voluntary exit message for the given validator by its key.
|
|
210
214
|
*/
|
|
211
215
|
async signVoluntaryExit(publicKey, exitEpoch) {
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
const stateValidator = stateValidators[0];
|
|
216
|
-
if (stateValidator === undefined) {
|
|
216
|
+
const validators = (await this.api.beacon.getStateValidators({ stateId: "head", validatorIds: [publicKey] })).value();
|
|
217
|
+
const validator = validators[0];
|
|
218
|
+
if (validator === undefined) {
|
|
217
219
|
throw new Error(`Validator pubkey ${publicKey} not found in state`);
|
|
218
220
|
}
|
|
219
221
|
if (exitEpoch === undefined) {
|
|
220
222
|
exitEpoch = computeEpochAtSlot(getCurrentSlot(this.config, this.clock.genesisTime));
|
|
221
223
|
}
|
|
222
|
-
return this.validatorStore.signVoluntaryExit(publicKey,
|
|
224
|
+
return this.validatorStore.signVoluntaryExit(publicKey, validator.index, exitEpoch);
|
|
223
225
|
}
|
|
224
226
|
async fetchBeaconHealth() {
|
|
225
227
|
try {
|
|
226
228
|
const { status: healthCode } = await this.api.node.getHealth();
|
|
227
|
-
// API always returns http status codes
|
|
228
|
-
// Need to find a way to return a custom enum type
|
|
229
229
|
if (healthCode === routes.node.NodeHealth.READY)
|
|
230
230
|
return BeaconHealth.READY;
|
|
231
231
|
if (healthCode === routes.node.NodeHealth.SYNCING)
|