Fetching & Decoding Accounts
Lecturas tipadas en la cadena usando decodificadores generados y kit RPC.
Recipe
import { createSolanaRpc, address } from "@solana/kit";
import { fetchCounter } from "./generated/clients/js";Cuándo usar esto:
- Dashboards que muestran el estado del programa.
- Comprobaciones previas al vuelo antes de construir instrucciones.
- Server Components leyendo datos de la cadena.
Working Example
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);
// Nivel inferior: bytes crudos
const info = await rpc.getAccountInfo(counterPk, { encoding: "base64" }).send();
if (info.value) {
const decoded = decodeCounter(Buffer.from(info.value.data[0], "base64"));
}Lo que esto demuestra:
- Helpers de fetch de alto nivel frente a la ruta de decodificación manual.
- Manejar cuentas faltantes (null) antes de renderizar la UI.
- Usar el compromiso
finalizedpara instantáneas de contabilidad.
Deep Dive
How It Works
getAccountInfodevuelve el propietario, lamports y los bytes de datos.- El prefijo del discriminador selecciona la variante de la cuenta.
- Los decodificadores generados mapean bytes a objetos tipados.
- La derivación de PDA permanece en el cliente o en un crate de utilidad compartido.
Gotchas
- Propietario incorrecto - decodifica basura. Solución: verificar que el ID del programa coincide con el IDL.
- Cuenta cerrada - datos nulos. Solución: manejar cuentas cerradas en la UI.
- Caché obsoleto - muestra recuentos desactualizados. Solución: suscripciones o actualización SWR.
- Confusión Base64 vs base58 - el parámetro de codificación RPC importa.
- Cuentas grandes - límites de carga útil de RPC. Solución: dividir lecturas o usar indexador.
Alternatives
| Alternative | Use When | Don't Use When |
|---|---|---|
| DAS para NFTs | Activos digitales | Cuentas de programas arbitrarias |
| Indexer SQL | Análisis intensivo | Búsqueda de cuenta única |
| getProgramAccounts | Enumerar todo | Costoso en mainnet |
FAQs
Anchor 0.32.1 IDL?
Ejecuta anchor build; apunta Codama al JSON de target/idl.
Regenerate when?
Cada cambio en la interfaz en cadena en CI.
kit typed clients?
Codama renderiza funciones nativas de @solana/kit.
gill required?
Azúcar opcional sobre kit.
Next.js?
Importa clientes generados en componentes cliente para escrituras.
Testing?
Pruebas de integración con Surfpool + devnet.
web3.js?
No mezclar con clientes kit generados.
Multiple programs?
Una configuración de Codama por programa o espacio de trabajo monorepo.
Account fetch?
Usa decodificadores generados con getAccountInfo.
Errors?
Mapea códigos de error del programa desde metadatos IDL.
Related
- Codama - codegen
- Server-Side Reads - Next.js
- Codecs & Serialization - codecs manuales
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.