@lodestar/beacon-node 1.18.0-dev.971871eee2 → 1.18.0-dev.a3cb2cdad4
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 +6 -6
- 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.js +27 -10
- 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/base.js +10 -6
- package/lib/api/rest/base.js.map +1 -1
- package/lib/chain/chain.d.ts +12 -2
- package/lib/chain/chain.js +39 -23
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts +2 -1
- package/lib/chain/forkChoice/index.js +3 -2
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/interface.d.ts +12 -1
- package/lib/chain/opPools/attestationPool.d.ts +2 -2
- package/lib/chain/opPools/attestationPool.js +2 -4
- package/lib/chain/opPools/attestationPool.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/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} +7 -1
- package/lib/chain/stateCache/{stateContextCheckpointsCache.js → inMemoryCheckpointsCache.js} +5 -4
- 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/metrics/metrics/lodestar.d.ts +3 -3
- package/lib/metrics/metrics/lodestar.js +7 -7
- package/lib/metrics/metrics/lodestar.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/gossip/gossipsub.js +4 -1
- package/lib/network/gossip/gossipsub.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 +2 -1
- 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/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/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 +20 -17
- 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,37 +1,38 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ATTESTATION_SUBNET_COUNT, EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION, RANDOM_SUBNETS_PER_VALIDATOR, SLOTS_PER_EPOCH, } from "@lodestar/params";
|
|
1
|
+
import { ATTESTATION_SUBNET_COUNT, EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION, SLOTS_PER_EPOCH, } from "@lodestar/params";
|
|
3
2
|
import { ssz } from "@lodestar/types";
|
|
4
|
-
import { MapDef
|
|
5
|
-
import { shuffle } from "../../util/shuffle.js";
|
|
3
|
+
import { MapDef } from "@lodestar/utils";
|
|
6
4
|
import { ClockEvent } from "../../util/clock.js";
|
|
7
5
|
import { GossipType } from "../gossip/index.js";
|
|
8
6
|
import { SubnetMap } from "../peers/utils/index.js";
|
|
9
7
|
import { getActiveForks } from "../forks.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*/
|
|
14
|
-
const LAST_SEEN_VALIDATOR_TIMEOUT = 150;
|
|
8
|
+
import { stringifyGossipTopic } from "../gossip/topic.js";
|
|
9
|
+
import { GOSSIP_D_LOW } from "../gossip/scoringParameters.js";
|
|
10
|
+
import { computeSubscribedSubnet } from "./util.js";
|
|
15
11
|
const gossipType = GossipType.beacon_attestation;
|
|
16
12
|
export var SubnetSource;
|
|
17
13
|
(function (SubnetSource) {
|
|
18
14
|
SubnetSource["committee"] = "committee";
|
|
19
|
-
SubnetSource["
|
|
15
|
+
SubnetSource["longLived"] = "long_lived";
|
|
20
16
|
})(SubnetSource || (SubnetSource = {}));
|
|
21
17
|
/**
|
|
22
|
-
*
|
|
23
|
-
|
|
18
|
+
* This value means node is not able to form stable mesh.
|
|
19
|
+
*/
|
|
20
|
+
const NOT_ABLE_TO_FORM_STABLE_MESH_SEC = -1;
|
|
21
|
+
/**
|
|
22
|
+
* Manage deleterministic long lived (DLL) subnets and short lived subnets.
|
|
23
|
+
* - PeerManager uses attnetsService to know which peers are required for duties and long lived subscriptions
|
|
24
24
|
* - Network call addCommitteeSubscriptions() from API calls
|
|
25
25
|
* - Gossip handler checks shouldProcess to know if validator is aggregator
|
|
26
26
|
*/
|
|
27
27
|
export class AttnetsService {
|
|
28
|
-
constructor(config, clock, gossip, metadata, logger, metrics, opts) {
|
|
28
|
+
constructor(config, clock, gossip, metadata, logger, metrics, nodeId, opts) {
|
|
29
29
|
this.config = config;
|
|
30
30
|
this.clock = clock;
|
|
31
31
|
this.gossip = gossip;
|
|
32
32
|
this.metadata = metadata;
|
|
33
33
|
this.logger = logger;
|
|
34
34
|
this.metrics = metrics;
|
|
35
|
+
this.nodeId = nodeId;
|
|
35
36
|
this.opts = opts;
|
|
36
37
|
/** Committee subnets - PeerManager must find peers for those */
|
|
37
38
|
this.committeeSubnets = new SubnetMap();
|
|
@@ -40,55 +41,59 @@ export class AttnetsService {
|
|
|
40
41
|
* This class will tell gossip to subscribe and un-subscribe
|
|
41
42
|
* If a value exists for `SubscriptionId` it means that gossip subscription is active in network.gossip
|
|
42
43
|
*/
|
|
43
|
-
this.
|
|
44
|
-
/**
|
|
45
|
-
this.
|
|
44
|
+
this.shortLivedSubscriptions = new SubnetMap();
|
|
45
|
+
/** ${SUBNETS_PER_NODE} long lived subscriptions, may overlap with `shortLivedSubscriptions` */
|
|
46
|
+
this.longLivedSubscriptions = new Set();
|
|
46
47
|
/**
|
|
47
|
-
* Map of an aggregator at a slot and
|
|
48
|
+
* Map of an aggregator at a slot and AggregatorDutyInfo
|
|
48
49
|
* Used to determine if we should process an attestation.
|
|
49
50
|
*/
|
|
50
|
-
this.aggregatorSlotSubnet = new MapDef(() => new
|
|
51
|
-
/**
|
|
52
|
-
* A collection of seen validators. These dictate how many random subnets we should be
|
|
53
|
-
* subscribed to. As these time out, we unsubscribe from the required random subnets and update our ENR.
|
|
54
|
-
* This is a map of validator index and its last active slot.
|
|
55
|
-
*/
|
|
56
|
-
this.knownValidators = new Map();
|
|
51
|
+
this.aggregatorSlotSubnet = new MapDef(() => new Map());
|
|
57
52
|
/**
|
|
58
53
|
* Run per slot.
|
|
59
54
|
* - Subscribe to gossip subnets 2 slots in advance
|
|
60
55
|
* - Unsubscribe from expired subnets
|
|
56
|
+
* - Track time to stable mesh if not yet formed
|
|
61
57
|
*/
|
|
62
58
|
this.onSlot = (clockSlot) => {
|
|
63
59
|
try {
|
|
64
|
-
|
|
60
|
+
setTimeout(() => {
|
|
61
|
+
this.onHalfSlot(clockSlot);
|
|
62
|
+
}, this.config.SECONDS_PER_SLOT * 0.5 * 1000);
|
|
63
|
+
for (const [dutiedSlot, dutiedInfo] of this.aggregatorSlotSubnet.entries()) {
|
|
65
64
|
if (dutiedSlot === clockSlot + this.opts.slotsToSubscribeBeforeAggregatorDuty) {
|
|
66
65
|
// Trigger gossip subscription first, in batch
|
|
67
|
-
if (
|
|
68
|
-
this.subscribeToSubnets(Array.from(
|
|
66
|
+
if (dutiedInfo.size > 0) {
|
|
67
|
+
this.subscribeToSubnets(Array.from(dutiedInfo.keys()), SubnetSource.committee);
|
|
69
68
|
}
|
|
70
69
|
// Then, register the subscriptions
|
|
71
|
-
|
|
70
|
+
for (const subnet of dutiedInfo.keys()) {
|
|
71
|
+
this.shortLivedSubscriptions.request({ subnet, toSlot: dutiedSlot });
|
|
72
|
+
}
|
|
72
73
|
}
|
|
74
|
+
this.trackTimeToStableMesh(clockSlot, dutiedSlot, dutiedInfo);
|
|
73
75
|
}
|
|
74
|
-
// For node >= 64 validators, we should consistently subscribe to all subnets
|
|
75
|
-
// it's important to check random subnets first
|
|
76
|
-
// See https://github.com/ChainSafe/lodestar/issues/4929
|
|
77
|
-
this.unsubscribeExpiredRandomSubnets(clockSlot);
|
|
78
76
|
this.unsubscribeExpiredCommitteeSubnets(clockSlot);
|
|
77
|
+
this.pruneExpiredAggregator(clockSlot);
|
|
79
78
|
}
|
|
80
79
|
catch (e) {
|
|
81
80
|
this.logger.error("Error on AttnetsService.onSlot", { slot: clockSlot }, e);
|
|
82
81
|
}
|
|
83
82
|
};
|
|
83
|
+
this.onHalfSlot = (clockSlot) => {
|
|
84
|
+
for (const [dutiedSlot, dutiedInfo] of this.aggregatorSlotSubnet.entries()) {
|
|
85
|
+
this.trackTimeToStableMesh(clockSlot, dutiedSlot, dutiedInfo);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
84
88
|
/**
|
|
85
89
|
* Run per epoch, clean-up operations that are not urgent
|
|
90
|
+
* Subscribe to new random subnets every EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION epochs
|
|
86
91
|
*/
|
|
87
92
|
this.onEpoch = (epoch) => {
|
|
88
93
|
try {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
94
|
+
if (epoch % EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION === 0) {
|
|
95
|
+
this.recomputeLongLivedSubnets();
|
|
96
|
+
}
|
|
92
97
|
}
|
|
93
98
|
catch (e) {
|
|
94
99
|
this.logger.error("Error on AttnetsService.onEpoch", { epoch }, e);
|
|
@@ -101,11 +106,10 @@ export class AttnetsService {
|
|
|
101
106
|
this.committeeSubnets.request({ subnet, toSlot: Infinity });
|
|
102
107
|
}
|
|
103
108
|
}
|
|
104
|
-
this.randBetweenFn = this.opts.randBetweenFn ?? randBetween;
|
|
105
|
-
this.shuffleFn = this.opts.shuffleFn ?? shuffle;
|
|
106
109
|
if (metrics) {
|
|
107
|
-
metrics.attnetsService.
|
|
110
|
+
metrics.attnetsService.longLivedSubscriptions.addCollect(() => this.onScrapeLodestarMetrics(metrics));
|
|
108
111
|
}
|
|
112
|
+
this.recomputeLongLivedSubnets();
|
|
109
113
|
this.clock.on(ClockEvent.slot, this.onSlot);
|
|
110
114
|
this.clock.on(ClockEvent.epoch, this.onEpoch);
|
|
111
115
|
}
|
|
@@ -114,32 +118,34 @@ export class AttnetsService {
|
|
|
114
118
|
this.clock.off(ClockEvent.epoch, this.onEpoch);
|
|
115
119
|
}
|
|
116
120
|
/**
|
|
117
|
-
* Get all active subnets for the hearbeat
|
|
121
|
+
* Get all active subnets for the hearbeat:
|
|
122
|
+
* - committeeSubnets so that submitted attestations can be spread to the network
|
|
123
|
+
* - longLivedSubscriptions because other peers based on this node's ENR for their submitted attestations
|
|
118
124
|
*/
|
|
119
125
|
getActiveSubnets() {
|
|
120
|
-
|
|
121
|
-
|
|
126
|
+
const shortLivedSubnets = this.committeeSubnets.getActiveTtl(this.clock.currentSlot);
|
|
127
|
+
const longLivedSubscriptionsToSlot = (Math.floor(this.clock.currentEpoch / EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION) + 1) *
|
|
128
|
+
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION *
|
|
129
|
+
SLOTS_PER_EPOCH;
|
|
130
|
+
const longLivedSubnets = Array.from(this.longLivedSubscriptions).map((subnet) => ({
|
|
131
|
+
subnet,
|
|
132
|
+
toSlot: longLivedSubscriptionsToSlot,
|
|
133
|
+
}));
|
|
134
|
+
// could be overlap, PeerDiscovery will handle it
|
|
135
|
+
return [...shortLivedSubnets, ...longLivedSubnets];
|
|
122
136
|
}
|
|
123
137
|
/**
|
|
124
138
|
* Called from the API when validator is a part of a committee.
|
|
125
139
|
*/
|
|
126
140
|
addCommitteeSubscriptions(subscriptions) {
|
|
127
|
-
const
|
|
128
|
-
let addedknownValidators = false;
|
|
129
|
-
for (const { validatorIndex, subnet, slot, isAggregator } of subscriptions) {
|
|
130
|
-
// Add known validator
|
|
131
|
-
if (!this.knownValidators.has(validatorIndex))
|
|
132
|
-
addedknownValidators = true;
|
|
133
|
-
this.knownValidators.set(validatorIndex, currentSlot);
|
|
141
|
+
for (const { subnet, slot, isAggregator } of subscriptions) {
|
|
134
142
|
// the peer-manager heartbeat will help find the subnet
|
|
135
143
|
this.committeeSubnets.request({ subnet, toSlot: slot + 1 });
|
|
136
144
|
if (isAggregator) {
|
|
137
145
|
// need exact slot here
|
|
138
|
-
this.aggregatorSlotSubnet.getOrDefault(slot).
|
|
146
|
+
this.aggregatorSlotSubnet.getOrDefault(slot).set(subnet, null);
|
|
139
147
|
}
|
|
140
148
|
}
|
|
141
|
-
if (addedknownValidators)
|
|
142
|
-
this.rebalanceRandomSubnets();
|
|
143
149
|
}
|
|
144
150
|
/**
|
|
145
151
|
* Check if a subscription is still active before handling a gossip object
|
|
@@ -150,16 +156,25 @@ export class AttnetsService {
|
|
|
150
156
|
}
|
|
151
157
|
return this.aggregatorSlotSubnet.getOrDefault(slot).has(subnet);
|
|
152
158
|
}
|
|
153
|
-
/**
|
|
159
|
+
/**
|
|
160
|
+
* TODO-dll: clarify how many epochs before the fork we should subscribe to the new fork
|
|
161
|
+
* Call ONLY ONCE: Two epoch before the fork, re-subscribe all existing random subscriptions to the new fork
|
|
162
|
+
**/
|
|
154
163
|
subscribeSubnetsToNextFork(nextFork) {
|
|
155
|
-
this.logger.info("Subscribing to
|
|
156
|
-
|
|
164
|
+
this.logger.info("Subscribing to long lived attnets to next fork", {
|
|
165
|
+
nextFork,
|
|
166
|
+
subnets: Array.from(this.longLivedSubscriptions).join(","),
|
|
167
|
+
});
|
|
168
|
+
for (const subnet of this.longLivedSubscriptions) {
|
|
157
169
|
this.gossip.subscribeTopic({ type: gossipType, fork: nextFork, subnet });
|
|
158
170
|
}
|
|
159
171
|
}
|
|
160
|
-
/**
|
|
172
|
+
/**
|
|
173
|
+
* TODO-dll: clarify how many epochs after the fork we should unsubscribe to the new fork
|
|
174
|
+
* Call ONLY ONCE: Two epochs after the fork, un-subscribe all subnets from the old fork
|
|
175
|
+
**/
|
|
161
176
|
unsubscribeSubnetsFromPrevFork(prevFork) {
|
|
162
|
-
this.logger.info("Unsubscribing to
|
|
177
|
+
this.logger.info("Unsubscribing to long lived attnets from prev fork", { prevFork });
|
|
163
178
|
for (let subnet = 0; subnet < ATTESTATION_SUBNET_COUNT; subnet++) {
|
|
164
179
|
if (!this.opts.subscribeAllSubnets) {
|
|
165
180
|
this.gossip.unsubscribeTopic({ type: gossipType, fork: prevFork, subnet });
|
|
@@ -167,111 +182,95 @@ export class AttnetsService {
|
|
|
167
182
|
}
|
|
168
183
|
}
|
|
169
184
|
/**
|
|
170
|
-
*
|
|
171
|
-
* If a random subnet is present, we do not unsubscribe from it.
|
|
185
|
+
* Track time to form stable mesh if not yet formed
|
|
172
186
|
*/
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
187
|
+
trackTimeToStableMesh(clockSlot, dutiedSlot, dutiedInfo) {
|
|
188
|
+
if (dutiedSlot < clockSlot) {
|
|
189
|
+
// aggregator duty is expired, set timeToStableMesh to some big value so we know this value is not good
|
|
190
|
+
for (const [subnet, timeToFormMesh] of dutiedInfo.entries()) {
|
|
191
|
+
if (timeToFormMesh === null) {
|
|
192
|
+
dutiedInfo.set(subnet, NOT_ABLE_TO_FORM_STABLE_MESH_SEC);
|
|
193
|
+
this.metrics?.attnetsService.subscriptionsCommitteeTimeToStableMesh.observe({ subnet }, NOT_ABLE_TO_FORM_STABLE_MESH_SEC);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else if (dutiedSlot <= clockSlot + this.opts.slotsToSubscribeBeforeAggregatorDuty) {
|
|
198
|
+
// aggregator duty is not expired, track time to stable mesh if this is the 1st time we see mesh peers>=Dlo (6)
|
|
199
|
+
for (const [subnet, timeToFormMesh] of dutiedInfo.entries()) {
|
|
200
|
+
if (timeToFormMesh === null) {
|
|
201
|
+
const topicStr = stringifyGossipTopic(this.config, {
|
|
202
|
+
type: gossipType,
|
|
203
|
+
fork: this.config.getForkName(dutiedSlot),
|
|
204
|
+
subnet,
|
|
205
|
+
});
|
|
206
|
+
const numMeshPeers = this.gossip.mesh.get(topicStr)?.size ?? 0;
|
|
207
|
+
if (numMeshPeers >= GOSSIP_D_LOW) {
|
|
208
|
+
const timeToStableMeshSec = this.clock.secFromSlot(dutiedSlot - this.opts.slotsToSubscribeBeforeAggregatorDuty);
|
|
209
|
+
// set to dutiedInfo so we'll not set to metrics again
|
|
210
|
+
dutiedInfo.set(subnet, timeToStableMeshSec);
|
|
211
|
+
this.metrics?.attnetsService.subscriptionsCommitteeTimeToStableMesh.observe({ subnet }, timeToStableMeshSec);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
177
215
|
}
|
|
178
216
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
* available subnets to choose from.
|
|
183
|
-
*/
|
|
184
|
-
unsubscribeExpiredRandomSubnets(slot) {
|
|
185
|
-
const expired = this.subscriptionsRandom.getExpired(slot);
|
|
186
|
-
const currentSlot = this.clock.currentSlot;
|
|
187
|
-
if (expired.length === 0) {
|
|
217
|
+
recomputeLongLivedSubnets() {
|
|
218
|
+
if (this.nodeId === null) {
|
|
219
|
+
this.logger.verbose("Cannot recompute long-lived subscriptions, no nodeId");
|
|
188
220
|
return;
|
|
189
221
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
222
|
+
const oldSubnets = this.longLivedSubscriptions;
|
|
223
|
+
const newSubnets = computeSubscribedSubnet(this.nodeId, this.clock.currentEpoch);
|
|
224
|
+
this.logger.verbose("Recomputing long-lived subscriptions", {
|
|
225
|
+
epoch: this.clock.currentEpoch,
|
|
226
|
+
oldSubnets: Array.from(oldSubnets).join(","),
|
|
227
|
+
newSubnets: newSubnets.join(","),
|
|
228
|
+
});
|
|
229
|
+
const toRemoveSubnets = [];
|
|
230
|
+
for (const subnet of oldSubnets) {
|
|
231
|
+
if (!newSubnets.includes(subnet)) {
|
|
232
|
+
toRemoveSubnets.push(subnet);
|
|
194
233
|
}
|
|
195
|
-
return;
|
|
196
234
|
}
|
|
197
|
-
//
|
|
198
|
-
this.
|
|
199
|
-
|
|
235
|
+
// First, tell gossip to subscribe to the subnets if not connected already
|
|
236
|
+
this.subscribeToSubnets(newSubnets, SubnetSource.longLived);
|
|
237
|
+
// then update longLivedSubscriptions
|
|
238
|
+
for (const subnet of toRemoveSubnets) {
|
|
239
|
+
this.longLivedSubscriptions.delete(subnet);
|
|
240
|
+
}
|
|
241
|
+
for (const subnet of newSubnets) {
|
|
242
|
+
// this.longLivedSubscriptions is a set so it'll handle duplicates
|
|
243
|
+
this.longLivedSubscriptions.add(subnet);
|
|
244
|
+
}
|
|
245
|
+
// Only tell gossip to unsubsribe last, longLivedSubscriptions has the latest state
|
|
246
|
+
this.unsubscribeSubnets(toRemoveSubnets, this.clock.currentSlot, SubnetSource.longLived);
|
|
247
|
+
this.updateMetadata();
|
|
200
248
|
}
|
|
201
249
|
/**
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
205
|
-
* We don't keep track of a specific validator to random subnet, rather the ratio of active
|
|
206
|
-
* validators to random subnets. So when a validator goes offline, we can simply remove the
|
|
207
|
-
* allocated amount of random subnets.
|
|
250
|
+
* Unsubscribe to a committee subnet from subscribedCommitteeSubnets.
|
|
251
|
+
* If a random subnet is present, we do not unsubscribe from it.
|
|
208
252
|
*/
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
const deleted = this.knownValidators.delete(index);
|
|
214
|
-
if (deleted)
|
|
215
|
-
deletedKnownValidators = true;
|
|
216
|
-
}
|
|
253
|
+
unsubscribeExpiredCommitteeSubnets(slot) {
|
|
254
|
+
const expired = this.shortLivedSubscriptions.getExpired(slot);
|
|
255
|
+
if (expired.length > 0) {
|
|
256
|
+
this.unsubscribeSubnets(expired, slot, SubnetSource.committee);
|
|
217
257
|
}
|
|
218
|
-
if (deletedKnownValidators)
|
|
219
|
-
this.rebalanceRandomSubnets();
|
|
220
258
|
}
|
|
221
259
|
/**
|
|
222
260
|
* No need to track aggregator for past slots.
|
|
223
261
|
* @param currentSlot
|
|
224
262
|
*/
|
|
225
263
|
pruneExpiredAggregator(currentSlot) {
|
|
226
|
-
for (const
|
|
227
|
-
if (currentSlot >
|
|
228
|
-
this.aggregatorSlotSubnet.delete(
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Called when we have new validators or expired validators.
|
|
234
|
-
* knownValidators should be updated before this function.
|
|
235
|
-
*/
|
|
236
|
-
rebalanceRandomSubnets() {
|
|
237
|
-
const slot = this.clock.currentSlot;
|
|
238
|
-
// By limiting to ATTESTATION_SUBNET_COUNT, if target is still over subnetDiff equals 0
|
|
239
|
-
const targetRandomSubnetCount = Math.min(this.knownValidators.size * RANDOM_SUBNETS_PER_VALIDATOR, ATTESTATION_SUBNET_COUNT);
|
|
240
|
-
const subnetDiff = targetRandomSubnetCount - this.subscriptionsRandom.size;
|
|
241
|
-
// subscribe to more random subnets
|
|
242
|
-
if (subnetDiff > 0) {
|
|
243
|
-
const activeSubnets = new Set(this.subscriptionsRandom.getActive(slot));
|
|
244
|
-
const allSubnets = Array.from({ length: ATTESTATION_SUBNET_COUNT }, (_, i) => i);
|
|
245
|
-
const availableSubnets = allSubnets.filter((subnet) => !activeSubnets.has(subnet));
|
|
246
|
-
const subnetsToConnect = this.shuffleFn(availableSubnets).slice(0, subnetDiff);
|
|
247
|
-
// Tell gossip to connect to the subnets if not connected already
|
|
248
|
-
this.subscribeToSubnets(subnetsToConnect, SubnetSource.random);
|
|
249
|
-
// Register these new subnets until some future slot
|
|
250
|
-
for (const subnet of subnetsToConnect) {
|
|
251
|
-
// the heartbeat will help connect to respective peers
|
|
252
|
-
this.subscriptionsRandom.request({ subnet, toSlot: this.randomSubscriptionSlotLen() + slot });
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
// unsubscribe some random subnets
|
|
256
|
-
if (subnetDiff < 0) {
|
|
257
|
-
const activeRandomSubnets = this.subscriptionsRandom.getActive(slot);
|
|
258
|
-
// TODO: Do we want to remove the oldest subnets or the newest subnets?
|
|
259
|
-
// .slice(-2) will extract the last two items of the array
|
|
260
|
-
const toRemoveSubnets = activeRandomSubnets.slice(subnetDiff);
|
|
261
|
-
for (const subnet of toRemoveSubnets) {
|
|
262
|
-
this.subscriptionsRandom.delete(subnet);
|
|
264
|
+
for (const dutiedSlot of this.aggregatorSlotSubnet.keys()) {
|
|
265
|
+
if (currentSlot > dutiedSlot) {
|
|
266
|
+
this.aggregatorSlotSubnet.delete(dutiedSlot);
|
|
263
267
|
}
|
|
264
|
-
this.unsubscribeSubnets(toRemoveSubnets, slot, SubnetSource.random);
|
|
265
|
-
}
|
|
266
|
-
// If there has been a change update the local ENR bitfield
|
|
267
|
-
if (subnetDiff !== 0) {
|
|
268
|
-
this.updateMetadata();
|
|
269
268
|
}
|
|
270
269
|
}
|
|
271
270
|
/** Update ENR */
|
|
272
271
|
updateMetadata() {
|
|
273
272
|
const subnets = ssz.phase0.AttestationSubnets.defaultValue();
|
|
274
|
-
for (const subnet of this.
|
|
273
|
+
for (const subnet of this.longLivedSubscriptions) {
|
|
275
274
|
subnets.set(subnet, true);
|
|
276
275
|
}
|
|
277
276
|
// Only update metadata if necessary, setting `metadata.[key]` triggers a write to disk
|
|
@@ -279,11 +278,14 @@ export class AttnetsService {
|
|
|
279
278
|
this.metadata.attnets = subnets;
|
|
280
279
|
}
|
|
281
280
|
}
|
|
282
|
-
/**
|
|
281
|
+
/**
|
|
282
|
+
* Trigger a gossip subcription only if not already subscribed
|
|
283
|
+
* shortLivedSubscriptions or longLivedSubscriptions should be updated right AFTER this called
|
|
284
|
+
**/
|
|
283
285
|
subscribeToSubnets(subnets, src) {
|
|
284
286
|
const forks = getActiveForks(this.config, this.clock.currentEpoch);
|
|
285
287
|
for (const subnet of subnets) {
|
|
286
|
-
if (!this.
|
|
288
|
+
if (!this.shortLivedSubscriptions.has(subnet) && !this.longLivedSubscriptions.has(subnet)) {
|
|
287
289
|
for (const fork of forks) {
|
|
288
290
|
this.gossip.subscribeTopic({ type: gossipType, fork, subnet });
|
|
289
291
|
}
|
|
@@ -291,15 +293,17 @@ export class AttnetsService {
|
|
|
291
293
|
}
|
|
292
294
|
}
|
|
293
295
|
}
|
|
294
|
-
/**
|
|
296
|
+
/**
|
|
297
|
+
* Trigger a gossip un-subscription only if no-one is still subscribed
|
|
298
|
+
* If unsubscribe long lived subnets, longLivedSubscriptions should be updated right BEFORE this called
|
|
299
|
+
**/
|
|
295
300
|
unsubscribeSubnets(subnets, slot, src) {
|
|
296
301
|
// No need to unsubscribeTopic(). Return early to prevent repetitive extra work
|
|
297
302
|
if (this.opts.subscribeAllSubnets)
|
|
298
303
|
return;
|
|
299
304
|
const forks = getActiveForks(this.config, this.clock.currentEpoch);
|
|
300
305
|
for (const subnet of subnets) {
|
|
301
|
-
if (!this.
|
|
302
|
-
!this.subscriptionsRandom.isActiveAtSlot(subnet, slot)) {
|
|
306
|
+
if (!this.shortLivedSubscriptions.isActiveAtSlot(subnet, slot) && !this.longLivedSubscriptions.has(subnet)) {
|
|
303
307
|
for (const fork of forks) {
|
|
304
308
|
this.gossip.unsubscribeTopic({ type: gossipType, fork, subnet });
|
|
305
309
|
}
|
|
@@ -307,14 +311,21 @@ export class AttnetsService {
|
|
|
307
311
|
}
|
|
308
312
|
}
|
|
309
313
|
}
|
|
310
|
-
randomSubscriptionSlotLen() {
|
|
311
|
-
return (this.randBetweenFn(EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION, 2 * EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION) *
|
|
312
|
-
SLOTS_PER_EPOCH);
|
|
313
|
-
}
|
|
314
314
|
onScrapeLodestarMetrics(metrics) {
|
|
315
315
|
metrics.attnetsService.committeeSubnets.set(this.committeeSubnets.size);
|
|
316
|
-
metrics.attnetsService.subscriptionsCommittee.set(this.
|
|
317
|
-
|
|
316
|
+
metrics.attnetsService.subscriptionsCommittee.set(this.shortLivedSubscriptions.size);
|
|
317
|
+
// track short lived subnet status, >= 6 (Dlo) means healthy, otherwise unhealthy
|
|
318
|
+
const currentSlot = this.clock.currentSlot;
|
|
319
|
+
for (const { subnet } of this.shortLivedSubscriptions.getActiveTtl(currentSlot)) {
|
|
320
|
+
const topicStr = stringifyGossipTopic(this.config, {
|
|
321
|
+
type: gossipType,
|
|
322
|
+
fork: this.config.getForkName(currentSlot),
|
|
323
|
+
subnet,
|
|
324
|
+
});
|
|
325
|
+
const numMeshPeers = this.gossip.mesh.get(topicStr)?.size ?? 0;
|
|
326
|
+
metrics.attnetsService.subscriptionsCommitteeMeshPeers.observe({ subnet }, numMeshPeers);
|
|
327
|
+
}
|
|
328
|
+
metrics.attnetsService.longLivedSubscriptions.set(this.longLivedSubscriptions.size);
|
|
318
329
|
let aggregatorCount = 0;
|
|
319
330
|
for (const subnets of this.aggregatorSlotSubnet.values()) {
|
|
320
331
|
aggregatorCount += subnets.size;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attnetsService.js","sourceRoot":"","sources":["../../../src/network/subnets/attnetsService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attnetsService.js","sourceRoot":"","sources":["../../../src/network/subnets/attnetsService.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qCAAqC,EAErC,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAc,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAS,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAC,UAAU,EAAS,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAC,SAAS,EAAkB,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAC,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAC,uBAAuB,EAAC,MAAM,WAAW,CAAC;AAElD,MAAM,UAAU,GAAG,UAAU,CAAC,kBAAkB,CAAC;AAEjD,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,uCAAuB,CAAA;IACvB,wCAAwB,CAAA;AAC1B,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAMD;;GAEG;AACH,MAAM,gCAAgC,GAAG,CAAC,CAAC,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IAiBzB,YACmB,MAAoB,EACpB,KAAa,EACb,MAAwB,EACxB,QAA4B,EAC5B,MAAc,EACd,OAAkC,EAClC,MAAqB,EACrB,IAAwB;QAPxB,WAAM,GAAN,MAAM,CAAc;QACpB,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAkB;QACxB,aAAQ,GAAR,QAAQ,CAAoB;QAC5B,WAAM,GAAN,MAAM,CAAQ;QACd,YAAO,GAAP,OAAO,CAA2B;QAClC,WAAM,GAAN,MAAM,CAAe;QACrB,SAAI,GAAJ,IAAI,CAAoB;QAxB3C,gEAAgE;QACxD,qBAAgB,GAAG,IAAI,SAAS,EAAE,CAAC;QAC3C;;;;WAIG;QACK,4BAAuB,GAAG,IAAI,SAAS,EAAE,CAAC;QAClD,+FAA+F;QACvF,2BAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;QACnD;;;WAGG;QACK,yBAAoB,GAAG,IAAI,MAAM,CAA2B,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAyGrF;;;;;WAKG;QACK,WAAM,GAAG,CAAC,SAAe,EAAQ,EAAE;YACzC,IAAI,CAAC;gBACH,UAAU,CACR,GAAG,EAAE;oBACH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAC7B,CAAC,EACD,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAC1C,CAAC;gBAEF,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC3E,IAAI,UAAU,KAAK,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,oCAAoC,EAAE,CAAC;wBAC9E,8CAA8C;wBAC9C,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;4BACxB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;wBACjF,CAAC;wBACD,mCAAmC;wBACnC,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;4BACvC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC;wBACrE,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBAChE,CAAC;gBAED,IAAI,CAAC,kCAAkC,CAAC,SAAS,CAAC,CAAC;gBACnD,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,EAAC,IAAI,EAAE,SAAS,EAAC,EAAE,CAAU,CAAC,CAAC;YACrF,CAAC;QACH,CAAC,CAAC;QAEM,eAAU,GAAG,CAAC,SAAe,EAAQ,EAAE;YAC7C,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC3E,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC;QAwCF;;;WAGG;QACK,YAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;YACvC,IAAI,CAAC;gBACH,IAAI,KAAK,GAAG,qCAAqC,KAAK,CAAC,EAAE,CAAC;oBACxD,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACnC,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAC,KAAK,EAAC,EAAE,CAAU,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC,CAAC;QAzLA,6GAA6G;QAC7G,mGAAmG;QACnG,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAClC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,wBAAwB,EAAE,MAAM,EAAE,EAAE,CAAC;gBACjE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;QACxG,CAAC;QACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACH,gBAAgB;QACd,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAErF,MAAM,4BAA4B,GAChC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,qCAAqC,CAAC,GAAG,CAAC,CAAC;YACjF,qCAAqC;YACrC,eAAe,CAAC;QAClB,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChF,MAAM;YACN,MAAM,EAAE,4BAA4B;SACrC,CAAC,CAAC,CAAC;QAEJ,iDAAiD;QACjD,OAAO,CAAC,GAAG,iBAAiB,EAAE,GAAG,gBAAgB,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,aAAsC;QAC9D,KAAK,MAAM,EAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAC,IAAI,aAAa,EAAE,CAAC;YACzD,uDAAuD;YACvD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAC,CAAC,CAAC;YAC1D,IAAI,YAAY,EAAE,CAAC;gBACjB,uBAAuB;gBACvB,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,MAAc,EAAE,IAAU;QACtC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IAED;;;QAGI;IACJ,0BAA0B,CAAC,QAAkB;QAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE;YACjE,QAAQ;YACR,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SAC3D,CAAC,CAAC;QACH,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED;;;QAGI;IACJ,8BAA8B,CAAC,QAAkB;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAC;QACnF,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,wBAAwB,EAAE,MAAM,EAAE,EAAE,CAAC;YACjE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IA4CD;;OAEG;IACK,qBAAqB,CAAC,SAAe,EAAE,UAAgB,EAAE,UAA8B;QAC7F,IAAI,UAAU,GAAG,SAAS,EAAE,CAAC;YAC3B,uGAAuG;YACvG,KAAK,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC5D,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;oBAC5B,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;oBACzD,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,sCAAsC,CAAC,OAAO,CACzE,EAAC,MAAM,EAAC,EACR,gCAAgC,CACjC,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,UAAU,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,oCAAoC,EAAE,CAAC;YACpF,+GAA+G;YAC/G,KAAK,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC5D,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;oBAC5B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE;wBACjD,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;wBACzC,MAAM;qBACP,CAAC,CAAC;oBACH,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;oBAC/D,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;wBACjC,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAChD,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAC5D,CAAC;wBACF,sDAAsD;wBACtD,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;wBAC5C,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,sCAAsC,CAAC,OAAO,CAAC,EAAC,MAAM,EAAC,EAAE,mBAAmB,CAAC,CAAC;oBAC7G,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAgBO,yBAAyB;QAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC;YAC5E,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC/C,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,sCAAsC,EAAE;YAC1D,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;YAC9B,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5C,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;SACjC,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAE5D,qCAAqC;QACrC,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,mEAAmE;YACnE,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,mFAAmF;QACnF,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACzF,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;;OAGG;IACK,kCAAkC,CAAC,IAAU;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,sBAAsB,CAAC,WAAiB;QAC9C,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1D,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;gBAC7B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,iBAAiB;IACT,cAAc;QACpB,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;QAC7D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,uFAAuF;QACvF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;;QAGI;IACI,kBAAkB,CAAC,OAAiB,EAAE,GAAiB;QAC7D,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACnE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1F,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC;gBAC/D,CAAC;gBACD,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;QAGI;IACI,kBAAkB,CAAC,OAAiB,EAAE,IAAU,EAAE,GAAiB;QACzE,+EAA+E;QAC/E,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,OAAO;QAE1C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACnE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3G,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,OAA2B;QACzD,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxE,OAAO,CAAC,cAAc,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACrF,iFAAiF;QACjF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QAC3C,KAAK,MAAM,EAAC,MAAM,EAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE;gBACjD,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC;gBAC1C,MAAM;aACP,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;YAC/D,OAAO,CAAC,cAAc,CAAC,+BAA+B,CAAC,OAAO,CAAC,EAAC,MAAM,EAAC,EAAE,YAAY,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,CAAC,cAAc,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACpF,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;YACzD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,cAAc,CAAC,yBAAyB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACxE,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/network/subnets/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/network/subnets/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC"}
|
|
@@ -22,7 +22,6 @@ export interface IAttnetsService extends SubnetsService {
|
|
|
22
22
|
export type RandBetweenFn = (min: number, max: number) => number;
|
|
23
23
|
export type ShuffleFn = <T>(arr: T[]) => T[];
|
|
24
24
|
export type SubnetsServiceOpts = {
|
|
25
|
-
deterministicLongLivedAttnets?: boolean;
|
|
26
25
|
subscribeAllSubnets?: boolean;
|
|
27
26
|
slotsToSubscribeBeforeAggregatorDuty: number;
|
|
28
27
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,cAAc,UAAU,CAAC"}
|
package/lib/util/profile.js
CHANGED
|
@@ -37,7 +37,10 @@ export async function writeHeapSnapshot(prefix, dirpath) {
|
|
|
37
37
|
const snapshotStream = v8.getHeapSnapshot();
|
|
38
38
|
const filepath = `${dirpath}/${prefix}_${new Date().toISOString()}.heapsnapshot`;
|
|
39
39
|
const fileStream = fs.createWriteStream(filepath);
|
|
40
|
-
return new Promise((resolve) => {
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
fileStream.on("error", (err) => {
|
|
42
|
+
reject(err);
|
|
43
|
+
});
|
|
41
44
|
snapshotStream.pipe(fileStream);
|
|
42
45
|
snapshotStream.on("end", () => {
|
|
43
46
|
resolve(filepath);
|
package/lib/util/profile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/util/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEjD,4DAA4D;IAC5D,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,wCAAwC;QACxC,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACxC,OAAO,CAAC,OAAO,EAAE,CAAC;QAElB,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;gBACxC,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,EAAC,OAAO,EAAC,EAAE,EAAE;oBAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;wBACT,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnC,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;oBAED,kDAAkD;oBAClD,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;oBACjC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc,EAAE,OAAe;IACrE,oCAAoC;IACpC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,cAAc,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,GAAG,OAAO,IAAI,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC;IACjF,MAAM,UAAU,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/util/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEjD,4DAA4D;IAC5D,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,wCAAwC;QACxC,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACxC,OAAO,CAAC,OAAO,EAAE,CAAC;QAElB,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;gBACxC,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,EAAC,OAAO,EAAC,EAAE,EAAE;oBAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;wBACT,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnC,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;oBAED,kDAAkD;oBAClD,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;oBACjC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc,EAAE,OAAe;IACrE,oCAAoC;IACpC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,cAAc,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,GAAG,OAAO,IAAI,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC;IACjF,MAAM,UAAU,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC5B,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|