搭建 Substrate 开发环境

Substrate 介绍

Substrate 是由德国 Parity 公司推出的一个区块链构建框架。它实现了区块链开发领域中所遇到的大部分通用功能,比如点对点网络连接,可配置的共识算法,常用加密算法,数据库存储,交易管理等。通过使用 Substrate,软件开发人员可以在短时间内建立一条属于自己的完整区块链,开发者只需要关注自己的业务逻辑,从底层复杂的技术中解放出来。 使用 Substrate 构建的区块链,有一个额外的好处,即可以轻易地连接到 Parity 的 Polkadot 公链网络,这一网络具有很多优势,比如跨链交易、共享安全等。 Substrate 是由 Rust 语言开发,而 Rust 最为一门高级静态编程语言,具有诸多优势,如内存安全、类型检查、支持编译为 WASM、函数式友好、社区资料完善等优点。通过借助 Rust 的优良特性,也使得 Substrate 的性能优良、可读性高。

Substarte 和 Substrate-node-template 区别

Substrate 是将核心框架从 Polkadot 里边抽出来,让通用功能打包出来独立运行。substrate-node-template 则是将 Subtrate 的底层实现细节剥离出来,让开发者可以集中精力关注自己开发的应用程序及相关的配置。

两者的关系可以简单理解为:substrate-node-template 是 substrate 的亲儿子,波卡 polkadot 的亲孙子。 从代码复杂程度看,Polkadot > Substrate > substrate-node-template。

substrate-node-template 只留下了开发者开发需要用到的文件,其它的都通过依赖清单和调用一笔带过了。举个例子,Substrate 源代码项目里有很多实现好的功能,比如资产管理、智能合约等,如果用 substarte-node-template 编写自己的应用程序时要用到的话,只需轻松地在cargo.toml里引入依赖,在 runtime 运行配置清单里告诉下大家需要使用它,然后就可以调用这些功能了。项目结构精简了很多,目的也很明确:开发者只管知道怎么用就行了,其它不需要操心。就好比用电脑的人,不需要关心操作系统底层是怎么运行的,他只需要知道我做什么事情用什么软件就可以了。

搭建开发环境

安装方式有两种:一种是使用官方提供的自动安装脚本,另一种是手动安装。这里推荐前者,一键将需要的软件和各种依赖都安装完成,等没必要花太多时间在安装环节。 官网安装文档点这里

官方脚本自动安装(推荐)

$ curl https://getsubstrate.io -sSf | bash -s -- --fast

访问 https://getsubstrate.io 查看脚本详情。 脚本安装依赖包括: openssl(密码学库)、cmake(编译工具)、 llvm(编译器框架)、Rust等。

我自己在 Ubuntu22.04 环境下,提前使用阿里云软件源更新了系统,然后在较稳定的网络环境执行该自动安装脚本,最后顺利安装完毕。

image

image

手动安装

略,参考官网安装文档

编译 substrate

实际学习时,仅编译 substrate-node-template 即可,二者区别前面有说明。

下载 Substrate 代码

$ git clone https://github.com/paritytech/substrate.git

编译 Substrate

$ cd substrate
# $ SKIP_WASM_BUILD=1 cargo build --release
$ cargo build --release

SKIP_WASM_BUILD=1 表示编译时跳过 wasm 编译构建版本,直接使用 native 的版本,从而节省编译时间。

出现如下提示,表示编译完成。(编译速度非常慢,建议闲暇时间进行)

image

编译完成后,会生成 Substrate 可执行文件

$ pwd
/home/amesy/Documents/Code/Rust/substrate
$ ls -l target/release/substrate
-rwxrwxr-x 2 amesy amesy 88242168  8月  4 12:49 target/release/substrate

运行 substrate 节点网络

substrate用很多个命令(参数),可使用./target/release/substrate --help查看用法。

这里使用参数 –dev 以开发者模式运行节点网络

$ ./target/release/substrate --dev

substrate 启动后,会输出如:当前的客户端版本,节点名,数据库目录,节点身份ID等等。

image

编译 substrate-node-template

substrate-node-template 的编译方式跟上面编译 Substrate 时基本一致,具体参考官网文档,此处不再详述。

出现如下提示,表示编译完成。(编译速度非常慢,建议闲暇时间进行)

Finished release [optimized] target(s) in 66m 26s

通过运行以下命令查看预定义Alice开发帐户的帐户信息

./target/release/node-template key inspect //Alice
image

运行节点

通过该命令以开发模式启动节点

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

安装前端模板

略,参考官网安装文档

执行某些前端工具命令时,需要通过 sudo 获取 root 权限来执行,否则可能会报错。

启动前端模板服务

$ sudo yarn start

浏览器访问模板服务:http://localhost:8000

image

可以看到 CURRENT BLOCK 跟服务端的出块数目基本保持同步。

总结

  • substrate-node-template 是将 Subtrate 的底层实现细节剥离出来,让开发者可以集中精力关注自己开发的应用程序及相关的配置。所以日常开发应该使用 substrate-node-template。
  • 官网文档提供了非常详细的安装步骤,安装时建议仔细阅读。
  • 安装过程只要确保网络畅通,加上足够的耐心,基本都能顺利安装完成。
  • Substrate 节点服务和前端模板服务需要区分启动顺序,即 Substrate 节点服务先启动,前端模板服务后启动,否则可能会报错:Error Connecting to Substrate

(完)