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 initLuo codama-konfiguraatiotiedosto
codama runLuo ohjelman asiakasohjelmat konfiguraatiotiedostosta

Asiakasgeneraattorit

PakettiKuvaus
@codama/renderers-jsLuo @solana/kit-yhteensopivia TypeScript-asiakasohjelmia
@codama/renderers-rustLuo solana_sdk-yhteensopivia Rust-asiakasohjelmia
@codama/nodes-from-anchorMuunna Anchor IDL:t Codama IDL:iksi asiakasohjelmien luomista 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 komennon anchor build suorittamisen jälkeen.

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ä kysyy sinulta kysymyksiä luodakseen codama.json-tiedoston projektisi juureen ja asentaakseen 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 komennon anchor build suorittamisen jälkeen.

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ä kysyy sinulta kysymyksiä luodakseen codama.json-tiedoston projektisi juureen ja asentaakseen 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

Luodut asiakasohjelmat sisältävät lähdekoodin ohjelmasi kanssa vuorovaikutukseen, mutta eivät sisällä package.json-tiedostoa (TypeScriptille) tai Cargo.toml-tiedostoa (Rustille).

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

Integroitu sovellukseesi

Luo asiakasohjelma suoraan sovelluksesi lähdekoodihakemistoon ja lisää sitten vaaditut riippuvuudet olemassa olevaan package.json- tai Cargo.toml-tiedostoosi.

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 clientille. Lisää esimerkiksi package.json kansioon clients/js/ ja Cargo.toml kansioon 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

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