PDAs como Autoridades
PDAs comumente atuam como mint authorities, freeze authorities, owners de vault e custodiantes de escrow. O programa impõe quando a PDA pode assinar via lógica de negócio.
Receita
// Seeds de mint authority PDA: [b"mint_auth", mint.key.as_ref()]Quando usar:
- Lançar tokens com mint controlado pelo programa.
- Reter fundos de usuários em escrow até condições serem atendidas.
- Contas de tesouraria para taxas de protocolo.
Exemplo Prático
// Conceitual: programa verifica condições de escrow e então assina transferência de token da PDA de escrow
pub fn release_escrow(bump: u8, /* accounts */) -> ProgramResult {
// valida expiração, assinaturas, máquina de estados
// CPI token::transfer com invoke_signed seeds [b"escrow", &[bump]]
Ok(())
}O que isso demonstra:
- Regras de negócio controlam assinatura da PDA.
- PDA de escrow retém tokens SPL.
- Máquina de estados verificada antes do CPI.
Aprofundamento
Padrões
| Papel | Seeds típicas |
|---|---|
| Vault | [b"vault", user] |
| Mint auth | [b"mint", mint] |
| Escrow | [b"escrow", order_id] |
Risco
Bug no programa = comprometimento total da autoridade.
Notas Rust
// Nunca exponha wrapper invoke_signed arbitrário sem verificações.Erros Comuns
- Wrapper CPI arbitrário - Qualquer um dispara assinatura PDA. Correção: Vincule a handlers de instrução.
- Escrow sem expiração - Fundos travados para sempre. Correção: Caminhos de tempo ou cancelamento.
- PDA de autoridade compartilhada - Uma violação atinge todos os usuários. Correção: Isolamento de seeds por usuário.
- Mint authority não revogada - Risco de mint infinito. Correção: Revogue após setup.
- Owner de conta de token incompatível - PDA deve ser owner da conta de token. Correção: Valide ATA.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Autoridade multisig | Ops humanas | Automação total |
| Vault com owner de carteira | Custódia do usuário | Escrow de protocolo |
| Programas de escrow NFT | Especializado | Apenas token SPL |
FAQs
Quem controla a PDA?
Código do programa no program id.
Transferir mint authority para PDA?
CPI set_authority.
Revogar mint?
Recomendado após supply fixo.
Vault de SOL?
PDA retém lamports; programa assina transferências.
Escrow NFT?
Mesmos padrões com verificações de metadata.
Risco de upgrade?
Upgrade malicioso rouba autoridade.
Timelock de governança?
Padrão de ops off-chain.
ATA para PDA?
Derive associated token address.
Freeze authority PDA?
Possível com token program.
Fechar escrow?
Devolva rent; zere estado.
Auditoria?
Alvo de achado de tier crítico.
init mint do Anchor?
Suporta autoridades PDA.
Relacionado
- Vault e Escrow - Padrões
- CPI para SPL Token - Ops de token
- Controle de Acesso e Autoridades - Papéis
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.