#abi #generate #client #utility #contract #generation #smart

unc-abi-client

用于生成用于实用型智能合约的Rust客户端的库

3个不稳定版本

0.10.1 2024年5月23日
0.10.0 2024年5月22日
0.1.0 2024年3月7日

#95#smart


用于 2 crates

MIT/Apache

19KB
202

unc-abi-client-rs

从NEAR上的ABI模式生成Rust客户端代码的库workspaces-rs

Github CI Build Crates.io version Downloads

发布说明

发布说明和未发布更改可以在CHANGELOG中找到

使用方法

此crate支持两组API,以满足不同用户的需求

  • 宏驱动。通过单个宏调用为您提供客户端。
  • 基于生成。提供更多控制,并对最终使用的代码透明,但需要更多设置。

宏API

查看delegator-macro示例,了解如何使用宏API获取客户端并使用它。

基于位于path/to/abi.json(相对于当前文件目录)的ABI生成名为ClientName的结构体

mod mymod {
    unc_abi_client::generate!(ClientName for "path/to/abi.json");
}

将宏调用放置在mod部分是可选的,但有助于减少意外行为,如名称冲突。

现在,假设你已经部署了一个名为contract: utility_workspaces::Contract的合约,你可以进行如下调用

let contract = mymod::ClientName { contract };
let res = contract
    .my_method_name(arg1, arg2)
    .await?;

生成API

查看delegator-generation示例,了解如何使用生成API生成客户端并使用它。

首先,我们需要我们的包有一个build.rs文件,该文件运行生成步骤。以下片段将在abi.rs下生成客户端,位于path/to/out/dir

fn main() -> anyhow::Result<()> {
    unc_abi_client::Generator::new("path/to/out/dir".into())
        .file("path/to/abi.json")
        .generate()?;
    Ok(())
}

然而,生成的文件本身并不包含在你的源集合中。你必须手动包含它;推荐的方法是创建一个具有自定义路径的mod。

#[path = "path/to/out/dir/abi.rs"]
mod mymod;

现在,假设你已经部署了一个名为contract: utility_workspaces::Contract的合约,你可以进行如下调用

let contract = mymod::AbiClient { contract };
let res = contract
    .my_method_name(arg1, arg2)
    .await?;

请随意探索其他方法来定制生成的代码(例如客户端结构名称),例如使用 Generator

贡献

除非您明确声明,否则您根据 Apache-2.0 许可证定义的任何有意提交以包含在作品中的贡献,将按照以下方式双许可,不附加任何额外条款或条件。

许可

许可方式为以下之一:

由您选择。

依赖

~5MB
~105K SLoC