Anatomía de una cuenta
Cada cuenta de Solana comparte los mismos campos estructurales. Comprender cada campo te dice quién puede escribir, si el código o los datos viven allí y cuántos SOL se bloquean para el alquiler.
Busca en todas las páginas de la documentación
Cada cuenta de Solana comparte los mismos campos estructurales. Comprender cada campo te dice quién puede escribir, si el código o los datos viven allí y cuántos SOL se bloquean para el alquiler.
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const { value: acct } = await rpc
.getAccountInfo(address("PUBKEY"), { encoding: "base64" })
.send();Cuándo recurrir a esto:
data.lengthsolana account 11111111111111111111111111111111use anchor_lang::prelude::*;
pub fn inspect(ctx: Context<Inspect>) -> Result<()> {
let acct = &ctx.accounts.target;
msg!("lamports: {}", acct.lamports());
msg!("owner: {}", acct.owner);
msg!("data len: {}", acct.data_len());
msg!("executable: {}", acct.executable);
Ok(())
}
#[derive(Accounts)]
pub struct Inspect<'info> {
/// CHECK: raw inspection
pub target: UncheckedAccount<'info>,
}Lo que esto demuestra:
executable distingue las cuentas de programa de las cuentas de datosdata_len() devuelve el tamaño del búfer de bytes excluyendo los campos de metadatos| Campo | Tipo | Significado |
|---|---|---|
lamports | u64 | Saldo de SOL en lamports |
data | &[u8] | Carga útil de bytes sin procesar |
owner | Pubkey | Programa autorizado a escribir data |
executable | bool | true si la cuenta contiene un programa BPF |
rent_epoch | u64 | Seguimiento heredado; las cuentas exentas de alquiler usan u64::MAX |
lamports, owner, executable, rent_epoch) son administrados por el tiempo de ejecuciónowner puede cambiar el tamaño o escribir data (además del Programa del Sistema para la asignación)owner = BPF Loader y executable = truedata), no en lamports. Solución: leer el diseño de la cuenta de tokens para obtener los saldos.data es texto UTF-8 - son bytes sin procesar (Borsh, bincode o personalizado). Solución: deserializar con el esquema correcto.executable - pasar una cuenta de programa donde se esperan datos falla. Solución: verificar el indicador antes de la deserialización.rent_epoch cambiada - las cuentas modernas están exentas de alquiler; el campo de época es heredado. Solución: usar getMinimumBalanceForRentExemption para la financiación.data. Solución: validar ambos en tus restricciones.| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
RPC getAccountInfo | Inspección fuera de la cadena | Ruta activa en programas (pasar cuentas) |
Anchor Account<T> | Deserialización tipada | Diseños desconocidos o variables |
UncheckedAccount | Lectura de bytes sin procesar con comprobaciones manuales | Opción predeterminada (preferir tipada) |
Lamports, data, owner, executable, rent_epoch. Cada cuenta tiene los cinco.
Solo el programa propietario actual (a través de assign) o el Programa del Sistema durante la creación. No programas arbitrarios.
10 MB por cuenta en Agave 4.1.1. Los límites prácticos son más bajos debido a los costos de alquiler y CU.
Sí. Los programas a menudo deducen lamports mientras actualizan los datos en una instrucción atómica.
La cuenta contiene bytecode BPF desplegado cargado por un programa cargador BPF.
No. La autoridad de actualización son metadatos en la cuenta de datos del programa, separados del campo owner en cuentas individuales.
getAccountInfo devuelve null si la cuenta nunca ha sido financiada/creada.
Típicamente vacío (0 bytes). El SOL de la billetera está solo en lamports.
No. Exactamente un programa propietario por cuenta.
base64 o base58 para getAccountInfo. jsonParsed para diseños de programas conocidos como SPL Token.
No para las cuentas modernas exentas de alquiler. Es informativo/heredado.
Discriminador de 8 bytes + campos de struct serializados con Borsh.
Versiones de Stack: Esta página fue 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, y LiteSVM 0.6.x.
Revisado por Chris St. John·Última actualización: 16 jul 2026