Instructions Best Practices
Handlers pequenos, validados e de propósito único escalam melhor do que instruções monolíticas.
Como usar esta lista
- Revise cada handler quanto à responsabilidade única.
- Garanta que erros são tipados e documentados no IDL.
- Faça profiling de CU em caminhos críticos antes da mainnet.
A - Design de handler
- Uma ação clara por instrução evite opcodes multi-modo.
- Valide args com require! cedo antes de CPIs ou transferências.
- Delegue lógica complexa para módulos mantenha #[program] enxuto.
- Emita eventos para mudanças de estado clientes não devem parsear logs manualmente.
B - Contas e CPIs
- Valide programas de CPI na struct de contas não dentro de metas não verificadas.
- Use ctx.bumps para signers PDA em CPI não re-derive bumps.
- Documente a ordem de remaining_accounts na documentação do IDL ou em constantes.
- Prefira contas explícitas em vez de args para pubkeys que devem assinar.
FAQs
Qual versão do Anchor é assumida?
0.32.1 em toda esta seção.
Uma PDA pode ser Signer na struct de contas?
Não. Use constraints de seeds e assinatura em CPI.
Onde o bump é armazenado?
No campo da struct de conta, definido na inicialização.
Como os clientes derivam PDAs?
Use @solana/kit 7.0.0 com os mesmos bytes de seed.
Qual program id é usado para PDAs?
O endereço declare_id do seu programa Anchor.
Seeds incluem bump?
Não no array de seeds; bump é parâmetro separado em find_program_address.
Como depurar falhas de PDA?
Compare chaves logadas; verifique seeds e program id no client-side.
PDAs são rent-exempt?
Sim quando mantêm dados; financie com payer no init.
Uma PDA pode assinar múltiplos CPIs em uma ix?
Sim, com as mesmas signer seeds em cada CPI.
O que ler em seguida?
Veja os links em Relacionados para tópicos mais profundos sobre boas práticas de instruções.
Relacionados
- Instruction Handlers - Context
- CPIs in Anchor Best Practices - regras de CPI
- Errors & Events Best Practices - observabilidade
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.