Mejores prácticas de generación de código
Una única fuente de verdad: las macros del programa Rust generan el IDL; los clientes y los crates de CPI consumen los artefactos generados.
Cómo usar esta lista
- Trata los cambios de IDL como cambios de API que requieren un registro de cambios.
- Automatiza la generación de código en CI.
- Nunca edites manualmente la salida generada de TS/Rust CPI.
A - Fuente de IDL
- Confirma el IDL o publícalo en la cadena con cada lanzamiento elige una ruta canónica por organización.
- La CI falla ante diferencias de IDL no confirmadas después de la compilación de Anchor sin deriva silenciosa de la API.
- Incluye los IDL de los llamadores para
declare_program!fija la versión por despliegue.
B - Generación de código del cliente
- Regenera Codama/TS al actualizar el IDL no parches los archivos generados.
- Fija las versiones de
@solana/kity la CLI de Codama salida reproducible. - Envía los enums de errores y eventos a la capa de UI para la decodificación.
Preguntas frecuentes
¿Versión de Anchor?
0.32.1 en temas avanzados.
¿Cuándo usar `zero_copy`?
Diseños fijos grandes cuando el CU de Borsh es demasiado alto.
¿Es `realloc` reversible?
No fácilmente; planifica el crecimiento futuro.
¿Están las cuentas restantes en el IDL?
No; documéntalas por separado.
¿Qué necesita `declare_program!`?
El JSON del IDL del llamador en tiempo de compilación.
¿Puede Anchor hacer CPI a Pinocchio?
Sí, con las metadatos de cuenta correctas.
¿Banderas de características e IDL?
Evita IDL diferentes por característica en mainnet.
¿Cómo medir el CU?
LiteSVM, Surfpool, simulación en devnet.
¿Son comunes los tipos de cuenta personalizados?
No; último recurso.
¿Próximos pasos?
Consulta los enlaces relacionados para las mejores prácticas de generación de código.
Relacionado
- El IDL de Anchor - IDL
- Codama a partir de un IDL de Anchor - kit
- Mejores prácticas de errores y eventos / registro en Anchor - observabilidad
Versiones de la pila: Esta página se escribió 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.