如何用 Substrate 创建一条私有链(上)

本文是Substrate开发者中心的教程《创建一条私有链》的第一部分。PolkaWorld 社区正在翻译本文,后续将在 PolkaWorld 网站和公众号上连载,敬请期待。

创建私有网络

在本教程中,我们将练习如何通过 Substrate ,使用你选择的验证人集/授权集来启动区块链网络。

安装 Node Template

当你学习完教程 创建你的第一条 Substrate 链[1] 之后,你应该已经在计算机上编译了 Substrate Node Template[2] 的 v2.0.0-rc3 版本,如果没有的话,请先学习完教程

如果你是有经验的开发人员,倾向于选择跳过该教程,建议你可以根据自述文件中的说明安装节点模板

你需要做哪些事

在正式开始之前,我们先列出了本教程中将要做的事情,如下:

启动一条基于模板项目的 Substrate 区块链
网络
生成 ed25519 和 sr25519 密钥对,以用作网络授权。
创建和编辑 chainspec json 文件。

听起来不错?好,那我们开始吧!

从 Alice 和 Bob 开启区块链之旅

在我们生成自己的密钥,并启动一个真正独特的 Substrate 网络之前,让我们从一个名为local的预定义网络规范开始,学习带有两个称为 Alice 和 Bob 的预定义(绝非私有)密钥的基础知识。

本教程的这一部分应在具有单个 Substrate 二进制文件的单个工作站上运行。如果到目前为止,你已经按照本教程进行操作,则说明设置正确。

先从 Alice 开始

Alice (或者正在操作的人) 应该从节点模板存储库根目录运行这些命令。

这里的操作明确显示了 purge-chain 命令。之后我们会忽略此操作。需注意的是,无论何时尝试启动新网络,都应清除旧的链数据。

#Purgeanychaindatafrompreviousruns#Youwillbepromptedtotype`y`./target/release/node-templatepurge-chain--base-path/tmp/alice--chainlocal
#StartAlice'snode./target/release/node-template--base-path/tmp/alice--chainlocal--alice--port30333--ws-port9944--rpc-port9933--telemetry-url'ws://telemetry.polkadot.io:10240'--validator

让我们详细了解下这些标记:

节点启动时,您应该会看到类似的输出结果:

2020-06-1013:19:04SubstrateNode2020-06-1013:19:04️version2.0.0-rc3-f5acce1-x86_64-linux-gnu2020-06-1013:19:04️bySubstrateDevHub<https://github.com/substrate-developer-hub>,2017-20202020-06-1013:19:04Chainspecification:LocalTestnet2020-06-1013:19:04Nodename:Alice2020-06-1013:19:04Role:AUTHORITY2020-06-1013:19:04Database:RocksDbat/tmp/alice/chains/local_testnet/db2020-06-1013:19:04Nativeruntime:node-template-1(node-template-1.tx1.au1)2020-06-1013:19:05InitializingGenesisblock/state(state:0xf583…2e1c,header-hash:0x826a…389d)2020-06-1013:19:05LoadingGRANDPAauthoritysetfromgenesisonwhatappearstobefirststartup.2020-06-1013:19:05⏱Loadedblock-time=6000millisecondsfromgenesisonfirst-launch2020-06-1013:19:05Highestknownblockat#02020-06-1013:19:05UsingdefaultprotocolID"sup"becausenoneisconfiguredinthechainspecs2020-06-1013:19:05Localnodeidentityis:12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs(legacyrepresentation:QmZoJwxoMLw6mLpYRy6ErXmZdPf62HuLFBFw6yKXwVqaPq)2020-06-1013:19:05〽️Prometheusserverstartedat127.0.0.1:96152020-06-1013:19:10Idle(0peers),best:#0(0x826a…389d),finalized#0(0x826a…389d),⬇0⬆02020-06-1013:19:15Idle(0peers),best:#0(0x826a…389d),finalized#0(0x826a…389d),⬇0⬆0...

注意

Initializing Genesis block/state (state: 0xf583…2e1c, header-hash: 0x826a…389d) 显示了节点正在使用哪个创世纪区块。启动下一个节点时,请验证这些值是否相等。
Local node identity is: 12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs... 显示了 Bob 从 Alice 节点启动时将需要的对等ID。

你会注意到,实际上尚未生成任何区块。只有当另一个节点加入网络之后,才会开始产生区块。

通过运行./target/release/node-template --help可以获得有关所有这些标记,以及我未提及的其他标记的更多详细信息。

附加用户界面

通过查看终端中产生的输出,您可以了解很多有关节点的信息。这里有一个非常好的界面展示的示例,叫做 Polkadot-JS Apps,或者简称为 “Apps” 。

可以在您的 Web 浏览器中,导航到 https://polkadot.js.org/apps/#/settings?rpc=ws://127.0.0.1:9944。

某些浏览器(尤其是 Firefox)将无法从 https 网站连接到本地节点。一个简单的解决方法是尝试使用其他浏览器,例如 Chromium。另一个选项是在本地托管此接口[3].

上面提供的链接包含rpc URL 参数,该参数指示 Apps UI 连接到作为其值提供的 URL(在本例中为您的本地节点)。手动配置 Apps UI 以连接到另一个节点:

点击左上方的网络图标

如何用 Substrate 创建一条私有链(上)

