Mejores Prácticas para Instrucciones
Los controladores pequeños, validados y de propósito único escalan mejor que las "instrucciones divinas".
Cómo Usar Esta Lista
- Revisa cada controlador para asegurarte de que tenga una única responsabilidad.
- Asegúrate de que los errores estén tipificados y documentados en IDL.
- Perfila la Unidad de Control (CU) en las rutas críticas antes de mainnet.
A - Diseño del Controlador
- Una acción clara por instrucción: evita opcodes multimodales.
- Valida los argumentos con
require!temprano: antes de las Invocaciones de Programa Cruzadas (CPI) o transferencias. - Delega la lógica compleja a módulos: mantén
#[program]delgado. - Emite eventos para cambios de estado: los clientes no deben parsear logs manualmente.
B - Cuentas e CPIs
- Valida los programas de CPI en la estructura de cuentas: no dentro de metadatos sin marcar.
- Usa
ctx.bumpspara firmantes de CPI PDA: no re-derives los bumps. - Documenta el orden de
remaining_accounts: en la documentación IDL o en constantes. - Prefiere cuentas explícitas sobre argumentos: para las claves públicas que deben firmar.
Preguntas Frecuentes
¿Qué versión de Anchor se asume?
0.32.1 en toda esta sección.
¿Puede un PDA ser un Firmante en la estructura de cuentas?
No. Usa restricciones de semillas y firma de CPI.
¿Dónde se almacena el bump?
En el campo de la estructura de tu cuenta, establecido en la inicialización.
¿Cómo derivan los clientes los PDAs?
Usa @solana/kit 7.0.0 con bytes de semilla coincidentes.
¿Qué ID de programa se usa para los PDAs?
La dirección declare_id de tu programa Anchor.
¿Las semillas incluyen el bump?
No en el array de semillas; el bump es un parámetro separado para find_program_address.
¿Cómo depurar fallos de PDA?
Compara las claves registradas; verifica las semillas y el ID del programa en el lado del cliente.
¿Los PDAs están exentos de alquiler?
Sí, cuando contienen datos; financia con el pagador en la inicialización.
¿Puede un PDA firmar múltiples CPIs en una instrucción?
Sí, con las mismas semillas de firmante para cada CPI.
¿Qué leer a continuación?
Consulta los enlaces relacionados para temas más profundos sobre mejores prácticas de instrucciones.
Relacionados
- Controladores de Instrucciones - Contexto
- CPIs en las Mejores Prácticas de Anchor - Reglas de CPI
- Mejores Prácticas de Errores y Eventos - Observabilidad
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.