Tạo Clients
Codama tạo ra các client TypeScript và Rust từ tệp IDL của chương trình. Các client được tạo ra bao gồm các hàm để gọi các lệnh và truy xuất tài khoản, loại bỏ nhu cầu phải thủ công tuần tự hóa và giải tuần tự hóa tài khoản chương trình hoặc instruction data.
Codama đang trong quá trình phát triển tích cực và có thể thay đổi. Tham khảo các kho lưu trữ được liên kết trong tham khảo nhanh để biết thông tin mới nhất.
Tham khảo nhanh
Lệnh CLI
| Lệnh | Mô tả |
|---|---|
codama init | Tạo tệp cấu hình codama |
codama run | Tạo client chương trình từ tệp cấu hình |
Trình tạo Client
| Gói | Mô tả |
|---|---|
@codama/renderers-js | Tạo client TypeScript tương thích với @solana/kit |
@codama/renderers-rust | Tạo client Rust tương thích với solana_sdk |
@codama/nodes-from-anchor | Chuyển đổi Anchor IDL sang Codama IDL để tạo client |
Tài nguyên bổ sung
| Tài nguyên | Mô tả |
|---|---|
| Codama | GitHub của Codama |
| Codama CLI | GitHub của Codama CLI |
| Codama Macros | GitHub của Codama Macros. Tạo Codama IDL từ chương trình Rust gốc với Codama macros |
| Codama Macros Example Program | Chương trình mẫu minh họa cách sử dụng Codama macros |
Ví dụ
Ví dụ này hướng dẫn quy trình tạo client từ IDL của chương trình Anchor.
Thiết lập tệp dự án
Để làm theo, hãy tạo một thư mục mới có tên example và thêm tệp idl.json và
tệp package.json từ các đoạn mã.
Ví dụ này sử dụng IDL của chương trình counter. Xem mã nguồn.
Trong một dự án Anchor, IDL được tìm thấy tại target/idl/<program_name>.json
sau khi chạy anchor build.
Tạo tệp cấu hình Codama
Codama sử dụng một tệp cấu hình để chỉ định vị trí của tệp IDL, ngôn ngữ client nào cần tạo, và nơi xuất mã đã tạo. Tạo cấu hình này bằng cách chạy:
$npx codama init
Điều này sẽ hiển thị các câu hỏi để tạo tệp codama.json trong thư mục gốc của
dự án và cài đặt các phụ thuộc Codama cần thiết.
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
Tạo Clients
Sau khi tệp cấu hình được tạo, chạy lệnh tạo để tạo các clients:
$npx codama run --all
Điều này sẽ tạo các client chương trình trong đường dẫn tệp được chỉ định trong tệp cấu hình 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}]}}}
Không phải tất cả các tệp được tạo đều được hiển thị trong các đoạn mã tương ứng.
Sử dụng các Clients đã tạo
Các client được tạo ra bao gồm mã nguồn để tương tác với chương trình của bạn
nhưng không bao gồm package.json (cho TypeScript) hoặc Cargo.toml (cho
Rust).
Bạn sẽ cần tạo mới các tệp package.json và Cargo.toml hoặc thêm các phụ
thuộc cần thiết từ các client được tạo vào các tệp đã tồn tại trong dự án của
bạn.
Tích hợp vào ứng dụng của bạn
Tạo client trực tiếp vào thư mục mã nguồn của ứng dụng của bạn và sau đó thêm
các phụ thuộc cần thiết vào package.json hoặc Cargo.toml hiện có.
Sử dụng cách tiếp cận này khi xây dựng ứng dụng mà mã client không cần được chia sẻ hoặc xuất bản.
Các gói hoặc crate độc lập
Tạo các gói TypeScript hoặc crate Rust riêng biệt cho mỗi client. Ví dụ, thêm
package.json trong clients/js/ và Cargo.toml trong clients/rust/.
Sử dụng cách tiếp cận này để xuất bản client như một thư viện có thể tái sử dụng (npm hoặc crates.io) hoặc chia sẻ client giữa nhiều ứng dụng trong một monorepo.
Is this page helpful?