Generando clientes
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 | Genera clientes TypeScript compatibles con @solana/kit |
@codama/renderers-rust | Genera clientes Rust compatibles con solana_sdk |
@codama/nodes-from-anchor | Convierte 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 el ejemplo, 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 mostrará 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 archivos package.json (para TypeScript) o Cargo.toml (para
Rust).
Necesitarás crear nuevos archivos package.json y Cargo.toml o agregar 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 código fuente de tu
aplicación y luego agrega las dependencias requeridas a tus archivos
package.json o Cargo.toml existentes.
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 de TypeScript o crates de Rust separados 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?