生成客户端
Codama 从程序的 IDL 文件生成 TypeScript 和 Rust 客户端。生成的客户端包括调用指令和获取账户的函数,省去了手动序列化和反序列化程序账户或指令数据的需求。
Codama 正在积极开发中,可能会发生变化。请参考快速参考中的链接仓库以获取最新信息。
快速参考
CLI 命令
| 命令 | 描述 |
|---|---|
codama init | 生成一个 Codama 配置文件 |
codama run | 从配置文件生成程序客户端 |
客户端生成器
| 包 | 描述 |
|---|---|
@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 项目中,运行 anchor build 后,IDL 位于
target/idl/<program_name>.json。
创建 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?