Accessing Accounts
Use ctx.accounts para campos tipados, ctx.bumps para seeds de PDA e ctx.remaining_accounts para listas variáveis de contas passadas após o layout fixo.
Busque em todas as páginas da documentação
Use ctx.accounts para campos tipados, ctx.bumps para seeds de PDA e ctx.remaining_accounts para listas variáveis de contas passadas após o layout fixo.
pub fn route(ctx: Context<Route>) -> Result<()> {
let bump = ctx.bumps.vault;
let vault = &mut ctx.accounts.vault;
for acc in ctx.remaining_accounts.iter() {
require!(acc.owner == &crate::ID, MyError::BadRemaining);
}
Ok(())
}Quando usar: Handlers leem ou mutam contas validadas e extras opcionais.
pub fn swap(ctx: Context<Swap>) -> Result<()> {
let user = &ctx.accounts.user;
let pool = &mut ctx.accounts.pool;
let bump = ctx.bumps.pool;
msg!("user: {}, pool bump: {}", user.key(), bump);
for meta in ctx.remaining_accounts.iter() {
let ai = meta.to_account_info();
require!(ai.is_writable, SwapError::ReadonlyAccount);
}
Ok(())
}O que isso demonstra:
ctx.bumps.<name> corresponde ao nome do campo em seedsremaining_accounts é um slice de AccountInfoto_account_info() para account metas em CPI&mut Account<'info, T> serializa mudanças ao final da instrução se a conta foi marcada mut nas constraints.
Clientes acrescentam contas após a ordem do IDL. Documente a ordem esperada e valide cada entrada.
| Alternativa | Use quando | Não use quando |
|---|---|---|
| Vec explícito de contas na struct | Conjuntos fixos pequenos | Roteamento dinâmico grande |
| AccountLoader::load | Leituras zero-copy | Account<T> padrão |
| Contas Sysvar na struct | Clock, rent | remaining_accounts para sysvars raros |
0.32.1 em toda esta seção.
Não. Use constraints de seeds e assinatura em CPI.
No campo da struct de conta, definido na inicialização.
Use @solana/kit 7.0.0 com os mesmos bytes de seed.
O endereço declare_id do seu programa Anchor.
Não no array de seeds; bump é parâmetro separado em find_program_address.
Compare chaves logadas; verifique seeds e program id no client-side.
Sim quando mantêm dados; financie com payer no init.
Sim, com as mesmas signer seeds em cada CPI.
Veja os links em Relacionados para tópicos mais profundos sobre acesso a contas.
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