Solana-dokumentaatioOhjelmien kehittäminenCodama

Asiakkaiden generointi

Codama generoi TypeScript- ja Rust- asiakkaita ohjelman IDL-tiedostosta. Generoidut asiakkaat sisältävät funktioita ohjeistusten kutsumiseen ja tilien hakemiseen, poistaen tarpeen manuaalisesti serialisoida ja deserialisoida ohjelmatilejä tai instruction data.

Codama on aktiivisessa kehityksessä ja voi muuttua. Katso viimeisimmät tiedot pikaoppaan linkitetyistä repositorioista.

Pikaopas

CLI-komennot

KomentoKuvaus
codama initGeneroi Codama-konfiguraatiotiedosto
codama runGeneroi ohjelma-asiakkaat konfiguraatiotiedostosta

Asiakasgeneraattorit

PakettiKuvaus
@codama/renderers-jsGeneroi @solana/kit yhteensopivia TypeScript-asiakkaita
@codama/renderers-rustGeneroi solana_sdk yhteensopivia Rust-asiakkaita
@codama/nodes-from-anchorMuuntaa Anchor IDL:t Codama IDL:iksi asiakkaiden generointia varten

Lisäresurssit

ResurssiKuvaus
CodamaCodama GitHub
Codama CLICodama CLI GitHub
Codama MacrosCodama Macros GitHub. Generoi Codama IDL natiiveista Rust-ohjelmista Codama-makroilla
Codama Macros Example ProgramEsimerkkiohjelma, joka demonstroi Codama-makrojen käyttöä

Esimerkki

Tämä esimerkki käy läpi prosessin asiakkaiden generoimiseksi Anchor-ohjelman IDL:stä.

Projektin tiedostojen asennus

Seurataksesi mukana, luo uusi hakemisto nimeltä example ja lisää idl.json tiedosto ja package.json tiedosto koodiesimerkeistä.

Tämä esimerkki käyttää counter-ohjelman IDL:ää. Katso lähdekoodi.

Anchor-projektissa IDL löytyy polusta target/idl/<program_name>.json kun olet suorittanut komennon anchor build.

Luo Codama-määritystiedosto

Codama käyttää määritystiedostoa määrittääkseen IDL-tiedoston sijainnin, mitä asiakasohjelmakieliä generoidaan ja mihin generoitu koodi tulostetaan. Luo tämä määritys suorittamalla:

Terminal
$
npx codama init

Tämä esittää sinulle kysymyksiä luodakseen codama.json tiedoston projektisi juureen ja asentaa tarvittavat Codama-riippuvuudet.

example output
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

Generoi asiakasohjelmat

Kun määritystiedosto on luotu, suorita generointikomento luodaksesi asiakasohjelmakoodit:

Terminal
$
npx codama run --all

Tämä generoi ohjelma-asiakasohjelmat tiedostopolkuihin, jotka on määritetty codama-määritystiedostossa.

codama.json
{
"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
}
]
}
}
}

Kaikkia generoituja tiedostoja ei näytetä vastaavissa koodiesimerkeissä.

Projektin tiedostojen asennus

Seurataksesi mukana, luo uusi hakemisto nimeltä example ja lisää idl.json tiedosto ja package.json tiedosto koodiesimerkeistä.

Tämä esimerkki käyttää counter-ohjelman IDL:ää. Katso lähdekoodi.

Anchor-projektissa IDL löytyy polusta target/idl/<program_name>.json kun olet suorittanut komennon anchor build.

Luo Codama-määritystiedosto

Codama käyttää määritystiedostoa määrittääkseen IDL-tiedoston sijainnin, mitä asiakasohjelmakieliä generoidaan ja mihin generoitu koodi tulostetaan. Luo tämä määritys suorittamalla:

Terminal
$
npx codama init

Tämä esittää sinulle kysymyksiä luodakseen codama.json tiedoston projektisi juureen ja asentaa tarvittavat Codama-riippuvuudet.

