Boas Práticas de Rust para Solana
Hábitos que mantêm programas Solana seguros, baratos de executar e fáceis de auditar. Percorra esta lista antes do deploy na mainnet e durante code review.
Como Usar Esta Lista
- Use como checklist de PR para qualquer mudança de instrução ou layout de conta.
- Combine com testes LiteSVM 0.6.x - regras aqui devem ter teste ou lint quando possível.
- Reavalie após upgrades Agave ou toolchain; custos e limites de CU podem mudar.
A - Segurança & Validação
- Valide owner, signer e flags writable de cada conta antes do uso. Previne escalação de privilégio e substituição de conta.
- Use aritmética verificada para toda math de token e lamport. Elimina ataques de drain por wrap.
- Rejeite chaves de conta duplicadas em instruções financeiras. Evita confusões estilo double-spend.
- Armazene bumps canônicos de PDA e verifique seeds on-chain. Bloqueia bump hunting e falsificação de PDA.
- Retorne
ProgramErrorem vez de panic. Falha limpa com códigos decodificáveis.
B - Dados & Layout
- Prefixe contas com discriminador ou byte de versão único. Previne ataques de confusão de tipo.
- Pré-calcule constantes
LENe faça assert dedata_len()em runtime. Evita escritas parciais e panics de parse. - Prefira layouts de tamanho fixo em caminhos quentes; use Borsh para tails variáveis. Equilibra CU e flexibilidade.
- Documente e teste migrações de schema antes de upgradar programas. Protege fundos de usuários ao vivo.
- Zere dados da conta no close e envie aluguel para destinatário definido. Evita ataques de revival.
C - Performance
- Limite bounds de loop pelo comprimento de input do usuário. Previne exaustão de CU.
- Minimize
msg!e formatação de string em caminhos de produção. Logs são caros. - Audite
cargo treepor dependências não-no_std. Mantém binários compilando e pequenos. - Meça CU com simulação no CI para instruções críticas. Pega regressões cedo.
- Agrupe CPIs quando a semântica permitir. Reduz overhead por invocação.
FAQs
Como isso difere do Clippy?
Clippy cobre idiomas Rust; esta lista é segurança e ops específicas de Solana.
Anchor vs nativo?
Muitas regras aplicam a ambos; nativo exige enforcement manual.
Testes mínimos?
Pelo menos um happy path e uma falha por instrução.
Quando ir zero-copy?
Quando profiling mostrar que deserialize domina CU.
Prioridade de auditoria?
Foque validação, aritmética, CPI e assinatura PDA primeiro.
Programas imutáveis?
Ainda importa - clientes e indexers dependem de erros estáveis.
Usar rustfmt?
Sim - layout consistente ajuda revisores.
Documentar ordem de contas?
Obrigatório para nativo; gere a partir do IDL Anchor quando possível.
Build no CI?
cargo build-sbf em todo PR.
Surfpool no CI?
Recomendado para testes de integração rápidos com comportamento Agave 4.1.1.
semver para programas?
Versione IDL e tabelas de erro com o id de programa implantado.
Open source?
Publique hashes de build verificável com deploy.
Relacionado
- Rust for Solana Basics - Intro da seção
- Native Programs Best Practices - Regras específicas nativas
- Program Security Auditing - Prep pré-auditoria
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.