Gerando Clientes
Codama gera clientes TypeScript e Rust a partir do arquivo IDL de um programa. Os clientes gerados incluem funções para chamar instruções e buscar contas, eliminando a necessidade de manualmente serializar e desserializar contas de programa ou instruction data.
Codama está em desenvolvimento ativo e sujeito a mudanças. Consulte os repositórios vinculados na referência rápida para obter as informações mais recentes.
Referência Rápida
Comandos CLI
| Comando | Descrição |
|---|---|
codama init | Gerar um arquivo de configuração codama |
codama run | Gerar clientes de programa a partir do arquivo de configuração |
Geradores de Cliente
| Pacote | Descrição |
|---|---|
@codama/renderers-js | Gerar clientes TypeScript compatíveis com @solana/kit |
@codama/renderers-rust | Gerar clientes Rust compatíveis com solana_sdk |
@codama/nodes-from-anchor | Converter IDLs Anchor para IDLs Codama para gerar clientes |
Recursos Adicionais
| Recurso | Descrição |
|---|---|
| Codama | GitHub do Codama |
| Codama CLI | GitHub do CLI Codama |
| Codama Macros | GitHub do Codama Macros. Gere IDL Codama a partir de programas Rust nativos com macros Codama |
| Codama Macros Example Program | Programa de exemplo demonstrando o uso de macros Codama |
Exemplo
Este exemplo percorre o processo de geração de clientes a partir de um IDL de programa Anchor.
Configurar Arquivos do Projeto
Para acompanhar, crie um novo diretório chamado example e adicione o arquivo
idl.json e o arquivo package.json dos trechos de código.
Este exemplo usa um IDL de programa contador. Ver código-fonte.
Em um projeto Anchor, o IDL é encontrado em target/idl/<program_name>.json
após executar anchor build.
Criar arquivo de configuração do Codama
O Codama usa um arquivo de configuração para especificar onde o arquivo IDL está localizado, quais linguagens de cliente gerar e onde enviar o código gerado. Crie esta configuração executando:
$npx codama init
Isso irá apresentar perguntas para criar um arquivo codama.json na raiz do seu
projeto e instalar as dependências necessárias do 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
Gerar clientes
Uma vez que o arquivo de configuração é criado, execute o comando de geração para gerar os clientes:
$npx codama run --all
Isso irá gerar os clientes do programa nos caminhos de arquivo especificados no arquivo de configuração do 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}]}}}
Nem todos os arquivos gerados são mostrados nos trechos de código correspondentes.
Usando os clientes gerados
Os clientes gerados incluem código-fonte para interagir com seu programa, mas
não incluem arquivos package.json (para TypeScript) ou Cargo.toml (para
Rust).
Você precisará criar novos arquivos package.json e Cargo.toml ou adicionar
as dependências necessárias dos clientes gerados aos arquivos existentes do seu
projeto.
Integrado em sua aplicação
Gere o cliente diretamente no diretório de origem da sua aplicação e depois
adicione as dependências necessárias ao seu package.json ou Cargo.toml
existente.
Use esta abordagem ao construir uma aplicação onde o código do cliente não precisa ser compartilhado ou publicado.
Pacotes ou crates independentes
Crie pacotes TypeScript ou crates Rust separados para cada cliente. Por exemplo,
adicione package.json em clients/js/ e Cargo.toml em clients/rust/.
Use esta abordagem para publicar o cliente como uma biblioteca reutilizável (npm ou crates.io) ou compartilhar o cliente entre várias aplicações em um monorepo.
Is this page helpful?