Mejores Prácticas para PDAs
Los errores en las PDAs (Direcciones Derivadas por Programas) se convierten en fallos totales de custodia. Aplica esta lista al diseñar semillas, almacenar "bumps" y firmar CPIs.
Cómo Usar Esta Lista
- Publica la gramática de semillas en el repositorio
SEEDS.md. - Añade pruebas que fallen la verificación con semillas incorrectas.
- Revisa cada llamada a
invoke_signeden las PRs.
A - Derivación
- Usa un prefijo ASCII único por tipo de cuenta. Previene colisiones semánticas.
- Incluye todas las claves públicas del dominio necesarias para el aislamiento. Detiene errores de bóveda global.
- Codifica enteros como arrays fijos little-endian. Deterministas entre clientes.
- Deriva en la cadena antes de confiar; nunca confíes solo en la dirección del cliente. Invariante de seguridad central.
- Almacena el "bump" canónico al inicializar. Ahorra CU y cierra la caza de "bumps".
B - Firma
- Mantén
invoke_signeddentro de manejadores de instrucciones validados. Sin puntos finales de firma públicos. - Empareja el orden de las semillas exactamente entre la derivación y la firma. Previene fallos intermitentes de CPI.
- Añade el "bump" como un segmento de semilla de un solo byte. Formato de tiempo de ejecución requerido.
- Establece el bit de firmante en las metadatos de cuenta de la PDA en la CPI cuando sea necesario. Aplicación en tiempo de ejecución.
- Descarta los préstamos de datos antes de firmar la CPI. Evita errores de préstamo en tiempo de ejecución.
C - Operaciones
- Documenta las direcciones de PDA en el esquema IDL o Codama. Corrección del cliente.
- Prueba el ciclo de vida de creación-inicialización-cierre en Surfpool. Detecta errores de reinicialización.
- Revoca las autoridades de "mint" de tokens cuando el suministro sea fijo. Integridad del suministro.
- Versiona el esquema de semillas para cambios que rompan la compatibilidad. Claridad en la ruta de migración.
- Audita la autoridad de actualización por separado de la lógica de PDA. Riesgo de gobernanza.
Preguntas Frecuentes
¿Es suficiente Anchor?
Aún revisa semillas personalizadas y firmantes de CPI.
¿Cuántas PDAs?
Las necesarias - compensación del costo de alquiler.
¿Pistas para indexadores?
Emite eventos con prefijo de tipo de PDA.
¿Alquiler de PDA?
El pagador financia al crear.
¿Cerrar PDA?
Transfiere los lamports; datos cero.
¿Mismas semillas en dos programas?
Direcciones diferentes - intencional.
¿Fuerza bruta de PDA?
Inviable - solo búsqueda de "bump".
¿Cartera de hardware?
Firma al pagador, no a la PDA.
¿Pruebas de PDA con LiteSVM?
Soportado en 0.6.x.
¿Bump público?
OK - seguridad desde las semillas, no secreto.
¿Documentos de semillas en la plantilla de PR?
Recomendado.
¿Alcance de Immunefi?
Incluye rutas de firma de PDA.
Relacionado
- Conceptos Básicos de PDA - Introducción
- Firmar con PDAs - Firma de CPI
- Mejores Prácticas de CPI - Reglas de CPI
Versiones de Stack: 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.