Mejores prácticas de CPI
Las CPI extienden el radio de explosión de tu programa. Estas reglas mantienen las invocaciones mínimas, verificables y compatibles con los límites de Agave 4.1.1.
Cómo usar esta lista
- Mapea el grafo de CPI en una pizarra antes de codificar.
- Crea una lista de permitidos (allowlist) de los IDs de programas externos en la cuenta de configuración.
- Simula la CU (computación) y la profundidad para los casos de peor escenario.
A - Seguridad
- Permite IDs de programas llamados (callee); rechaza cuentas de programas proporcionadas por el usuario. Bloquea CPI maliciosas de reentrada y de drenaje.
- Aplica checks-effects-interactions: persiste el estado antes de una CPI externa. Mitiga dobles gastos de estilo reentrada.
- Nunca escales privilegios de firmante (signer) o de escritura más allá de la transacción externa. Previene errores de escalada de privilegios.
- Valida las mints y autoridades de tokens SPL inmediatamente antes de la CPI de tokens. Detiene errores de drenaje entre mints.
- Propaga los errores de CPI con
?a menos que se manejen explícitamente. Evita suposiciones de fallos parciales silenciosos.
B - Eficiencia
- Minimiza el número de CPI por instrucción; agrupa cuando la semántica lo permita. Ahorra profundidad y CU.
- Evita registrar (logging) dentro de bucles con muchas CPI. Multiplicación de CU.
- Prefiere grafos de llamadas planos sobre cadenas de profundidad 4. Fiabilidad bajo límites.
- Perfila con simulación en CI para las instrucciones principales. Detección de regresiones.
- Usa ayudantes de SPL/Anchor para la codificación de instrucciones. Menos errores de diseño.
C - Operaciones
- Documenta el orden de las metadatos de cuenta para cada CPI en la especificación del programa. Alineación de clientes y auditorías.
- Fija versiones de programas asociados y monitoriza las actualizaciones. Cambios de diseño de CPI que rompen la compatibilidad.
- Prueba stubs de programas llamados maliciosos en LiteSVM. Cobertura de reentrada.
- Separa las actualizaciones de configuración de administrador de las rutas de CPI de usuario. Claridad de gobernanza.
- Registra los cambios en la lista de permitidos de CPI en el registro de cambios. Respuesta a incidentes.
Preguntas frecuentes
¿Anchor CPI es seguro?
Solo si sigues validando las cuentas y el orden.
¿Cuántas CPI por instrucción?
Tan pocas como sea posible - perfila.
¿Auditoría de invoke_signed?
Máxima prioridad.
¿Token-2022?
Programa ID separado en la lista de permitidos.
¿CPI de programa cerrado?
No programas arbitrarios de usuario.
¿Router abierto?
Alto riesgo - revisión experta.
¿Prueba de profundidad?
Anida hasta fallar en simulación.
¿Eventos de CPI?
Registra fuera de la cadena (off-chain) desde metadatos.
¿Rollback de CPI fallida?
Toda la transacción es atómica.
¿Surfpool?
CPI de prueba local por defecto.
¿Actualización de Agave?
Vuelve a ejecutar la suite de CPI.
¿Programa inmutable?
Lista de permitidos congelada - planifica cuidadosamente.
Relacionado
- Conceptos básicos de CPI - Introducción
- Mejores prácticas de PDA - Firma
- Mejores prácticas de programas nativos - Validación
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.