// file: crates/ksp-onchain-transport-lib/src/rpc_method.rs // version: 5 const CURRENT_HTTP_RPC_METHODS: [crate::HttpRpcMethodDescriptor; 52] = [ crate::HttpRpcMethodDescriptor::new( "getAccountInfo", crate::HttpRpcCategory::Accounts, "get_account_info", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getBalance", crate::HttpRpcCategory::Accounts, "get_balance", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_1, ), crate::HttpRpcMethodDescriptor::new( "getLargestAccounts", crate::HttpRpcCategory::Accounts, "get_largest_accounts", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getMinimumBalanceForRentExemption", crate::HttpRpcCategory::Accounts, "get_minimum_balance_for_rent_exemption", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getMultipleAccounts", crate::HttpRpcCategory::Accounts, "get_multiple_accounts", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getProgramAccounts", crate::HttpRpcCategory::Accounts, "get_program_accounts", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getTokenAccountBalance", crate::HttpRpcCategory::Tokens, "get_token_account_balance", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getTokenAccountsByDelegate", crate::HttpRpcCategory::Tokens, "get_token_accounts_by_delegate", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getTokenAccountsByOwner", crate::HttpRpcCategory::Tokens, "get_token_accounts_by_owner", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getTokenLargestAccounts", crate::HttpRpcCategory::Tokens, "get_token_largest_accounts", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getTokenSupply", crate::HttpRpcCategory::Tokens, "get_token_supply", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getFeeForMessage", crate::HttpRpcCategory::Transactions, "get_fee_for_message", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_3, ), crate::HttpRpcMethodDescriptor::new( "getLatestBlockhash", crate::HttpRpcCategory::Transactions, "get_latest_blockhash", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_3, ), crate::HttpRpcMethodDescriptor::new( "getRecentPrioritizationFees", crate::HttpRpcCategory::Transactions, "get_recent_prioritization_fees", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_3, ), crate::HttpRpcMethodDescriptor::new( "getSignaturesForAddress", crate::HttpRpcCategory::Transactions, "get_signatures_for_address", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_3, ), crate::HttpRpcMethodDescriptor::new( "getSignatureStatuses", crate::HttpRpcCategory::Transactions, "get_signature_statuses", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_3, ), crate::HttpRpcMethodDescriptor::new( "getTransaction", crate::HttpRpcCategory::Transactions, "get_transaction", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::StableWithDeprecatedLegacy, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_3, ), crate::HttpRpcMethodDescriptor::new( "getTransactionCount", crate::HttpRpcCategory::Transactions, "get_transaction_count", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_3, ), crate::HttpRpcMethodDescriptor::new( "isBlockhashValid", crate::HttpRpcCategory::Transactions, "is_blockhash_valid", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_3, ), crate::HttpRpcMethodDescriptor::new( "requestAirdrop", crate::HttpRpcCategory::Transactions, "request_airdrop", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::WriteSubmission, crate::TransportRetryClass::NeverAfterDispatch, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_3, ), crate::HttpRpcMethodDescriptor::new( "sendTransaction", crate::HttpRpcCategory::Transactions, "send_transaction", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::WriteSubmission, crate::TransportRetryClass::NeverAfterDispatch, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_3, ), crate::HttpRpcMethodDescriptor::new( "simulateTransaction", crate::HttpRpcCategory::Transactions, "simulate_transaction", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Simulation, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_3, ), crate::HttpRpcMethodDescriptor::new( "getBlock", crate::HttpRpcCategory::Blocks, "get_block", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::StableWithDeprecatedLegacy, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getBlockCommitment", crate::HttpRpcCategory::Blocks, "get_block_commitment", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getBlockHeight", crate::HttpRpcCategory::Blocks, "get_block_height", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getBlockProduction", crate::HttpRpcCategory::Blocks, "get_block_production", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getBlocks", crate::HttpRpcCategory::Blocks, "get_blocks", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getBlocksWithLimit", crate::HttpRpcCategory::Blocks, "get_blocks_with_limit", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getBlockTime", crate::HttpRpcCategory::Blocks, "get_block_time", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getFirstAvailableBlock", crate::HttpRpcCategory::Blocks, "get_first_available_block", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getRecentPerformanceSamples", crate::HttpRpcCategory::Blocks, "get_recent_performance_samples", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "minimumLedgerSlot", crate::HttpRpcCategory::Blocks, "minimum_ledger_slot", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getClusterNodes", crate::HttpRpcCategory::Cluster, "get_cluster_nodes", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getEpochInfo", crate::HttpRpcCategory::Cluster, "get_epoch_info", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getEpochSchedule", crate::HttpRpcCategory::Cluster, "get_epoch_schedule", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getGenesisHash", crate::HttpRpcCategory::Cluster, "get_genesis_hash", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_1, ), crate::HttpRpcMethodDescriptor::new( "getHealth", crate::HttpRpcCategory::Cluster, "get_health", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_1, ), crate::HttpRpcMethodDescriptor::new( "getHighestSnapshotSlot", crate::HttpRpcCategory::Cluster, "get_highest_snapshot_slot", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getIdentity", crate::HttpRpcCategory::Cluster, "get_identity", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getLeaderSchedule", crate::HttpRpcCategory::Cluster, "get_leader_schedule", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getMaxRetransmitSlot", crate::HttpRpcCategory::Cluster, "get_max_retransmit_slot", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getMaxShredInsertSlot", crate::HttpRpcCategory::Cluster, "get_max_shred_insert_slot", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getSlot", crate::HttpRpcCategory::Cluster, "get_slot", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getSlotLeader", crate::HttpRpcCategory::Cluster, "get_slot_leader", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getSlotLeaders", crate::HttpRpcCategory::Cluster, "get_slot_leaders", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getVersion", crate::HttpRpcCategory::Cluster, "get_version", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_1, ), crate::HttpRpcMethodDescriptor::new( "getVoteAccounts", crate::HttpRpcCategory::Cluster, "get_vote_accounts", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_2, ), crate::HttpRpcMethodDescriptor::new( "getInflationGovernor", crate::HttpRpcCategory::Economics, "get_inflation_governor", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getInflationRate", crate::HttpRpcCategory::Economics, "get_inflation_rate", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getInflationReward", crate::HttpRpcCategory::Economics, "get_inflation_reward", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getStakeMinimumDelegation", crate::HttpRpcCategory::Economics, "get_stake_minimum_delegation", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), crate::HttpRpcMethodDescriptor::new( "getSupply", crate::HttpRpcCategory::Economics, "get_supply", crate::RpcDocumentationStatus::Stable, crate::RpcRuntimeStatus::Supported, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::RetrySafe, std::option::Option::None, crate::HttpRpcCoverageRelease::V0_2_4, ), ]; const HISTORICAL_HTTP_RPC_METHODS: [crate::HttpRpcMethodDescriptor; 14] = [ crate::HttpRpcMethodDescriptor::new( "confirmTransaction", crate::HttpRpcCategory::Historical, "confirm_transaction", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getSignatureStatuses"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getConfirmedBlock", crate::HttpRpcCategory::Historical, "get_confirmed_block", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getBlock"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getConfirmedBlocks", crate::HttpRpcCategory::Historical, "get_confirmed_blocks", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getBlocks"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getConfirmedBlocksWithLimit", crate::HttpRpcCategory::Historical, "get_confirmed_blocks_with_limit", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getBlocksWithLimit"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getConfirmedSignaturesForAddress2", crate::HttpRpcCategory::Historical, "get_confirmed_signatures_for_address2", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getSignaturesForAddress"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getConfirmedTransaction", crate::HttpRpcCategory::Historical, "get_confirmed_transaction", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getTransaction"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getFeeCalculatorForBlockhash", crate::HttpRpcCategory::Historical, "get_fee_calculator_for_blockhash", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("isBlockhashValid / getFeeForMessage"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getFeeRateGovernor", crate::HttpRpcCategory::Historical, "get_fee_rate_governor", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getFeeForMessage"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getFees", crate::HttpRpcCategory::Historical, "get_fees", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getFeeForMessage"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getRecentBlockhash", crate::HttpRpcCategory::Historical, "get_recent_blockhash", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getLatestBlockhash"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getSignatureConfirmation", crate::HttpRpcCategory::Historical, "get_signature_confirmation", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getSignatureStatuses"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getSignatureStatus", crate::HttpRpcCategory::Historical, "get_signature_status", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getSignatureStatuses"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getSnapshotSlot", crate::HttpRpcCategory::Historical, "get_snapshot_slot", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::Some("getHighestSnapshotSlot"), crate::HttpRpcCoverageRelease::Historical, ), crate::HttpRpcMethodDescriptor::new( "getStakeActivation", crate::HttpRpcCategory::Historical, "get_stake_activation", crate::RpcDocumentationStatus::Deprecated, crate::RpcRuntimeStatus::Removed, crate::RpcRequestFormStatus::Stable, crate::RpcOperationKind::Read, crate::TransportRetryClass::NotApplicable, std::option::Option::None, crate::HttpRpcCoverageRelease::Historical, ), ]; /// Functional category used by the audited Solana HTTP JSON-RPC registry. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub enum HttpRpcCategory { /// Account state and rent queries. Accounts, /// SPL token-oriented RPC queries exposed by the standard Solana HTTP surface. Tokens, /// Transaction, signature, fee, simulation and submission methods. Transactions, /// Block, slot-history and performance-sample methods. Blocks, /// Cluster identity, epoch, leader, health and validator methods. Cluster, /// Supply, inflation and stake-economics methods. Economics, /// Historically documented methods removed from the targeted Agave runtime generation. Historical, } /// Documentation lifecycle status of one audited RPC method. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub enum RpcDocumentationStatus { /// The method is documented as stable. Stable, /// The method is documented as deprecated or obsolete. Deprecated, /// The method is documented as unstable or experimental. Unstable, } impl RpcDocumentationStatus { /// Returns the stable machine-readable status code. #[must_use] pub const fn code(self) -> &'static str { return match self { Self::Stable => "stable", Self::Deprecated => "deprecated", Self::Unstable => "unstable", }; } } /// Runtime availability status of one audited RPC method. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub enum RpcRuntimeStatus { /// The targeted runtime generation still supports the method. Supported, /// The method is historically documented but removed from the targeted runtime generation. Removed, } impl RpcRuntimeStatus { /// Returns the stable machine-readable runtime status code. #[must_use] pub const fn code(self) -> &'static str { return match self { Self::Supported => "supported", Self::Removed => "removed", }; } } /// Request-form policy attached to a stable RPC method. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub enum RpcRequestFormStatus { /// Only the currently documented stable request form is tracked by KSP. Stable, /// The method is stable but also has a documented deprecated legacy request form that must warn when explicitly used. StableWithDeprecatedLegacy, } impl RpcRequestFormStatus { /// Returns whether the method has a documented deprecated legacy request form. #[must_use] pub const fn has_deprecated_legacy(self) -> bool { return match self { Self::Stable => false, Self::StableWithDeprecatedLegacy => true, }; } } /// Technical operation kind used to separate reads, simulations and submissions. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub enum RpcOperationKind { /// Read-only RPC operation. Read, /// Simulation operation that does not submit a transaction for execution. Simulation, /// Technical write/submission operation whose ambiguous post-dispatch outcome must not be resent automatically. WriteSubmission, } /// HTTP transport retry classification attached to an RPC method descriptor. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub enum TransportRetryClass { /// The identical transport request may be retried when the transport failure is classified as retryable. RetrySafe, /// The request must not be resent automatically after an ambiguous dispatch. NeverAfterDispatch, /// Retry classification does not apply because the method is not callable on the targeted runtime. NotApplicable, } /// Release that owns the typed KSP coverage for one audited current HTTP method. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub enum HttpRpcCoverageRelease { /// `0.2.1` HTTP foundation and four canary methods. V0_2_1, /// `0.2.2` Accounts + Tokens + remaining Cluster methods. V0_2_2, /// `0.2.3` Transactions methods. V0_2_3, /// `0.2.4` Blocks + Economics methods and final HTTP compliance. V0_2_4, /// Historical registry entry with no callable typed release. Historical, } /// Immutable audited descriptor for one Solana HTTP JSON-RPC method. #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub struct HttpRpcMethodDescriptor { method: &'static str, category: crate::HttpRpcCategory, request_kind: &'static str, documentation_status: crate::RpcDocumentationStatus, runtime_status: crate::RpcRuntimeStatus, request_form_status: crate::RpcRequestFormStatus, operation_kind: crate::RpcOperationKind, transport_retry_class: crate::TransportRetryClass, replacement: std::option::Option<&'static str>, coverage_release: crate::HttpRpcCoverageRelease, } impl HttpRpcMethodDescriptor { const fn new( method: &'static str, category: crate::HttpRpcCategory, request_kind: &'static str, documentation_status: crate::RpcDocumentationStatus, runtime_status: crate::RpcRuntimeStatus, request_form_status: crate::RpcRequestFormStatus, operation_kind: crate::RpcOperationKind, transport_retry_class: crate::TransportRetryClass, replacement: std::option::Option<&'static str>, coverage_release: crate::HttpRpcCoverageRelease, ) -> Self { return Self { method, category, request_kind, documentation_status, runtime_status, request_form_status, operation_kind, transport_retry_class, replacement, coverage_release, }; } /// Returns the exact JSON-RPC method name. #[must_use] pub const fn method(&self) -> &'static str { return self.method; } /// Returns the audited functional category. #[must_use] pub const fn category(&self) -> crate::HttpRpcCategory { return self.category; } /// Returns the stable open request-kind descriptor used by future endpoint role matching. #[must_use] pub const fn request_kind(&self) -> &'static str { return self.request_kind; } /// Returns the method documentation lifecycle status. #[must_use] pub const fn documentation_status(&self) -> crate::RpcDocumentationStatus { return self.documentation_status; } /// Returns runtime availability on the targeted Agave generation. #[must_use] pub const fn runtime_status(&self) -> crate::RpcRuntimeStatus { return self.runtime_status; } /// Returns the request-form policy, including whether a documented deprecated legacy form exists. #[must_use] pub const fn request_form_status(&self) -> crate::RpcRequestFormStatus { return self.request_form_status; } /// Returns the technical operation kind. #[must_use] pub const fn operation_kind(&self) -> crate::RpcOperationKind { return self.operation_kind; } /// Returns the transport retry classification. #[must_use] pub const fn transport_retry_class(&self) -> crate::TransportRetryClass { return self.transport_retry_class; } /// Returns the documented replacement or migration direction when one exists. #[must_use] pub const fn replacement(&self) -> std::option::Option<&'static str> { return self.replacement; } /// Returns the release assigned to typed KSP coverage. #[must_use] pub const fn coverage_release(&self) -> crate::HttpRpcCoverageRelease { return self.coverage_release; } /// Returns whether calling the method itself must emit a lifecycle warning when runtime support exists. #[must_use] pub const fn requires_method_usage_warning(&self) -> bool { return match self.runtime_status { crate::RpcRuntimeStatus::Removed => false, crate::RpcRuntimeStatus::Supported => match self.documentation_status { crate::RpcDocumentationStatus::Stable => false, crate::RpcDocumentationStatus::Deprecated | crate::RpcDocumentationStatus::Unstable => true, }, }; } /// Checks runtime support and centrally emits the KSP warning required for deprecated, unstable or removed methods. /// /// Removed methods return [`crate::ERROR_CODE_METHOD_REMOVED`] and are never presented as callable standard RPC operations. pub fn ensure_runtime_supported(&self) -> ksp_core_lib::Result<()> { if self.runtime_status == crate::RpcRuntimeStatus::Removed { let replacement = match self.replacement { std::option::Option::Some(replacement) => replacement, std::option::Option::None => "none", }; ksp_logging_lib::warn!( target: crate::TRACING_TARGET, rpc_method = self.method, documentation_status = self.documentation_status.code(), runtime_status = self.runtime_status.code(), replacement, "removed Solana HTTP RPC method requested" ); let mut error = ksp_core_lib::Error::new(crate::ERROR_CODE_METHOD_REMOVED, "Solana HTTP RPC method is removed from the targeted runtime") .with_context("rpc_method", self.method) .with_context("documentation_status", self.documentation_status.code()); if let std::option::Option::Some(replacement) = self.replacement { error = error.with_context("replacement", replacement); } return std::result::Result::Err(error); } if self.requires_method_usage_warning() { let replacement = match self.replacement { std::option::Option::Some(replacement) => replacement, std::option::Option::None => "none", }; ksp_logging_lib::warn!( target: crate::TRACING_TARGET, rpc_method = self.method, documentation_status = self.documentation_status.code(), runtime_status = self.runtime_status.code(), replacement, "non-stable Solana HTTP RPC method requested" ); } return std::result::Result::Ok(()); } } /// Returns all 52 current Solana HTTP RPC method descriptors audited for the `0.2.1`–`0.2.4` coverage sequence. #[must_use] pub const fn current_http_rpc_methods() -> &'static [crate::HttpRpcMethodDescriptor] { return &CURRENT_HTTP_RPC_METHODS; } /// Returns the 14 historically documented deprecated HTTP RPC descriptors retained for compliance history. #[must_use] pub const fn historical_http_rpc_methods() -> &'static [crate::HttpRpcMethodDescriptor] { return &HISTORICAL_HTTP_RPC_METHODS; } /// Finds a current or historical standard Solana HTTP RPC descriptor by exact JSON-RPC method name. #[must_use] pub fn find_http_rpc_method(method: &str) -> std::option::Option<&'static crate::HttpRpcMethodDescriptor> { for descriptor in CURRENT_HTTP_RPC_METHODS.iter() { if descriptor.method() == method { return std::option::Option::Some(descriptor); } } for descriptor in HISTORICAL_HTTP_RPC_METHODS.iter() { if descriptor.method() == method { return std::option::Option::Some(descriptor); } } return std::option::Option::None; } #[cfg(test)] #[path = "../unit_tests/rpc_method.rs"] mod tests;