@lodestar/beacon-node 1.33.0 → 1.34.0-dev.083b7cce17
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/api/impl/beacon/blocks/index.js +175 -56
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +5 -5
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/beacon/state/index.js +24 -17
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/debug/index.d.ts +1 -1
- package/lib/api/impl/debug/index.js +24 -1
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/events/index.js +1 -1
- package/lib/api/impl/events/index.js.map +1 -1
- package/lib/api/impl/validator/index.js +72 -49
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/impl/validator/utils.d.ts +3 -3
- package/lib/api/impl/validator/utils.js +2 -2
- package/lib/api/impl/validator/utils.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts +1 -1
- package/lib/chain/archiveStore/archiveStore.js +2 -2
- package/lib/chain/archiveStore/interface.d.ts +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +91 -21
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/beaconProposerCache.d.ts +1 -0
- package/lib/chain/beaconProposerCache.js +3 -0
- package/lib/chain/beaconProposerCache.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +3 -2
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +66 -23
- package/lib/chain/blocks/types.js +39 -5
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/utils/blowfishBanner.js +1 -0
- package/lib/chain/blocks/utils/blowfishBanner.js.map +1 -1
- package/lib/chain/blocks/utils/giraffeBanner.js +1 -0
- package/lib/chain/blocks/utils/giraffeBanner.js.map +1 -1
- package/lib/chain/blocks/utils/zebraBanner.d.ts +2 -0
- package/lib/chain/blocks/utils/zebraBanner.js +46 -0
- package/lib/chain/blocks/utils/zebraBanner.js.map +1 -0
- package/lib/chain/blocks/verifyBlock.js +18 -5
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +21 -10
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +63 -16
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/bls/multithread/index.js +2 -2
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/chain.d.ts +18 -101
- package/lib/chain/chain.js +111 -78
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +18 -2
- package/lib/chain/emitter.js +13 -0
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.d.ts +69 -0
- package/lib/chain/errors/dataColumnSidecarError.js +21 -0
- package/lib/chain/errors/dataColumnSidecarError.js.map +1 -0
- package/lib/chain/errors/index.d.ts +1 -0
- package/lib/chain/errors/index.js +1 -0
- package/lib/chain/errors/index.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts +2 -1
- package/lib/chain/forkChoice/index.js +2 -2
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/interface.d.ts +6 -7
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +13 -3
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/attestationPool.d.ts +1 -1
- package/lib/chain/opPools/attestationPool.js +7 -7
- package/lib/chain/options.d.ts +4 -1
- package/lib/chain/options.js +1 -0
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/prepareNextSlot.js +4 -2
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +30 -16
- package/lib/chain/produceBlock/produceBlockBody.js +28 -28
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +6 -3
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +28 -4
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
- package/lib/chain/rewards/syncCommitteeRewards.js +4 -4
- package/lib/chain/rewards/syncCommitteeRewards.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +64 -18
- package/lib/chain/seenCache/seenGossipBlockInput.js +321 -53
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/validation/aggregateAndProof.d.ts +1 -1
- package/lib/chain/validation/aggregateAndProof.js +8 -8
- package/lib/chain/validation/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/attestation.d.ts +3 -3
- package/lib/chain/validation/attestation.js +10 -10
- package/lib/chain/validation/attestation.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts +29 -0
- package/lib/chain/validation/dataColumnSidecar.js +257 -0
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
- package/lib/chain/validation/syncCommitteeContributionAndProof.js +2 -2
- package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
- package/lib/db/beacon.d.ts +3 -1
- package/lib/db/beacon.js +3 -1
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/buckets.d.ts +3 -1
- package/lib/db/buckets.js +2 -0
- package/lib/db/buckets.js.map +1 -1
- package/lib/db/interface.d.ts +3 -1
- package/lib/db/repositories/dataColumnSidecar.d.ts +26 -0
- package/lib/db/repositories/dataColumnSidecar.js +39 -0
- package/lib/db/repositories/dataColumnSidecar.js.map +1 -0
- package/lib/db/repositories/dataColumnSidecarArchive.d.ts +24 -0
- package/lib/db/repositories/dataColumnSidecarArchive.js +39 -0
- package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -0
- package/lib/db/repositories/index.d.ts +2 -0
- package/lib/db/repositories/index.js +2 -0
- package/lib/db/repositories/index.js.map +1 -1
- package/lib/db/repositories/stateArchive.js +1 -1
- package/lib/db/repositories/stateArchive.js.map +1 -1
- package/lib/execution/builder/http.d.ts +20 -4
- package/lib/execution/builder/http.js +30 -11
- package/lib/execution/builder/http.js.map +1 -1
- package/lib/execution/builder/interface.d.ts +5 -4
- package/lib/execution/engine/http.d.ts +8 -5
- package/lib/execution/engine/http.js +65 -46
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +6 -13
- package/lib/execution/engine/interface.js +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +5 -1
- package/lib/execution/engine/mock.js +58 -15
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/types.d.ts +15 -5
- package/lib/execution/engine/types.js +8 -2
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/execution/engine/utils.js +1 -1
- package/lib/execution/engine/utils.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +16 -28
- package/lib/metrics/metrics/beacon.js +66 -75
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +31 -1
- package/lib/metrics/metrics/lodestar.js +63 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/metrics.d.ts +2 -1
- package/lib/metrics/metrics.js +3 -0
- package/lib/metrics/metrics.js.map +1 -1
- package/lib/network/core/metrics.d.ts +10 -3
- package/lib/network/core/metrics.js +22 -4
- package/lib/network/core/metrics.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +15 -4
- package/lib/network/core/networkCore.js +73 -24
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/core/networkCoreWorker.js +2 -0
- package/lib/network/core/networkCoreWorker.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts +5 -3
- package/lib/network/core/networkCoreWorkerHandler.js +7 -2
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/core/types.d.ts +7 -4
- package/lib/network/events.d.ts +4 -2
- package/lib/network/events.js.map +1 -1
- package/lib/network/gossip/gossipsub.d.ts +2 -2
- package/lib/network/gossip/gossipsub.js +8 -6
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +8 -1
- package/lib/network/gossip/interface.js +1 -0
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/scoringParameters.d.ts +6 -2
- package/lib/network/gossip/scoringParameters.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +2038 -1489
- package/lib/network/gossip/topic.js +29 -1
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +11 -3
- package/lib/network/metadata.d.ts +9 -5
- package/lib/network/metadata.js +26 -5
- package/lib/network/metadata.js.map +1 -1
- package/lib/network/network.d.ts +14 -4
- package/lib/network/network.js +73 -11
- package/lib/network/network.js.map +1 -1
- package/lib/network/networkConfig.d.ts +12 -0
- package/lib/network/networkConfig.js +2 -0
- package/lib/network/networkConfig.js.map +1 -0
- package/lib/network/options.d.ts +1 -0
- package/lib/network/options.js +7 -2
- package/lib/network/options.js.map +1 -1
- package/lib/network/peers/discover.d.ts +8 -3
- package/lib/network/peers/discover.js +99 -14
- package/lib/network/peers/discover.js.map +1 -1
- package/lib/network/peers/peerManager.d.ts +10 -4
- package/lib/network/peers/peerManager.js +108 -19
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/peersData.d.ts +17 -3
- package/lib/network/peers/peersData.js.map +1 -1
- package/lib/network/peers/score/interface.d.ts +1 -1
- package/lib/network/peers/score/score.d.ts +2 -2
- package/lib/network/peers/score/score.js +4 -1
- package/lib/network/peers/score/score.js.map +1 -1
- package/lib/network/peers/score/store.d.ts +3 -1
- package/lib/network/peers/score/store.js +6 -2
- package/lib/network/peers/score/store.js.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.d.ts +7 -3
- package/lib/network/peers/utils/assertPeerRelevance.js +10 -1
- package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts +19 -7
- package/lib/network/peers/utils/prioritizePeers.js +42 -6
- package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
- package/lib/network/processor/extractSlotRootFns.js +8 -1
- package/lib/network/processor/extractSlotRootFns.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +172 -23
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +5 -0
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/index.js +1 -0
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts +2 -2
- package/lib/network/reqresp/ReqRespBeaconNode.js +36 -14
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +24 -4
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +261 -20
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +37 -6
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +283 -28
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js +3 -3
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.d.ts +2 -2
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +2 -2
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js +2 -3
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +8 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +113 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +6 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +64 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
- package/lib/network/reqresp/handlers/index.js +13 -2
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +4 -0
- package/lib/network/reqresp/protocols.js +20 -0
- package/lib/network/reqresp/protocols.js.map +1 -1
- package/lib/network/reqresp/rateLimit.js +19 -3
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/score.js +3 -0
- package/lib/network/reqresp/score.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +13 -6
- package/lib/network/reqresp/types.js +14 -5
- package/lib/network/reqresp/types.js.map +1 -1
- package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts +16 -0
- package/lib/network/reqresp/utils/dataColumnResponseValidation.js +59 -0
- package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -0
- package/lib/network/statusCache.d.ts +5 -5
- package/lib/network/statusCache.js.map +1 -1
- package/lib/network/subnets/interface.d.ts +3 -0
- package/lib/network/subnets/interface.js +14 -1
- package/lib/network/subnets/interface.js.map +1 -1
- package/lib/network/subnets/syncnetsService.js +4 -5
- package/lib/network/subnets/syncnetsService.js.map +1 -1
- package/lib/node/nodejs.js +1 -0
- package/lib/node/nodejs.js.map +1 -1
- package/lib/sync/backfill/backfill.js +1 -1
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/constants.d.ts +18 -3
- package/lib/sync/constants.js +21 -3
- package/lib/sync/constants.js.map +1 -1
- package/lib/sync/interface.d.ts +2 -2
- package/lib/sync/interface.js +1 -1
- package/lib/sync/interface.js.map +1 -1
- package/lib/sync/range/batch.d.ts +17 -2
- package/lib/sync/range/batch.js +39 -7
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts +15 -1
- package/lib/sync/range/chain.js +124 -33
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.d.ts +3 -2
- package/lib/sync/range/range.js +9 -3
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/range/utils/chainTarget.d.ts +5 -1
- package/lib/sync/range/utils/chainTarget.js +26 -1
- package/lib/sync/range/utils/chainTarget.js.map +1 -1
- package/lib/sync/range/utils/peerBalancer.d.ts +19 -5
- package/lib/sync/range/utils/peerBalancer.js +104 -10
- package/lib/sync/range/utils/peerBalancer.js.map +1 -1
- package/lib/sync/sync.js +1 -1
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +54 -5
- package/lib/sync/unknownBlock.js +321 -61
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/remoteSyncType.d.ts +4 -4
- package/lib/sync/utils/remoteSyncType.js.map +1 -1
- package/lib/util/blobs.d.ts +16 -4
- package/lib/util/blobs.js +122 -5
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/dataColumns.d.ts +137 -0
- package/lib/util/dataColumns.js +362 -0
- package/lib/util/dataColumns.js.map +1 -0
- package/lib/util/metadata.d.ts +5 -0
- package/lib/util/metadata.js +10 -0
- package/lib/util/metadata.js.map +1 -1
- package/lib/util/queue/fnQueue.js +1 -1
- package/lib/util/queue/fnQueue.js.map +1 -1
- package/lib/util/queue/itemQueue.js +1 -1
- package/lib/util/queue/itemQueue.js.map +1 -1
- package/lib/util/sszBytes.d.ts +3 -0
- package/lib/util/sszBytes.js +40 -0
- package/lib/util/sszBytes.js.map +1 -1
- package/lib/util/types.d.ts +7 -0
- package/lib/util/types.js +3 -0
- package/lib/util/types.js.map +1 -1
- package/package.json +19 -20
- package/lib/network/reqresp/handlers/status.d.ts +0 -4
- package/lib/network/reqresp/handlers/status.js +0 -11
- package/lib/network/reqresp/handlers/status.js.map +0 -1
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
import { toRootHex } from "@lodestar/utils";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Previously we use computeMostCommonTarget to compute the target for a chain.
|
|
4
|
+
* Starting from fulu, we use computeHighestTarget to compute the target for a chain.
|
|
5
|
+
*/
|
|
6
|
+
export function computeHighestTarget(targets) {
|
|
7
|
+
if (targets.length === 0) {
|
|
8
|
+
throw Error("Must provide at least one target");
|
|
9
|
+
}
|
|
10
|
+
let highestSlot = -1;
|
|
11
|
+
let highestTargets = [];
|
|
12
|
+
for (const target of targets) {
|
|
13
|
+
if (target.slot > highestSlot) {
|
|
14
|
+
highestSlot = target.slot;
|
|
15
|
+
highestTargets = [target];
|
|
16
|
+
}
|
|
17
|
+
else if (target.slot === highestSlot) {
|
|
18
|
+
highestTargets.push(target);
|
|
19
|
+
}
|
|
20
|
+
// ignore if target.slot < highestSlot
|
|
21
|
+
}
|
|
22
|
+
if (highestTargets.length === 1) {
|
|
23
|
+
return highestTargets[0];
|
|
24
|
+
}
|
|
25
|
+
return computeMostCommonTarget(highestTargets);
|
|
26
|
+
}
|
|
27
|
+
function computeMostCommonTarget(targets) {
|
|
3
28
|
if (targets.length === 0) {
|
|
4
29
|
throw Error("Must provide at least one target");
|
|
5
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chainTarget.js","sourceRoot":"","sources":["../../../../src/sync/range/utils/chainTarget.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAW1C,MAAM,UAAU,uBAAuB,CAAC,OAAsB;
|
|
1
|
+
{"version":3,"file":"chainTarget.js","sourceRoot":"","sources":["../../../../src/sync/range/utils/chainTarget.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAW1C;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAsB;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,cAAc,GAAkB,EAAE,CAAC;IACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;YAC9B,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;YAC1B,cAAc,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACvC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QACD,sCAAsC;IACxC,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,uBAAuB,CAAC,cAAc,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAsB;IACrD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,IAAI,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/B,IAAI,KAAK,GAAG,eAAe,EAAE,CAAC;YAC5B,eAAe,GAAG,KAAK,CAAC;YACxB,gBAAgB,GAAG,MAAM,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PeerSyncMeta } from "../../../network/peers/peersData.js";
|
|
2
|
+
import { CustodyConfig } from "../../../util/dataColumns.js";
|
|
3
|
+
import { RangeSyncType } from "../../utils/remoteSyncType.js";
|
|
2
4
|
import { Batch } from "../batch.js";
|
|
5
|
+
import { ChainTarget } from "./chainTarget.js";
|
|
6
|
+
export type PeerSyncInfo = PeerSyncMeta & {
|
|
7
|
+
target: ChainTarget;
|
|
8
|
+
};
|
|
3
9
|
/**
|
|
4
10
|
* Balance and organize peers to perform requests with a SyncChain
|
|
5
11
|
* Shuffles peers only once on instantiation
|
|
@@ -7,15 +13,23 @@ import { Batch } from "../batch.js";
|
|
|
7
13
|
export declare class ChainPeersBalancer {
|
|
8
14
|
private peers;
|
|
9
15
|
private activeRequestsByPeer;
|
|
10
|
-
|
|
16
|
+
private readonly custodyConfig;
|
|
17
|
+
private readonly syncType;
|
|
18
|
+
private readonly maxConcurrentRequests;
|
|
19
|
+
/**
|
|
20
|
+
* No need to specify `maxConcurrentRequests` for production code
|
|
21
|
+
* It is used for testing purposes to limit the number of concurrent requests
|
|
22
|
+
*/
|
|
23
|
+
constructor(peers: PeerSyncInfo[], batches: Batch[], custodyConfig: CustodyConfig, syncType: RangeSyncType, maxConcurrentRequests?: number);
|
|
11
24
|
/**
|
|
12
25
|
* Return the most suitable peer to retry
|
|
13
26
|
* Sort peers by (1) no failed request (2) less active requests, then pick first
|
|
14
27
|
*/
|
|
15
|
-
bestPeerToRetryBatch(batch: Batch):
|
|
28
|
+
bestPeerToRetryBatch(batch: Batch): PeerSyncMeta | undefined;
|
|
16
29
|
/**
|
|
17
|
-
* Return peers with 0 or no active requests
|
|
30
|
+
* Return peers with 0 or no active requests that has a higher target slot than this batch and has columns we need.
|
|
18
31
|
*/
|
|
19
|
-
|
|
32
|
+
idlePeerForBatch(batch: Batch): PeerSyncInfo | undefined;
|
|
33
|
+
private filterPeers;
|
|
20
34
|
}
|
|
21
35
|
//# sourceMappingURL=peerBalancer.d.ts.map
|
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
import { shuffle } from "../../../util/shuffle.js";
|
|
2
2
|
import { sortBy } from "../../../util/sortBy.js";
|
|
3
|
+
import { MAX_CONCURRENT_REQUESTS } from "../../constants.js";
|
|
4
|
+
import { RangeSyncType } from "../../utils/remoteSyncType.js";
|
|
3
5
|
import { BatchStatus } from "../batch.js";
|
|
4
6
|
/**
|
|
5
7
|
* Balance and organize peers to perform requests with a SyncChain
|
|
6
8
|
* Shuffles peers only once on instantiation
|
|
7
9
|
*/
|
|
8
10
|
export class ChainPeersBalancer {
|
|
9
|
-
|
|
11
|
+
/**
|
|
12
|
+
* No need to specify `maxConcurrentRequests` for production code
|
|
13
|
+
* It is used for testing purposes to limit the number of concurrent requests
|
|
14
|
+
*/
|
|
15
|
+
constructor(peers, batches, custodyConfig, syncType, maxConcurrentRequests = MAX_CONCURRENT_REQUESTS) {
|
|
10
16
|
this.activeRequestsByPeer = new Map();
|
|
11
17
|
this.peers = shuffle(peers);
|
|
18
|
+
this.custodyConfig = custodyConfig;
|
|
19
|
+
this.syncType = syncType;
|
|
20
|
+
this.maxConcurrentRequests = maxConcurrentRequests;
|
|
12
21
|
// Compute activeRequestsByPeer from all batches internal states
|
|
13
22
|
for (const batch of batches) {
|
|
14
23
|
if (batch.state.status === BatchStatus.Downloading) {
|
|
@@ -21,20 +30,105 @@ export class ChainPeersBalancer {
|
|
|
21
30
|
* Sort peers by (1) no failed request (2) less active requests, then pick first
|
|
22
31
|
*/
|
|
23
32
|
bestPeerToRetryBatch(batch) {
|
|
33
|
+
if (batch.state.status !== BatchStatus.AwaitingDownload) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const { partialDownload } = batch.state;
|
|
37
|
+
const pendingDataColumns = partialDownload?.pendingDataColumns ?? this.custodyConfig.sampledColumns;
|
|
38
|
+
const eligiblePeers = this.filterPeers(batch, pendingDataColumns, false);
|
|
24
39
|
const failedPeers = new Set(batch.getFailedPeers());
|
|
25
|
-
const sortedBestPeers = sortBy(
|
|
26
|
-
(
|
|
40
|
+
const sortedBestPeers = sortBy(eligiblePeers, ({ syncInfo }) => (failedPeers.has(syncInfo.peerId) ? 1 : 0), // prefer peers without failed requests
|
|
41
|
+
({ syncInfo }) => this.activeRequestsByPeer.get(syncInfo.peerId) ?? 0, // prefer peers with least active req
|
|
42
|
+
({ columns }) => -1 * columns // prefer peers with the most columns
|
|
27
43
|
);
|
|
28
|
-
|
|
44
|
+
if (sortedBestPeers.length > 0) {
|
|
45
|
+
const bestPeer = sortedBestPeers[0];
|
|
46
|
+
// we will use this peer for batch in SyncChain right after this call
|
|
47
|
+
this.activeRequestsByPeer.set(bestPeer.syncInfo.peerId, (this.activeRequestsByPeer.get(bestPeer.syncInfo.peerId) ?? 0) + 1);
|
|
48
|
+
return bestPeer.syncInfo;
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
29
51
|
}
|
|
30
52
|
/**
|
|
31
|
-
* Return peers with 0 or no active requests
|
|
53
|
+
* Return peers with 0 or no active requests that has a higher target slot than this batch and has columns we need.
|
|
32
54
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
55
|
+
idlePeerForBatch(batch) {
|
|
56
|
+
if (batch.state.status !== BatchStatus.AwaitingDownload) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const eligiblePeers = this.filterPeers(batch, this.custodyConfig.sampledColumns, true);
|
|
60
|
+
// pick idle peer that has (for pre-fulu they are the same)
|
|
61
|
+
// - earliestAvailableSlot defined
|
|
62
|
+
// - the most columns we need
|
|
63
|
+
const sortedBestPeers = sortBy(eligiblePeers, ({ columns }) => -1 * columns // prefer peers with most columns we need
|
|
64
|
+
);
|
|
65
|
+
const bestPeer = sortedBestPeers[0];
|
|
66
|
+
if (bestPeer != null) {
|
|
67
|
+
// we will use this peer for batch in SyncChain right after this call
|
|
68
|
+
this.activeRequestsByPeer.set(bestPeer.syncInfo.peerId, 1);
|
|
69
|
+
return bestPeer.syncInfo;
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
filterPeers(batch, requestColumns, noActiveRequest) {
|
|
74
|
+
const eligiblePeers = [];
|
|
75
|
+
if (batch.state.status !== BatchStatus.AwaitingDownload) {
|
|
76
|
+
return eligiblePeers;
|
|
77
|
+
}
|
|
78
|
+
for (const peer of this.peers) {
|
|
79
|
+
const { earliestAvailableSlot, custodyGroups, target, peerId } = peer;
|
|
80
|
+
const activeRequest = this.activeRequestsByPeer.get(peerId) ?? 0;
|
|
81
|
+
if (noActiveRequest && activeRequest > 0) {
|
|
82
|
+
// consumer wants to find peer with no active request, but this peer has active request
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (activeRequest >= this.maxConcurrentRequests) {
|
|
86
|
+
// consumer wants to find peer with no more than MAX_CONCURRENT_REQUESTS active requests
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (target.slot < batch.request.startSlot) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (batch.isPostFulu() && this.syncType === RangeSyncType.Head) {
|
|
93
|
+
// for head sync, target slot is head slot and each peer may have a different head slot
|
|
94
|
+
// we don't want to retry a batch with a peer that's not as up-to-date as the previous peer
|
|
95
|
+
// see https://github.com/ChainSafe/lodestar/issues/8193
|
|
96
|
+
const blocks = batch.state.partialDownload?.blocks;
|
|
97
|
+
const lastBlock = blocks?.at(-1)?.block;
|
|
98
|
+
const lastBlockSlot = lastBlock?.message?.slot;
|
|
99
|
+
if (lastBlockSlot && lastBlockSlot > target.slot) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (!batch.isPostFulu()) {
|
|
104
|
+
// pre-fulu logic, we don't care columns and earliestAvailableSlot
|
|
105
|
+
eligiblePeers.push({ syncInfo: peer, columns: 0, hasEarliestAvailableSlots: false });
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
// we don't accept peers without earliestAvailableSlot because it may return 0 blocks and we get stuck
|
|
109
|
+
// see https://github.com/ChainSafe/lodestar/issues/8147
|
|
110
|
+
if (earliestAvailableSlot == null) {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (earliestAvailableSlot > batch.request.startSlot) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const peerColumns = custodyGroups;
|
|
117
|
+
const columns = peerColumns.reduce((acc, elem) => {
|
|
118
|
+
if (requestColumns.includes(elem)) {
|
|
119
|
+
acc.push(elem);
|
|
120
|
+
}
|
|
121
|
+
return acc;
|
|
122
|
+
}, []);
|
|
123
|
+
if (columns.length > 0) {
|
|
124
|
+
eligiblePeers.push({
|
|
125
|
+
syncInfo: peer,
|
|
126
|
+
columns: columns.length,
|
|
127
|
+
hasEarliestAvailableSlots: earliestAvailableSlot != null,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return eligiblePeers;
|
|
38
132
|
}
|
|
39
133
|
}
|
|
40
134
|
//# sourceMappingURL=peerBalancer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peerBalancer.js","sourceRoot":"","sources":["../../../../src/sync/range/utils/peerBalancer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"peerBalancer.js","sourceRoot":"","sources":["../../../../src/sync/range/utils/peerBalancer.ts"],"names":[],"mappings":"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"}
|
package/lib/sync/sync.js
CHANGED
|
@@ -28,7 +28,7 @@ export class BeaconSync {
|
|
|
28
28
|
const localStatus = this.chain.getStatus();
|
|
29
29
|
const syncType = getPeerSyncType(localStatus, data.status, this.chain.forkChoice, this.slotImportTolerance);
|
|
30
30
|
// For metrics only
|
|
31
|
-
this.peerSyncType.set(data.peer
|
|
31
|
+
this.peerSyncType.set(data.peer, syncType);
|
|
32
32
|
if (syncType === PeerSyncType.Advanced) {
|
|
33
33
|
this.rangeSync.addPeer(data.peer, localStatus, data.status);
|
|
34
34
|
}
|
package/lib/sync/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAC,oBAAoB,EAAC,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAW,YAAY,EAAmB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,yBAAyB,EAAC,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EAAsB,SAAS,EAAE,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAE/E,OAAO,EAAC,SAAS,EAAE,cAAc,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAC,YAAY,EAAE,eAAe,EAAE,aAAa,EAAC,MAAM,2BAA2B,CAAC;AAEvF,MAAM,OAAO,UAAU;IAcrB,YAAY,IAAiB,EAAE,OAAoB;QAJnD,uBAAuB;QACN,iBAAY,GAAG,IAAI,GAAG,EAAwB,CAAC;QAoJhE;;;;;;;;;;WAUG;QACK,YAAO,GAAG,CAAC,IAAkD,EAAQ,EAAE;YAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAE5G,mBAAmB;YACnB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
2
|
import { Logger } from "@lodestar/utils";
|
|
3
|
+
import { BlockInput, NullBlockInput } from "../chain/blocks/types.js";
|
|
3
4
|
import { IBeaconChain } from "../chain/index.js";
|
|
4
5
|
import { Metrics } from "../metrics/index.js";
|
|
5
6
|
import { INetwork } from "../network/index.js";
|
|
7
|
+
import { PeerSyncMeta } from "../network/peers/peersData.js";
|
|
8
|
+
import { CustodyConfig } from "../util/dataColumns.js";
|
|
9
|
+
import { PeerIdStr } from "../util/peerId.js";
|
|
6
10
|
import { SyncOptions } from "./options.js";
|
|
7
11
|
export declare class UnknownBlockSync {
|
|
8
12
|
private readonly config;
|
|
@@ -21,6 +25,7 @@ export declare class UnknownBlockSync {
|
|
|
21
25
|
private subscribedToNetworkEvents;
|
|
22
26
|
private engineGetBlobsCache;
|
|
23
27
|
private blockInputsRetryTrackerCache;
|
|
28
|
+
private peerBalancer;
|
|
24
29
|
constructor(config: ChainForkConfig, network: INetwork, chain: IBeaconChain, logger: Logger, metrics: Metrics | null, opts?: SyncOptions | undefined);
|
|
25
30
|
subscribeToNetwork(): void;
|
|
26
31
|
unsubscribeFromNetwork(): void;
|
|
@@ -40,13 +45,15 @@ export declare class UnknownBlockSync {
|
|
|
40
45
|
private onUnknownParent;
|
|
41
46
|
/**
|
|
42
47
|
* When a blockInput comes with an unknown parent:
|
|
43
|
-
* - add the block to pendingBlocks with status downloaded
|
|
48
|
+
* - add the block to pendingBlocks with status downloaded or pending blockRootHex as key. This is similar to
|
|
44
49
|
* an `onUnknownBlock` event, but the blocks is downloaded.
|
|
45
50
|
* - add the parent root to pendingBlocks with status pending, parentBlockRootHex as key. This is
|
|
46
51
|
* the same to an `onUnknownBlock` event with parentBlockRootHex as root.
|
|
47
52
|
*/
|
|
48
53
|
private addUnknownParent;
|
|
49
54
|
private addUnknownBlock;
|
|
55
|
+
private onPeerConnected;
|
|
56
|
+
private onPeerDisconnected;
|
|
50
57
|
/**
|
|
51
58
|
* Gather tip parent blocks with unknown parent and do a search for all of them
|
|
52
59
|
*/
|
|
@@ -55,17 +62,24 @@ export declare class UnknownBlockSync {
|
|
|
55
62
|
/**
|
|
56
63
|
* Send block to the processor awaiting completition. If processed successfully, send all children to the processor.
|
|
57
64
|
* On error, remove and downscore all descendants.
|
|
65
|
+
* This function could run recursively for all descendant blocks
|
|
58
66
|
*/
|
|
59
67
|
private processBlock;
|
|
60
68
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
69
|
+
* From a set of shuffled peers:
|
|
70
|
+
* - fetch the block
|
|
71
|
+
* - from deneb, fetch all missing blobs
|
|
72
|
+
* - from peerDAS, fetch sampled colmns
|
|
73
|
+
* TODO: this means we only have block root, and nothing else. Consider to reflect this in the function name
|
|
74
|
+
* prefulu, will attempt a max of `MAX_ATTEMPTS_PER_BLOCK` on different peers, postfulu we may attempt more as defined in `getMaxDownloadAttempts()` function
|
|
63
75
|
* Also verifies the received block root + returns the peer that provided the block for future downscoring.
|
|
64
76
|
*/
|
|
65
77
|
private fetchUnknownBlockRoot;
|
|
66
78
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
79
|
+
* We have partial block input:
|
|
80
|
+
* - we have block but not have all blobs (deneb) or needed columns (fulu)
|
|
81
|
+
* - we don't have block and have some blobs (deneb) or some columns (fulu)
|
|
82
|
+
* Fetches missing block/data columns/block for the blockinput. This function returns either preData or availableData BlockInput.
|
|
69
83
|
*/
|
|
70
84
|
private fetchUnavailableBlockInput;
|
|
71
85
|
/**
|
|
@@ -76,5 +90,40 @@ export declare class UnknownBlockSync {
|
|
|
76
90
|
*/
|
|
77
91
|
private removeAndDownscoreAllDescendants;
|
|
78
92
|
private removeAllDescendants;
|
|
93
|
+
private getMaxDownloadAttempts;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Class to track active byRoots requests and balance them across eligible peers.
|
|
97
|
+
*/
|
|
98
|
+
export declare class UnknownBlockPeerBalancer {
|
|
99
|
+
readonly peersMeta: Map<PeerIdStr, PeerSyncMeta>;
|
|
100
|
+
readonly activeRequests: Map<PeerIdStr, number>;
|
|
101
|
+
private readonly custodyConfig;
|
|
102
|
+
constructor(custodyConfig: CustodyConfig);
|
|
103
|
+
/** Trigger on each peer re-status */
|
|
104
|
+
onPeerConnected(peerId: PeerIdStr, syncMeta: PeerSyncMeta): void;
|
|
105
|
+
onPeerDisconnected(peerId: PeerIdStr): void;
|
|
106
|
+
/**
|
|
107
|
+
* called from fetchUnknownBlockRoot() where we only have block root and nothing else
|
|
108
|
+
* excludedPeers are the peers that we requested already so we don't want to try again
|
|
109
|
+
* pendingColumns is empty for prefulu, or the 1st time we we download a block by root
|
|
110
|
+
*/
|
|
111
|
+
bestPeerForPendingColumns(pendingColumns: Set<number> | null, excludedPeers: Set<PeerIdStr>): PeerSyncMeta | null;
|
|
112
|
+
/**
|
|
113
|
+
* called from fetchUnavailableBlockInput() where we have either BlockInput or NullBlockInput
|
|
114
|
+
* excludedPeers are the peers that we requested already so we don't want to try again
|
|
115
|
+
*/
|
|
116
|
+
bestPeerForBlockInput(unavailableBlockInput: BlockInput | NullBlockInput, excludedPeers: Set<PeerIdStr>): PeerSyncMeta | null;
|
|
117
|
+
/**
|
|
118
|
+
* Consumers don't need to call this method directly, it is called internally by bestPeer*() methods
|
|
119
|
+
* make this public for testing
|
|
120
|
+
*/
|
|
121
|
+
onRequest(peerId: PeerIdStr): void;
|
|
122
|
+
/**
|
|
123
|
+
* Consumers should call this method when a request is completed for a peer.
|
|
124
|
+
*/
|
|
125
|
+
onRequestCompleted(peerId: PeerIdStr): void;
|
|
126
|
+
getTotalActiveRequests(): number;
|
|
127
|
+
private filterPeers;
|
|
79
128
|
}
|
|
80
129
|
//# sourceMappingURL=unknownBlock.d.ts.map
|