solana_kit_rpc_parsed_types 0.2.1 copy "solana_kit_rpc_parsed_types: ^0.2.1" to clipboard
solana_kit_rpc_parsed_types: ^0.2.1 copied to clipboard

Parsed account data types for the Solana Kit Dart SDK.

solana_kit_rpc_parsed_types #

pub package docs CI coverage

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 #

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 a type discriminator and info payload.
  • RpcParsedInfo<TInfo> -- A parsed account type with only an info payload (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 for RpcParsedInfo<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 for RpcParsedInfo<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 mdt to keep package guidance aligned.
  • After updating shared docs templates, run docs:update from 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.
0
likes
160
points
162
downloads

Publisher

unverified uploader

Weekly Downloads

Parsed account data types for the Solana Kit Dart SDK.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

solana_kit_addresses, solana_kit_errors, solana_kit_rpc_types

More

Packages that depend on solana_kit_rpc_parsed_types