solana_kit_rpc_parsed_types
Parsed account data types for the Solana Kit Dart SDK.
This is the Dart port of @solana/rpc-parsed-types from the Solana TypeScript SDK.
Installation
Install with:
dart pub add solana_kit_rpc_parsed_types
If you are working within the solana_kit monorepo, the package resolves through the Dart workspace. Otherwise, specify a version or path as needed.
Documentation
- Package page: https://pub.dev/packages/solana_kit_rpc_parsed_types
- API reference: https://pub.dev/documentation/solana_kit_rpc_parsed_types/latest/
Usage
This package provides type definitions for the parsed account data returned by the Solana RPC when accounts are requested with jsonParsed encoding. It covers all native Solana programs.
Base types
The RpcParsedType and RpcParsedInfo classes serve as the foundation for all parsed account data.
import 'package:solana_kit_rpc_parsed_types/solana_kit_rpc_parsed_types.dart';
// RpcParsedType carries both a type discriminator and an info payload.
// Used for programs with multiple account variants (e.g. Token, Stake).
// RpcParsedType<TType, TInfo>
// RpcParsedInfo carries only an info payload.
// Used for programs with a single account type (e.g. Nonce, Vote).
// RpcParsedInfo<TInfo>
Token program accounts
The JsonParsedTokenProgramAccount sealed class represents parsed data from the Token and Token-2022 programs. It has three variants: token accounts, mint accounts, and multisig accounts.
import 'package:solana_kit_rpc_parsed_types/solana_kit_rpc_parsed_types.dart';
import 'package:solana_kit_addresses/solana_kit_addresses.dart';
import 'package:solana_kit_rpc_types/solana_kit_rpc_types.dart';
// Token account variant.
final tokenAccount = JsonParsedTokenAccountVariant(
info: JsonParsedTokenAccount(
isNative: false,
mint: Address('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),
owner: Address('83astBRguLMdt2h5U1Tbd4hU5SkfAWRkzG2HPM88BREAK'),
state: TokenAccountState.initialized,
tokenAmount: TokenAmount(
amount: StringifiedBigInt('1000000'),
decimals: 6,
uiAmountString: StringifiedNumber('1'),
),
),
);
print(tokenAccount.type); // 'account'
print(tokenAccount.info.mint); // EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
print(tokenAccount.info.tokenAmount.amount); // '1000000'
// Mint account variant.
final mintAccount = JsonParsedMintAccount(
info: JsonParsedMintInfo(
decimals: 6,
isInitialized: true,
supply: StringifiedBigInt('1000000000000'),
mintAuthority: Address('83astBRguLMdt2h5U1Tbd4hU5SkfAWRkzG2HPM88BREAK'),
),
);
print(mintAccount.type); // 'mint'
print(mintAccount.info.supply); // '1000000000000'
print(mintAccount.info.decimals); // 6
// Multisig account variant.
final multisigAccount = JsonParsedMultisigAccount(
info: JsonParsedMultisigInfo(
isInitialized: true,
numRequiredSigners: 2,
numValidSigners: 3,
signers: [
Address('83astBRguLMdt2h5U1Tbd4hU5SkfAWRkzG2HPM88BREAK'),
Address('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),
Address('11111111111111111111111111111111'),
],
),
);
// Pattern matching on token program account variants.
void handleTokenProgramAccount(JsonParsedTokenProgramAccount account) {
switch (account) {
case JsonParsedTokenAccountVariant(:final info):
print('Token account for mint: ${info.mint}');
case JsonParsedMintAccount(:final info):
print('Mint with supply: ${info.supply}');
case JsonParsedMultisigAccount(:final info):
print('Multisig with ${info.numRequiredSigners}/${info.numValidSigners} signers');
}
}
Stake program accounts
The JsonParsedStakeProgramAccount sealed class covers delegated and initialized stake accounts.
import 'package:solana_kit_rpc_parsed_types/solana_kit_rpc_parsed_types.dart';
import 'package:solana_kit_addresses/solana_kit_addresses.dart';
import 'package:solana_kit_rpc_types/solana_kit_rpc_types.dart';
final delegatedStake = JsonParsedDelegatedStake(
info: JsonParsedStakeAccountInfo(
meta: JsonParsedStakeMeta(
authorized: JsonParsedStakeAuthorized(
staker: Address('83astBRguLMdt2h5U1Tbd4hU5SkfAWRkzG2HPM88BREAK'),
withdrawer: Address('83astBRguLMdt2h5U1Tbd4hU5SkfAWRkzG2HPM88BREAK'),
),
lockup: JsonParsedStakeLockup(
custodian: Address('11111111111111111111111111111111'),
epoch: BigInt.zero,
unixTimestamp: UnixTimestamp(BigInt.zero),
),
rentExemptReserve: StringifiedBigInt('2282880'),
),
stake: JsonParsedStakeData(
creditsObserved: BigInt.from(100000),
delegation: JsonParsedStakeDelegation(
activationEpoch: StringifiedBigInt('580'),
deactivationEpoch: StringifiedBigInt('18446744073709551615'),
stake: StringifiedBigInt('1000000000'),
voter: Address('Vote111111111111111111111111111111111111111'),
warmupCooldownRate: 0.25,
),
),
),
);
print(delegatedStake.type); // 'delegated'
print(delegatedStake.info.stake?.delegation.stake); // '1000000000'
// Pattern matching.
void handleStakeAccount(JsonParsedStakeProgramAccount account) {
switch (account) {
case JsonParsedDelegatedStake(:final info):
print('Delegated to: ${info.stake?.delegation.voter}');
case JsonParsedInitializedStake(:final info):
print('Initialized, staker: ${info.meta.authorized.staker}');
}
}
Nonce accounts
import 'package:solana_kit_rpc_parsed_types/solana_kit_rpc_parsed_types.dart';
import 'package:solana_kit_addresses/solana_kit_addresses.dart';
import 'package:solana_kit_rpc_types/solana_kit_rpc_types.dart';
final nonceAccount = JsonParsedNonceAccount(
info: JsonParsedNonceInfo(
authority: Address('83astBRguLMdt2h5U1Tbd4hU5SkfAWRkzG2HPM88BREAK'),
blockhash: Blockhash('4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY'),
feeCalculator: JsonParsedNonceFeeCalculator(
lamportsPerSignature: StringifiedBigInt('5000'),
),
),
);
print(nonceAccount.info.authority); // 83astBRguLMdt2h5U1Tbd4hU5SkfAWRkzG2HPM88BREAK
print(nonceAccount.info.blockhash); // 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY
Vote accounts
import 'package:solana_kit_rpc_parsed_types/solana_kit_rpc_parsed_types.dart';
import 'package:solana_kit_addresses/solana_kit_addresses.dart';
import 'package:solana_kit_rpc_types/solana_kit_rpc_types.dart';
final voteInfo = JsonParsedVoteInfo(
authorizedVoters: [
JsonParsedAuthorizedVoter(
authorizedVoter: Address('Vote111111111111111111111111111111111111111'),
epoch: BigInt.from(580),
),
],
authorizedWithdrawer: Address('83astBRguLMdt2h5U1Tbd4hU5SkfAWRkzG2HPM88BREAK'),
commission: 10,
epochCredits: [
JsonParsedEpochCredit(
credits: StringifiedBigInt('100000'),
epoch: BigInt.from(580),
previousCredits: StringifiedBigInt('90000'),
),
],
lastTimestamp: JsonParsedLastTimestamp(
slot: BigInt.from(250000000),
timestamp: UnixTimestamp(BigInt.from(1700000000)),
),
nodePubkey: Address('Node1111111111111111111111111111111111111111'),
priorVoters: [],
votes: [
JsonParsedVote(
confirmationCount: 31,
slot: BigInt.from(250000000),
),
],
);
print(voteInfo.commission); // 10
print(voteInfo.votes.first.confirmationCount); // 31
API Reference
Base Classes
RpcParsedType<TType, TInfo>-- A parsed account type with atypediscriminator andinfopayload.RpcParsedInfo<TInfo>-- A parsed account type with only aninfopayload (no type discriminator).
Token Program
JsonParsedTokenProgramAccount-- Sealed class for token program accounts.JsonParsedTokenAccountVariant-- Token account variant (type:'account').JsonParsedTokenAccount-- Token account info (mint, owner, state, tokenAmount, isNative, delegate, delegatedAmount, closeAuthority, extensions, rentExemptReserve).JsonParsedMintAccount-- Mint account variant (type:'mint').JsonParsedMintInfo-- Mint info (decimals, isInitialized, supply, mintAuthority, freezeAuthority, extensions).JsonParsedMultisigAccount-- Multisig account variant (type:'multisig').JsonParsedMultisigInfo-- Multisig info (isInitialized, numRequiredSigners, numValidSigners, signers).TokenAccountState-- Enum:frozen,initialized,uninitialized.
Stake Program
JsonParsedStakeProgramAccount-- Sealed class for stake program accounts.JsonParsedDelegatedStake-- Delegated stake variant (type:'delegated').JsonParsedInitializedStake-- Initialized stake variant (type:'initialized').JsonParsedStakeAccountInfo-- Stake account info (meta, stake).JsonParsedStakeMeta-- Stake metadata (authorized, lockup, rentExemptReserve).JsonParsedStakeAuthorized-- Authorized staker and withdrawer addresses.JsonParsedStakeLockup-- Lockup configuration (custodian, epoch, unixTimestamp).JsonParsedStakeData-- Stake delegation data (creditsObserved, delegation).JsonParsedStakeDelegation-- Delegation details (activationEpoch, deactivationEpoch, stake, voter, warmupCooldownRate).
Vote Program
JsonParsedVoteAccount-- Type alias forRpcParsedInfo<JsonParsedVoteInfo>.JsonParsedVoteInfo-- Vote account info (authorizedVoters, authorizedWithdrawer, commission, epochCredits, lastTimestamp, nodePubkey, priorVoters, rootSlot, votes).JsonParsedAuthorizedVoter-- Authorized voter entry (authorizedVoter, epoch).JsonParsedEpochCredit-- Epoch credit entry (credits, epoch, previousCredits).JsonParsedLastTimestamp-- Last timestamp (slot, timestamp).JsonParsedPriorVoter-- Prior voter entry (authorizedPubkey, epochOfLastAuthorizedSwitch, targetEpoch).JsonParsedVote-- Vote entry (confirmationCount, slot).
Nonce Program
JsonParsedNonceAccount-- Type alias forRpcParsedInfo<JsonParsedNonceInfo>.JsonParsedNonceInfo-- Nonce account info (authority, blockhash, feeCalculator).JsonParsedNonceFeeCalculator-- Fee calculator (lamportsPerSignature).
Address Lookup Table
JsonParsedAddressLookupTableAccount-- Parsed address lookup table account data.
BPF Upgradeable Loader
JsonParsedBpfUpgradeableLoaderProgramAccount-- Sealed class for BPF loader account variants (program, programData, buffer, uninitialized).
Config Program
JsonParsedConfigProgramAccount-- Parsed config account data.
Sysvar Program
JsonParsedSysvarAccount-- Parsed sysvar account data (clock, rent, stakeHistory, etc.).
Example
Use example/main.dart as a runnable starting point for solana_kit_rpc_parsed_types.
- Import path:
package:solana_kit_rpc_parsed_types/solana_kit_rpc_parsed_types.dart - This section is centrally maintained with
mdtto keep package guidance aligned. - After updating shared docs templates, run
docs:updatefrom the repo root.
Maintenance
- Validate docs in CI and locally with
docs:check. - Keep examples focused on one workflow and reference package README sections for deeper API details.