Solana DokümantasyonuProgram geliştirmeCodama

İstemci Oluşturma

Codama, bir programın IDL dosyasından TypeScript ve Rust istemcileri oluşturur. Oluşturulan istemciler, talimatları çağırmak ve hesapları getirmek için fonksiyonlar içerir, program hesaplarını veya instruction data'yı manuel olarak serileştirme ve ters serileştirme ihtiyacını ortadan kaldırır.

Codama aktif geliştirme aşamasındadır ve değişikliğe tabidir. En güncel bilgiler için hızlı referansta bağlantısı verilen depolara bakın.

Hızlı Referans

CLI Komutları

KomutAçıklama
codama initBir codama yapılandırma dosyası oluştur
codama runYapılandırma dosyasından program istemcileri oluştur

İstemci Oluşturucuları

PaketAçıklama
@codama/renderers-js@solana/kit uyumlu TypeScript istemcileri oluştur
@codama/renderers-rustsolana_sdk uyumlu Rust istemcileri oluştur
@codama/nodes-from-anchorİstemci oluşturmak için Anchor IDL'lerini Codama IDL'lerine dönüştür

Ek Kaynaklar

KaynakAçıklama
CodamaCodama GitHub
Codama CLICodama CLI GitHub
Codama MacrosCodama Macros GitHub. Codama makroları ile yerel Rust programlarından Codama IDL oluştur
Codama Macros Example ProgramCodama makrolarının kullanımını gösteren örnek program

Örnek

Bu örnek, bir Anchor program IDL'inden istemci oluşturma sürecini adım adım anlatır.

Proje Dosyalarını Kurma

Takip etmek için, example adında yeni bir dizin oluşturun ve kod parçacıklarından idl.json dosyasını ve package.json dosyasını ekleyin.

Bu örnek bir sayaç programı IDL'si kullanır. Kaynak kodu görüntüle.

Bir Anchor projesinde, IDL dosyası target/idl/<program_name>.json konumunda bulunur anchor build çalıştırıldıktan sonra.

Codama yapılandırma dosyası oluştur

Codama, IDL dosyasının konumunu, hangi istemci dillerinin oluşturulacağını ve oluşturulan kodun nereye çıktı alınacağını belirtmek için bir yapılandırma dosyası kullanır. Bu yapılandırmayı şu komutu çalıştırarak oluşturun:

Terminal
$
npx codama init

Bu, projenizin kök dizininde bir codama.json dosyası oluşturmak ve gerekli Codama bağımlılıklarını yüklemek için size sorular soracaktır.

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

İstemcileri oluştur

Yapılandırma dosyası oluşturulduktan sonra, istemcileri oluşturmak için oluşturma komutunu çalıştırın:

Terminal
$
npx codama run --all

Bu, codama yapılandırma dosyasında belirtilen dosya yollarında program istemcilerini oluşturacaktır.

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
}
]
}
}
}

Oluşturulan tüm dosyalar ilgili kod parçacıklarında gösterilmemektedir.

Proje Dosyalarını Kurma

Takip etmek için, example adında yeni bir dizin oluşturun ve kod parçacıklarından idl.json dosyasını ve package.json dosyasını ekleyin.

Bu örnek bir sayaç programı IDL'si kullanır. Kaynak kodu görüntüle.

Bir Anchor projesinde, IDL dosyası target/idl/<program_name>.json konumunda bulunur anchor build çalıştırıldıktan sonra.

Codama yapılandırma dosyası oluştur

Codama, IDL dosyasının konumunu, hangi istemci dillerinin oluşturulacağını ve oluşturulan kodun nereye çıktı alınacağını belirtmek için bir yapılandırma dosyası kullanır. Bu yapılandırmayı şu komutu çalıştırarak oluşturun:

Terminal
$
npx codama init

Bu, projenizin kök dizininde bir codama.json dosyası oluşturmak ve gerekli Codama bağımlılıklarını yüklemek için size sorular soracaktır.

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

İstemcileri oluştur

Yapılandırma dosyası oluşturulduktan sonra, istemcileri oluşturmak için oluşturma komutunu çalıştırın:

Terminal
$
npx codama run --all

Bu, codama yapılandırma dosyasında belirtilen dosya yollarında program istemcilerini oluşturacaktır.

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
}
]
}
}
}

Oluşturulan tüm dosyalar ilgili kod parçacıklarında gösterilmemektedir.

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"
}
]
}
}
]
}

Oluşturulan istemcileri kullanma

Oluşturulan istemciler, programınızla etkileşim kurmak için kaynak kodu içerir ancak package.json (TypeScript için) veya Cargo.toml (Rust için) dosyalarını içermez.

Ya yeni bir package.json ve Cargo.toml dosyaları oluşturmanız ya da oluşturulan istemcilerden gerekli bağımlılıkları projenizin mevcut dosyalarına eklemeniz gerekecektir.

Uygulamanıza entegre edilmiş

İstemciyi doğrudan uygulamanızın kaynak dizinine oluşturun ve ardından gerekli bağımlılıkları mevcut package.json veya Cargo.toml dosyalarınıza ekleyin.

İstemci kodunun paylaşılması veya yayınlanması gerekmeyen bir uygulama oluştururken bu yaklaşımı kullanın.

Bağımsız paketler veya crate'ler

Her istemci için ayrı TypeScript paketleri veya Rust crate'leri oluşturun. Örneğin, clients/js/ içine package.json ve clients/rust/ içine Cargo.toml ekleyin.

İstemciyi yeniden kullanılabilir bir kütüphane (npm veya crates.io) olarak yayınlamak veya bir monorepo'da birden fazla uygulama arasında istemciyi paylaşmak için bu yaklaşımı kullanın.

Is this page helpful?

İçindekiler

Sayfayı Düzenle

Yönetici

© 2025 Solana Vakfı.
Tüm hakları saklıdır.
Bağlanın