Generazione di client
Codama genera client TypeScript e Rust da un file IDL del programma. I client generati includono funzioni per richiamare istruzioni e recuperare account, eliminando la necessità di serializzare e deserializzare manualmente gli account del programma o instruction data.
Codama è in fase di sviluppo attivo e soggetto a modifiche. Fai riferimento ai repository collegati nella guida rapida per le informazioni più aggiornate.
Riferimento rapido
Comandi CLI
| Comando | Descrizione |
|---|---|
codama init | Genera un file di configurazione codama |
codama run | Genera client del programma dal file di configurazione |
Generatori di client
| Pacchetto | Descrizione |
|---|---|
@codama/renderers-js | Genera client TypeScript compatibili con @solana/kit |
@codama/renderers-rust | Genera client Rust compatibili con solana_sdk |
@codama/nodes-from-anchor | Converte IDL Anchor in IDL Codama per generare client |
Risorse aggiuntive
| Risorsa | Descrizione |
|---|---|
| Codama | GitHub di Codama |
| Codama CLI | GitHub della CLI Codama |
| Codama Macros | GitHub di Codama Macros. Genera IDL Codama da programmi Rust nativi con macro Codama |
| Codama Macros Example Program | Programma di esempio che dimostra l'utilizzo delle macro Codama |
Esempio
Questo esempio illustra il processo di generazione di client da un IDL di programma Anchor.
Configurazione dei file di progetto
Per seguire l'esempio, crea una nuova directory chiamata example e aggiungi il
file idl.json e il file package.json dagli snippet di codice.
Questo esempio utilizza un IDL di programma counter. Visualizza codice sorgente.
In un progetto Anchor, l'IDL si trova in target/idl/<program_name>.json dopo
aver eseguito anchor build.
Crea il file di configurazione Codama
Codama utilizza un file di configurazione per specificare dove si trova il file IDL, quali linguaggi client generare e dove salvare il codice generato. Crea questa configurazione eseguendo:
$npx codama init
Questo ti chiederà alcune domande per creare un file codama.json nella radice
del tuo progetto e installare le dipendenze Codama necessarie.
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
Genera i client
Una volta creato il file di configurazione, esegui il comando di generazione per generare i client:
$npx codama run --all
Questo genererà i client del programma nei percorsi file specificati nel file di configurazione 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}]}}}
Non tutti i file generati sono mostrati negli snippet di codice corrispondenti.
Utilizzo dei client generati
I client generati includono il codice sorgente per interagire con il tuo
programma ma non includono i file package.json (per TypeScript) o Cargo.toml
(per Rust).
Dovrai creare nuovi file package.json e Cargo.toml oppure aggiungere le
dipendenze richieste dai client generati ai file esistenti del tuo progetto.
Integrazione nella tua applicazione
Genera il client direttamente nella directory sorgente della tua applicazione e
poi aggiungi le dipendenze richieste ai tuoi file package.json o Cargo.toml
esistenti.
Utilizza questo approccio quando costruisci un'applicazione in cui il codice client non deve essere condiviso o pubblicato.
Pacchetti o crate indipendenti
Crea pacchetti TypeScript o crate Rust separati per ogni client. Ad esempio,
aggiungi package.json in clients/js/ e Cargo.toml in clients/rust/.
Utilizza questo approccio per pubblicare il client come libreria riutilizzabile (npm o crates.io) o per condividere il client tra più applicazioni in un monorepo.
Is this page helpful?