Skip to content

Commit 3f89c3f

Browse files
committed
fix rpc nodes count after limiting peers msg
1 parent 0a1549c commit 3f89c3f

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
@@ -395,6 +395,10 @@ export const peerRemoveSchema = z.object({
395395
identity_pubkey: z.string(),
396396
});
397397

398+
const rpcCountUpdateSchema = z.object({
399+
rpc_count: z.number(),
400+
});
401+
398402
const peersUpdateSchema = z.object({
399403
add: z.array(peerUpdateSchema).optional(),
400404
update: z.array(peerUpdateSchema).optional(),
@@ -406,6 +410,10 @@ export const peersSchema = z.discriminatedUnion("key", [
406410
key: z.literal("update"),
407411
value: peersUpdateSchema,
408412
}),
413+
peersTopicSchema.extend({
414+
key: z.literal("rpc"),
415+
value: rpcCountUpdateSchema,
416+
}),
409417
]);
410418

411419
const tsTileTimersSchema = z.object({

src/api/useSetAtomWsData.ts

+15-4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import {
3838
deleteSlotStatusBoundsAtom,
3939
deleteSlotResponseBoundsAtom,
4040
skipRateAtom,
41+
rpcCountAtom,
4142
} from "../atoms";
4243
import {
4344
EstimatedSlotDuration,
@@ -125,6 +126,7 @@ export function useSetAtomWsData() {
125126
const addPeers = useSetAtom(addPeersAtom);
126127
const updatePeers = useSetAtom(updatePeersAtom);
127128
const removePeers = useSetAtom(removePeersAtom);
129+
const setRpcCount = useSetAtom(rpcCountAtom)
128130

129131
const setBlockEngine = useSetAtom(blockEngineAtom);
130132

@@ -217,10 +219,19 @@ export function useSetAtomWsData() {
217219
break;
218220
}
219221
} else if (topic === "peers") {
220-
const { value } = peersSchema.parse(msg);
221-
addPeers(value.add);
222-
updatePeers(value.update);
223-
removePeers(value.remove);
222+
const { key, value } = peersSchema.parse(msg);
223+
switch (key) {
224+
case "update": {
225+
addPeers(value.add);
226+
updatePeers(value.update);
227+
removePeers(value.remove);
228+
break;
229+
}
230+
case "rpc": {
231+
setRpcCount(value.rpc_count);
232+
break;
233+
}
234+
}
224235
} else if (topic === "slot") {
225236
const { key, value } = slotSchema.parse(msg);
226237
switch (key) {

src/atoms.ts

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

391+
const _rpcCountAtom = atom<number>(0);
392+
393+
export const rpcCountAtom = atom(
394+
(get) => get(_rpcCountAtom),
395+
(get, set, count: number) => {
396+
set(_rpcCountAtom, count);
397+
}
398+
);
399+
391400
export const peerStatsAtom = atom((get) => {
392401
const peers = get(peersAtom);
402+
const rpcCount = get(rpcCountAtom);
393403
if (!peers) return;
394404

395405
const activePeers = Object.values(peers).filter((p) => !p.removed);
396-
const rpc = activePeers.filter(
397-
(p) => p.vote.every((v) => !v.activated_stake) && !!p.gossip
398-
);
399406
const validators = activePeers.filter((p) =>
400407
p.vote.some((v) => v.activated_stake)
401408
);
@@ -417,7 +424,7 @@ export const peerStatsAtom = atom((get) => {
417424
);
418425

419426
return {
420-
rpcCount: rpc.length,
427+
rpcCount: rpcCount,
421428
validatorCount: validators.length,
422429
activeStake,
423430
delinquentStake,

0 commit comments

Comments
 (0)