Codama genera clientes en TypeScript y Rust a partir del archivo IDL de un programa. Los clientes generados incluyen funciones para llamar a instrucciones y obtener cuentas, eliminando la necesidad de serializar y deserializar manualmente las cuentas del programa o instruction data.
Codama está en desarrollo activo y sujeto a cambios. Consulta los repositorios enlazados en la referencia rápida para obtener la información más reciente.
Referencia rápida
Comandos CLI
| Comando | Descripción |
|---|---|
codama init | Generar un archivo de configuración de codama |
codama run | Generar clientes de programa desde el archivo de configuración |
Generadores de clientes
| Paquete | Descripción |
|---|---|
@codama/renderers-js | Generar clientes TypeScript compatibles con @solana/kit |
@codama/renderers-rust | Generar clientes Rust compatibles con solana_sdk |
@codama/nodes-from-anchor | Convertir IDLs de Anchor a IDLs de Codama para generar clientes |
Recursos adicionales
| Recurso | Descripción |
|---|---|
| Codama | GitHub de Codama |
| Codama CLI | GitHub de Codama CLI |
| Codama Macros | GitHub de Codama Macros. Genera IDL de Codama desde programas nativos de Rust con macros de Codama |
| Codama Macros Example Program | Programa de ejemplo que demuestra el uso de macros de Codama |
Ejemplo
Este ejemplo muestra el proceso de generación de clientes a partir de un IDL de programa Anchor.
Configurar archivos del proyecto
Para seguir adelante, crea un nuevo directorio llamado example y añade el
archivo idl.json y el archivo package.json de los fragmentos de código.
Este ejemplo utiliza un IDL de programa contador. Ver código fuente.
En un proyecto de Anchor, el IDL se encuentra en
target/idl/<program_name>.json después de ejecutar anchor build.
Crear archivo de configuración de Codama
Codama utiliza un archivo de configuración para especificar dónde se encuentra el archivo IDL, qué lenguajes de cliente generar y dónde guardar el código generado. Crea esta configuración ejecutando:
$npx codama init
Esto te solicitará responder preguntas para crear un archivo codama.json en la
raíz de tu proyecto e instalar las dependencias necesarias de Codama.
Welcome to Codama!✔ Where is your IDL located? (Supports Codama and Anchor IDLs). … idl.json✔ Which script preset would you like to use? › Generate JavaScript client, Generate Rust client✔ [js] Where should the JavaScript code be generated? … clients/js/src/generated✔ [rust] Where is the Rust client crate located? … clients/rust✔ [rust] Where should the Rust code be generated? … clients/rust/src/generated▲ Your configuration requires additional dependencies.▲ Install command: pnpm install @codama/nodes-from-anchor @codama/renderers-js @codama/renderers-rust✔ Install dependencies? … yes→ Installing├─ @codama/nodes-from-anchor├─ @codama/renderers-js└─ @codama/renderers-rust✔ Dependencies installed successfully.✔ Configuration file created.└─ Path: /example/codama.json
Generar clientes
Una vez creado el archivo de configuración, ejecuta el comando de generación para generar los clientes:
$npx codama run --all
Esto generará los clientes del programa en las rutas de archivo especificadas en el archivo de configuración de codama.
{"idl": "idl.json","before": [],"scripts": {"js": {"from": "@codama/renderers-js","args": ["clients/js/src/generated"]},"rust": {"from": "@codama/renderers-rust","args": ["clients/rust/src/generated",{"crateFolder": "clients/rust","formatCode": true}]}}}
No todos los archivos generados se muestran en los fragmentos de código correspondientes.
Uso de los clientes generados
Los clientes generados incluyen código fuente para interactuar con tu programa
pero no incluyen package.json (para TypeScript) o Cargo.toml (para Rust).
Necesitarás crear un nuevo package.json y Cargo.toml o añadir las
dependencias requeridas de los clientes generados a los archivos existentes de
tu proyecto.
Integración en tu aplicación
Genera el cliente directamente en el directorio de origen de tu aplicación y
luego añade las dependencias requeridas a tu package.json o Cargo.toml
existente.
Utiliza este enfoque cuando construyas una aplicación donde el código del cliente no necesita ser compartido o publicado.
Paquetes o crates independientes
Crea paquetes TypeScript separados o crates de Rust para cada cliente. Por
ejemplo, agrega package.json en clients/js/ y Cargo.toml en
clients/rust/.
Utiliza este enfoque para publicar el cliente como una biblioteca reutilizable (npm o crates.io) o compartir el cliente entre múltiples aplicaciones en un monorepo.
Is this page helpful?