substrate学习笔记8:ink合约开发之初体验

1 学习内容#

本节开始,我们将开始学习 ink 合约开发。

2 准备工作#

  • 环境依赖

需要安装 nightly 工具链:

rustup component add rust-src --toolchain nightly
rustup target add wasm32-unknown-unknown --toolchain nightly
  • 安装 substrate contract node

因为部署合约需要使用到 pallet-contracts pallet,我们这里使用已经配置好该 pallet 的模板。安装命令如下:

cargo install contracts-node --git https://github.com/paritytech/substrate-contracts-node.git --tag v0.3.0 --force --locked
  • 安装 ink!CLI

为了方便的设置 substrate 智能合约,我们需要安装 ink!CLI。

(1)安装 ink!CLI 需要先安装依赖 binaryen 包,命令如下:

# For Ubuntu or Debian users
sudo apt install binaryen

# For MacOS users
brew install binaryen

(2)安装 ink!CLI,命令如下:

cargo install cargo-contract --vers ^0.16 --force --locked

(3)安装后,可以用如下命令查看:

cargo contract --help

3 创建一个 ink!项目#

创建合约工程,命令如下:

cargo contract new flipper

3.1 合约源代码#

通过前面的命令,ink!CLI 给我们生成了一个最简单的智能合约代码。代码非常简单,有兴趣的小伙伴可以看一下生成的代码,在 flipper/lib.rs 中。

3.2 测试合约代码#

在生成的代码中,我们可以看到有测试代码,我们可以对其用链下测试环境进行测试,在 flipper 目录下运行如下命令:

cargo +nightly test

3.3 编译合约代码#

编译合约的命令如下:

cargo +nightly contract build

注意

编译好后的合约在 target 目录中,其中包含一个 metadata 文件和.contract 文件。.contract 文件就是用来部署到链上的合约文件,而 metadata 文件则包含合约的 ABI。

4 运行 substrate 智能合约节点#

运行命令如下:

substrate-contracts-node --dev --tmp

5 部署合约#

部署合约需要我们在浏览器打开工具 Canvas UI,然后选择点击左下角的 Local Node,这样就连接到了我们本地的节点。

substrate 中部署合约主要有以下两步:

  • 把合约代码放在链上;
  • 创建合约的实例。

5.1 上传合约代码#

连接上 Canvas UI 后,我们可以上传我们的合约代码,主要步骤如下:

  • 点击 Upload & Instantiate Contract;
  • 在 Instantiation account 选择一个账户(如 alice);
  • 在 descriptive Name 输入一个名字;
  • 将我们前面编译的 flipper.contract 文件拖到 drag & drop 区域;
  • 最后点击 Constructor Details。

5.2 在链上实例化合约#

智能合约作为区块链上账户系统的扩展而存在。因此,创建此合约的实例将创建一个新的 AccountId,它将存储智能合约管理的任何余额,并允许我们与合约交互。

在上面一步我们点击后,进入的实例化界面,我们需要填上合约实例化的名字,还有初始化的相关的值,然后点击 instantiate,再点击 Sign & Submit

至此,我们就把合约部署完成了。

6 调用合约#

我们现在可以执行合约了,点击 ABI, 可以看到有 getflip 两个函数,选择后,点击 execute 按钮,可以执行。

至此,我们就使用官方的例子体验了一下 ink!合约。

7 参考文献#

docs.substrate.io/tutorials/v3/ink...

8 本文实验后的 github 地址#

github.com/anonymousGiga/substrate...

本作品采用《CC 协议》,转载必须注明作者和本文链接
令狐一冲
讨论数量: 6

感觉用 substrate 开发的链来开发合约不是很合适,substrate 本来就是为了快速搭建应用链来产生的。

3年前 评论
linghuyichong (楼主) 3年前
xiaowoniu (作者) 3年前
linghuyichong (楼主) 3年前
xiaowoniu (作者) 3年前
linghuyichong (楼主) 3年前

文章
255
粉丝
121
喜欢
308
收藏
128
排名:327
访问:2.9 万
私信
所有博文
社区赞助商