A Estrutura de Contas
Toda instrução declara uma estrutura de contas com #[derive(Accounts)]. O Anchor executa as restrições antes que seu manipulador seja executado, aplicando propriedade, mutabilidade e relacionamentos de forma falha e fechada.
Busque em todas as páginas da documentação
Toda instrução declara uma estrutura de contas com #[derive(Accounts)]. O Anchor executa as restrições antes que seu manipulador seja executado, aplicando propriedade, mutabilidade e relacionamentos de forma falha e fechada.
#[derive(Accounts)]
pub struct Transfer<'info> {
#[account(mut)]
pub from: Signer<'info>,
#[account(mut, constraint = to.owner == from.key())]
pub to: Account<'info, TokenAccount>,
pub token_program: Program<'info, Token>,
}Quando usar isso: Você projeta qualquer instrução que toque em contas on-chain.
#[derive(Accounts)]
pub struct UpdateMetadata<'info> {
#[account(
mut,
seeds = [b"meta", authority.key().as_ref()],
bump = metadata.bump,
has_one = authority,
)]
pub metadata: Account<'info, Metadata>,
pub authority: Signer<'info>,
}
#[account]
pub struct Metadata {
pub authority: Pubkey,
pub bump: u8,
pub uri: String,
}O que isso demonstra:
Signer, Account<T>, Program<T>) implicam verificações básicasbumps está disponível nos manipuladores para bumps canônicos armazenados| Tipo | Valida |
|---|---|
Signer<'info> | Conta assinou a transação |
Account<'info, T> | O proprietário é o programa, desserializa como T |
Program<'info, T> | O endereço corresponde ao ID do programa para T |
SystemAccount<'info> | Pertence ao programa do sistema |
UncheckedAccount<'info> | Nenhuma verificação automática (use com cuidado) |
mut para contas graváveis.owner, has_one, restrições de token.address = expr, seeds/bump para PDAs.init, init_if_needed, close.address, owner ou constraint.mut em conta gravável - Falha em tempo de execução na escrita. Correção: Marque toda conta escrita como mut.has_one no campo errado - Relacionamento não imposto. Correção: Corresponda o nome do campo ao campo da estrutura nos dados da conta.init sem pagador - Criação da conta falha. Correção: Defina payer = signer e inclua o programa do sistema.seeds + bump.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Validação manual no manipulador | Verificações dinâmicas difíceis de expressar | Prefira restrições declarativas para regras estáticas |
remaining_accounts | Conjuntos de contas variáveis | Layout fixo conhecido em tempo de compilação |
AccountLoader para zero-copy | Contas grandes | Estruturas pequenas com Borsh |
0.32.1 para anchor-lang, Anchor CLI e exemplos nesta seção.
Sim. O Solana CLI 3.0.10 lida com keypairs, airdrops e inspeção de solana program.
target/idl/<program>.json em seu workspace.
Sim, mas cada campo não verificado precisa de restrições explícitas ou verificações no manipulador.
Use anchor test com Surfpool 0.12.0 ou LiteSVM 0.6.x em CI.
Discriminador de conta do Anchor; não o remova ao dimensionar space.
Sim, ou publique a IDL on-chain para que os clientes tenham uma fonte canônica.
Execute com logs; o Anchor imprime o nome da restrição e o índice da conta.
Sim. Esta pilha tem como alvo validadores Agave com Solana CLI 3.0.10.
Veja artigos irmãos vinculados em Relacionados para tópicos mais aprofundados sobre a estrutura de contas.
Versões da pilha: 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