Anatomia da Conta
Toda conta Solana compartilha os mesmos campos estruturais. Entender cada campo diz quem pode escrever, se código ou dados vivem lá, e quanta SOL está bloqueada para aluguel.
Busque em todas as páginas da documentação
Toda conta Solana compartilha os mesmos campos estruturais. Entender cada campo diz quem pode escrever, se código ou dados vivem lá, e quanta SOL está bloqueada para aluguel.
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();Quando usar isto:
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: inspeção bruta
pub target: UncheckedAccount<'info>,
}O que isto demonstra:
executable distingue contas de programa de contas de dadosdata_len() retorna o tamanho do buffer de bytes excluindo os campos de metadados| Campo | Tipo | Significado |
|---|---|---|
lamports | u64 | Saldo de SOL em lamports |
data | &[u8] | Carga útil bruta de bytes |
owner | Pubkey | Programa autorizado a escrever data |
executable | bool | true se a conta contém um programa BPF |
rent_epoch | u64 | Rastreamento legado; contas isentas de aluguel usam u64::MAX |
lamports, owner, executable, rent_epoch) são gerenciados em tempo de execuçãoowner pode redimensionar ou escrever data (além do System Program para alocação)owner = BPF Loader e executable = truedata da conta de token, não em lamports. Correção: leia o layout da conta de token para saldos.data é texto UTF-8 - são bytes brutos (Borsh, bincode ou customizado). Correção: desserializar com o esquema correto.executable - passar uma conta de programa onde dados são esperados falha. Correção: verifique o sinalizador antes da desserialização.rent_epoch mudou - contas modernas são isentas de aluguel; o campo de época é legado. Correção: use getMinimumBalanceForRentExemption para financiamento.data. Correção: valide ambos em suas restrições.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
RPC getAccountInfo | Inspeção off-chain | Caminho crítico em programas (passe contas) |
Anchor Account<T> | Desserialização tipada | Layouts desconhecidos ou variáveis |
UncheckedAccount | Leitura de bytes brutos com verificações manuais | Escolha padrão (prefira tipado) |
Lamports, data, owner, executable, rent_epoch. Toda conta tem todos os cinco.
Apenas o programa proprietário atual (via assign) ou o System Program durante a criação. Não programas arbitrários.
10 MB por conta no Agave 4.1.1. Limites práticos são menores devido aos custos de aluguel e CU.
Sim. Programas frequentemente deduzem lamports enquanto atualizam dados em uma instrução atômica.
A conta contém bytecode BPF implantado carregado por um programa BPF loader.
Não. Upgrade authority é metadado na conta de dados do programa, separado do campo owner em contas individuais.
getAccountInfo retorna null se a conta nunca foi financiada/criada.
Geralmente vazio (0 bytes). A SOL da carteira está apenas em lamports.
Não. Exatamente um programa proprietário por conta.
base64 ou base58 para getAccountInfo. jsonParsed para layouts de programa conhecidos como SPL Token.
Não para contas modernas isentas de aluguel. É informativo/legado.
Discriminador de 8 bytes + campos de struct serializados em Borsh.
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.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026