/** * This code was AUTOGENERATED using the Codama library. * Please DO NOT EDIT THIS FILE, instead use visitors * to add features, then rerun Codama to update it. * * @see https://github.com/codama-idl/codama */ import { assertAccountExists, assertAccountsExist, combineCodec, decodeAccount, fetchEncodedAccount, fetchEncodedAccounts, getArrayDecoder, getArrayEncoder, getStructDecoder, getStructEncoder, getU32Decoder, getU32Encoder, transformEncoder, type Account, type Address, type Codec, type Decoder, type EncodedAccount, type Encoder, type FetchAccountConfig, type FetchAccountsConfig, type MaybeAccount, type MaybeEncodedAccount, type ReadonlyUint8Array, } from "@solana/kit"; import { AccountType, getAccountTypeDecoder, getAccountTypeEncoder, getValidatorStakeInfoDecoder, getValidatorStakeInfoEncoder, type ValidatorStakeInfo, type ValidatorStakeInfoArgs, } from "../types/index.ts"; export const VALIDATOR_LIST_ACCOUNT_TYPE: AccountType = AccountType.ValidatorList; export function getValidatorListAccountTypeBytes(): ReadonlyUint8Array { return getAccountTypeEncoder().encode(VALIDATOR_LIST_ACCOUNT_TYPE); } /** Storage list for all validator stake accounts in the pool. */ export type ValidatorList = { /** Account type, must be `ValidatorList` currently */ accountType: AccountType; /** Maximum allowable number of validators */ maxValidators: number; /** List of stake info for each validator in the pool */ validators: Array; }; export type ValidatorListArgs = { /** Maximum allowable number of validators */ maxValidators: number; /** List of stake info for each validator in the pool */ validators: Array; }; /** Gets the encoder for {@link ValidatorListArgs} account data. */ export function getValidatorListEncoder(): Encoder { return transformEncoder( getStructEncoder([ ["accountType", getAccountTypeEncoder()], ["maxValidators", getU32Encoder()], ["validators", getArrayEncoder(getValidatorStakeInfoEncoder())], ]), (value) => ({ ...value, accountType: VALIDATOR_LIST_ACCOUNT_TYPE }), ); } /** Gets the decoder for {@link ValidatorList} account data. */ export function getValidatorListDecoder(): Decoder { return getStructDecoder([ ["accountType", getAccountTypeDecoder()], ["maxValidators", getU32Decoder()], ["validators", getArrayDecoder(getValidatorStakeInfoDecoder())], ]); } /** Gets the codec for {@link ValidatorList} account data. */ export function getValidatorListCodec(): Codec< ValidatorListArgs, ValidatorList > { return combineCodec(getValidatorListEncoder(), getValidatorListDecoder()); } export function decodeValidatorList( encodedAccount: EncodedAccount, ): Account; export function decodeValidatorList( encodedAccount: MaybeEncodedAccount, ): MaybeAccount; export function decodeValidatorList( encodedAccount: EncodedAccount | MaybeEncodedAccount, ): Account | MaybeAccount { return decodeAccount( encodedAccount as MaybeEncodedAccount, getValidatorListDecoder(), ); } export async function fetchValidatorList( rpc: Parameters[0], address: Address, config?: FetchAccountConfig, ): Promise> { const maybeAccount = await fetchMaybeValidatorList(rpc, address, config); assertAccountExists(maybeAccount); return maybeAccount; } export async function fetchMaybeValidatorList( rpc: Parameters[0], address: Address, config?: FetchAccountConfig, ): Promise> { const maybeAccount = await fetchEncodedAccount(rpc, address, config); return decodeValidatorList(maybeAccount); } export async function fetchAllValidatorList( rpc: Parameters[0], addresses: Array
, config?: FetchAccountsConfig, ): Promise[]> { const maybeAccounts = await fetchAllMaybeValidatorList( rpc, addresses, config, ); assertAccountsExist(maybeAccounts); return maybeAccounts; } export async function fetchAllMaybeValidatorList( rpc: Parameters[0], addresses: Array
, config?: FetchAccountsConfig, ): Promise[]> { const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config); return maybeAccounts.map((maybeAccount) => decodeValidatorList(maybeAccount)); }