Buenas Prácticas de Fundamentos de Anchor
Una estructura inicial limpia para nuevos espacios de trabajo de Anchor 0.32.1. Úselo como una lista de verificación de PR para programas nuevos.
Cómo Usar Esta Lista
- Aplique al crear o revisar un nuevo crate de programa.
- Marque los elementos antes del primer despliegue en devnet.
- Empareje con listas de mejores prácticas específicas de la sección a medida que desarrolle funcionalidades.
A - Espacio de Trabajo
- Fije anchor-lang 0.32.1 en el
Cargo.tomlde cada programa y haga coincidir con Anchor CLI. - Confirme Cargo.lock para que CI y los compañeros de equipo construyan artefactos idénticos.
- Un programa por crate bajo
programs/con nombres claros. - Mantenga las pruebas en TypeScript para una iteración rápida del cliente, a menos que se requieran pruebas en Rust.
B - Diseño del Programa
- Agrupe los tipos de estado cerca de las estructuras de cuenta para módulos
lib.rslegibles. - Nombra las instrucciones con el verbo primero:
initialize,deposit,withdraw. - Use #[error_code] para fallos visibles por el usuario, no
Err(ProgramError::Custom)en bruto. - Emita eventos para cambios de estado indexables en lugar de logs no estructurados.
C - Valores Predeterminados de Seguridad
- Prefiera Signer sobre UncheckedAccount para autoridades y pagadores.
- Valide cada PDA con semillas + bump, nunca confíe solo en los bumps proporcionados por el cliente.
- Evite init_if_needed a menos que sea idempotente por diseño, documente el riesgo de reinicialización.
- Cierre las cuentas a un destinatario definido con
close = destination.
D - Envío
- Ejecute anchor test antes de cada despliegue, incluyendo casos de ruta de error.
- Ejecute
anchor keys syncdespués del despliegue para prevenir discrepancias de ID. - Publique el IDL con etiquetas de lanzamiento para la generación de código del cliente.
- Documente el titular de la autoridad de actualización en el README del repositorio o en el manual de operaciones.
Preguntas Frecuentes
¿Qué versión de Anchor utiliza este sitio?
0.32.1 para anchor-lang, Anchor CLI y ejemplos en esta sección.
¿Necesito Solana CLI además de Anchor?
Sí. Solana CLI 3.0.10 maneja los pares de claves, los airdrops y la inspección de solana program.
¿Dónde reside el IDL después de la compilación?
target/idl/<program>.json en su espacio de trabajo.
¿Puedo mezclar UncheckedAccount con Signer?
Sí, pero cada campo sin verificar necesita restricciones explícitas o comprobaciones del manejador.
¿Cómo pruebo sin devnet?
Use anchor test con Surfpool 0.12.0 o LiteSVM 0.6.x en CI.
¿Qué es el prefijo de 8 bytes en los datos de la cuenta?
El discriminador de cuenta de Anchor; no lo elimine al dimensionar space.
¿Debo confirmar el IDL generado?
Sí, o publique el IDL en la cadena para que los clientes tengan una fuente canónica.
¿Cómo depuro fallos de restricciones?
Ejecute con logs; Anchor imprime el nombre de la restricción y el índice de la cuenta.
¿Funciona Anchor en Agave 4.1.1?
Sí. Esta pila se dirige a validadores Agave con Solana CLI 3.0.10.
¿Qué debo leer a continuación en esta sección?
Consulte los artículos hermanos en Relacionados para temas más profundos sobre las mejores prácticas de los fundamentos de Anchor.
Relacionado
- Fundamentos de Anchor - recorrido por los ejemplos
- El Flujo de Trabajo de Anchor - flujo de iteración
- Mejores Prácticas de Cuentas y Restricciones - endurecimiento de cuentas
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.