出现一个弹出式下拉菜单。选择最后一个条目,它是使用默认端口 9944 的本地节点

如何用 Substrate 创建一条私有链(上)

要连接到自定义节点和端口,您只需选择 custom endpoint 来指定端点,然后输入自己的端点即可。这样,您可以使用 Apps UI 的单个实例连接到各个节点。

现在您会看到类似这样的内容:

注意

如果不想在连接到已远程部署的 Substrate 节点时运行托管版本的 Polkadot-JS Apps UI ,则可以配置 ssh 本地端口转以将本地请求转发到远程主机侦听的 ws-port。这超出了本教程的范围,但在本文底部有引用参考。

Bob 的加入

现在,Alice 的节点已建立并正在运行, Bob 可以通过 Alice 的节点引导加入网络。他这部分需要的命令看起来会比较相似。

./target/release/node-templatepurge-chain--base-path/tmp/bob--chainlocal
./target/release/node-template--base-path/tmp/bob--chainlocal--bob--port30334--ws-port9945--rpc-port9934--telemetry-url'ws://telemetry.polkadot.io:10240'--validator--bootnodes/ip4/<AlicesIPAddress>/tcp/<AlicesPort>/p2p/<AlicesPeerID>

这些选项中的大多数已经在上面进行了解释,但是有几点值得一提。

因为这两个节点都在同一台物理计算机上运行,因此 Bob 必须在 --base-path, --port, --ws-port, 和 --rpc-port 几个选项中指定不同的路径。

Bob 需要添加

--bootnodes

由于 Bob 标记并指定了一个引导节点,即 Alice。那么他必须正确指定 Alice 可以为他提供的这三部分信息。

Alice 的 IP 地址,可能是
127.0.0.1
Alice 的接口,可能是
30333
Alice 的对等 ID,只需从她的日志输出中复制 (在上面的示例输出中应该是
12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs )

如果一切顺利,则在几秒钟后,节点应对等并开始产生块。您应该在启动 Alice 节点的控制台中看到类似以下内容的行:

...2020-06-1013:21:20Idle(0peers),best:#0(0x826a…389d),finalized#0(0x826a…389d),⬇0⬆02020-06-1013:21:25Idle(0peers),best:#0(0x826a…389d),finalized#0(0x826a…389d),⬇0⬆02020-06-1013:21:27Discoverednewexternaladdressforournode:/ip4/127.0.0.1/tcp/30333/p2p/12D3KooWQsb4rFifmkZDsTCbjHdZ4GYca1PwDhETKiJnALSSbyEs2020-06-1013:21:30Imported#1(0xe656…51b4)2020-06-1013:21:30Idle(1peers),best:#1(0xe656…51b4),finalized#0(0x826a…389d),⬇1.4kiB/s⬆1.4kiB/s2020-06-1013:21:35Idle(1peers),best:#1(0xe656…51b4),finalized#0(0x826a…389d),⬇0.6kiB/s⬆0.6kiB/s2020-06-1013:21:36Startingconsensussessionontopofparent0xe6569d5358d6bb16c9f42840d6b67c16d82982aae8d4b726095a943f255e51b42020-06-1013:21:36Preparedblockforproposingat2[hash:0x607dc092a07c4f86122da627ba9a243e3720087c80618d56b69ffbbf938eada4;parent_hash:0xe656…51b4;extrinsics(1):[0x55fa…fccf]]2020-06-1013:21:36Pre-sealedblockforproposalat2.Hashnow0x4e68c8c84d4aa5010feceabbdb6280e72f274c5689a71876397a0aaba2b435e9,previously0x607dc092a07c4f86122da627ba9a243e3720087c80618d56b69ffbbf938eada4.2020-06-1013:21:36Imported#2(0x4e68…35e9)2020-06-1013:21:40Idle(1peers),best:#2(0x4e68…35e9),finalized#0(0x826a…389d),⬇0.8kiB/s⬆0.8kiB/s2020-06-1013:21:42Imported#3(0x609b…116e)2020-06-1013:21:45Idle(1peers),best:#3(0x609b…116e),finalized#1(0xe656…51b4),⬇1.0kiB/s⬆1.1kiB/s...

这些行显示的是 Bob 节点已经实现和 Alice 点对点 (1 peers), 他们已经产生了一些区块 (best: #3 (0x609b…116e)), 已经区块正在被最终确认 (finalized #1 (0xe656…51b4))。

查看启动 Bob 节点的控制台,您应该会看到类似的内容。

一旦确认两个节点都按预期运行,就可以将其关闭。本教程的下一部分将包含必要时用于重新启动节点的命令。

参考

配置 ssh 本地端口转发
[4]

参考链接

[1]

创建你的第一条Substrate链: https://substrate.dev/docs/en/tutorials/create-your-first-substrate-chain/


[2]

Substrate Node Template: https://github.com/substrate-developer-hub/substrate-node-template


[3]

在本地托管此接口: https://github.com/polkadot-js/apps#development


[4]

配置 ssh 本地端口转发: https://www.booleanworld.com/guide-ssh-port-forwarding-tunnelling/


Dan Forbes更新于 6/11/2020

原文:https://substrate.dev/docs/en/tutorials/start-a-private-network

翻译:PolkaWorld 社区


作者:Parity,来源:PolkaWorld 公众号

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
   
验证码:
微信号已复制,请打开微信添加咨询详情!