@lodestar/beacon-node 1.18.0-dev.c94ecd23e4 → 1.18.0-dev.d145724b78
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 +32 -13
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/blocks/utils.d.ts +1 -0
- package/lib/api/impl/beacon/rewards/index.js +8 -4
- package/lib/api/impl/beacon/rewards/index.js.map +1 -1
- package/lib/api/impl/beacon/state/index.js +27 -9
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts +2 -1
- package/lib/api/impl/beacon/state/utils.js +19 -19
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/debug/index.js +4 -8
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts +14 -0
- package/lib/api/impl/validator/index.js +31 -14
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/impl/validator/utils.js +1 -0
- package/lib/api/impl/validator/utils.js.map +1 -1
- package/lib/api/rest/activeSockets.js +1 -1
- package/lib/api/rest/activeSockets.js.map +1 -1
- package/lib/api/rest/base.js +10 -6
- package/lib/api/rest/base.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +15 -7
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/chain.d.ts +17 -2
- package/lib/chain/chain.js +79 -23
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts +6 -3
- package/lib/chain/forkChoice/index.js +7 -3
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/interface.d.ts +17 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/attestationPool.d.ts +2 -2
- package/lib/chain/opPools/attestationPool.js +3 -5
- package/lib/chain/opPools/attestationPool.js.map +1 -1
- package/lib/chain/options.d.ts +5 -1
- package/lib/chain/options.js +6 -0
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -2
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/reprocess.js +1 -1
- package/lib/chain/reprocess.js.map +1 -1
- package/lib/chain/rewards/attestationsRewards.d.ts +7 -0
- package/lib/chain/rewards/attestationsRewards.js +109 -0
- package/lib/chain/rewards/attestationsRewards.js.map +1 -0
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +2 -2
- package/lib/chain/seenCache/seenGossipBlockInput.js +22 -7
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts +6 -0
- package/lib/chain/stateCache/fifoBlockStateCache.js +15 -0
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/{stateContextCheckpointsCache.d.ts → inMemoryCheckpointsCache.d.ts} +9 -4
- package/lib/chain/stateCache/{stateContextCheckpointsCache.js → inMemoryCheckpointsCache.js} +6 -6
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -0
- package/lib/chain/stateCache/index.d.ts +1 -1
- package/lib/chain/stateCache/index.js +1 -1
- package/lib/chain/stateCache/index.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +46 -14
- package/lib/chain/stateCache/persistentCheckpointsCache.js +71 -28
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/stateContextCache.d.ts +6 -0
- package/lib/chain/stateCache/stateContextCache.js +8 -0
- package/lib/chain/stateCache/stateContextCache.js.map +1 -1
- package/lib/chain/stateCache/types.d.ts +4 -0
- package/lib/chain/stateCache/types.js.map +1 -1
- package/lib/chain/validation/block.js +2 -2
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/eth1/provider/eth1Provider.js +1 -1
- package/lib/eth1/provider/eth1Provider.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +3 -3
- package/lib/metrics/metrics/lodestar.js +9 -9
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/monitoring/options.js +3 -3
- package/lib/monitoring/options.js.map +1 -1
- package/lib/network/core/metrics.d.ts +3 -3
- package/lib/network/core/metrics.js +4 -0
- package/lib/network/core/metrics.js.map +1 -1
- package/lib/network/core/networkCore.js +3 -6
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/events.d.ts +2 -2
- package/lib/network/gossip/gossipsub.js +5 -2
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/libp2p/index.js +1 -1
- package/lib/network/libp2p/index.js.map +1 -1
- package/lib/network/network.js +2 -1
- package/lib/network/network.js.map +1 -1
- package/lib/network/options.js +2 -4
- package/lib/network/options.js.map +1 -1
- package/lib/network/peers/peerManager.js +3 -2
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/processor/aggregatorTracker.d.ts +2 -0
- package/lib/network/processor/aggregatorTracker.js +11 -1
- package/lib/network/processor/aggregatorTracker.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +41 -16
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/index.js +1 -1
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +2 -2
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +15 -3
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
- package/lib/network/reqresp/rateLimit.js +12 -12
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/subnets/attnetsService.d.ts +38 -44
- package/lib/network/subnets/attnetsService.js +160 -149
- package/lib/network/subnets/attnetsService.js.map +1 -1
- package/lib/network/subnets/index.d.ts +0 -1
- package/lib/network/subnets/index.js +0 -1
- package/lib/network/subnets/index.js.map +1 -1
- package/lib/network/subnets/interface.d.ts +0 -1
- package/lib/sync/interface.d.ts +16 -12
- package/lib/sync/interface.js +1 -0
- package/lib/sync/interface.js.map +1 -1
- package/lib/sync/unknownBlock.js +63 -60
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/pendingBlocksTree.js +1 -1
- package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
- package/lib/util/index.d.ts +2 -0
- package/lib/util/index.js +3 -0
- package/lib/util/index.js.map +1 -0
- package/lib/util/profile.js +4 -1
- package/lib/util/profile.js.map +1 -1
- package/package.json +22 -20
- package/lib/chain/stateCache/stateContextCheckpointsCache.js.map +0 -1
- package/lib/network/subnets/dllAttnetsService.d.ts +0 -112
- package/lib/network/subnets/dllAttnetsService.js +0 -336
- package/lib/network/subnets/dllAttnetsService.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"beaconBlocksMaybeBlobsByRoot.js","sourceRoot":"","sources":["../../../src/network/reqresp/beaconBlocksMaybeBlobsByRoot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"beaconBlocksMaybeBlobsByRoot.js","sourceRoot":"","sources":["../../../src/network/reqresp/beaconBlocksMaybeBlobsByRoot.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,59 +4,59 @@ import { requestSszTypeByMethod } from "./types.js";
|
|
|
4
4
|
export const rateLimitQuotas = {
|
|
5
5
|
[ReqRespMethod.Status]: {
|
|
6
6
|
// Rationale: https://github.com/sigp/lighthouse/blob/bf533c8e42cc73c35730e285c21df8add0195369/beacon_node/lighthouse_network/src/rpc/mod.rs#L118-L130
|
|
7
|
-
byPeer: { quota: 5, quotaTimeMs:
|
|
7
|
+
byPeer: { quota: 5, quotaTimeMs: 15_000 },
|
|
8
8
|
},
|
|
9
9
|
[ReqRespMethod.Goodbye]: {
|
|
10
10
|
// Rationale: https://github.com/sigp/lighthouse/blob/bf533c8e42cc73c35730e285c21df8add0195369/beacon_node/lighthouse_network/src/rpc/mod.rs#L118-L130
|
|
11
|
-
byPeer: { quota: 1, quotaTimeMs:
|
|
11
|
+
byPeer: { quota: 1, quotaTimeMs: 10_000 },
|
|
12
12
|
},
|
|
13
13
|
[ReqRespMethod.Ping]: {
|
|
14
14
|
// Rationale: https://github.com/sigp/lighthouse/blob/bf533c8e42cc73c35730e285c21df8add0195369/beacon_node/lighthouse_network/src/rpc/mod.rs#L118-L130
|
|
15
|
-
byPeer: { quota: 2, quotaTimeMs:
|
|
15
|
+
byPeer: { quota: 2, quotaTimeMs: 10_000 },
|
|
16
16
|
},
|
|
17
17
|
[ReqRespMethod.Metadata]: {
|
|
18
18
|
// Rationale: https://github.com/sigp/lighthouse/blob/bf533c8e42cc73c35730e285c21df8add0195369/beacon_node/lighthouse_network/src/rpc/mod.rs#L118-L130
|
|
19
|
-
byPeer: { quota: 2, quotaTimeMs:
|
|
19
|
+
byPeer: { quota: 2, quotaTimeMs: 5_000 },
|
|
20
20
|
},
|
|
21
21
|
// Do not matter
|
|
22
22
|
[ReqRespMethod.BeaconBlocksByRange]: {
|
|
23
23
|
// Rationale: https://github.com/sigp/lighthouse/blob/bf533c8e42cc73c35730e285c21df8add0195369/beacon_node/lighthouse_network/src/rpc/mod.rs#L118-L130
|
|
24
|
-
byPeer: { quota: MAX_REQUEST_BLOCKS, quotaTimeMs:
|
|
24
|
+
byPeer: { quota: MAX_REQUEST_BLOCKS, quotaTimeMs: 10_000 },
|
|
25
25
|
getRequestCount: getRequestCountFn(ReqRespMethod.BeaconBlocksByRange, (req) => req.count),
|
|
26
26
|
},
|
|
27
27
|
[ReqRespMethod.BeaconBlocksByRoot]: {
|
|
28
28
|
// Rationale: https://github.com/sigp/lighthouse/blob/bf533c8e42cc73c35730e285c21df8add0195369/beacon_node/lighthouse_network/src/rpc/mod.rs#L118-L130
|
|
29
|
-
byPeer: { quota: 128, quotaTimeMs:
|
|
29
|
+
byPeer: { quota: 128, quotaTimeMs: 10_000 },
|
|
30
30
|
getRequestCount: getRequestCountFn(ReqRespMethod.BeaconBlocksByRoot, (req) => req.length),
|
|
31
31
|
},
|
|
32
32
|
[ReqRespMethod.BlobSidecarsByRange]: {
|
|
33
33
|
// Rationale: MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK
|
|
34
|
-
byPeer: { quota: MAX_REQUEST_BLOB_SIDECARS, quotaTimeMs:
|
|
34
|
+
byPeer: { quota: MAX_REQUEST_BLOB_SIDECARS, quotaTimeMs: 10_000 },
|
|
35
35
|
getRequestCount: getRequestCountFn(ReqRespMethod.BlobSidecarsByRange, (req) => req.count),
|
|
36
36
|
},
|
|
37
37
|
[ReqRespMethod.BlobSidecarsByRoot]: {
|
|
38
38
|
// Rationale: quota of BeaconBlocksByRoot * MAX_BLOBS_PER_BLOCK
|
|
39
|
-
byPeer: { quota: 128 * MAX_BLOBS_PER_BLOCK, quotaTimeMs:
|
|
39
|
+
byPeer: { quota: 128 * MAX_BLOBS_PER_BLOCK, quotaTimeMs: 10_000 },
|
|
40
40
|
getRequestCount: getRequestCountFn(ReqRespMethod.BlobSidecarsByRoot, (req) => req.length),
|
|
41
41
|
},
|
|
42
42
|
[ReqRespMethod.LightClientBootstrap]: {
|
|
43
43
|
// As similar in the nature of `Status` protocol so we use the same rate limits.
|
|
44
|
-
byPeer: { quota: 5, quotaTimeMs:
|
|
44
|
+
byPeer: { quota: 5, quotaTimeMs: 15_000 },
|
|
45
45
|
},
|
|
46
46
|
[ReqRespMethod.LightClientUpdatesByRange]: {
|
|
47
47
|
// Same rationale as for BeaconBlocksByRange
|
|
48
|
-
byPeer: { quota: MAX_REQUEST_LIGHT_CLIENT_UPDATES, quotaTimeMs:
|
|
48
|
+
byPeer: { quota: MAX_REQUEST_LIGHT_CLIENT_UPDATES, quotaTimeMs: 10_000 },
|
|
49
49
|
getRequestCount: getRequestCountFn(ReqRespMethod.LightClientUpdatesByRange, (req) => req.count),
|
|
50
50
|
},
|
|
51
51
|
[ReqRespMethod.LightClientFinalityUpdate]: {
|
|
52
52
|
// Finality updates should not be requested more than once per epoch.
|
|
53
53
|
// Allow 2 per slot and a very safe bound until there's more testing of real usage.
|
|
54
|
-
byPeer: { quota: 2, quotaTimeMs:
|
|
54
|
+
byPeer: { quota: 2, quotaTimeMs: 12_000 },
|
|
55
55
|
},
|
|
56
56
|
[ReqRespMethod.LightClientOptimisticUpdate]: {
|
|
57
57
|
// Optimistic updates should not be requested more than once per slot.
|
|
58
58
|
// Allow 2 per slot and a very safe bound until there's more testing of real usage.
|
|
59
|
-
byPeer: { quota: 2, quotaTimeMs:
|
|
59
|
+
byPeer: { quota: 2, quotaTimeMs: 12_000 },
|
|
60
60
|
},
|
|
61
61
|
};
|
|
62
62
|
// Helper to produce a getRequestCount function
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../../src/network/reqresp/rateLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gCAAgC,EAChC,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,aAAa,EAAsB,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAC,sBAAsB,EAAC,MAAM,YAAY,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAiD;IAC3E,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;QACtB,sJAAsJ;QACtJ,MAAM,EAAE,EAAC,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../../src/network/reqresp/rateLimit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { ChainForkConfig } from "@lodestar/config";
|
|
2
1
|
import { ForkName } from "@lodestar/params";
|
|
3
2
|
import { Slot } from "@lodestar/types";
|
|
4
3
|
import { Logger } from "@lodestar/utils";
|
|
4
|
+
import { BeaconConfig } from "@lodestar/config";
|
|
5
5
|
import { IClock } from "../../util/clock.js";
|
|
6
6
|
import { MetadataController } from "../metadata.js";
|
|
7
7
|
import { RequestedSubnet } from "../peers/utils/index.js";
|
|
8
8
|
import { NetworkCoreMetrics } from "../core/metrics.js";
|
|
9
|
-
import { IAttnetsService, CommitteeSubscription, SubnetsServiceOpts, GossipSubscriber,
|
|
9
|
+
import { IAttnetsService, CommitteeSubscription, SubnetsServiceOpts, GossipSubscriber, NodeId } from "./interface.js";
|
|
10
10
|
export declare enum SubnetSource {
|
|
11
11
|
committee = "committee",
|
|
12
|
-
|
|
12
|
+
longLived = "long_lived"
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
* Manage
|
|
16
|
-
* - PeerManager uses attnetsService to know which peers are required for duties
|
|
15
|
+
* Manage deleterministic long lived (DLL) subnets and short lived subnets.
|
|
16
|
+
* - PeerManager uses attnetsService to know which peers are required for duties and long lived subscriptions
|
|
17
17
|
* - Network call addCommitteeSubscriptions() from API calls
|
|
18
18
|
* - Gossip handler checks shouldProcess to know if validator is aggregator
|
|
19
19
|
*/
|
|
@@ -24,6 +24,7 @@ export declare class AttnetsService implements IAttnetsService {
|
|
|
24
24
|
private readonly metadata;
|
|
25
25
|
private readonly logger;
|
|
26
26
|
private readonly metrics;
|
|
27
|
+
private readonly nodeId;
|
|
27
28
|
private readonly opts;
|
|
28
29
|
/** Committee subnets - PeerManager must find peers for those */
|
|
29
30
|
private committeeSubnets;
|
|
@@ -32,26 +33,20 @@ export declare class AttnetsService implements IAttnetsService {
|
|
|
32
33
|
* This class will tell gossip to subscribe and un-subscribe
|
|
33
34
|
* If a value exists for `SubscriptionId` it means that gossip subscription is active in network.gossip
|
|
34
35
|
*/
|
|
35
|
-
private
|
|
36
|
-
/**
|
|
37
|
-
private
|
|
36
|
+
private shortLivedSubscriptions;
|
|
37
|
+
/** ${SUBNETS_PER_NODE} long lived subscriptions, may overlap with `shortLivedSubscriptions` */
|
|
38
|
+
private longLivedSubscriptions;
|
|
38
39
|
/**
|
|
39
|
-
* Map of an aggregator at a slot and
|
|
40
|
+
* Map of an aggregator at a slot and AggregatorDutyInfo
|
|
40
41
|
* Used to determine if we should process an attestation.
|
|
41
42
|
*/
|
|
42
43
|
private aggregatorSlotSubnet;
|
|
43
|
-
|
|
44
|
-
* A collection of seen validators. These dictate how many random subnets we should be
|
|
45
|
-
* subscribed to. As these time out, we unsubscribe from the required random subnets and update our ENR.
|
|
46
|
-
* This is a map of validator index and its last active slot.
|
|
47
|
-
*/
|
|
48
|
-
private knownValidators;
|
|
49
|
-
private randBetweenFn;
|
|
50
|
-
private shuffleFn;
|
|
51
|
-
constructor(config: ChainForkConfig, clock: IClock, gossip: GossipSubscriber, metadata: MetadataController, logger: Logger, metrics: NetworkCoreMetrics | null, opts: SubnetsServiceOpts & SubnetsServiceTestOpts);
|
|
44
|
+
constructor(config: BeaconConfig, clock: IClock, gossip: GossipSubscriber, metadata: MetadataController, logger: Logger, metrics: NetworkCoreMetrics | null, nodeId: NodeId | null, opts: SubnetsServiceOpts);
|
|
52
45
|
close(): void;
|
|
53
46
|
/**
|
|
54
|
-
* Get all active subnets for the hearbeat
|
|
47
|
+
* Get all active subnets for the hearbeat:
|
|
48
|
+
* - committeeSubnets so that submitted attestations can be spread to the network
|
|
49
|
+
* - longLivedSubscriptions because other peers based on this node's ENR for their submitted attestations
|
|
55
50
|
*/
|
|
56
51
|
getActiveSubnets(): RequestedSubnet[];
|
|
57
52
|
/**
|
|
@@ -62,57 +57,56 @@ export declare class AttnetsService implements IAttnetsService {
|
|
|
62
57
|
* Check if a subscription is still active before handling a gossip object
|
|
63
58
|
*/
|
|
64
59
|
shouldProcess(subnet: number, slot: Slot): boolean;
|
|
65
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* TODO-dll: clarify how many epochs before the fork we should subscribe to the new fork
|
|
62
|
+
* Call ONLY ONCE: Two epoch before the fork, re-subscribe all existing random subscriptions to the new fork
|
|
63
|
+
**/
|
|
66
64
|
subscribeSubnetsToNextFork(nextFork: ForkName): void;
|
|
67
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* TODO-dll: clarify how many epochs after the fork we should unsubscribe to the new fork
|
|
67
|
+
* Call ONLY ONCE: Two epochs after the fork, un-subscribe all subnets from the old fork
|
|
68
|
+
**/
|
|
68
69
|
unsubscribeSubnetsFromPrevFork(prevFork: ForkName): void;
|
|
69
70
|
/**
|
|
70
71
|
* Run per slot.
|
|
71
72
|
* - Subscribe to gossip subnets 2 slots in advance
|
|
72
73
|
* - Unsubscribe from expired subnets
|
|
74
|
+
* - Track time to stable mesh if not yet formed
|
|
73
75
|
*/
|
|
74
76
|
private onSlot;
|
|
77
|
+
private onHalfSlot;
|
|
78
|
+
/**
|
|
79
|
+
* Track time to form stable mesh if not yet formed
|
|
80
|
+
*/
|
|
81
|
+
private trackTimeToStableMesh;
|
|
75
82
|
/**
|
|
76
83
|
* Run per epoch, clean-up operations that are not urgent
|
|
84
|
+
* Subscribe to new random subnets every EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION epochs
|
|
77
85
|
*/
|
|
78
86
|
private onEpoch;
|
|
87
|
+
private recomputeLongLivedSubnets;
|
|
79
88
|
/**
|
|
80
89
|
* Unsubscribe to a committee subnet from subscribedCommitteeSubnets.
|
|
81
90
|
* If a random subnet is present, we do not unsubscribe from it.
|
|
82
91
|
*/
|
|
83
92
|
private unsubscribeExpiredCommitteeSubnets;
|
|
84
|
-
/**
|
|
85
|
-
* A random subnet has expired.
|
|
86
|
-
* This function selects a new subnet to join, or extends the expiry if there are no more
|
|
87
|
-
* available subnets to choose from.
|
|
88
|
-
*/
|
|
89
|
-
private unsubscribeExpiredRandomSubnets;
|
|
90
|
-
/**
|
|
91
|
-
* A known validator has not sent a subscription in a while. They are considered offline and the
|
|
92
|
-
* beacon node no longer needs to be subscribed to the allocated random subnets.
|
|
93
|
-
*
|
|
94
|
-
* We don't keep track of a specific validator to random subnet, rather the ratio of active
|
|
95
|
-
* validators to random subnets. So when a validator goes offline, we can simply remove the
|
|
96
|
-
* allocated amount of random subnets.
|
|
97
|
-
*/
|
|
98
|
-
private pruneExpiredKnownValidators;
|
|
99
93
|
/**
|
|
100
94
|
* No need to track aggregator for past slots.
|
|
101
95
|
* @param currentSlot
|
|
102
96
|
*/
|
|
103
97
|
private pruneExpiredAggregator;
|
|
104
|
-
/**
|
|
105
|
-
* Called when we have new validators or expired validators.
|
|
106
|
-
* knownValidators should be updated before this function.
|
|
107
|
-
*/
|
|
108
|
-
private rebalanceRandomSubnets;
|
|
109
98
|
/** Update ENR */
|
|
110
99
|
private updateMetadata;
|
|
111
|
-
/**
|
|
100
|
+
/**
|
|
101
|
+
* Trigger a gossip subcription only if not already subscribed
|
|
102
|
+
* shortLivedSubscriptions or longLivedSubscriptions should be updated right AFTER this called
|
|
103
|
+
**/
|
|
112
104
|
private subscribeToSubnets;
|
|
113
|
-
/**
|
|
105
|
+
/**
|
|
106
|
+
* Trigger a gossip un-subscription only if no-one is still subscribed
|
|
107
|
+
* If unsubscribe long lived subnets, longLivedSubscriptions should be updated right BEFORE this called
|
|
108
|
+
**/
|
|
114
109
|
private unsubscribeSubnets;
|
|
115
|
-
private randomSubscriptionSlotLen;
|
|
116
110
|
private onScrapeLodestarMetrics;
|
|
117
111
|
}
|
|
118
112
|
//# sourceMappingURL=attnetsService.d.ts.map
|