/** * Base Solana adapter implementation */ import { SolanaRpcMethod, SolanaProtocolVersion, SolanaProtocolInfo, SolanaProtocolCapabilities } from '../types/protocol'; import { GetHealthRequest, GetVersionRequest, GetSupplyRequest, GetLargestAccountsRequest, GetSlotRequest, GetBlockHeightRequest, GetEpochInfoRequest, GetMinimumBalanceForRentExemptionRequest, GetClusterNodesRequest, GetVoteAccountsRequest, GetAccountInfoRequest, GetBalanceRequest, GetLatestBlockhashRequest, GetMultipleAccountsRequest, GetTransactionCountRequest, GetSignatureStatusesRequest, GetTransactionRequest, RequestAirdropRequest, GetSignaturesForAddressRequest, GetFeeForMessageRequest, GetTokenAccountsByOwnerRequest, GetTokenAccountBalanceRequest, GetTokenSupplyRequest, GetTokenLargestAccountsRequest, GetProgramAccountsRequest, EncodedGetAccountInfoRequest, EncodedGetBalanceRequest, EncodedGetLatestBlockhashRequest, EncodedGetMultipleAccountsRequest, EncodedGetSupplyRequest, EncodedGetLargestAccountsRequest, EncodedGetSlotRequest, EncodedGetBlockHeightRequest, EncodedGetEpochInfoRequest, EncodedGetMinimumBalanceForRentExemptionRequest, EncodedGetClusterNodesRequest, EncodedGetVoteAccountsRequest, EncodedGetTransactionCountRequest, EncodedGetSignatureStatusesRequest, EncodedGetTransactionRequest, EncodedRequestAirdropRequest, EncodedGetSignaturesForAddressRequest, EncodedGetFeeForMessageRequest, EncodedGetTokenAccountsByOwnerRequest, EncodedGetTokenAccountBalanceRequest, EncodedGetTokenSupplyRequest, EncodedGetTokenLargestAccountsRequest, EncodedGetProgramAccountsRequest } from '../types/requests'; import { GetBlockRequest, GetBlocksRequest, GetBlockTimeRequest, GetSlotLeaderRequest, GetSlotLeadersRequest, EncodedGetBlockRequest, EncodedGetBlocksRequest, EncodedGetBlockTimeRequest, EncodedGetSlotLeaderRequest, EncodedGetSlotLeadersRequest, GetBlockCommitmentRequest, GetBlockProductionRequest, GetBlocksWithLimitRequest, EncodedGetBlockCommitmentRequest, EncodedGetBlockProductionRequest, EncodedGetBlocksWithLimitRequest } from '../types/requests/block'; import { IsBlockhashValidRequest, EncodedIsBlockhashValidRequest, GetRecentPrioritizationFeesRequest, EncodedGetRecentPrioritizationFeesRequest } from '../types/requests/transaction'; import { GetInflationGovernorRequest, GetInflationRateRequest, GetInflationRewardRequest, GetRecentPerformanceSamplesRequest, GetStakeMinimumDelegationRequest, EncodedGetInflationGovernorRequest, EncodedGetInflationRateRequest, EncodedGetInflationRewardRequest, EncodedGetRecentPerformanceSamplesRequest, EncodedGetStakeMinimumDelegationRequest } from '../types/requests'; import { GetEpochScheduleRequest, EncodedGetEpochScheduleRequest, GetGenesisHashRequest, EncodedGetGenesisHashRequest, GetIdentityRequest, EncodedGetIdentityRequest, GetLeaderScheduleRequest, EncodedGetLeaderScheduleRequest, GetFirstAvailableBlockRequest, EncodedGetFirstAvailableBlockRequest, GetMaxRetransmitSlotRequest, EncodedGetMaxRetransmitSlotRequest, GetMaxShredInsertSlotRequest, EncodedGetMaxShredInsertSlotRequest, GetHighestSnapshotSlotRequest, EncodedGetHighestSnapshotSlotRequest, MinimumLedgerSlotRequest, EncodedMinimumLedgerSlotRequest } from '../types/requests'; import { VersionResponse, SupplyResponse, LargestAccountsResponse, SlotResponse, BlockHeightResponse, AccountInfoRpcResponse, BalanceRpcResponse, LatestBlockhashRpcResponse, MultipleAccountsResponse, TransactionCountResponse, SignatureStatusesResponse, TransactionResponse, AirdropResponse, SignaturesForAddressResponse, FeeForMessageResponse, TokenAccountsByOwnerResponse, TokenAccountBalanceResponse, TokenSupplyResponse, TokenLargestAccountsResponse, ProgramAccountsResponse, ProgramAccountsContextResponse, EpochInfoResponse, MinimumBalanceForRentExemptionResponse, ClusterNodesResponse, VoteAccountsResponse, BlockResponse, BlocksResponse, BlockTimeResponse, SlotLeaderResponse, SlotLeadersResponse, InflationGovernorResponse, InflationRateResponse, InflationRewardResponse, RecentPerformanceSamplesResponse, StakeMinimumDelegationResponse } from '../types/responses'; import { EpochScheduleResponse, LeaderScheduleResponse, HighestSnapshotSlotResponse } from '../types/responses'; import { BlockCommitmentResponse, BlockProductionResponse, RecentPrioritizationFeesResponse } from '../types/responses'; export type EncodedGetHealthRequest = []; export type EncodedGetVersionRequest = []; export interface RequestEncoder { encodeGetHealth(request: GetHealthRequest): EncodedGetHealthRequest; encodeGetVersion(request: GetVersionRequest): EncodedGetVersionRequest; encodeGetSupply(request: GetSupplyRequest): EncodedGetSupplyRequest; encodeGetLargestAccounts(request: GetLargestAccountsRequest): EncodedGetLargestAccountsRequest; encodeGetSlot(request: GetSlotRequest): EncodedGetSlotRequest; encodeGetBlockHeight(request: GetBlockHeightRequest): EncodedGetBlockHeightRequest; encodeGetEpochInfo(request: GetEpochInfoRequest): EncodedGetEpochInfoRequest; encodeGetMinimumBalanceForRentExemption(request: GetMinimumBalanceForRentExemptionRequest): EncodedGetMinimumBalanceForRentExemptionRequest; encodeGetClusterNodes(request: GetClusterNodesRequest): EncodedGetClusterNodesRequest; encodeGetVoteAccounts(request: GetVoteAccountsRequest): EncodedGetVoteAccountsRequest; encodeGetAccountInfo(request: GetAccountInfoRequest): EncodedGetAccountInfoRequest; encodeGetBalance(request: GetBalanceRequest): EncodedGetBalanceRequest; encodeGetLatestBlockhash(request: GetLatestBlockhashRequest): EncodedGetLatestBlockhashRequest; encodeGetMultipleAccounts(request: GetMultipleAccountsRequest): EncodedGetMultipleAccountsRequest; encodeGetTransactionCount(request: GetTransactionCountRequest): EncodedGetTransactionCountRequest; encodeGetSignatureStatuses(request: GetSignatureStatusesRequest): EncodedGetSignatureStatusesRequest; encodeGetTransaction(request: GetTransactionRequest): EncodedGetTransactionRequest; encodeRequestAirdrop(request: RequestAirdropRequest): EncodedRequestAirdropRequest; encodeGetTokenAccountsByOwner(request: GetTokenAccountsByOwnerRequest): EncodedGetTokenAccountsByOwnerRequest; encodeGetTokenAccountBalance(request: GetTokenAccountBalanceRequest): EncodedGetTokenAccountBalanceRequest; encodeGetTokenSupply(request: GetTokenSupplyRequest): EncodedGetTokenSupplyRequest; encodeGetTokenLargestAccounts(request: GetTokenLargestAccountsRequest): EncodedGetTokenLargestAccountsRequest; encodeGetProgramAccounts(request: GetProgramAccountsRequest): EncodedGetProgramAccountsRequest; encodeGetSignaturesForAddress(request: GetSignaturesForAddressRequest): EncodedGetSignaturesForAddressRequest; encodeGetFeeForMessage(request: GetFeeForMessageRequest): EncodedGetFeeForMessageRequest; encodeGetBlock(request: GetBlockRequest): EncodedGetBlockRequest; encodeGetBlocks(request: GetBlocksRequest): EncodedGetBlocksRequest; encodeGetBlockTime(request: GetBlockTimeRequest): EncodedGetBlockTimeRequest; encodeGetSlotLeader(request: GetSlotLeaderRequest): EncodedGetSlotLeaderRequest; encodeGetSlotLeaders(request: GetSlotLeadersRequest): EncodedGetSlotLeadersRequest; encodeGetInflationGovernor(request: GetInflationGovernorRequest): EncodedGetInflationGovernorRequest; encodeGetInflationRate(request: GetInflationRateRequest): EncodedGetInflationRateRequest; encodeGetInflationReward(request: GetInflationRewardRequest): EncodedGetInflationRewardRequest; encodeGetRecentPerformanceSamples(request: GetRecentPerformanceSamplesRequest): EncodedGetRecentPerformanceSamplesRequest; encodeGetStakeMinimumDelegation(request: GetStakeMinimumDelegationRequest): EncodedGetStakeMinimumDelegationRequest; encodeGetEpochSchedule(request: GetEpochScheduleRequest): EncodedGetEpochScheduleRequest; encodeGetGenesisHash(request: GetGenesisHashRequest): EncodedGetGenesisHashRequest; encodeGetIdentity(request: GetIdentityRequest): EncodedGetIdentityRequest; encodeGetLeaderSchedule(request: GetLeaderScheduleRequest): EncodedGetLeaderScheduleRequest; encodeGetFirstAvailableBlock(request: GetFirstAvailableBlockRequest): EncodedGetFirstAvailableBlockRequest; encodeGetMaxRetransmitSlot(request: GetMaxRetransmitSlotRequest): EncodedGetMaxRetransmitSlotRequest; encodeGetMaxShredInsertSlot(request: GetMaxShredInsertSlotRequest): EncodedGetMaxShredInsertSlotRequest; encodeGetBlockCommitment(request: GetBlockCommitmentRequest): EncodedGetBlockCommitmentRequest; encodeGetBlockProduction(request: GetBlockProductionRequest): EncodedGetBlockProductionRequest; encodeGetBlocksWithLimit(request: GetBlocksWithLimitRequest): EncodedGetBlocksWithLimitRequest; encodeIsBlockhashValid(request: IsBlockhashValidRequest): EncodedIsBlockhashValidRequest; encodeGetHighestSnapshotSlot(request: GetHighestSnapshotSlotRequest): EncodedGetHighestSnapshotSlotRequest; encodeMinimumLedgerSlot(request: MinimumLedgerSlotRequest): EncodedMinimumLedgerSlotRequest; encodeGetRecentPrioritizationFees(request: GetRecentPrioritizationFeesRequest): EncodedGetRecentPrioritizationFeesRequest; } export interface ResponseDecoder { decodeHealth(response: unknown): string; decodeVersion(response: unknown): VersionResponse; decodeSupply(response: unknown): SupplyResponse; decodeLargestAccounts(response: unknown): LargestAccountsResponse; decodeSlot(response: unknown): SlotResponse; decodeBlockHeight(response: unknown): BlockHeightResponse; decodeEpochInfo(response: unknown): EpochInfoResponse; decodeMinimumBalanceForRentExemption(response: unknown): MinimumBalanceForRentExemptionResponse; decodeClusterNodes(response: unknown): ClusterNodesResponse; decodeVoteAccounts(response: unknown): VoteAccountsResponse; decodeAccountInfo(response: unknown): AccountInfoRpcResponse; decodeBalance(response: unknown): BalanceRpcResponse; decodeLatestBlockhash(response: unknown): LatestBlockhashRpcResponse; decodeMultipleAccounts(response: unknown): MultipleAccountsResponse; decodeTransactionCount(response: unknown): TransactionCountResponse; decodeSignatureStatuses(response: unknown): SignatureStatusesResponse; decodeTransaction(response: unknown): TransactionResponse; decodeAirdrop(response: unknown): AirdropResponse; decodeTokenAccountsByOwner(response: unknown): TokenAccountsByOwnerResponse; decodeTokenAccountBalance(response: unknown): TokenAccountBalanceResponse; decodeTokenSupply(response: unknown): TokenSupplyResponse; decodeTokenLargestAccounts(response: unknown): TokenLargestAccountsResponse; decodeProgramAccounts(response: unknown, withContext?: boolean): ProgramAccountsResponse | ProgramAccountsContextResponse; decodeSignaturesForAddress(response: unknown): SignaturesForAddressResponse; decodeFeeForMessage(response: unknown): FeeForMessageResponse; decodeBlock(response: unknown): BlockResponse; decodeBlocks(response: unknown): BlocksResponse; decodeBlockTime(response: unknown): BlockTimeResponse; decodeSlotLeader(response: unknown): SlotLeaderResponse; decodeSlotLeaders(response: unknown): SlotLeadersResponse; decodeInflationGovernor(response: unknown): InflationGovernorResponse; decodeInflationRate(response: unknown): InflationRateResponse; decodeInflationReward(response: unknown): InflationRewardResponse; decodeRecentPerformanceSamples(response: unknown): RecentPerformanceSamplesResponse; decodeStakeMinimumDelegation(response: unknown): StakeMinimumDelegationResponse; decodeEpochSchedule(response: unknown): EpochScheduleResponse; decodeGenesisHash(response: unknown): string; decodeIdentity(response: unknown): string; decodeLeaderSchedule(response: unknown): LeaderScheduleResponse; decodeFirstAvailableBlock(response: unknown): number; decodeMaxRetransmitSlot(response: unknown): number | null; decodeMaxShredInsertSlot(response: unknown): number | null; decodeBlockCommitment(response: unknown): BlockCommitmentResponse; decodeBlockProduction(response: unknown): BlockProductionResponse; decodeBlocksWithLimit(response: unknown): BlocksResponse; decodeIsBlockhashValid(response: unknown): boolean; decodeHighestSnapshotSlot(response: unknown): HighestSnapshotSlotResponse; decodeMinimumLedgerSlot(response: unknown): number; decodeRecentPrioritizationFees(response: unknown): RecentPrioritizationFeesResponse; } export interface IProtocolAdapter { getVersion(): SolanaProtocolVersion; getSupportedMethods(): Set; getCapabilities(): SolanaProtocolCapabilities; getProtocolInfo(): SolanaProtocolInfo; } export interface ISolanaProtocolAdapter extends IProtocolAdapter, RequestEncoder, ResponseDecoder { } export declare abstract class BaseSolanaAdapter implements RequestEncoder, ResponseDecoder, ISolanaProtocolAdapter { protected version: SolanaProtocolVersion; constructor(version: SolanaProtocolVersion); abstract getSupportedMethods(): Set; abstract getCapabilities(): SolanaProtocolCapabilities; getVersion(): SolanaProtocolVersion; getProtocolInfo(): SolanaProtocolInfo; encodeGetHealth(_request: GetHealthRequest): EncodedGetHealthRequest; encodeGetVersion(_request: GetVersionRequest): EncodedGetVersionRequest; encodeGetSupply(request: GetSupplyRequest): EncodedGetSupplyRequest; encodeGetLargestAccounts(request: GetLargestAccountsRequest): EncodedGetLargestAccountsRequest; encodeGetSlot(request: GetSlotRequest): EncodedGetSlotRequest; encodeGetBlockHeight(request: GetBlockHeightRequest): EncodedGetBlockHeightRequest; encodeGetAccountInfo(request: GetAccountInfoRequest): EncodedGetAccountInfoRequest; encodeGetBalance(request: GetBalanceRequest): EncodedGetBalanceRequest; encodeGetLatestBlockhash(request: GetLatestBlockhashRequest): EncodedGetLatestBlockhashRequest; encodeGetMultipleAccounts(request: GetMultipleAccountsRequest): EncodedGetMultipleAccountsRequest; encodeGetTransactionCount(request: GetTransactionCountRequest): EncodedGetTransactionCountRequest; encodeGetEpochInfo(request: GetEpochInfoRequest): EncodedGetEpochInfoRequest; encodeGetMinimumBalanceForRentExemption(request: GetMinimumBalanceForRentExemptionRequest): EncodedGetMinimumBalanceForRentExemptionRequest; encodeGetClusterNodes(_request: GetClusterNodesRequest): EncodedGetClusterNodesRequest; encodeGetVoteAccounts(request: GetVoteAccountsRequest): EncodedGetVoteAccountsRequest; encodeGetSignatureStatuses(request: GetSignatureStatusesRequest): EncodedGetSignatureStatusesRequest; encodeGetTransaction(request: GetTransactionRequest): EncodedGetTransactionRequest; encodeRequestAirdrop(request: RequestAirdropRequest): EncodedRequestAirdropRequest; encodeGetTokenAccountsByOwner(request: GetTokenAccountsByOwnerRequest): EncodedGetTokenAccountsByOwnerRequest; encodeGetTokenAccountBalance(request: GetTokenAccountBalanceRequest): EncodedGetTokenAccountBalanceRequest; encodeGetTokenSupply(request: GetTokenSupplyRequest): EncodedGetTokenSupplyRequest; encodeGetTokenLargestAccounts(request: GetTokenLargestAccountsRequest): EncodedGetTokenLargestAccountsRequest; encodeGetProgramAccounts(request: GetProgramAccountsRequest): EncodedGetProgramAccountsRequest; encodeGetSignaturesForAddress(request: GetSignaturesForAddressRequest): EncodedGetSignaturesForAddressRequest; encodeGetBlock(request: GetBlockRequest): EncodedGetBlockRequest; encodeGetBlocks(request: GetBlocksRequest): EncodedGetBlocksRequest; encodeGetBlockTime(request: GetBlockTimeRequest): EncodedGetBlockTimeRequest; encodeGetSlotLeader(request: GetSlotLeaderRequest): EncodedGetSlotLeaderRequest; encodeGetSlotLeaders(request: GetSlotLeadersRequest): EncodedGetSlotLeadersRequest; encodeGetFeeForMessage(request: GetFeeForMessageRequest): EncodedGetFeeForMessageRequest; encodeGetInflationGovernor(request: GetInflationGovernorRequest): EncodedGetInflationGovernorRequest; encodeGetInflationRate(request: GetInflationRateRequest): EncodedGetInflationRateRequest; encodeGetInflationReward(request: GetInflationRewardRequest): EncodedGetInflationRewardRequest; encodeGetRecentPerformanceSamples(request: GetRecentPerformanceSamplesRequest): EncodedGetRecentPerformanceSamplesRequest; encodeGetStakeMinimumDelegation(request: GetStakeMinimumDelegationRequest): EncodedGetStakeMinimumDelegationRequest; encodeGetEpochSchedule(_request: GetEpochScheduleRequest): EncodedGetEpochScheduleRequest; encodeGetGenesisHash(_request: GetGenesisHashRequest): EncodedGetGenesisHashRequest; encodeGetIdentity(_request: GetIdentityRequest): EncodedGetIdentityRequest; encodeGetLeaderSchedule(request: GetLeaderScheduleRequest): EncodedGetLeaderScheduleRequest; encodeGetFirstAvailableBlock(_request: GetFirstAvailableBlockRequest): EncodedGetFirstAvailableBlockRequest; encodeGetMaxRetransmitSlot(_request: GetMaxRetransmitSlotRequest): EncodedGetMaxRetransmitSlotRequest; encodeGetMaxShredInsertSlot(_request: GetMaxShredInsertSlotRequest): EncodedGetMaxShredInsertSlotRequest; encodeGetBlockCommitment(request: GetBlockCommitmentRequest): EncodedGetBlockCommitmentRequest; encodeGetBlockProduction(request: GetBlockProductionRequest): EncodedGetBlockProductionRequest; encodeGetBlocksWithLimit(request: GetBlocksWithLimitRequest): EncodedGetBlocksWithLimitRequest; encodeIsBlockhashValid(request: IsBlockhashValidRequest): EncodedIsBlockhashValidRequest; encodeGetHighestSnapshotSlot(_request: GetHighestSnapshotSlotRequest): EncodedGetHighestSnapshotSlotRequest; encodeMinimumLedgerSlot(_request: MinimumLedgerSlotRequest): EncodedMinimumLedgerSlotRequest; encodeGetRecentPrioritizationFees(request: GetRecentPrioritizationFeesRequest): EncodedGetRecentPrioritizationFeesRequest; protected buildOptions(options?: any): Record; decodeHealth(response: unknown): string; decodeVersion(response: unknown): VersionResponse; decodeEpochInfo(response: unknown): EpochInfoResponse; decodeMinimumBalanceForRentExemption(response: unknown): MinimumBalanceForRentExemptionResponse; decodeClusterNodes(response: unknown): ClusterNodesResponse; decodeVoteAccounts(response: unknown): VoteAccountsResponse; decodeSupply(response: unknown): SupplyResponse; decodeLargestAccounts(response: unknown): LargestAccountsResponse; decodeSlot(response: unknown): SlotResponse; decodeBlockHeight(response: unknown): BlockHeightResponse; decodeAccountInfo(response: unknown): AccountInfoRpcResponse; decodeBalance(response: unknown): BalanceRpcResponse; decodeLatestBlockhash(response: unknown): LatestBlockhashRpcResponse; decodeMultipleAccounts(response: unknown): MultipleAccountsResponse; decodeTransactionCount(response: unknown): TransactionCountResponse; decodeSignatureStatuses(response: unknown): SignatureStatusesResponse; decodeTransaction(response: unknown): TransactionResponse; decodeAirdrop(response: unknown): AirdropResponse; decodeTokenAccountsByOwner(response: unknown): TokenAccountsByOwnerResponse; decodeTokenAccountBalance(response: unknown): TokenAccountBalanceResponse; decodeTokenSupply(response: unknown): TokenSupplyResponse; decodeTokenLargestAccounts(response: unknown): TokenLargestAccountsResponse; decodeProgramAccounts(response: unknown, withContext?: boolean): ProgramAccountsResponse | ProgramAccountsContextResponse; decodeSignaturesForAddress(response: unknown): SignaturesForAddressResponse; decodeFeeForMessage(response: unknown): FeeForMessageResponse; protected transformKeys(obj: any): any; decodeBlock(response: unknown): BlockResponse; decodeBlocks(response: unknown): BlocksResponse; decodeBlockTime(response: unknown): BlockTimeResponse; decodeSlotLeader(response: unknown): SlotLeaderResponse; decodeSlotLeaders(response: unknown): SlotLeadersResponse; decodeInflationGovernor(response: unknown): InflationGovernorResponse; decodeInflationRate(response: unknown): InflationRateResponse; decodeInflationReward(response: unknown): InflationRewardResponse; decodeRecentPerformanceSamples(response: unknown): RecentPerformanceSamplesResponse; decodeStakeMinimumDelegation(response: unknown): StakeMinimumDelegationResponse; decodeEpochSchedule(response: unknown): EpochScheduleResponse; decodeGenesisHash(response: unknown): string; decodeIdentity(response: unknown): string; decodeLeaderSchedule(response: unknown): LeaderScheduleResponse; decodeFirstAvailableBlock(response: unknown): number; decodeMaxRetransmitSlot(response: unknown): number | null; decodeMaxShredInsertSlot(response: unknown): number | null; decodeBlockCommitment(response: unknown): BlockCommitmentResponse; decodeBlockProduction(response: unknown): BlockProductionResponse; decodeBlocksWithLimit(response: unknown): BlocksResponse; decodeIsBlockhashValid(response: unknown): boolean; decodeHighestSnapshotSlot(response: unknown): HighestSnapshotSlotResponse; decodeMinimumLedgerSlot(response: unknown): number; decodeRecentPrioritizationFees(response: unknown): RecentPrioritizationFeesResponse; protected validateResponse(response: unknown): void; }