Codama 从程序的 IDL 文件生成 TypeScript 和 Rust 客户端。生成的客户端包括调用指令和获取账户的函数,省去了手动序列化和反序列化程序账户或指令数据的需求。
Codama 正在积极开发中,可能会发生变化。请参考快速参考中的链接仓库以获取最新信息。
快速参考
CLI 命令
| Command | Description |
|---|---|
codama init | 生成 codama 配置文件 |
codama run | 根据配置文件生成程序客户端 |
客户端生成器
| Package | Description |
|---|---|
@codama/renderers-js | 生成与 @solana/kit 兼容的 TypeScript 客户端 |
@codama/renderers-rust | 生成与 solana_sdk 兼容的 Rust 客户端 |
@codama/nodes-from-anchor | 将 Anchor IDL 转换为 Codama IDL 以生成客户端 |
其他资源
| 资源 | 描述 |
|---|---|
| Codama | Codama GitHub |
| Codama CLI | Codama CLI GitHub |
| Codama Macros | Codama Macros GitHub。使用 Codama 宏从原生 Rust 程序生成 Codama IDL |
| Codama Macros Example Program | 展示 Codama 宏用法的示例程序 |
示例
此示例演示了从 Anchor 程序 IDL 生成客户端的过程。
设置项目文件
请跟随操作,新建一个名为 example 的目录,并添加代码片段中的 idl.json 文件和
package.json 文件。
此示例使用了一个计数器程序 IDL。 查看源码。
在 Anchor 项目中,IDL 位于 target/idl/<program_name>.json,运行 anchor build
后生成。
创建 Codama 配置文件
Codama 使用配置文件来指定 IDL 文件的位置、要生成的客户端语言以及生成代码的输出位置。通过运行以下命令创建此配置:
$npx codama init
这会引导你回答一些问题,在项目根目录下创建一个 codama.json
文件,并安装所需的 Codama 依赖。
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
生成客户端
配置文件创建完成后,运行生成命令以生成客户端:
$npx codama run --all
这将在 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}]}}}
使用生成的客户端
生成的客户端包含与程序交互的源代码,但不包括 package.json(用于 TypeScript)或
Cargo.toml(用于 Rust)文件。
你需要新建 package.json 和 Cargo.toml
文件,或将生成客户端所需的依赖添加到你项目现有的相关文件中。
集成到您的应用程序中
可以直接将客户端生成到应用的源码目录下,然后将所需依赖添加到现有的
package.json 或 Cargo.toml 文件中。
在构建客户端代码不需要共享或发布的应用程序时使用此方法。
独立的包或 Crates
为每个客户端分别创建 TypeScript 包或 Rust crate。例如,在 clients/js/ 中添加
package.json,在 clients/rust/ 中添加 Cargo.toml。
使用此方法将客户端作为可重用的库(npm 或 crates.io)发布,或在单一代码库中跨多个应用程序共享客户端。
Is this page helpful?