As Restrições #[account]
Atributos de campo em membros de structs de contas compõem regras de validação. Anchor as avalia em uma ordem definida antes que seu manipulador de instruções seja executado.
Busque em todas as páginas da documentação
Atributos de campo em membros de structs de contas compõem regras de validação. Anchor as avalia em uma ordem definida antes que seu manipulador de instruções seja executado.
#[account(
mut,
has_one = authority,
constraint = vault.amount > 0 @ MyError::InvalidAmount,
)]
pub vault: Account<'info, Vault>,Expressões de restrição podem referenciar apenas campos de conta irmãos e argumentos de instrução declarados com #[instruction(...)]. Um amount simples aqui não compilaria; se for realmente um argumento de instrução, adicione #[instruction(amount: u64)] à struct.
Quando usar isso: Você expressa propriedade, relacionamentos ou invariantes personalizados declarativamente.
#[derive(Accounts)]
#[instruction(new_fee_bps: u16)]
pub struct SetFee<'info> {
#[account(
mut,
seeds = [b"config"],
bump = config.bump,
has_one = admin,
constraint = new_fee_bps <= 10_000 @ ConfigError::FeeTooHigh,
)]
pub config: Account<'info, Config>,
pub admin: Signer<'info>,
}O que isso demonstra:
#[instruction(...)] traz os argumentos do manipulador para o escopo da restrição; ele deve listá-los em ordem, começando pelo primeiromut marca contas graváveishas_one verifica a igualdade da chave pública com o campo aninhadoconstraint executa expressões booleanas arbitrárias@ mapeia para uma variante de enum de erro personalizada| Atributo | Propósito |
|---|---|
mut | A conta é gravável |
signer | Deve ser signatário (em tipos não-Signer) |
has_one = field | O campo da conta é igual à chave de outra conta |
address = expr | Correspondência exata da chave pública |
owner = prog | Verificação do programa proprietário |
constraint = expr | Invariante personalizado |
Combine atributos; todos devem passar.
@ MyError::Variant para clareza.pubkey! por sinalizadores de recursos do cluster.mut nas contas que você persiste.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| require! no manipulador | Lógica dinâmica entre contas | Verificações de relacionamento estáticas |
| Tokens de restrição personalizados (0.32) | Padrões reutilizáveis | Regras simples únicas |
| Verificações nativas manuais | Sem Anchor | Você usa Anchor para segurança |
0.32.1 para anchor-lang, Anchor CLI e exemplos nesta seção.
Sim. 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 de manipulador.
Use anchor test com Surfpool 0.12.0 ou LiteSVM 0.6.x em CI.
Discriminador de 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; 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 restrições de conta.
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