From fcf59e8aa4d05929bb18668308c8ac07de4fa990 Mon Sep 17 00:00:00 2001 From: abefernan <44572727+abefernan@users.noreply.github.com> Date: Mon, 15 Jan 2024 09:33:14 +0100 Subject: [PATCH] Add get validators helper --- lib/staking.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 lib/staking.ts diff --git a/lib/staking.ts b/lib/staking.ts new file mode 100644 index 0000000..e2c864c --- /dev/null +++ b/lib/staking.ts @@ -0,0 +1,25 @@ +import { QueryClient, StakingExtension, setupStakingExtension } from "@cosmjs/stargate"; +import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; +import { Validator } from "cosmjs-types/cosmos/staking/v1beta1/staking"; + +const getValidatorsPage = ( + queryClient: QueryClient & StakingExtension, + paginationKey: Uint8Array | undefined, +) => queryClient.staking.validators("BOND_STATUS_BONDED", paginationKey); + +export const getAllValidators = async (rpcUrl: string): Promise => { + const validators: Validator[] = []; + + const tmClient = await Tendermint34Client.connect(rpcUrl); + const queryClient = QueryClient.withExtensions(tmClient, setupStakingExtension); + + let paginationKey: Uint8Array | undefined = undefined; + + do { + const response = await getValidatorsPage(queryClient, paginationKey); + validators.push(...response.validators); + paginationKey = response.pagination?.nextKey; + } while (paginationKey?.length); + + return validators; +};