Cofre e Escrow
Cofres e escrows custodiam SOL ou tokens SPL sob autoridade PDA até que as regras do programa os liberem. Padrões corretos validam partes, usam bumps canônicos e aplicam checks-effects-interactions antes de CPI.
Receita
// Hold: token CPI deposit to vault ATA owned by vault PDA
// Release: verify conditions -> invoke_signed transfer outQuando usar isso:
- Escrow de marketplace.
- Stake ou lock de tokens.
- Cofres de tesouraria de protocolo.
Exemplo de Trabalho
pub fn release(bump: u8, escrow_auth: &AccountInfo, source: &AccountInfo, dest: &AccountInfo, token_program: &AccountInfo, amount: u64) -> ProgramResult {
// 1. verify escrow state Open and expiry
// 2. mark Filled in account data BEFORE CPI
let ix = spl_token::instruction::transfer(token_program.key, source.key, dest.key, escrow_auth.key, &[], amount)?;
invoke_signed(&ix, &[source.clone(), dest.clone(), escrow_auth.clone(), token_program.clone()], &[&[b"escrow", &[bump]]])
}O que isso demonstra:
- Estado atualizado antes de CPI de token.
- Autoridade PDA assina transferência.
- Valor validado contra registro de escrow.
Mergulho Profundo
SOL vs SPL
SOL: transferência do system + lamports PDA. SPL: conta de token + verificações de mint.
ATA
Use associated token addresses para usuários.
Notas de Rust
// Verify mint match source/dest token accounts.Armadilhas
- Liberar antes de atualizar estado - Pagamento duplo por reentrância.. Correção: Ordenação CEI.
- Cofre PDA global compartilhado - Um bug drena tudo.. Correção: Sementes por usuário.
- Mint errado - Rouba tipo de token errado.. Correção: Desempacote campo mint.
- Escrow sem cancelamento - Fundos presos.. Correção: Caminho de cancelamento por timeout.
- Autoridade PDA não verificada - Signatário de escrow falso.. Correção: Derive e compare PDA.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Programa de escrow de terceiros | Battle-tested | Composabilidade |
| Multisig de carteira | Custódia humana | Automação |
| Locks nativos Lightning/SOL | Stack diferente | N/A |
FAQs
Escrow de SOL?
PDA mantém lamports.
Liberação parcial?
Suportada com estado.
Taxas na liberação?
Divida na mesma ix.
Fechar escrow?
Retorne rent após vazio.
Escrow de NFT?
Adicione verificações de metadata.
Exemplos de escrow no Anchor?
Estude constraints.
Quem cancela?
Comprador/vendedor/admin conforme regras.
Time lock?
Sysvar Clock.
Auditoria?
Crítico.
Token-2022?
ID de programa correto.
Surfpool?
Teste de fluxo completo.
Seguro?
Risco de protocolo separado.
Relacionados
- PDAs como Autoridades - Autoridade
- CPI para SPL Token - Transferências
- Reentrância e Segurança - Ordenaçã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.