@lodestar/beacon-node 1.30.0-dev.dd729f5ece → 1.30.0-peerDAS.490e786a03
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/api/impl/beacon/blocks/index.d.ts +1 -1
- package/lib/api/impl/beacon/blocks/index.js +44 -16
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/blocks/utils.js +1 -1
- package/lib/api/impl/beacon/blocks/utils.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +1 -1
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/beacon/state/index.js +14 -9
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.js +2 -2
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/lodestar/index.js +3 -1
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/proof/index.js +4 -2
- package/lib/api/impl/proof/index.js.map +1 -1
- package/lib/api/impl/validator/index.js +1 -21
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/rest/base.js +0 -10
- package/lib/api/rest/base.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts +1 -2
- package/lib/chain/archiveStore/archiveStore.js +16 -15
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/worker.js +0 -2
- package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
- package/lib/chain/archiveStore/interface.d.ts +2 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +89 -24
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/beaconProposerCache.d.ts +2 -3
- package/lib/chain/beaconProposerCache.js +4 -2
- package/lib/chain/beaconProposerCache.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +164 -0
- package/lib/chain/blocks/blockInput/blockInput.js +522 -0
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -0
- package/lib/chain/blocks/blockInput/errors.d.ts +38 -0
- package/lib/chain/blocks/blockInput/errors.js +17 -0
- package/lib/chain/blocks/blockInput/errors.js.map +1 -0
- package/lib/chain/blocks/blockInput/index.d.ts +4 -0
- package/lib/chain/blocks/blockInput/index.js +4 -0
- package/lib/chain/blocks/blockInput/index.js.map +1 -0
- package/lib/chain/blocks/blockInput/types.d.ts +116 -0
- package/lib/chain/blocks/blockInput/types.js +19 -0
- package/lib/chain/blocks/blockInput/types.js.map +1 -0
- package/lib/chain/blocks/importBlock.js +56 -14
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +65 -24
- package/lib/chain/blocks/types.js +39 -6
- package/lib/chain/blocks/types.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 +89 -15
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/bls/multithread/index.d.ts +1 -1
- package/lib/chain/bls/multithread/index.js +1 -3
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/bls/multithread/jobItem.d.ts +1 -1
- package/lib/chain/bls/multithread/jobItem.js +4 -12
- package/lib/chain/bls/multithread/jobItem.js.map +1 -1
- package/lib/chain/bls/multithread/worker.js +0 -1
- package/lib/chain/bls/multithread/worker.js.map +1 -1
- package/lib/chain/chain.d.ts +35 -4
- package/lib/chain/chain.js +28 -12
- 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/interface.d.ts +9 -3
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/options.d.ts +4 -1
- package/lib/chain/options.js +5 -0
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
- package/lib/chain/produceBlock/produceBlockBody.js +11 -2
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +3 -2
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +31 -2
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
- package/lib/chain/regen/queued.d.ts +0 -1
- package/lib/chain/regen/queued.js +0 -1
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +61 -18
- package/lib/chain/seenCache/seenGossipBlockInput.js +254 -53
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts +28 -0
- package/lib/chain/validation/dataColumnSidecar.js +245 -0
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
- package/lib/chain/validatorMonitor.d.ts +3 -3
- package/lib/chain/validatorMonitor.js +273 -56
- package/lib/chain/validatorMonitor.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/dataColumnSidecars.d.ts +47 -0
- package/lib/db/repositories/dataColumnSidecars.js +40 -0
- package/lib/db/repositories/dataColumnSidecars.js.map +1 -0
- package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +15 -0
- package/lib/db/repositories/dataColumnSidecarsArchive.js +23 -0
- package/lib/db/repositories/dataColumnSidecarsArchive.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/eth1/provider/eth1Provider.js +1 -2
- package/lib/eth1/provider/eth1Provider.js.map +1 -1
- package/lib/eth1/provider/jsonRpcHttpClient.js +1 -2
- package/lib/eth1/provider/jsonRpcHttpClient.js.map +1 -1
- package/lib/execution/engine/http.d.ts +5 -3
- package/lib/execution/engine/http.js +68 -31
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +4 -2
- package/lib/execution/engine/interface.js +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.js +5 -0
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts +0 -3
- package/lib/execution/engine/payloadIdCache.js +1 -2
- package/lib/execution/engine/payloadIdCache.js.map +1 -1
- package/lib/execution/engine/types.d.ts +10 -0
- package/lib/execution/engine/types.js +6 -0
- 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 +8 -0
- package/lib/metrics/metrics/beacon.js +27 -0
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +4 -100
- package/lib/metrics/metrics/lodestar.js +5 -307
- 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/monitoring/service.js +1 -2
- package/lib/monitoring/service.js.map +1 -1
- package/lib/monitoring/system.js +0 -1
- package/lib/monitoring/system.js.map +1 -1
- package/lib/network/core/metrics.d.ts +11 -3
- package/lib/network/core/metrics.js +26 -4
- package/lib/network/core/metrics.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +9 -1
- package/lib/network/core/networkCore.js +38 -33
- 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 +8 -4
- package/lib/network/core/networkCoreWorkerHandler.js +7 -0
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/core/types.d.ts +5 -1
- package/lib/network/events.d.ts +3 -1
- package/lib/network/events.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/topic.d.ts +1419 -1374
- package/lib/network/gossip/topic.js +20 -1
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +13 -1
- package/lib/network/libp2p/index.js +1 -1
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/network/metadata.d.ts +10 -6
- package/lib/network/metadata.js +23 -4
- package/lib/network/metadata.js.map +1 -1
- package/lib/network/network.d.ts +12 -2
- package/lib/network/network.js +59 -7
- package/lib/network/network.js.map +1 -1
- package/lib/network/networkConfig.d.ts +23 -0
- package/lib/network/networkConfig.js +32 -0
- package/lib/network/networkConfig.js.map +1 -0
- package/lib/network/options.d.ts +18 -0
- package/lib/network/options.js +2 -0
- package/lib/network/options.js.map +1 -1
- package/lib/network/peers/discover.d.ts +15 -6
- package/lib/network/peers/discover.js +139 -15
- package/lib/network/peers/discover.js.map +1 -1
- package/lib/network/peers/peerManager.d.ts +11 -2
- package/lib/network/peers/peerManager.js +119 -11
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/peersData.d.ts +9 -2
- package/lib/network/peers/peersData.js.map +1 -1
- package/lib/network/peers/score/interface.d.ts +2 -2
- package/lib/network/peers/score/interface.js.map +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 +5 -2
- package/lib/network/peers/score/store.js +7 -3
- package/lib/network/peers/score/store.js.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts +36 -5
- package/lib/network/peers/utils/prioritizePeers.js +79 -7
- 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 +157 -9
- 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.d.ts +1 -1
- package/lib/network/processor/index.js +5 -1
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +23 -5
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +14 -5
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +199 -14
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +32 -5
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +280 -26
- 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.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +8 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +106 -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 +57 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
- package/lib/network/reqresp/handlers/index.js +10 -0
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +3 -0
- package/lib/network/reqresp/protocols.js +15 -0
- package/lib/network/reqresp/protocols.js.map +1 -1
- package/lib/network/reqresp/rateLimit.js +11 -1
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +13 -6
- package/lib/network/reqresp/types.js +9 -2
- package/lib/network/reqresp/types.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 +4 -3
- package/lib/node/nodejs.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 +8 -2
- package/lib/sync/range/batch.js +19 -7
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts +7 -2
- package/lib/sync/range/chain.js +45 -21
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.js +3 -3
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/range/utils/peerBalancer.d.ts +4 -1
- package/lib/sync/range/utils/peerBalancer.js +20 -2
- package/lib/sync/range/utils/peerBalancer.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +8 -1
- package/lib/sync/unknownBlock.js +222 -62
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/util/blobs.d.ts +13 -1
- package/lib/util/blobs.js +44 -1
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/dataColumns.d.ts +111 -0
- package/lib/util/dataColumns.js +277 -0
- package/lib/util/dataColumns.js.map +1 -0
- package/lib/util/kzg.d.ts +9 -21
- package/lib/util/kzg.js +12 -90
- package/lib/util/kzg.js.map +1 -1
- package/lib/util/metadata.d.ts +4 -0
- package/lib/util/metadata.js +7 -0
- package/lib/util/metadata.js.map +1 -1
- package/lib/util/sszBytes.d.ts +1 -0
- package/lib/util/sszBytes.js +17 -0
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +22 -22
|
@@ -1,26 +1,51 @@
|
|
|
1
1
|
import { Direction, PeerId } from "@libp2p/interface";
|
|
2
|
-
import { SubnetID, altair, phase0 } from "@lodestar/types";
|
|
2
|
+
import { CustodyIndex, SubnetID, altair, phase0 } from "@lodestar/types";
|
|
3
|
+
import { NetworkCoreMetrics } from "../../core/metrics.js";
|
|
3
4
|
import { RequestedSubnet } from "./subnetMap.js";
|
|
4
5
|
type SubnetDiscvQuery = {
|
|
5
6
|
subnet: SubnetID;
|
|
6
7
|
toSlot: number;
|
|
7
8
|
maxPeersToDiscover: number;
|
|
8
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* A map of das custody group index to maxPeersToDiscover
|
|
12
|
+
*/
|
|
13
|
+
export type GroupQueries = Map<CustodyIndex, number>;
|
|
14
|
+
/**
|
|
15
|
+
* Comparison of our status vs a peer's status.
|
|
16
|
+
*
|
|
17
|
+
* The main usage of this score is to feed into peer priorization during syncing, and especially when the node is having trouble finding data during syncing
|
|
18
|
+
*
|
|
19
|
+
* For network stability, we DON'T distinguish peers that are far behind us vs peers that are close to us.
|
|
20
|
+
*/
|
|
21
|
+
declare enum StatusScore {
|
|
22
|
+
/** The peer is close to our chain */
|
|
23
|
+
CLOSE_TO_US = -1,
|
|
24
|
+
/** The peer is far ahead of chain */
|
|
25
|
+
FAR_AHEAD = 0
|
|
26
|
+
}
|
|
9
27
|
type PeerInfo = {
|
|
10
28
|
id: PeerId;
|
|
11
29
|
direction: Direction | null;
|
|
30
|
+
statusScore: StatusScore;
|
|
12
31
|
attnets: phase0.AttestationSubnets;
|
|
13
32
|
syncnets: altair.SyncSubnets;
|
|
33
|
+
custodyGroups: CustodyIndex[];
|
|
14
34
|
attnetsTrueBitIndices: number[];
|
|
15
35
|
syncnetsTrueBitIndices: number[];
|
|
16
36
|
score: number;
|
|
17
37
|
};
|
|
18
|
-
export
|
|
38
|
+
export type PrioritizePeersOpts = {
|
|
19
39
|
targetPeers: number;
|
|
20
40
|
maxPeers: number;
|
|
41
|
+
targetGroupPeers: number;
|
|
42
|
+
status: phase0.Status;
|
|
43
|
+
starved: boolean;
|
|
44
|
+
starvationPruneRatio: number;
|
|
45
|
+
starvationThresholdSlots: number;
|
|
21
46
|
outboundPeersRatio?: number;
|
|
22
47
|
targetSubnetPeers?: number;
|
|
23
|
-
}
|
|
48
|
+
};
|
|
24
49
|
export declare enum ExcessPeerDisconnectReason {
|
|
25
50
|
LOW_SCORE = "low_score",
|
|
26
51
|
NO_LONG_LIVED_SUBNET = "no_long_lived_subnet",
|
|
@@ -30,26 +55,32 @@ export declare enum ExcessPeerDisconnectReason {
|
|
|
30
55
|
/**
|
|
31
56
|
* Prioritize which peers to disconect and which to connect. Conditions:
|
|
32
57
|
* - Reach `targetPeers`
|
|
58
|
+
* - If we're starved for data, prune additional peers
|
|
33
59
|
* - Don't exceed `maxPeers`
|
|
34
60
|
* - Ensure there are enough peers per active subnet
|
|
35
61
|
* - Prioritize peers with good score
|
|
62
|
+
*
|
|
63
|
+
* pre-fulu samplingGroups is not used and this function returns empty groupQueries
|
|
36
64
|
*/
|
|
37
65
|
export declare function prioritizePeers(connectedPeersInfo: {
|
|
38
66
|
id: PeerId;
|
|
39
67
|
direction: Direction | null;
|
|
68
|
+
status: phase0.Status | null;
|
|
40
69
|
attnets: phase0.AttestationSubnets | null;
|
|
41
70
|
syncnets: altair.SyncSubnets | null;
|
|
71
|
+
custodyGroups: CustodyIndex[] | null;
|
|
42
72
|
score: number;
|
|
43
|
-
}[], activeAttnets: RequestedSubnet[], activeSyncnets: RequestedSubnet[], opts: PrioritizePeersOpts): {
|
|
73
|
+
}[], activeAttnets: RequestedSubnet[], activeSyncnets: RequestedSubnet[], samplingGroups: CustodyIndex[] | undefined, opts: PrioritizePeersOpts, metrics: NetworkCoreMetrics | null): {
|
|
44
74
|
peersToConnect: number;
|
|
45
75
|
peersToDisconnect: Map<ExcessPeerDisconnectReason, PeerId[]>;
|
|
46
76
|
attnetQueries: SubnetDiscvQuery[];
|
|
47
77
|
syncnetQueries: SubnetDiscvQuery[];
|
|
78
|
+
groupQueries: GroupQueries;
|
|
48
79
|
};
|
|
49
80
|
/**
|
|
50
81
|
* Sort peers ascending, peer-0 has the most chance to prune, peer-n has the least.
|
|
51
82
|
* Shuffling first to break ties.
|
|
52
|
-
* prefer sorting by dutied subnets
|
|
83
|
+
* prefer sorting by status score (applicable during syncing), then dutied subnets, then number of long lived subnets, then peer score
|
|
53
84
|
* peer score is the last criteria since they are supposed to be in the same score range,
|
|
54
85
|
* bad score peers are removed by peer manager anyway
|
|
55
86
|
*/
|
|
@@ -28,6 +28,41 @@ const PEERS_TO_CONNECT_OVERSHOOT_FACTOR = 3;
|
|
|
28
28
|
const OUTBOUND_PEERS_RATIO = 0.1;
|
|
29
29
|
const attnetsZero = BitArray.fromBitLen(ATTESTATION_SUBNET_COUNT);
|
|
30
30
|
const syncnetsZero = BitArray.fromBitLen(SYNC_COMMITTEE_SUBNET_COUNT);
|
|
31
|
+
/**
|
|
32
|
+
* Comparison of our status vs a peer's status.
|
|
33
|
+
*
|
|
34
|
+
* The main usage of this score is to feed into peer priorization during syncing, and especially when the node is having trouble finding data during syncing
|
|
35
|
+
*
|
|
36
|
+
* For network stability, we DON'T distinguish peers that are far behind us vs peers that are close to us.
|
|
37
|
+
*/
|
|
38
|
+
var StatusScore;
|
|
39
|
+
(function (StatusScore) {
|
|
40
|
+
/** The peer is close to our chain */
|
|
41
|
+
StatusScore[StatusScore["CLOSE_TO_US"] = -1] = "CLOSE_TO_US";
|
|
42
|
+
/** The peer is far ahead of chain */
|
|
43
|
+
StatusScore[StatusScore["FAR_AHEAD"] = 0] = "FAR_AHEAD";
|
|
44
|
+
})(StatusScore || (StatusScore = {}));
|
|
45
|
+
/**
|
|
46
|
+
* In practice, this score only tracks if the peer is far ahead of us or not during syncing.
|
|
47
|
+
* When the node is synced, the peer is always CLOSE_TO_US.
|
|
48
|
+
*/
|
|
49
|
+
function computeStatusScore(ours, theirs, opts) {
|
|
50
|
+
if (theirs === null) {
|
|
51
|
+
return StatusScore.CLOSE_TO_US;
|
|
52
|
+
}
|
|
53
|
+
if (theirs.finalizedEpoch > ours.finalizedEpoch) {
|
|
54
|
+
return StatusScore.FAR_AHEAD;
|
|
55
|
+
}
|
|
56
|
+
if (theirs.headSlot > ours.headSlot + opts.starvationThresholdSlots) {
|
|
57
|
+
return StatusScore.FAR_AHEAD;
|
|
58
|
+
}
|
|
59
|
+
// It's dangerous to downscore peers that are far behind.
|
|
60
|
+
// This means we'd be more likely to disconnect peers that are attempting to sync, which would affect network stability.
|
|
61
|
+
// if (ours.headSlot > theirs.headSlot + opts.starvationThresholdSlots) {
|
|
62
|
+
// return StatusScore.FAR_BEHIND;
|
|
63
|
+
// }
|
|
64
|
+
return StatusScore.CLOSE_TO_US;
|
|
65
|
+
}
|
|
31
66
|
export var ExcessPeerDisconnectReason;
|
|
32
67
|
(function (ExcessPeerDisconnectReason) {
|
|
33
68
|
ExcessPeerDisconnectReason["LOW_SCORE"] = "low_score";
|
|
@@ -38,11 +73,14 @@ export var ExcessPeerDisconnectReason;
|
|
|
38
73
|
/**
|
|
39
74
|
* Prioritize which peers to disconect and which to connect. Conditions:
|
|
40
75
|
* - Reach `targetPeers`
|
|
76
|
+
* - If we're starved for data, prune additional peers
|
|
41
77
|
* - Don't exceed `maxPeers`
|
|
42
78
|
* - Ensure there are enough peers per active subnet
|
|
43
79
|
* - Prioritize peers with good score
|
|
80
|
+
*
|
|
81
|
+
* pre-fulu samplingGroups is not used and this function returns empty groupQueries
|
|
44
82
|
*/
|
|
45
|
-
export function prioritizePeers(connectedPeersInfo, activeAttnets, activeSyncnets, opts) {
|
|
83
|
+
export function prioritizePeers(connectedPeersInfo, activeAttnets, activeSyncnets, samplingGroups, opts, metrics) {
|
|
46
84
|
const { targetPeers, maxPeers } = opts;
|
|
47
85
|
let peersToConnect = 0;
|
|
48
86
|
const peersToDisconnect = new MapDef(() => []);
|
|
@@ -50,13 +88,15 @@ export function prioritizePeers(connectedPeersInfo, activeAttnets, activeSyncnet
|
|
|
50
88
|
const connectedPeers = connectedPeersInfo.map((peer) => ({
|
|
51
89
|
id: peer.id,
|
|
52
90
|
direction: peer.direction,
|
|
91
|
+
statusScore: computeStatusScore(opts.status, peer.status, opts),
|
|
53
92
|
attnets: peer.attnets ?? attnetsZero,
|
|
54
93
|
syncnets: peer.syncnets ?? syncnetsZero,
|
|
94
|
+
custodyGroups: peer.custodyGroups ?? [],
|
|
55
95
|
attnetsTrueBitIndices: peer.attnets?.getTrueBitIndexes() ?? [],
|
|
56
96
|
syncnetsTrueBitIndices: peer.syncnets?.getTrueBitIndexes() ?? [],
|
|
57
97
|
score: peer.score,
|
|
58
98
|
}));
|
|
59
|
-
const { attnetQueries, syncnetQueries, dutiesByPeer } =
|
|
99
|
+
const { attnetQueries, syncnetQueries, groupQueries, dutiesByPeer } = requestSubnetPeers(connectedPeers, activeAttnets, activeSyncnets, samplingGroups, opts, metrics);
|
|
60
100
|
const connectedPeerCount = connectedPeers.length;
|
|
61
101
|
if (connectedPeerCount < targetPeers) {
|
|
62
102
|
// Need more peers.
|
|
@@ -75,12 +115,14 @@ export function prioritizePeers(connectedPeersInfo, activeAttnets, activeSyncnet
|
|
|
75
115
|
peersToDisconnect,
|
|
76
116
|
attnetQueries,
|
|
77
117
|
syncnetQueries,
|
|
118
|
+
groupQueries,
|
|
78
119
|
};
|
|
79
120
|
}
|
|
80
121
|
/**
|
|
81
|
-
* If more peers are needed in attnets and syncnets, create SubnetDiscvQuery for each subnet
|
|
122
|
+
* If more peers are needed in attnets and syncnets and column subnets, create SubnetDiscvQuery for each subnet
|
|
123
|
+
* pre-fulu samplingGroups is not used and this function returns empty groupQueries
|
|
82
124
|
*/
|
|
83
|
-
function
|
|
125
|
+
function requestSubnetPeers(connectedPeers, activeAttnets, activeSyncnets, samplingGroups, opts, metrics) {
|
|
84
126
|
const { targetSubnetPeers = TARGET_SUBNET_PEERS } = opts;
|
|
85
127
|
const attnetQueries = [];
|
|
86
128
|
const syncnetQueries = [];
|
|
@@ -132,7 +174,27 @@ function requestAttnetPeers(connectedPeers, activeAttnets, activeSyncnets, opts)
|
|
|
132
174
|
}
|
|
133
175
|
}
|
|
134
176
|
}
|
|
135
|
-
|
|
177
|
+
// column subnets, do we need queries for more peers
|
|
178
|
+
const targetGroupPeers = opts.targetGroupPeers;
|
|
179
|
+
const groupQueries = new Map();
|
|
180
|
+
const peersPerGroup = new Map();
|
|
181
|
+
for (const peer of connectedPeers) {
|
|
182
|
+
const { custodyGroups } = peer;
|
|
183
|
+
for (const group of custodyGroups) {
|
|
184
|
+
peersPerGroup.set(group, 1 + (peersPerGroup.get(group) ?? 0));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
let groupIndex = 0;
|
|
188
|
+
for (const group of samplingGroups ?? []) {
|
|
189
|
+
const peersInGroup = peersPerGroup.get(group) ?? 0;
|
|
190
|
+
metrics?.peerCountPerSamplingGroup.set({ groupIndex }, peersInGroup);
|
|
191
|
+
if (peersInGroup < targetGroupPeers) {
|
|
192
|
+
// We need more peers
|
|
193
|
+
groupQueries.set(group, targetGroupPeers - peersInGroup);
|
|
194
|
+
}
|
|
195
|
+
groupIndex++;
|
|
196
|
+
}
|
|
197
|
+
return { attnetQueries, syncnetQueries, groupQueries, dutiesByPeer };
|
|
136
198
|
}
|
|
137
199
|
/**
|
|
138
200
|
* Remove excess peers back down to our target values.
|
|
@@ -165,6 +227,10 @@ function pruneExcessPeers(connectedPeers, dutiesByPeer, activeAttnets, peersToDi
|
|
|
165
227
|
if ((dutiesByPeer.get(peer) ?? 0) > 0) {
|
|
166
228
|
return false;
|
|
167
229
|
}
|
|
230
|
+
// Peers far ahead when we're starved for data are not eligible for pruning
|
|
231
|
+
if (opts.starved && peer.statusScore === StatusScore.FAR_AHEAD) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
168
234
|
// outbound peers up to OUTBOUND_PEER_RATIO sorted by highest score and not eligible for pruning
|
|
169
235
|
if (peer.direction === "outbound") {
|
|
170
236
|
if (outboundPeers - outboundPeersEligibleForPruning > outboundPeersTarget) {
|
|
@@ -178,7 +244,9 @@ function pruneExcessPeers(connectedPeers, dutiesByPeer, activeAttnets, peersToDi
|
|
|
178
244
|
});
|
|
179
245
|
let peersToDisconnectCount = 0;
|
|
180
246
|
const noLongLivedSubnetPeersToDisconnect = [];
|
|
181
|
-
const peersToDisconnectTarget =
|
|
247
|
+
const peersToDisconnectTarget =
|
|
248
|
+
// if we're starved for data, prune additional peers
|
|
249
|
+
connectedPeerCount - targetPeers + (opts.starved ? targetPeers * opts.starvationPruneRatio : 0);
|
|
182
250
|
// 1. Lodestar prefers disconnecting peers that does not have long lived subnets
|
|
183
251
|
// See https://github.com/ChainSafe/lodestar/issues/3940
|
|
184
252
|
// peers with low score will be disconnected through heartbeat in the end
|
|
@@ -274,7 +342,7 @@ function pruneExcessPeers(connectedPeers, dutiesByPeer, activeAttnets, peersToDi
|
|
|
274
342
|
/**
|
|
275
343
|
* Sort peers ascending, peer-0 has the most chance to prune, peer-n has the least.
|
|
276
344
|
* Shuffling first to break ties.
|
|
277
|
-
* prefer sorting by dutied subnets
|
|
345
|
+
* prefer sorting by status score (applicable during syncing), then dutied subnets, then number of long lived subnets, then peer score
|
|
278
346
|
* peer score is the last criteria since they are supposed to be in the same score range,
|
|
279
347
|
* bad score peers are removed by peer manager anyway
|
|
280
348
|
*/
|
|
@@ -283,6 +351,10 @@ export function sortPeersToPrune(connectedPeers, dutiesByPeer) {
|
|
|
283
351
|
const dutiedSubnet1 = dutiesByPeer.get(p1) ?? 0;
|
|
284
352
|
const dutiedSubnet2 = dutiesByPeer.get(p2) ?? 0;
|
|
285
353
|
if (dutiedSubnet1 === dutiedSubnet2) {
|
|
354
|
+
const statusScore = p1.statusScore - p2.statusScore;
|
|
355
|
+
if (statusScore !== 0) {
|
|
356
|
+
return statusScore;
|
|
357
|
+
}
|
|
286
358
|
const [longLivedSubnets1, longLivedSubnets2] = [p1, p2].map((p) => p.attnetsTrueBitIndices.length + p.syncnetsTrueBitIndices.length);
|
|
287
359
|
if (longLivedSubnets1 === longLivedSubnets2) {
|
|
288
360
|
return p1.score - p2.score;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prioritizePeers.js","sourceRoot":"","sources":["../../../../src/network/peers/utils/prioritizePeers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prioritizePeers.js","sourceRoot":"","sources":["../../../../src/network/peers/utils/prioritizePeers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getBlockRootFromBeaconAttestationSerialized, getBlockRootFromSignedAggregateAndProofSerialized, getSlotFromBeaconAttestationSerialized, getSlotFromBlobSidecarSerialized, getSlotFromSignedAggregateAndProofSerialized, getSlotFromSignedBeaconBlockSerialized, } from "../../util/sszBytes.js";
|
|
1
|
+
import { getBlockRootFromBeaconAttestationSerialized, getBlockRootFromSignedAggregateAndProofSerialized, getSlotFromBeaconAttestationSerialized, getSlotFromBlobSidecarSerialized, getSlotFromDataColumnSidecarSerialized, getSlotFromSignedAggregateAndProofSerialized, getSlotFromSignedBeaconBlockSerialized, } from "../../util/sszBytes.js";
|
|
2
2
|
import { GossipType } from "../gossip/index.js";
|
|
3
3
|
/**
|
|
4
4
|
* Extract the slot and block root of a gossip message form serialized data.
|
|
@@ -36,6 +36,13 @@ export function createExtractBlockSlotRootFns() {
|
|
|
36
36
|
}
|
|
37
37
|
return { slot };
|
|
38
38
|
},
|
|
39
|
+
[GossipType.data_column_sidecar]: (data) => {
|
|
40
|
+
const slot = getSlotFromDataColumnSidecarSerialized(data);
|
|
41
|
+
if (slot === null) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return { slot };
|
|
45
|
+
},
|
|
39
46
|
};
|
|
40
47
|
}
|
|
41
48
|
//# sourceMappingURL=extractSlotRootFns.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractSlotRootFns.js","sourceRoot":"","sources":["../../../src/network/processor/extractSlotRootFns.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,2CAA2C,EAC3C,iDAAiD,EACjD,sCAAsC,EACtC,gCAAgC,EAChC,4CAA4C,EAC5C,sCAAsC,GACvC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAG9C;;;GAGG;AACH,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAgB,EAAE,IAAc,EAAsB,EAAE;YACxF,MAAM,IAAI,GAAG,sCAAsC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,2CAA2C,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAErE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;QACtB,CAAC;QACD,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,CAAC,IAAgB,EAAsB,EAAE;YAChF,MAAM,IAAI,GAAG,4CAA4C,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,iDAAiD,CAAC,IAAI,CAAC,CAAC;YAErE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;QACtB,CAAC;QACD,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,IAAgB,EAA2B,EAAE;YACvE,MAAM,IAAI,GAAG,sCAAsC,CAAC,IAAI,CAAC,CAAC;YAE1D,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAC,IAAI,EAAC,CAAC;QAChB,CAAC;QACD,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,IAAgB,EAA2B,EAAE;YACvE,MAAM,IAAI,GAAG,gCAAgC,CAAC,IAAI,CAAC,CAAC;YAEpD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAC,IAAI,EAAC,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"extractSlotRootFns.js","sourceRoot":"","sources":["../../../src/network/processor/extractSlotRootFns.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,2CAA2C,EAC3C,iDAAiD,EACjD,sCAAsC,EACtC,gCAAgC,EAChC,sCAAsC,EACtC,4CAA4C,EAC5C,sCAAsC,GACvC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAG9C;;;GAGG;AACH,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAgB,EAAE,IAAc,EAAsB,EAAE;YACxF,MAAM,IAAI,GAAG,sCAAsC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,2CAA2C,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAErE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;QACtB,CAAC;QACD,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,CAAC,IAAgB,EAAsB,EAAE;YAChF,MAAM,IAAI,GAAG,4CAA4C,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,iDAAiD,CAAC,IAAI,CAAC,CAAC;YAErE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;QACtB,CAAC;QACD,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,IAAgB,EAA2B,EAAE;YACvE,MAAM,IAAI,GAAG,sCAAsC,CAAC,IAAI,CAAC,CAAC;YAE1D,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAC,IAAI,EAAC,CAAC;QAChB,CAAC;QACD,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,IAAgB,EAA2B,EAAE;YACvE,MAAM,IAAI,GAAG,gCAAgC,CAAC,IAAI,CAAC,CAAC;YAEpD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAC,IAAI,EAAC,CAAC;QAChB,CAAC;QACD,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC,IAAgB,EAA2B,EAAE;YAC9E,MAAM,IAAI,GAAG,sCAAsC,CAAC,IAAI,CAAC,CAAC;YAE1D,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAC,IAAI,EAAC,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -4,8 +4,9 @@ import { computeTimeAtSlot } from "@lodestar/state-transition";
|
|
|
4
4
|
import { ssz, sszTypesFor, } from "@lodestar/types";
|
|
5
5
|
import { LogLevel, prettyBytes, toRootHex } from "@lodestar/utils";
|
|
6
6
|
import { BlobSidecarValidation, BlockInputType, GossipedInputType, } from "../../chain/blocks/types.js";
|
|
7
|
-
import { AttestationError, AttestationErrorCode, BlobSidecarErrorCode, BlobSidecarGossipError, BlockError, BlockErrorCode, BlockGossipError, GossipAction, GossipActionError, SyncCommitteeError, } from "../../chain/errors/index.js";
|
|
7
|
+
import { AttestationError, AttestationErrorCode, BlobSidecarErrorCode, BlobSidecarGossipError, BlockError, BlockErrorCode, BlockGossipError, DataColumnSidecarErrorCode, DataColumnSidecarGossipError, GossipAction, GossipActionError, SyncCommitteeError, } from "../../chain/errors/index.js";
|
|
8
8
|
import { validateGossipBlobSidecar } from "../../chain/validation/blobSidecar.js";
|
|
9
|
+
import { validateGossipDataColumnSidecar } from "../../chain/validation/dataColumnSidecar.js";
|
|
9
10
|
import { toElectraSingleAttestation, validateGossipAggregateAndProof, validateGossipAttestationsSameAttData, validateGossipAttesterSlashing, validateGossipBlock, validateGossipBlsToExecutionChange, validateGossipProposerSlashing, validateGossipSyncCommittee, validateGossipVoluntaryExit, validateSyncCommitteeGossipContributionAndProof, } from "../../chain/validation/index.js";
|
|
10
11
|
import { validateLightClientFinalityUpdate } from "../../chain/validation/lightClientFinalityUpdate.js";
|
|
11
12
|
import { validateLightClientOptimisticUpdate } from "../../chain/validation/lightClientOptimisticUpdate.js";
|
|
@@ -137,17 +138,72 @@ function getSequentialHandlers(modules, options) {
|
|
|
137
138
|
throw e;
|
|
138
139
|
}
|
|
139
140
|
}
|
|
141
|
+
async function validateBeaconDataColumn(dataColumnSidecar, dataColumnBytes, gossipSubnet, peerIdStr, seenTimestampSec) {
|
|
142
|
+
metrics?.peerDas.dataColumnSidecarProcessingRequests.inc();
|
|
143
|
+
const verificationTimer = metrics?.peerDas.dataColumnSidecarGossipVerificationTime.startTimer();
|
|
144
|
+
const dataColumnBlockHeader = dataColumnSidecar.signedBlockHeader.message;
|
|
145
|
+
const slot = dataColumnBlockHeader.slot;
|
|
146
|
+
const blockRoot = ssz.phase0.BeaconBlockHeader.hashTreeRoot(dataColumnBlockHeader);
|
|
147
|
+
const blockHex = prettyBytes(blockRoot);
|
|
148
|
+
const delaySec = chain.clock.secFromSlot(slot, seenTimestampSec);
|
|
149
|
+
const recvToValLatency = Date.now() / 1000 - seenTimestampSec;
|
|
150
|
+
const { blockInput, blockInputMeta } = chain.seenGossipBlockInput.getGossipBlockInput(config, {
|
|
151
|
+
type: GossipedInputType.dataColumn,
|
|
152
|
+
dataColumnSidecar,
|
|
153
|
+
dataColumnBytes,
|
|
154
|
+
}, metrics);
|
|
155
|
+
try {
|
|
156
|
+
await validateGossipDataColumnSidecar(chain, dataColumnSidecar, gossipSubnet);
|
|
157
|
+
const recvToValidation = Date.now() / 1000 - seenTimestampSec;
|
|
158
|
+
const validationTime = recvToValidation - recvToValLatency;
|
|
159
|
+
metrics?.peerDas.dataColumnSidecarProcessingSuccesses.inc();
|
|
160
|
+
metrics?.gossipBlob.recvToValidation.observe(recvToValidation);
|
|
161
|
+
metrics?.gossipBlob.validationTime.observe(validationTime);
|
|
162
|
+
logger.debug("Received gossip dataColumn", {
|
|
163
|
+
slot: slot,
|
|
164
|
+
root: blockHex,
|
|
165
|
+
curentSlot: chain.clock.currentSlot,
|
|
166
|
+
peerId: peerIdStr,
|
|
167
|
+
delaySec,
|
|
168
|
+
gossipSubnet,
|
|
169
|
+
columnIndex: dataColumnSidecar.index,
|
|
170
|
+
...blockInputMeta,
|
|
171
|
+
recvToValLatency,
|
|
172
|
+
recvToValidation,
|
|
173
|
+
validationTime,
|
|
174
|
+
});
|
|
175
|
+
return blockInput;
|
|
176
|
+
}
|
|
177
|
+
catch (e) {
|
|
178
|
+
if (e instanceof DataColumnSidecarGossipError) {
|
|
179
|
+
// Don't trigger this yet if full block and blobs haven't arrived yet
|
|
180
|
+
if (e.type.code === DataColumnSidecarErrorCode.PARENT_UNKNOWN && blockInput.block !== null) {
|
|
181
|
+
logger.debug("Gossip dataColumn has error", { slot, root: blockHex, code: e.type.code });
|
|
182
|
+
events.emit(NetworkEvent.unknownBlockParent, { blockInput, peer: peerIdStr });
|
|
183
|
+
}
|
|
184
|
+
if (e.action === GossipAction.REJECT) {
|
|
185
|
+
chain.persistInvalidSszValue(ssz.fulu.DataColumnSidecar, dataColumnSidecar, `gossip_reject_slot_${slot}_index_${dataColumnSidecar.index}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
throw e;
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
verificationTimer?.();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
140
194
|
function handleValidBeaconBlock(blockInput, peerIdStr, seenTimestampSec) {
|
|
141
195
|
const signedBlock = blockInput.block;
|
|
142
196
|
// Handler - MUST NOT `await`, to allow validation result to be propagated
|
|
143
|
-
chain.
|
|
197
|
+
const delaySec = seenTimestampSec - (chain.genesisTime + signedBlock.message.slot * config.SECONDS_PER_SLOT);
|
|
198
|
+
metrics?.gossipBlock.elapsedTimeTillReceived.observe({ source: OpSource.gossip }, delaySec);
|
|
199
|
+
chain.validatorMonitor?.registerBeaconBlock(OpSource.gossip, delaySec, signedBlock.message);
|
|
144
200
|
// if blobs are not yet fully available start an aggressive blob pull
|
|
145
201
|
if (blockInput.type === BlockInputType.dataPromise) {
|
|
146
202
|
events.emit(NetworkEvent.unknownBlockInput, { blockInput, peer: peerIdStr });
|
|
147
203
|
}
|
|
148
204
|
else if (blockInput.type === BlockInputType.availableData) {
|
|
149
205
|
metrics?.blockInputFetchStats.totalDataAvailableBlockInputs.inc();
|
|
150
|
-
metrics?.blockInputFetchStats.totalDataAvailableBlockInputBlobs.inc(blockInput.
|
|
206
|
+
metrics?.blockInputFetchStats.totalDataAvailableBlockInputBlobs.inc(blockInput.block.message.body.blobKzgCommitments.length);
|
|
151
207
|
}
|
|
152
208
|
chain
|
|
153
209
|
.processBlock(blockInput, {
|
|
@@ -213,6 +269,27 @@ function getSequentialHandlers(modules, options) {
|
|
|
213
269
|
logger[logLevel]("Error receiving block", { slot: signedBlock.message.slot, peer: peerIdStr }, e);
|
|
214
270
|
chain.seenGossipBlockInput.prune();
|
|
215
271
|
});
|
|
272
|
+
if (blockInput.type === BlockInputType.dataPromise) {
|
|
273
|
+
const blockSlot = blockInput.block.message.slot;
|
|
274
|
+
// if blobs are not yet fully available start an aggressive blob pull
|
|
275
|
+
chain.logger.debug("Block under processing is not available, racing with cutoff to add to unknownBlockInput", {
|
|
276
|
+
blockSlot,
|
|
277
|
+
});
|
|
278
|
+
raceWithCutoff(chain, blockSlot, blockInput.cachedData.availabilityPromise, BLOCK_AVAILABILITY_CUTOFF_MS).catch((_e) => {
|
|
279
|
+
chain.logger.debug("Block under processing not yet available, racing with cutoff to add to unknownBlockInput", {
|
|
280
|
+
blockSlot,
|
|
281
|
+
});
|
|
282
|
+
events.emit(NetworkEvent.unknownBlockInput, { blockInput, peer: peerIdStr });
|
|
283
|
+
return null;
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* TODO: this metric was leftover from the rebase onto electra. It is blob specific and should be data type agnostic here
|
|
288
|
+
*/
|
|
289
|
+
// if (blockInput.type === BlockInputType.availableData) {
|
|
290
|
+
// metrics?.blockInputFetchStats.totalDataAvailableBlockInputs.inc();
|
|
291
|
+
// metrics?.blockInputFetchStats.totalDataAvailableBlockInputBlobs.inc(blockInput.blockData.blobs.length);
|
|
292
|
+
// }
|
|
216
293
|
}
|
|
217
294
|
return {
|
|
218
295
|
[GossipType.beacon_block]: async ({ gossipData, topic, peerIdStr, seenTimestampSec, }) => {
|
|
@@ -232,10 +309,18 @@ function getSequentialHandlers(modules, options) {
|
|
|
232
309
|
}
|
|
233
310
|
const blockInput = await validateBeaconBlob(blobSidecar, topic.subnet, peerIdStr, seenTimestampSec);
|
|
234
311
|
if (blockInput.block !== null) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
312
|
+
if (blockInput.type === BlockInputType.dataPromise) {
|
|
313
|
+
chain.logger.debug("Block corresponding to blob is available but waiting for data availability", {
|
|
314
|
+
blobSlot,
|
|
315
|
+
index,
|
|
316
|
+
});
|
|
317
|
+
await raceWithCutoff(chain, blobSlot, blockInput.cachedData.availabilityPromise, BLOCK_AVAILABILITY_CUTOFF_MS).catch((_e) => {
|
|
318
|
+
chain.logger.debug("Block under processing not yet fully available adding to unknownBlockInput", {
|
|
319
|
+
blobSlot,
|
|
320
|
+
});
|
|
321
|
+
events.emit(NetworkEvent.unknownBlockInput, { blockInput, peer: peerIdStr });
|
|
322
|
+
});
|
|
323
|
+
}
|
|
239
324
|
}
|
|
240
325
|
else {
|
|
241
326
|
// wait for the block to arrive till some cutoff else emit unknownBlockInput event
|
|
@@ -244,7 +329,6 @@ function getSequentialHandlers(modules, options) {
|
|
|
244
329
|
return null;
|
|
245
330
|
});
|
|
246
331
|
if (normalBlockInput !== null) {
|
|
247
|
-
chain.logger.debug("Block corresponding to blob is now available for processing", { blobSlot, index });
|
|
248
332
|
// we can directly send it for processing but block gossip handler will queue it up anyway
|
|
249
333
|
// if we see any issues later, we can send it to handleValidBeaconBlock
|
|
250
334
|
//
|
|
@@ -253,7 +337,71 @@ function getSequentialHandlers(modules, options) {
|
|
|
253
337
|
// however we can emit the event which will atleast add the peer to the list of peers to pull
|
|
254
338
|
// data from
|
|
255
339
|
if (normalBlockInput.type === BlockInputType.dataPromise) {
|
|
256
|
-
|
|
340
|
+
chain.logger.debug("Block corresponding to blob is now available but waiting for data availability", {
|
|
341
|
+
blobSlot,
|
|
342
|
+
index,
|
|
343
|
+
});
|
|
344
|
+
await raceWithCutoff(chain, blobSlot, normalBlockInput.cachedData.availabilityPromise, BLOCK_AVAILABILITY_CUTOFF_MS).catch((_e) => {
|
|
345
|
+
chain.logger.debug("Block under processing not yet fully available adding to unknownBlockInput", {
|
|
346
|
+
blobSlot,
|
|
347
|
+
});
|
|
348
|
+
events.emit(NetworkEvent.unknownBlockInput, { blockInput: normalBlockInput, peer: peerIdStr });
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
chain.logger.debug("Block corresponding to blob is now available for processing", { blobSlot, index });
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
chain.logger.debug("Block corresponding to blob not available till BLOCK_AVAILABILITY_CUTOFF_MS adding to unknownBlockInput", { blobSlot, index });
|
|
357
|
+
events.emit(NetworkEvent.unknownBlockInput, { blockInput, peer: peerIdStr });
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
},
|
|
361
|
+
[GossipType.data_column_sidecar]: async ({ gossipData, topic, peerIdStr, seenTimestampSec, }) => {
|
|
362
|
+
const { serializedData } = gossipData;
|
|
363
|
+
const dataColumnSidecar = sszDeserialize(topic, serializedData);
|
|
364
|
+
const blobSlot = dataColumnSidecar.signedBlockHeader.message.slot;
|
|
365
|
+
const index = dataColumnSidecar.index;
|
|
366
|
+
if (config.getForkSeq(blobSlot) < ForkSeq.deneb) {
|
|
367
|
+
throw new GossipActionError(GossipAction.REJECT, { code: "PRE_DENEB_BLOCK" });
|
|
368
|
+
}
|
|
369
|
+
const blockInput = await validateBeaconDataColumn(dataColumnSidecar, serializedData, topic.subnet, peerIdStr, seenTimestampSec);
|
|
370
|
+
if (blockInput.block !== null) {
|
|
371
|
+
if (blockInput.type === BlockInputType.dataPromise) {
|
|
372
|
+
chain.logger.debug("Block corresponding to blob is available but waiting for data availability", {
|
|
373
|
+
blobSlot,
|
|
374
|
+
index,
|
|
375
|
+
});
|
|
376
|
+
await raceWithCutoff(chain, blobSlot, blockInput.cachedData.availabilityPromise, BLOCK_AVAILABILITY_CUTOFF_MS).catch((_e) => {
|
|
377
|
+
chain.logger.debug("Block under processing not yet fully available adding to unknownBlockInput", {
|
|
378
|
+
blobSlot,
|
|
379
|
+
});
|
|
380
|
+
events.emit(NetworkEvent.unknownBlockInput, { blockInput, peer: peerIdStr });
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
// wait for the block to arrive till some cutoff else emit unknownBlockInput event
|
|
386
|
+
chain.logger.debug("Block not yet available, racing with cutoff", { blobSlot, index });
|
|
387
|
+
const normalBlockInput = await raceWithCutoff(chain, blobSlot, blockInput.blockInputPromise, BLOCK_AVAILABILITY_CUTOFF_MS).catch((_e) => {
|
|
388
|
+
return null;
|
|
389
|
+
});
|
|
390
|
+
if (normalBlockInput !== null) {
|
|
391
|
+
if (normalBlockInput.type === BlockInputType.dataPromise) {
|
|
392
|
+
chain.logger.debug("Block corresponding to blob is now available but waiting for data availability", {
|
|
393
|
+
blobSlot,
|
|
394
|
+
index,
|
|
395
|
+
});
|
|
396
|
+
await raceWithCutoff(chain, blobSlot, normalBlockInput.cachedData.availabilityPromise, BLOCK_AVAILABILITY_CUTOFF_MS).catch((_e) => {
|
|
397
|
+
chain.logger.debug("Block under processing not yet fully available adding to unknownBlockInput", {
|
|
398
|
+
blobSlot,
|
|
399
|
+
});
|
|
400
|
+
events.emit(NetworkEvent.unknownBlockInput, { blockInput: normalBlockInput, peer: peerIdStr });
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
chain.logger.debug("Block corresponding to blob is now available for processing", { blobSlot, index });
|
|
257
405
|
}
|
|
258
406
|
}
|
|
259
407
|
else {
|