Cover photo

使用Substrate实现一个存证模块

存证功能的作用

快速开始

第一步,下载template-node源代码

代码如下:

git clone -b polkadot-v0.9.30 --depth 1 https://github.com/substrate-developer-hub/substrate-node-template.git

解释一下参数:-b polkadot-v0.9.30 表示我们选择v0.9.30这个分支的代码, --depth 1 表示我们只选择当前分支下的最近1次提交,这样可以保证我们不会下载很多历史代码,没必要。

如果不懂polkadot版本和substrate版本之间的对应关系,可以查看这个网站:

下载成功后,就会在本地看到一个文件夹,打开文件夹,内部的文件如下图所示

template-node内部结构
template-node内部结构

第二步,打开polkadot.js

网站链接:

https://polkadot.js.org/apps/#/explorer

这个网站监听本地的9944端口,当我们在本地运行区块链节点的时候,这个网站就会记录出现数据,现在因为没有run 节点,所以不会有任何显示, 右上角会持续显示“waiting to establish a connection …”

没有启动区块链节点之前
没有启动区块链节点之前

现在,我们启动下载好的template-node.(attention! 如果启动不起来,查看报错信息,多半是rust环境有问题,你所碰到的问题,都可以在网上找到解决方案),因为我做这个项目的时候是2023年的3月份,所以使用的rust版本如下:

rustup install nightly-2023-01-01
rustup target add wasm32-unknown-unknown --toolchain nightly-2023-01-01
cargo +nightly-2023-01-01 build --release

编译成功后,启动一个测试节点,下面代码的意思是,编译成功后的二进制文件会出现在./target/release/node-template中,我们以dev的方式启动,同时添加--tmp选项,表示当我们停止节点之后,节点的数据将全部消失。

./target/release/node-template --dev --tmp

第三步,运行template-node

先在本地run 一下template-node, 看看能否成功出块。

第四步,编写我们的pallet

pallet就类似于我们写代码的时候经常写的module, 每一个pallet 代表着一个功能模块;这些pallet 最后会在runtime包中进行调用,最后runtime包的代码会被编译成wasm(wasm是一堆二进制文件),等部署到链上的时候机会执行我们在runtime中的逻辑。

第五步,编译

第六步,运行修改过的template-node

第七步,在polkadot.js上查看链上数据

总结

  1. 本次只是一个小的demo for coding a pallet, d

  2. 如果没有按照本次教程运行自己的节点没关系,我刚开始学rust的时候也是经常出错,多看官方的文档;