Tipos de Conta
Os tipos wrapper de conta do Anchor codificam regras de validação comuns. Escolha o tipo mais restritivo que corresponda ao seu modelo de ameaça e, em seguida, adicione restrições de atributo para relacionamentos.
Busque em todas as páginas da documentação
Os tipos wrapper de conta do Anchor codificam regras de validação comuns. Escolha o tipo mais restritivo que corresponda ao seu modelo de ameaça e, em seguida, adicione restrições de atributo para relacionamentos.
#[derive(Accounts)]
pub struct Example<'info> {
pub payer: Signer<'info>,
pub data: Account<'info, MyState>,
pub sys: SystemAccount<'info>,
pub token_prog: Program<'info, Token>,
/// CHECK: validado no handler
pub oracle: UncheckedAccount<'info>,
}Quando usar isso: Você escolhe os tipos para um novo campo de struct de contas.
#[derive(Accounts)]
pub struct Deposit<'info> {
#[account(mut)]
pub user: Signer<'info>,
#[account(
mut,
associated_token::mint = mint,
associated_token::authority = user,
)]
pub user_ata: Account<'info, TokenAccount>,
pub mint: Account<'info, Mint>,
pub token_program: Program<'info, Token>,
pub associated_token_program: Program<'info, AssociatedToken>,
}O que isso demonstra:
Signer requer uma assinatura de transaçãoAccount<T> verifica o proprietário e desserializa com discriminadorProgram<T> fixa IDs de programa para destinos CPIUncheckedAccount pula verificações de segurança automáticas| Tipo | Verificações automáticas |
|---|---|
Signer<'info> | is_signer |
Account<'info, T> | Proprietário, discriminador, desserializa T |
InterfaceAccount<'info, T> | Proprietários de token-2022 / interface |
Program<'info, T> | ID do programa para T |
SystemAccount<'info> | Proprietário do programa do sistema |
UncheckedAccount<'info> | Nenhum |
Use AccountLoader<'info, T> para contas de zero-cópia e Interface<'info, T> para interfaces de token em 0.32.
mut em dados graváveis - A serialização falha no final da instrução. Correção: Adicione mut ao persistir alterações.Program omitido - A CPI falha com o ID do programa errado. Correção: Inclua Program<Token> explícito, etc.UncheckedAccount para fundos do usuário - O atacante substitui contas. Correção: Use contas tipadas ou restrições rigorosas.Account<T> incorreto para token-2022 - A verificação do proprietário falha. Correção: Use InterfaceAccount com TokenInterface.Signer para autoridade PDA - PDAs não podem assinar como Signer. Correção: Use seeds + invoke_signed ou CPI with_signer.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
AccountLoader | Estado grande de zero-cópia | Pequenos structs Borsh |
InterfaceAccount | Mints/ATAs token-2022 | Apenas SPL legado |
remaining_accounts | Conjuntos dinâmicos | Layout de instrução fixo |
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 handler.
Execute com logs; o Anchor imprime o nome da restrição e o índice da conta.
Discriminador da conta Anchor; não o remova ao dimensionar space.
Sim, ou publique o 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 stack tem como alvo validadores Agave com Solana CLI 3.0.10.
Veja artigos irmãos vinculados em Relacionados para tópicos mais aprofundados sobre tipos de conta.
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