Fetching & Decoding Accounts
Leituras on-chain tipadas usando decoders gerados e RPC kit.
Receita
import { createSolanaRpc, address } from "@solana/kit";
import { fetchCounter } from "./generated/clients/js";Quando usar:
- Dashboards mostrando estado de programa.
- Checagens preflight antes de construir instruções.
- Server Components lendo dados da chain.
Exemplo Prático
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"));
}O que isso demonstra:
- Helpers fetch de alto nível vs caminho decode manual.
- Trate contas ausentes (null) antes de renderizar UI.
- Use commitment
finalizedpara snapshots contábeis.
Aprofundamento
Como funciona
getAccountInforetorna owner, lamports e bytes de dados.- Prefixo discriminator seleciona variante de conta.
- Decoders gerados mapeiam bytes para objetos tipados.
- Derivação PDA permanece no cliente ou crate util compartilhado.
Erros comuns
- Owner errado - decode lixo. Correção: verifique program id corresponde ao IDL.
- Conta fechada - dados null. Correção: trate contas fechadas na UI.
- Cache obsoleto - mostra contagens desatualizadas. Correção: assinaturas ou refresh SWR.
- Confusão base64 vs base58 - parâmetro encoding RPC importa.
- Contas grandes - limites de payload RPC. Correção: leituras fatiadas ou indexer.
Alternativas
| Alternativa | Use quando | Não use quando |
|---|---|---|
| DAS para NFTs | Ativos digitais | Contas de programa arbitrárias |
| Indexer SQL | Analytics pesado | Lookup de conta única |
| getProgramAccounts | Enumerar todas | Caro na mainnet |
FAQs
IDL Anchor 0.32.1?
Rode anchor build; aponte Codama para JSON em target/idl.
Quando regenerar?
Toda mudança de interface on-chain em CI.
Clientes tipados kit?
Codama renderiza funções nativas @solana/kit.
gill obrigatório?
Açúcar opcional sobre kit.
Next.js?
Importe clientes gerados em client components para escritas.
Testes?
Surfpool + testes de integração devnet.
web3.js?
Não misture com clientes kit gerados.
Múltiplos programas?
Uma config Codama por programa ou workspace monorepo.
Fetch de conta?
Use decoders gerados com getAccountInfo.
Erros?
Mapeie códigos de erro do programa a partir de metadados IDL.
Relacionados
- Codama - codegen
- Server-Side Reads - Next.js
- Codecs & Serialization - codecs manuais
Versões da stack: Esta página foi escrita para 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 e LiteSVM 0.6.x.