CPIs nas Melhores Práticas do Anchor
Chamadas inter-programa tipadas, seguras e mínimas para programas Anchor 0.32.1 de produção.
Como Usar Esta Lista
- Revise cada nova CPI em PRs de segurança.
- Fixe IDLs externas usadas por
declare_program!. - Simule instruções com uso intensivo de CPIs na devnet.
A - Validação
- Use
Program<T>para cada alvo de CPI, nunca contas de programa não verificadas. - Valide
remaining_accountsantes de encaminhar proprietário, discriminador, atualidade. - Limite a contagem de contas restantes para evitar griefing de CU.
- Fixe a versão da IDL do callee no repositório com tags de lançamento.
B - Assinatura
- Use
with_signerapenas com PDAs validados, seeds aplicadas na struct. - Prefira
ctx.bumpsem vez de recalcular o bump canônico. - Evite CPI em expressões de restrição, mantenha efeitos colaterais nos handlers.
FAQs
Formato de erro do Anchor 0.32.1?
Códigos personalizados na IDL mais strings #[msg].
emit! vs emit_cpi!?
emit_cpi! custa mais CU, mas melhora a confiabilidade da captura.
Devo usar msg! na mainnet?
Evite, exceto atrás de feature flags.
Como os clientes obtêm códigos de erro?
Da IDL via Anchor ou codegen do Codama.
Eventos aparecem na IDL?
Sim, tipos #[event] são listados.
Restrições podem retornar erros personalizados?
Sim, com @MyError::Variant.
O que usa CU em logging?
Cada linha de log e string formatada.
Como testar erros?
anchor test esperando códigos de erro.
Logs são dados de consenso?
Sim, mas não um contrato de API; use eventos.
Próxima leitura?
Veja Relacionados para bp de cpi.
Relacionados
- Noções Básicas de CPI no Anchor - introdução
- Segurança de CPI - ameaças
- Melhores Práticas de Instruções - handlers
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.