8 个版本
0.1.1 | 2022 年 11 月 21 日 |
---|---|
0.1.0 | 2022 年 11 月 17 日 |
0.0.5 | 2022 年 5 月 18 日 |
#55 在 #wasm-interface
每月 23 次下载
97KB
899 行
RAEN 🌧
只需 raen build
就可以将完全类型化、可发现接口添加到您的智能合约中。
RAEN 管理员 和即将推出的新工具可以借助这些接口使生活更轻松。
没有 RAEN,智能合约作者或在其合约之上构建应用程序的人将无法轻松了解智能合约具有哪些方法或它们接受哪些参数。以太坊通过 ABIs 解决了这个问题,即合同作者需要分发给应用程序构建者或想要与合约集成或描述合约的文档维护者使用的 JSON 文件。 Pagoda fka Near Inc 正在研究 与以太坊类似的方法。
RAEN 跳过了这种方法。它使用一种 Wasm 兼容的标准,比 JSON 更紧凑,可以自动转换为 Pagoda 的 ABI 或其他格式,如 OpenRPC,并且最终将与 Wasm 核心合并。并且 RAEN 将 Wit 直接注入到智能合约中,同时减少整体合约大小。不再需要在 GitHub 上搜索 ABI 文件。现在它们都可以直接在链上使用。
在 RAEN 优化的 NEAR 版本中,任何人都可以轻松生成跨合约调用逻辑、TypeScript 库、CLI、管理 UI/交互式文档、子图 等,只需使用合约名称即可。
最好的部分?开始使用很简单。只需一个命令。只需使用 raen build
构建您的合约。
目前仅限 Rust。对 Rust 或 NEAR 新手?请查看 RAEN 指南。
https://user-images.githubusercontent.com/221614/178541903-7f17b06c-c576-47b1-8c9d-976e43339b9c.mp4
关于名称
"RAEN" 是 "NEAR" 反转拼写。发音与 "rain" 相同。
安装
新接触 Rust 吗? 指南中的步骤说明。
Rust
raen
是一个 Rust 包,可以通过 cargo
安装
cargo install raen
如果你还没有安装 Rust,在运行上述命令之前需要安装它。在 Linux 或 MacOS 上,使用以下命令
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
然后,添加 wasm32-unknown-unknown
工具链。这个工具链是必需的,因为 NEAR 合约需要编译为 [Wasm],且 架构 和 平台 都是 "unknown"。
rustup target add wasm32-unknown-unknown
然后按照 这些说明 设置 Rust。
npm(可选)
raen
也分发在 npm 上,它封装了为你的计算机构建的 rust 二进制文件
npm install --global raen-cli
其他要求
raen
被设计为 near-cli-rs
的扩展,但在此项目稳定之前,你需要安装 JS 版本 near-cli
来部署你的合约。
npm install --global near-cli
使用
关于 NEAR、Rust 和 RAEN 的简介,请参阅 ✨ 指南 ✨。基础
在 NEAR 智能合约项目中
raen build --release
这会构建合约(如果你使用 Rust 工作区,则是合约),将合约的类型嵌入到 自定义部分 中,并将它们放在 ./target/res/crate_name.wasm
中。
然后,你可以像往常一样使用 near-cli
进行部署。使用 dev-deploy
near dev-deploy --wasmFile ./target/res/crate_name.wasm
使用 deploy
near deploy --wasmFile ./target/res/crate_name.wasm --accountId YOUR_ACCOUNT_NAME_HERE
各种当前和未来的工具现在可以使用你的合约类型来简化你的生活。例如,你可以在 raen.dev/admin 中输入你的合约地址以获得完整的仪表板。
学习:它如何工作:Wasm 💖️ Wit
[Wit] 是一个正在兴起的标准,旨在简化编译为 WebAssembly 的程序之间的互操作性,也称为 [Wasm]。 (Wit 代表 "WebAssembly 接口类型"。) Wit 最终将与 Wasm 合并,允许所有编译的 Wasm 模块向其他 Wasm 模块及其开发人员解释其接口。
NEAR 运行 Wasm。任何 Wasm 语言,尽管 Rust 拥有最成熟的工具和文档。
当你使用 raen
构建你的智能合约时,它会将你的合约的完整 Wit 规范注入到 Wasm 自定义部分 中。它使用 brotli 进行压缩以减少 存储 要求。
这会增加你的合约大小吗?在我们的测试中,使用 raen
编译的合约最终比之前 更小!
raen
使用 witme
生成 Wit 并将其注入到 Wasm 自定义部分。在底层,witme
使用 walrus,它优化了 Wasm,即使有 Wit,也能减少总合约大小。我们将很快添加完整的基准测试。
(注意,目前添加到 Wasm 自定义部分的是一个 JSON AJV 规范,而不是 Wit,原因如下:1. 目前没有浏览器上的 Wit-to-AJV 工具;2. 此仪表板依赖于 AJV;3. 目前没有其他工具使用 Wit。一旦 Wit 确定 初始语法版本,AJV 自定义部分将替换为 Wit 自定义部分。)
该管理面板随后读取自定义部分,解压brotli,并使用react-jsonschema-form允许与合同进行交互。
提示
witgen宏
如果您定义了RAEN不识别的类型(例如,在这行type Amount = Balance;
中,RAEN不识别Amount
),您的构建可能会导致错误
You probably need to add a `witgen` macro to the missing type
Add 'witgen' as a dependency to add to type definition. e.g.
Error: no type named `amount`
// Or
You probably need to add a `witgen` macro to the missing type
Add 'witgen' as a dependency to add to type definition. e.g.
1 use witgen::witgen;
2
3 /// Type exposed by contract API
4 #[witgen]
5 struct Foo {}
6
Error: no type named `amount`
--> index.ts:9:73
|
9 | transfer-from-escrow: function(destination-account: account-id, amount: amount)
| ^-----
要修复此问题
- 您可能需要运行
cargo add witgen
(这将编辑您的Cargo.toml
以包含类似以下行witgen = "0.14.0"
)。 - 在导致错误的文件顶部附近添加
use witgen::witgen;
。 - 在类型的定义之前添加
#[witgen]
作为一行。例如。
use witgen::witgen;
#[witgen]
type Amount = Balance;
变更
现在在Cargo.toml中包含以下内容将允许项目将其wit类型包含在其生成的wit中。
[package.metadata.witgen]
export = true
贡献
- 克隆此存储库
- 使用
cargo build
构建 - 向我们发送问题或拉取请求以提问,我们将改进本节!
依赖关系
~45MB
~885K SLoC