Estructura del Proyecto
Un workspace de Anchor separa los programas en cadena, las pruebas del cliente y la configuración de despliegue. Saber dónde vive cada artefacto evita la deriva del IDL y los scripts de despliegue rotos.
Receta
my_workspace/
Anchor.toml # cluster, scripts, IDs de programa
Cargo.toml # raíz del workspace
programs/
my_program/
Cargo.toml # anchor-lang = "0.32.1"
src/lib.rs
tests/
my_program.ts
target/
deploy/ # .so después de la compilación
idl/ # IDL JSONCuándo usar esto: Estás incorporándote a un repositorio existente o dividiendo un programa en múltiples crates.
Ejemplo de Trabajo
# Anchor.toml (extracto)
[toolchain]
anchor_version = "0.32.1"
[programs.localnet]
my_program = "Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS"
[scripts]
test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"# Cargo.toml (raíz del workspace)
[workspace]
members = ["programs/*"]
resolver = "2"Lo que esto demuestra:
Anchor.tomles la única fuente para los IDs de programa por cluster.- Cada programa es su propia crate bajo
programs/. target/idl/se genera; no lo edites manualmente.- Las pruebas viven fuera de Rust para una iteración más rápida del cliente.
Análisis Profundo
Cómo Funciona
- Miembros del Workspace - Cargo compila todas las crates de
programs/*con un lockfile compartido. - Crate del Programa - Un
lib.rscon#[program], structs de cuenta y tipos de estado. - Salida del IDL -
anchor buildescribe el JSON utilizado por los clientes TS ydeclare_program!. - Ejecutor de Pruebas - La sección
[scripts]conecta las pruebas de Anchor con tu framework de pruebas TS.
Archivos Clave
| Ruta | Propósito |
|---|---|
programs/*/src/lib.rs | Lógica en cadena |
Anchor.toml | Objetivos de despliegue y scripts de prueba |
target/idl/*.json | Entrada para la generación de código del cliente |
target/deploy/*.so | Binario de programa actualizable |
Trampas Comunes
- Editar el IDL manualmente - Los clientes compilan contra tipos obsoletos. Solución: Regenerar solo con
anchor build. - ID de programa solo en
lib.rs- El despliegue usa una clave diferente adeclare_id!. Solución: Ejecutaranchor keys syncdespués del despliegue. - Pruebas en la carpeta incorrecta -
anchor testno puede encontrarlas. Solución: Mantener las pruebas bajotests/según la convención de Anchor. - Miembro del workspace faltante - La nueva crate del programa no se compila. Solución: Añadir la ruta de la crate a los
membersdelCargo.tomlraíz. - Versiones de Anchor mezcladas - La expansión de macros falla misteriosamente. Solución: Alinear la CLI,
anchor-langyanchor-splen 0.32.1.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Monorepo con múltiples workspaces de Anchor | Productos independientes que comparten infraestructura | Programa único con diseño simple |
Workspace nativo de Cargo sin Anchor.toml | Control máximo, sin IDL | Quieres clientes tipados y restricciones |
| Diseño Pinocchio/Steel | Programas críticos para la CU | Necesitas macros de cuenta de Anchor |
Preguntas Frecuentes
¿Qué versión de Anchor utiliza este sitio?
0.32.1 para anchor-lang, la CLI de Anchor y los ejemplos en esta sección.
¿Necesito Solana CLI además de Anchor?
Sí. Solana CLI 3.0.10 maneja los keypairs, airdrops y la inspección de solana program.
¿Dónde vive el IDL después de la compilación?
En target/idl/<program>.json en tu workspace.
¿Puedo mezclar `UncheckedAccount` con `Signer`?
Sí, pero cada campo no verificado necesita restricciones explícitas o comprobaciones del manejador.
¿Cómo puedo probar sin devnet?
Usa 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 elimines al dimensionar space.
¿Debo confirmar el IDL generado?
Sí, o publica el IDL en cadena para que los clientes tengan una fuente canónica.
¿Cómo depuro fallos de restricciones?
Ejecuta 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 está dirigida a validadores Agave con Solana CLI 3.0.10.
¿Qué debo leer a continuación en esta sección?
Consulta los artículos hermanos en "Relacionados" para temas más profundos sobre la estructura del proyecto.
Relacionados
- Conceptos Básicos de Anchor - recorrido del primer programa
- Compilación y Despliegue - comandos de compilación y despliegue
- El Módulo #[program] - diseño del manejador
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.