PDAs como Autoridades
Los PDAs actúan comúnmente como autoridades de acuñación (mint), autoridades de congelación (freeze), propietarios de bóvedas (vault owners) y custodios de escrows. El programa impone cuándo el PDA puede firmar a través de la lógica de negocio.
Receta
// Semillas de la autoridad de acuñación PDA: [b"mint_auth", mint.key.as_ref()]Cuándo recurrir a esto:
- Al lanzar tokens con acuñación controlada por el programa.
- Al mantener fondos de usuarios en escrow hasta que se cumplan las condiciones.
- Cuentas del tesoro para tarifas del protocolo.
Ejemplo de Trabajo
// Conceptual: el programa verifica las condiciones del escrow y luego firma la transferencia de tokens desde el PDA del escrow
pub fn release_escrow(bump: u8, /* cuentas */) -> ProgramResult {
// validar caducidad, firmas, máquina de estados
// CPI de token::transfer con semillas invoke_signed [b"escrow", &[bump]]
Ok(())
}Lo que esto demuestra:
- Las reglas de negocio controlan la firma del PDA.
- El PDA de escrow contiene tokens SPL.
- Se verifica la máquina de estados antes de la CPI.
Análisis Profundo
Patrones
| Rol | Semillas Típicas |
|---|---|
| Bóveda | [b"vault", user] |
| Autoridad de acuñación | [b"mint", mint] |
| Escrow | [b"escrow", order_id] |
Riesgo
Error en el programa = compromiso total de la autoridad.
Notas de Rust
// Nunca expongas un wrapper arbitrario de invoke_signed sin comprobaciones.Errores Comunes
- Wrapper de CPI arbitrario - Cualquiera activa la firma del PDA. Solución: Vincular a manejadores de instrucciones.
- Escrow sin caducidad - Fondos bloqueados para siempre. Solución: Rutas de tiempo o cancelación.
- PDA de autoridad compartida - Una brecha afecta a todos los usuarios. Solución: Aislamiento de semillas por usuario.
- Autoridad de acuñación no revocada - Riesgo de acuñación infinita. Solución: Revocar después de la configuración.
- Desajuste del propietario de la cuenta de token - El PDA debe ser el propietario de la cuenta de token. Solución: Validar ATA.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Autoridad multisig | Operaciones humanas | Automatización completa |
| Bóveda propiedad de billetera | Custodia del usuario | Escrow del protocolo |
| Programas de escrow NFT | Especializados | Solo tokens SPL |
Preguntas Frecuentes
¿Quién controla el PDA?
El código del programa en el ID del programa.
¿Transferir la autoridad de acuñación a un PDA?
CPI set_authority.
¿Revocar acuñación?
Recomendado después de un suministro fijo.
¿Bóveda de SOL?
El PDA contiene lamports; el programa firma las transferencias.
¿Escrow de NFT?
Los mismos patrones con verificaciones de metadatos.
¿Riesgo de actualización?
Una actualización maliciosa roba la autoridad.
¿Bloqueo de tiempo de gobernanza?
Patrón de operaciones fuera de la cadena.
¿ATA para PDA?
Derivar la dirección de token asociada.
¿PDA de autoridad de congelación?
Posible con el programa de tokens.
¿Cerrar escrow?
Devolver el alquiler; estado cero.
¿Auditoría?
Objetivo de hallazgo de nivel crítico.
¿Inicializar acuñación con Anchor?
Soporta autoridades PDA.
Relacionado
- Bóveda y Escrow - Patrones
- CPI a SPL Token - Operaciones de token
- Control de Acceso y Autoridades - Roles
Versiones de la pila: Esta página fue 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, y LiteSVM 0.6.x.