Menghasilkan Klien
Codama menghasilkan klien TypeScript dan Rust dari file IDL program. Klien yang dihasilkan mencakup fungsi untuk memanggil instruksi dan mengambil akun, menghilangkan kebutuhan untuk secara manual menserialisasi dan mendeserialisasi akun program atau instruction data.
Codama sedang dalam pengembangan aktif dan dapat berubah. Lihat repositori yang ditautkan dalam referensi cepat untuk informasi terbaru.
Referensi Cepat
Perintah CLI
| Perintah | Deskripsi |
|---|---|
codama init | Menghasilkan file konfigurasi codama |
codama run | Menghasilkan klien program dari file konfigurasi |
Generator Klien
| Paket | Deskripsi |
|---|---|
@codama/renderers-js | Menghasilkan klien TypeScript yang kompatibel dengan @solana/kit |
@codama/renderers-rust | Menghasilkan klien Rust yang kompatibel dengan solana_sdk |
@codama/nodes-from-anchor | Mengkonversi Anchor IDL ke Codama IDL untuk menghasilkan klien |
Sumber Daya Tambahan
| Sumber Daya | Deskripsi |
|---|---|
| Codama | GitHub Codama |
| Codama CLI | GitHub Codama CLI |
| Codama Macros | GitHub Codama Macros. Menghasilkan Codama IDL dari program Rust native dengan makro Codama |
| Codama Macros Example Program | Program contoh yang mendemonstrasikan penggunaan makro Codama |
Contoh
Contoh ini memandu melalui proses menghasilkan klien dari IDL program Anchor.
Menyiapkan File Proyek
Untuk mengikuti, buat direktori baru bernama example dan tambahkan file
idl.json dan file package.json dari cuplikan kode.
Contoh ini menggunakan IDL program counter. Lihat sumber.
Dalam proyek Anchor, IDL dapat ditemukan di target/idl/<program_name>.json
setelah menjalankan anchor build.
Membuat File Konfigurasi Codama
Codama menggunakan file konfigurasi untuk menentukan lokasi file IDL, bahasa klien mana yang akan dihasilkan, dan di mana menyimpan kode yang dihasilkan. Buat konfigurasi ini dengan menjalankan:
$npx codama init
Ini akan menampilkan pertanyaan untuk membuat file codama.json di root proyek
Anda dan menginstal dependensi Codama yang diperlukan.
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
Menghasilkan Klien
Setelah file konfigurasi dibuat, jalankan perintah generate untuk menghasilkan klien:
$npx codama run --all
Ini akan menghasilkan klien program di jalur file yang ditentukan dalam file konfigurasi 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}]}}}
Tidak semua file yang dihasilkan ditampilkan dalam cuplikan kode yang sesuai.
Menggunakan Klien yang Dihasilkan
Klien yang dihasilkan mencakup kode sumber untuk berinteraksi dengan program
Anda tetapi tidak termasuk package.json (untuk TypeScript) atau Cargo.toml
(untuk Rust).
Anda perlu membuat file package.json dan Cargo.toml baru atau menambahkan
dependensi yang diperlukan dari klien yang dihasilkan ke file yang sudah ada di
proyek Anda.
Terintegrasi ke dalam aplikasi Anda
Hasilkan klien langsung ke direktori sumber aplikasi Anda dan kemudian tambahkan
dependensi yang diperlukan ke package.json atau Cargo.toml yang sudah ada.
Gunakan pendekatan ini saat membangun aplikasi di mana kode klien tidak perlu dibagikan atau dipublikasikan.
Paket atau crate mandiri
Buat paket TypeScript atau crate Rust terpisah untuk setiap klien. Misalnya,
tambahkan package.json di clients/js/ dan Cargo.toml di clients/rust/.
Gunakan pendekatan ini untuk mempublikasikan klien sebagai pustaka yang dapat digunakan kembali (npm atau crates.io) atau berbagi klien di beberapa aplikasi dalam monorepo.
Is this page helpful?