Skip to content

Commit e85fb81

Browse files
committed
fix rpc nodes count after limiting peers msg
1 parent 0f5a9f2 commit e85fb81

File tree

3 files changed

+34
-8
lines changed

3 files changed

+34
-8
lines changed

src/api/entities.ts

+8
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,10 @@ export const peerRemoveSchema = z.object({
413413
identity_pubkey: z.string(),
414414
});
415415

416+
const rpcCountUpdateSchema = z.object({
417+
rpc_count: z.number(),
418+
});
419+
416420
const peersUpdateSchema = z.object({
417421
add: z.array(peerUpdateSchema).optional(),
418422
update: z.array(peerUpdateSchema).optional(),
@@ -424,6 +428,10 @@ export const peersSchema = z.discriminatedUnion("key", [
424428
key: z.literal("update"),
425429
value: peersUpdateSchema,
426430
}),
431+
peersTopicSchema.extend({
432+
key: z.literal("rpc"),
433+
value: rpcCountUpdateSchema,
434+
}),
427435
]);
428436

429437
const tsTileTimersSchema = z.object({

src/api/useSetAtomWsData.ts

+15-4
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import {
3939
deleteSlotStatusBoundsAtom,
4040
deleteSlotResponseBoundsAtom,
4141
skipRateAtom,
42+
rpcCountAtom,
4243
} from "../atoms";
4344
import {
4445
EstimatedSlotDuration,
@@ -128,6 +129,7 @@ export function useSetAtomWsData() {
128129
const addPeers = useSetAtom(addPeersAtom);
129130
const updatePeers = useSetAtom(updatePeersAtom);
130131
const removePeers = useSetAtom(removePeersAtom);
132+
const setRpcCount = useSetAtom(rpcCountAtom)
131133

132134
const setBlockEngine = useSetAtom(blockEngineAtom);
133135

@@ -247,10 +249,19 @@ export function useSetAtomWsData() {
247249
break;
248250
}
249251
} else if (topic === "peers") {
250-
const { value } = peersSchema.parse(msg);
251-
addPeers(value.add);
252-
updatePeers(value.update);
253-
removePeers(value.remove);
252+
const { key, value } = peersSchema.parse(msg);
253+
switch (key) {
254+
case "update": {
255+
addPeers(value.add);
256+
updatePeers(value.update);
257+
removePeers(value.remove);
258+
break;
259+
}
260+
case "rpc": {
261+
setRpcCount(value.rpc_count);
262+
break;
263+
}
264+
}
254265
} else if (topic === "slot") {
255266
const { key, value } = slotSchema.parse(msg);
256267
switch (key) {

src/atoms.ts

+11-4
Original file line numberDiff line numberDiff line change
@@ -366,14 +366,21 @@ export const removePeersAtom = atom(null, (get, set, peers?: PeerRemove[]) => {
366366
}, removePeerDelay);
367367
});
368368

369+
const _rpcCountAtom = atom<number>(0);
370+
371+
export const rpcCountAtom = atom(
372+
(get) => get(_rpcCountAtom),
373+
(get, set, count: number) => {
374+
set(_rpcCountAtom, count);
375+
}
376+
);
377+
369378
export const peerStatsAtom = atom((get) => {
370379
const peers = get(peersAtom);
380+
const rpcCount = get(rpcCountAtom);
371381
if (!peers) return;
372382

373383
const activePeers = Object.values(peers).filter((p) => !p.removed);
374-
const rpc = activePeers.filter(
375-
(p) => p.vote.every((v) => !v.activated_stake) && !!p.gossip,
376-
);
377384
const validators = activePeers.filter((p) =>
378385
p.vote.some((v) => v.activated_stake),
379386
);
@@ -395,7 +402,7 @@ export const peerStatsAtom = atom((get) => {
395402
);
396403

397404
return {
398-
rpcCount: rpc.length,
405+
rpcCount: rpcCount,
399406
validatorCount: validators.length,
400407
activeStake,
401408
delinquentStake,

0 commit comments

Comments
 (0)