Melhores Práticas de CPI
CPIs (Cross-Program Invocations) expandem o raio de impacto do seu programa. Estas regras mantêm as invocações mínimas, verificáveis e compatíveis com os limites do Agave 4.1.1.
Como Usar Esta Lista
- Mapeie o grafo de CPI em um quadro branco antes de codificar.
- Crie uma lista de permissões (allowlist) de IDs de programas externos na conta de configuração.
- Simule CU (Compute Units) e profundidade para os caminhos de pior caso.
A - Segurança
- Crie uma lista de permissões (allowlist) para IDs de programas chamados; rejeite contas de programas fornecidas pelo usuário. Bloqueia CPIs maliciosas de reentrada e de dreno.
- Aplique a regra "checks-effects-interactions": persista o estado antes da CPI externa. Mitiga gastos duplos do tipo reentrada.
- Nunca escale privilégios de signatário ou de escrita além da transação externa. Previne bugs de escalonamento de privilégios.
- Valide os mints e autoridades de tokens SPL imediatamente antes da CPI de token. Impede bugs de dreno entre mints diferentes.
- Propague erros de CPI com
?a menos que esteja tratando explicitamente. Evita suposições de falha parcial silenciosa.
B - Eficiência
- Minimize a contagem de CPI por instrução; agrupe quando a semântica permitir. Economiza profundidade e CU.
- Evite logging dentro de loops com muitas CPIs. Multiplicação de CU.
- Prefira grafos de chamada planos em vez de cadeias de profundidade 4. Confiabilidade sob os limites.
- Faça perfil com simulação em CI para as instruções principais. Detecção de regressão.
- Use os helpers do spl/anchor para codificação de instruções. Menos bugs de layout.
C - Operações
- Documente a ordem dos metadados da conta para cada CPI na especificação do programa. Alinhamento de cliente e auditoria.
- Fixe as versões dos programas parceiros e monitore as atualizações. Mudanças de layout de CPI que quebram a compatibilidade.
- Teste stubs maliciosos do chamador no LiteSVM. Cobertura de reentrada.
- Separe as atualizações de configuração de administrador dos caminhos de CPI do usuário. Clareza de governança.
- Registre as alterações na lista de permissões de CPI no changelog. Resposta a incidentes.
FAQs
Anchor CPI é seguro?
Somente se você ainda validar contas e ordenação.
Quantas CPIs por ix?
O mínimo possível - faça perfil.
Auditoria de invoke_signed?
Prioridade máxima.
Token-2022?
ID de programa separado na lista de permissões.
CPI de programa fechado?
Sem programas arbitrários de usuário.
Roteador aberto?
Alto risco - revisão especializada.
Teste de profundidade?
Aninhe até falhar na simulação.
Eventos de CPI?
Registre off-chain a partir dos metadados.
Rollback de CPI falha?
Toda a transação é atômica.
Surfpool?
Teste de CPI local padrão.
Upgrade do Agave?
Reexecute a suíte de CPI.
Programa imutável?
Lista de permissões congelada - planeje cuidadosamente.
Relacionados
- Noções Básicas de CPI - Introdução
- Melhores Práticas de PDAs - Assinatura
- Melhores Práticas de Programas Nativos - Validação
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.