Boas Práticas de PDA
Erros de PDA viram falhas totais de custódia. Aplique esta lista ao projetar seeds, armazenar bumps e assinar CPIs.
Como Usar Esta Lista
- Publique a gramática de seeds no
SEEDS.mddo repositório. - Adicione testes em que seeds erradas falham na verificação.
- Revise toda chamada
invoke_signedem PRs.
A - Derivação
- Use prefixo ASCII único por tipo de conta. Previne colisões semânticas.
- Inclua todos os pubkeys de domínio necessários para isolamento. Evita erros de vault global.
- Codifique inteiros como arrays little-endian fixos. Determinístico entre clientes.
- Derive on-chain antes de confiar; nunca confie só no endereço do cliente. Invariante central de segurança.
- Armazene bump canônico na inicialização. Economiza CU e fecha bump hunting.
B - Assinatura
- Mantenha
invoke_signeddentro de handlers de instrução validados. Sem endpoints públicos de assinatura. - Corresponda a ordem das seeds exatamente entre derivar e assinar. Previne falhas intermitentes de CPI.
- Anexe bump como segmento de seed de um byte. Formato exigido pelo runtime.
- Defina bit de signatário em account metas de PDA no CPI quando necessário. Enforcement do runtime.
- Libere borrows de data antes de assinar CPI. Evita erros de borrow no runtime.
C - Operações
- Documente endereços PDA no IDL ou schema Codama. Correção de clientes.
- Teste ciclo create-init-close no Surfpool. Captura bugs de reinit.
- Revogue autoridades de mint de token quando o supply estiver fixo. Integridade de supply.
- Versione o esquema de seeds para mudanças breaking. Clareza de caminho de migração.
- Audite upgrade authority separadamente da lógica de PDA. Risco de governança.
FAQs
Anchor é suficiente?
Ainda revise seeds customizadas e signers de CPI.
Quantas PDAs?
Quantas forem necessárias - trade-off de custo de rent.
Dicas para indexador?
Emita eventos com prefixo de tipo de PDA.
Rent de PDA?
O pagador financia na criação.
Fechar PDA?
Transfira lamports para fora; zere os dados.
Mesmas seeds em dois programas?
Endereços diferentes - intencional.
Brute force de PDA?
Inviável - apenas busca de bump.
Hardware wallet?
Assina o pagador, não a PDA.
Testes de PDA no LiteSVM?
Suportados na 0.6.x.
Bump público?
OK - segurança vem das seeds, não do sigilo.
Docs de seeds no template de PR?
Recomendado.
Escopo Immunefi?
Inclua caminhos de assinatura de PDA.
Relacionado
- Noções Básicas de PDA - Introdução
- Assinando com PDAs - assinatura em CPI
- Boas Práticas de CPI - regras de CPI
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.