#near #wit #smart-contracts #wasm-interface #wasm #wasm-interface-types

bin+lib raen

NEAR 智能合约构建和部署的 CLI 工具

8 个版本

0.1.1 2022 年 11 月 21 日
0.1.0 2022 年 11 月 17 日
0.0.5 2022 年 5 月 18 日

#55#wasm-interface

每月 23 次下载

MITLGPL-3.0-or-later

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)
      |                                                                         ^-----

要修复此问题

  1. 您可能需要运行cargo add witgen(这将编辑您的Cargo.toml以包含类似以下行witgen = "0.14.0")。
  2. 在导致错误的文件顶部附近添加use witgen::witgen;
  3. 在类型的定义之前添加#[witgen]作为一行。例如。
use witgen::witgen;

#[witgen]
type Amount = Balance;

变更

现在在Cargo.toml中包含以下内容将允许项目将其wit类型包含在其生成的wit中。

[package.metadata.witgen]
export = true

贡献

  • 克隆此存储库
  • 使用cargo build构建
  • 向我们发送问题或拉取请求以提问,我们将改进本节!

依赖关系

~45MB
~885K SLoC