Lendo e Escrevendo Dados de Conta
Dados de conta vivem em um buffer de bytes gerenciado pelo runtime. Programas fazem borrow imutável ou mutável, parse em tipos, mutam e escrevem de volta com Borsh ou updates zero-copy.
Busque em todas as páginas da documentação
Dados de conta vivem em um buffer de bytes gerenciado pelo runtime. Programas fazem borrow imutável ou mutável, parse em tipos, mutam e escrevem de volta com Borsh ou updates zero-copy.
let mut data = account.try_borrow_mut_data()?;
let state = State::deserialize(&mut &data[..])?;Quando usar:
pub fn increment(account: &AccountInfo) -> ProgramResult {
if account.data_len() < State::LEN { return Err(ProgramError::InvalidAccountData); }
let mut data = account.try_borrow_mut_data()?;
let mut state = State::deserialize(&mut &data.as_ref()).map_err(|_| ProgramError::InvalidAccountData)?;
state.count = state.count.checked_add(1).ok_or(ProgramError::InvalidArgument)?;
state.serialize(&mut &mut data.as_mut()).map_err(|_| ProgramError::AccountDataTooSmall)?;
Ok(())
}O que isso demonstra:
try_borrow_mut_data para writes.AccountDataTooSmall.Zero-copy permite mutação de campo sem serialize completo.
// Prefira subslices &mut [u8] para discriminator + body.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Update de campo bytemuck | Contadores em hot path | Strings variáveis |
| Anchor Account::try_from | Owner/discriminator automático | Nativo |
| Views read-only | Pinocchio | Ecossistema |
Use variantes try_ em programas - falhe graciosamente.
Apenas o programa owner da conta.
Sim se passadas na transação - valide owner.
Não inicializado - rejeite ou caminho init.
Espaço alocado da conta.
Runtime serializa por conta por tx.
Evite - vaza info do usuário.
Zero lamports após close - zere data primeiro.
Veja artigo realloc.
Mais bytes precisam de mais lamports.
Use tipos sysvar dedicados.
LiteSVM com fixtures de conta.
Versões do 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