LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > 【Substrate开发教程】08 - 搭建Substrate本地测试区块链网络

【Substrate开发教程】08 - 搭建Substrate本地测试区块链网络

2020-10-21 松果 来源:区块链网络


这篇文章学习如何通过Substrate搭建本地私有区块链(Private Network)。

安装substrate-node-template

之前的文章中已经介绍过如何安装substrate-node-template,它是下面要讲的内容的前置条件。

接下来要做的是:

基于substrate-node-template启动Substrate私有区块链网络;生成ed25519和sr25519密钥对用于网络授权;创建和编辑链规范(chainspec)json文件;

启动本地区块链

模拟两个节点(Alice和Bob)来启动本地区块链,先使用node-template命令启动Alice节点,node-template命令用法如下

node-template [FLAGS] [OPTIONS] node-template <SUBCOMMAND>

定位到substrate-node-template目录,启动节点命令如下

./target/release/node-template \ --base-path /tmp/alice \ --chain local` --alice \ --port 30333 \ --ws-port 9944 \ --rpc-port 9933 \ --node-key 0000000000000000000000000000000000000000000000000000000000000001 \ --telemetry-url 'wss://telemetry.polkadot.io/submit/ 0' \ --validator

这里没有使用子命令,而是配置了一系列标识(FLAGS)和选项(OPTIONS)。

标识(FLAGS)有:

--alice:是--name Alice --validator的缩写,设置Alice节点为验证人,同时把预定义的Alice会话密钥添加到节点的keystore中,密钥用于区块生产和其最终确定性,通常应该生成自己的密钥,并通过RPC调用将其插入密钥库;--validator:节点启用为验证人模式,要参与生产区块和最终确认,而不仅仅是同步网络;

选项(OPTIONS)有:

--base-path <PATH>:自定义基础路径,指定Substrate存储与链相关的所有数据的目录,如果目录不存在会创建,如果已存在其他区块链数据会报错,如果未指定此值,会使用默认目录;--chain <CHAIN_SPEC>:指定要使用的链规范文件,可选值有预留的dev、local、staging,也可以使用自己的chainspec文件;--name <NAME>:为节点设置一个人类可读的名字;--port <PORT>:指定p2p协议的TCP端口,默认值为30333;--ws-port <PORT>:指定WebSockets RPC服务的TCP端口,默认值为9944;--rpc-port <PORT>:指定HTTP RPC服务的TCP端口,默认值为9933;--node-key <KEY>:libp2p网络使用的密钥,使用ed25519加密算法,是十六进制编码的32字节密钥,即64个十六进制字符,此选项仅限于开发和测试使用;--telemetry-url <URL VERBOSITY>...:要连接的遥测(telemetry)服务器的URL;

启动节点命令运行效果如下:


终端打印了节点的基本信息,比如:

Database: RocksDb at /tmp/alice/chains/local_testnet/db

数据库使用RocksDb,链数据保存在/tmp/alice/chains/local_testnet/db目录;

Initializing Genesis block/state (state: 0x5e67…2183, header-hash: 0x7b64…6016)

说明节点正在使用哪个创世区块,启动下一个节点时需要验证state和header-hash值是否相等;

Local node identity is: 12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp (legacy representation: 12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp)

本地节点标识表示从Alice节点引导时,Bob节点需要的Peer ID。

目前Alice节点没有生产任何区块,一旦另一个节点加入网络就会开始生产。

在本地使用Polkadot-JS Apps

通过Polkadot-JS Apps可以和通过substrate-node-template启动的节点进行交互,之前的文章介绍过在线使用Polkadot-JS Apps的方法,这里再介绍其在本地环境运行的方法。

首先需要确认Nodejs和Yarn的版本(它们的安装方法可以看之前的文章:创建第一条Substrate区块链)

Node >= 10.13.0Yarn >= 1.10.1

我本地的nodejs和yarn的版本符合条件:


下面的命令安装Polkadot-JS Apps到本地,并启动

git clone https://github.com/polkadot-js/apps.git cd apps yarn yarn start

打开http://localhost:3000,设置网络为Local Node,即可看到Polkadot-JS Apps界面:


如果报如下错误:

ENOSPC: System limit for number of file watchers reached

可以使用如下命令调整系统file watchers的数量

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Bob节点加入网络

现在Alice节点已建立并开始运行,Bob节点可以从Alice节点通过引导加入本地区块链网络,启动Bob节点的命令如下:

./target/release/node-template \ --base-path /tmp/bob \ --chain local \ --bob \ --port 30334 \ --ws-port 9945 \ --rpc-port 9934 \ --telemetry-url 'wss://telemetry.polkadot.io/submit/ 0' \ --validator \ --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp

基本和启动Alice节点的命令相同,只是基本路径和各种端口的配置不同(因为两个节点在同一台物理计算机上运行),另外还有一个特别的选项:

--bootnodes <ADDR>...:指定引导节点,需要配置引导节点的IP地址、端口、peerID;

可以看到,Bob节点指定的引导节点是Alice,路径最末端的Local node identity是12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp,正是上面启动的Alice节点的peerID。

Bob节点加入网络后,本地区块链就会开始生产区块


Polkadot-JS Apps也会展示区块生产情况


确认了Alice和Bob两个节点都按预期运行就可以将其关闭,下一篇文章会介绍更多运行和维护本地节点的操作。

—-

编译者/作者:松果

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...