Fetching & Decoding Accounts
Typed on-chain reads using generated decoders and kit RPC.
Search across all documentation pages
Typed on-chain reads using generated decoders and kit RPC.
import { createSolanaRpc, address } from "@solana/kit";
import { fetchCounter } from "./generated/clients/js";When to reach for this:
import { createSolanaRpc, address } from "@solana/kit";
import { fetchCounter, decodeCounter } from "./generated/clients/js";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const counterPk = address(process.env.COUNTER_PUBKEY!);
const account = await fetchCounter(rpc, counterPk);
console.log(account.data.count);
// Lower level: raw bytes
const info = await rpc.getAccountInfo(counterPk, { encoding: "base64" }).send();
if (info.value) {
const decoded = decodeCounter(Buffer.from(info.value.data[0], "base64"));
}What this demonstrates:
finalized commitment for accounting snapshots.getAccountInfo returns owner, lamports, and data bytes.| Alternative | Use When | Don't Use When |
|---|---|---|
| DAS for NFTs | Digital assets | Arbitrary program accounts |
| Indexer SQL | Heavy analytics | Single account lookup |
| getProgramAccounts | Enumerate all | Expensive on mainnet |
Run anchor build; point Codama at target/idl JSON.
Every on-chain interface change in CI.
Codama renders @solana/kit native functions.
Optional sugar atop kit.
Import generated clients in client components for writes.
Surfpool + devnet integration tests.
Do not mix with generated kit clients.
One Codama config per program or monorepo workspace.
Use generated decoders with getAccountInfo.
Map program error codes from IDL metadata.
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 16, 2026