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.
Receita
#[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.
Exemplo de Trabalho
#[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:
Signerrequer uma assinatura de transaçãoAccount<T>verifica o proprietário e desserializa com discriminadorProgram<T>fixa IDs de programa para destinos CPIUncheckedAccountpula verificações de segurança automáticas
Análise Detalhada
Referência de Tipo
| 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 |
Notas de Rust
Use AccountLoader<'info, T> para contas de zero-cópia e Interface<'info, T> para interfaces de token em 0.32.
Armadilhas
- Conta sem
mutem dados graváveis - A serialização falha no final da instrução. Correção: Adicionemutao persistir alterações. - Campo
Programomitido - A CPI falha com o ID do programa errado. Correção: IncluaProgram<Token>explícito, etc. UncheckedAccountpara 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: UseInterfaceAccountcomTokenInterface.Signerpara autoridade PDA - PDAs não podem assinar comoSigner. Correção: Useseeds+invoke_signedou CPIwith_signer.
Alternativas
| 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 |
FAQs
Qual versão do Anchor este site usa?
0.32.1 para anchor-lang, Anchor CLI e exemplos nesta seção.
Preciso do Solana CLI junto com o Anchor?
Sim. O Solana CLI 3.0.10 lida com keypairs, airdrops e inspeção de solana program.
Onde fica o IDL após a compilação?
target/idl/<program>.json em seu workspace.
Posso misturar `UncheckedAccount` com `Signer`?
Sim, mas cada campo não verificado precisa de restrições explícitas ou verificações no handler.
Como depuro sem devnet?
Execute com logs; o Anchor imprime o nome da restrição e o índice da conta.
Qual é o prefixo de 8 bytes nos dados da conta?
Discriminador da conta Anchor; não o remova ao dimensionar space.
Devo commitar o IDL gerado?
Sim, ou publique o IDL on-chain para que os clientes tenham uma fonte canônica.
Como depuro falhas de restrição?
Execute com logs; o Anchor imprime o nome da restrição e o índice da conta.
O Anchor funciona no Agave 4.1.1?
Sim. Esta stack tem como alvo validadores Agave com Solana CLI 3.0.10.
O que devo ler a seguir nesta seção?
Veja artigos irmãos vinculados em Relacionados para tópicos mais aprofundados sobre tipos de conta.
Relacionado
- As Restrições #[account] - atributos
- Restrições de Token e Token Associado - auxiliares SPL
- Tipos de Conta Personalizados - traits manuais
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.