# 使用Substrate实现一个存证模块

By [Lenny](https://paragraph.com/@lenny-4) · 2023-05-16

---

存证功能的作用
-------

快速开始
----

### 第一步，下载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内部结构](https://storage.googleapis.com/papyrus_images/42b5ffd1043698fe4ca4c9b3673543f03bd91ff0752fb124fc1f0fb09d2c6f62.png)

template-node内部结构

### 第二步，打开polkadot.js

网站链接：

[https://polkadot.js.org/apps/#/explorer](https://polkadot.js.org/apps/#/explorer)

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

![没有启动区块链节点之前](https://storage.googleapis.com/papyrus_images/54dbead20cedfc90d018dc2dd92d657a5654f3a33a263cc448d24146eb0a69bc.png)

没有启动区块链节点之前

现在，我们启动下载好的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的时候也是经常出错，多看官方的文档；

---

*Originally published on [Lenny](https://paragraph.com/@lenny-4/substrate)*