example output
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

Generoi asiakasohjelmat

Kun määritystiedosto on luotu, suorita generointikomento luodaksesi asiakasohjelmakoodit:

Terminal
$
npx codama run --all

Tämä generoi ohjelma-asiakasohjelmat tiedostopolkuihin, jotka on määritetty codama-määritystiedostossa.

codama.json
{
"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
}
]
}
}
}

Kaikkia generoituja tiedostoja ei näytetä vastaavissa koodiesimerkeissä.

idl.json
package.json
{
"address": "8PY1q5J3Aq2z7TBDLBrVjv77mYzjXSCz6iHQaFEFw9hY",
"metadata": {
"name": "counter",
"version": "0.1.0",
"spec": "0.1.0",
"description": "Created with Anchor"
},
"instructions": [
{
"name": "decrement",
"discriminator": [106, 227, 168, 59, 248, 27, 150, 101],
"accounts": [
{
"name": "user",
"writable": true,
"signer": true
},
{
"name": "counter",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [99, 111, 117, 110, 116, 101, 114]
}
]
}
},
{
"name": "vault",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [118, 97, 117, 108, 116]
},
{
"kind": "account",
"path": "user"
}
]
}
},
{
"name": "system_program",
"address": "11111111111111111111111111111111"
}
],
"args": []
},
{
"name": "increment",
"discriminator": [11, 18, 104, 9, 104, 174, 59, 33],
"accounts": [
{
"name": "user",
"writable": true,
"signer": true
},
{
"name": "counter",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [99, 111, 117, 110, 116, 101, 114]
}
]
}
},
{
"name": "vault",
"writable": true,
"pda": {
"seeds": [
{
"kind": "const",
"value": [118, 97, 117, 108, 116]
},
{
"kind": "account",
"path": "user"
}
]
}
},
{
"name": "system_program",
"address": "11111111111111111111111111111111"
}
],
"args": []
}
],
"accounts": [
{
"name": "Counter",
"discriminator": [255, 176, 4, 245, 188, 253, 124, 25]
}
],
"errors": [
{
"code": 6000,
"name": "UnderflowError",
"msg": "Counter cannot be decremented below zero"
}
],
"types": [
{
"name": "Counter",
"type": {
"kind": "struct",
"fields": [
{
"name": "count",
"type": "u64"
}
]
}
}
]
}

Generoitujen asiakasohjelmien käyttäminen

Generoidut asiakasohjelmat sisältävät lähdekoodin ohjelmasi kanssa vuorovaikuttamiseen, mutta eivät sisällä package.json (TypeScriptille) tai Cargo.toml (Rustille) tiedostoja.

Sinun täytyy joko luoda uudet package.json ja Cargo.toml tiedostot tai lisätä vaaditut riippuvuudet generoiduista asiakasohjelmista projektisi olemassa oleviin tiedostoihin.

Integroitu sovellukseesi

Generoi asiakasohjelma suoraan sovelluksesi lähdehakemistoon ja lisää sitten vaaditut riippuvuudet olemassa olevaan package.json tai Cargo.toml tiedostoon.

Käytä tätä lähestymistapaa rakentaessasi sovellusta, jossa asiakasohjelman koodia ei tarvitse jakaa tai julkaista.

Erilliset paketit tai cratet

Luo erilliset TypeScript-paketit tai Rust-cratet jokaiselle asiakasohjelmalle. Esimerkiksi lisää package.json hakemistoon clients/js/ ja Cargo.toml hakemistoon clients/rust/.

Käytä tätä lähestymistapaa julkaistaksesi asiakasohjelman uudelleenkäytettävänä kirjastona (npm tai crates.io) tai jakaaksesi asiakasohjelman useiden sovellusten kesken monorepo-ympäristössä.

Is this page helpful?

Sisällysluettelo

Muokkaa sivua

Hallinnoi

© 2025 Solana Foundation.
Kaikki oikeudet pidätetään.