跳到主要内容

5 分钟入门

本指南提供了在 Gear 网络上运行智能合约的一般概述。它指导您如何编写智能合约,将其编译为 WASM,并部署到 Gear 网络。

在这个例子中,我们将使用一个模拟真实 Gear 去中心化网络的演示环境。

前期准备​

  1. 为了方便起见,建议您为所有与 Gear 相关的内容创建一个专用目录。本文的其余部分将假设您使用的是所建议的路径。输入以下命令来在 Home 目录创建一个专用文件夹并跳转到文件夹中:
mkdir -p ~/gear
cd ~/gear
  1. 确保您已经安装了在 Rust 中构建智能合约所需的所有工具。我们将使用 Rustup 来安装 Rust 编译器。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. 现在,让我们为 rustup 安装一个 nightly 版本,因为 Gear 使用了 一些 rustup 提供的最新功能。
rustup update
rustup update nightly
  1. 我们需要把 Rust 智能合约编译为 WASM,所以我们需要一个 WASM 编译器。让我们将 WASM 编译器添加到工具链中。
rustup target add wasm32-unknown-unknown --toolchain nightly

注意 如果你使用 Windows,请下载并安装 Build Tools for Visual Studio。

创建你的第一个 Gear 智能合约​

  1. 现在让我们在 gear 文件夹内,创建 contracts 文件夹,然后通过 cd 切换进文件夹
mkdir -p ~/gear/contracts
cd ~/gear/contracts
  1. 下一步将是为合约建立一个 Rust 库。
cargo new first-gear-app --lib

gear/contracts 目录树应该是这样的:

└── first-gear-app
├── Cargo.toml
└── src
└── lib.rs
  1. 现在开始写一些代码。用你喜欢的编辑器打开 first-gear-app,我们使用VS Code。
code ~/gear/contracts/first-gear-app
  1. 创建 build.rs 文件,并粘贴以下代码:
fn main() {
gear_wasm_builder::build();
}

同时配置Cargo.toml,可以使合约正确地创建。

[package]
name = "first-gear-app"
version = "0.1.0"
authors = ["Your Name"]
edition = "2021"
license = "GPL-3.0"

[dependencies]
gstd = { git = "https://github.com/gear-tech/gear.git", features = ["debug"] }

[build-dependencies]
gear-wasm-builder = { git = "https://github.com/gear-tech/gear.git" }

[dev-dependencies]
gtest = { git = "https://github.com/gear-tech/gear.git" }
  1. 用我们的第一个智能合约的代码替换 lib.rs。在编辑器中打开 src/lib.rs 并粘贴以下代码:
#![no_std]

use gstd::{debug, msg, prelude::*};

static mut MESSAGE_LOG: Vec<String> = vec![];

#[no_mangle]
pub unsafe extern "C" fn handle() {
let new_msg = String::from_utf8(msg::load_bytes()).expect("Invalid message");

if new_msg == "PING" {
msg::reply_bytes("PONG", 0).expect("Error in sending reply");
}

MESSAGE_LOG.push(new_msg);

debug!("{:?} total message(s) stored: ", MESSAGE_LOG.len());

}

这个合约发送了PING消息,会收到PONG消息作为回应。

  1. 然后,编译合约代码
cd ~/gear/contracts/first-gear-app/
cargo build --release

如果一切顺利,工作目录应该有一个 target 目录,如下所示的:

target
├── CACHEDIR.TAG
├── release
│   ├── ...
└── wasm32-unknown-unknown
├── CACHEDIR.TAG
└── release
├── build
│   └── ...
├── deps
│   └── ...
├── examples
├── incremental
├── first_gear_app.d
└── first_gear_app.wasm <---- this is our .wasm file

我们需要的是 target/wasm32-unknown-unknown/release 目录内的 first_gear_app.wasm 文件。现在知道它在哪里了,让我们进入下一步。

在测试网上部署你的第一个合约​

Gear provides a demo environment that emulates the real Gear decentralized network, available in idea.gear-tech.io. Gear 提供了一个模拟真实 Gear 去中心化网络的 demo 环境,可以通过 idea.gear-tech.io 访问。

创建账户​

  1. 通过 https://polkadot.js.org/extension/ 为您的浏览器下载 Polkadot 扩展插件。这个扩展插件可以管理账户并允许用这些账户签名交易。它是一个安全的工具,允许将你的账户注入到任何基于 Substrate 的应用程序。它不执行钱包功能,例如,发送资金。

  2. 下载完成后,点击 '+' 来创建新的账户:

img alt

  1. 确保你安全的保存了 12 个单词的助记词。

img alt

  1. 选择合适的网络 - 选择 "Allow to use on any chain"。为这个账户提供任何名称和密码,并点击"Add the account with the generated seed" 来完成账户注册。

img alt

  1. 前往 idea.gear-tech.io。系统将提示你授予 Gear Tech 应用程序对你账户的访问权,点击 "Yes, allow this application access" 。

img alt

  1. 点击右上方的 Connect 按钮,选择一个账户,连接到 Gear Tech。

  2. 根据 Actor 模型,智能合约通过消息上传到网络。Gear 节点在消息处理过程中会收取一定的 gas(关于gas)。账户需要有足够的资金来上传智能合约到TestNet。点击 "Get test balance"。

img alt

窗口的底部会出现一个关于成功获得余额的通知。你还可以在右上角的账户名称旁边看到当前的账户余额。

img alt

上传合约​

  1. 当你的账户余额足够时,点击 Upload program 并找到我们上面提到的 .wasm 文件。

img upload

  1. 指定合约名称,并设定 Gas limit 为 20 000 000,然后点击 Upload program 按钮。

img alt

  1. 签署交易,将合约上传到 Gear 网络。此外,签署合约并将元数据上传到 Gear 演示环境,以便可以使用该合约。为方便起见,建议设置复选框 Remember my password for the next 15 minutes 。

img alt

备注

img interface

上传后,如果合约名称前面有红点,代表初始化错误。请再次上传合约,并扩大 Gas limit,可以尝试将默认值扩大 10 倍。

  1. 合约上传后,前往 Recently uploaded programs 并找到你的合约。

img recent

向合约发送消息​

  1. 现在,尝试向新上传的合约发送一条消息,看看它是如何响应的!使用这个按钮: img alt

  2. 在打开的对话框中 PING 的 Payload 字段中,提供 20 000 000 的 gas,然后点击 Send request 按钮。

img alt

  1. 签名消息发送交易,如上传合约中的步骤 3 所示

  2. 成功处理消息后,合约会发送 PONG 作为响应:

img alt


更多内容​

除了这篇 "5 分钟入门",你还可以参考另一篇展示在 Gear 平台上创建应用程序的简单性和便利性的文章--初学者的第一个智能合约。 这篇文章以 Voting 应用程序为例,描述了 Gear 智能合约的结构,如何使用程序的角色模型架构,处理消息,以及如何处理状态。

关于 Gear 编写智能合约的信息以及智能合约实现背后的具体内容,请访问 智能合约。