技术 | Substrate 2.0 搭建私有区块链网络
相信很多朋友已经在使用构建自己的模块,但官方开发者中心还没有版本的教程。
在本文中,我整理总结了如何使用启动一个区块链网络,并使用你选择的验证者/管理者集合。
你需要:
你将学习到:
是一个开源区块链开发框架,用来构建你自己的区块链,以及可以用来开发各种各样的去中心化应用程序。
目前没有提供二进制安装包,因此必须从源代码中编译它,这可能是一个耗时的过程。
仓库会经常更新,请确保参加此网络的每个节点都有同样版本的以保证成功。在实践中,类似但不完全相同的版本通常可以正常工作,但是依靠这个通常会让人感到沮丧。
我们将使用分支的这个()来获取更多的一致性。
首先,我们将通过下载代码。目前还没有的分支。
仓库中包含一个名为的工具,我们需要用它来生成和检查密钥对。让我们先编译它。选项意味着我们将移除之前安装的版本,重新安装此版本。
cargo install --force --path subkey subkey
现在让我们编译我们将要运行的区块链节点。由于是一个框架,使用它编写自定义的代码。之前写过文章详细涵盖了这方面的内容。
仓库本身已经有两个随时可以运行的节点环境。
第一个在目录,它包含了许多功能,可以构建实际可运行的区块链。事实上,它看起来和类似,它也是基于构建的。
第二个是在目录下的最小化代码。我们将在本文中使用节点模板,因为它比较简单,通常是编写自定义的起点。
更新或改变版本时,这个过程类似,但构建速度更快。
提示:如果想要安装在可执行文件路径下,你可以在上一步使用代替。
在我们生成自己的密钥并启动一个真正特定的网络之前,让我们了解下基础知识,首先使用一个预先定义的网络规范,称为,使用两个预先定义的密钥,称为和。
应该从仓库的根目录运行此命令。
我们了解一下这些命令选项的含义:
文件和文件,这两个我们将在稍后阶段说明。
当节点启动后,你应该看到类似下面的输出:
你可以通过节点在命令行中产生的输出了解很多信息。需要注意的几行:
还有一些选项,大家可以通过去了解,比如:
有一个很好的图形用户界面,称为 Polkadot Js Apps UI,可以用它连接你的节点。之前写过文章详细涵盖了这方面的内容。
点击链接会跳转到该UI的官方页面,非常方便,但与你正在运行的版本相比可能已经过时。在UI页面过期的情况下,你可以通过从获取代码在本地运行该应用。一般来说,其仓库中的指令将是你的最佳指南,但大致过程应该是这样的。
你会注意到,在命令行和用户界面中,还没有产生任何块。一旦另一个验证者加入网络,将开始生成区块。
现在,节点已经启动并运行,可以通过引导节点来加入网络。他的启动命令类似下面:
上面已经解释了大多数这些选项,但有几个要注意的地方:
如果所有进展顺利,在几秒之后,节点应该相互连接,开始生成区块。你应该看到类似下面的内容:
Idle (1 peers), best: #1 (0x9f1b…9b57), finalized #1 (0x28be…45e5), ? 1.7kiB/s ? 1.4kiB/s
此行显示,有对等节点,它们产生了一个区块,并且区块已被最终确定/敲定。
这也是v2.0和v1.0的区别之处。的节点模板中增加引用了模块来做最终一致性,而在的网络中,只有创世区块会被最终敲定,的节点模板中没有最终一致性模块(finality gadget)。
现在我们知道了基本原理和命令行选项,是时候生成我们自己的密钥而不是使用众所周知的和密钥。
每个想要加入这个区块链网络的人,都可以使用我们之前提到的工具,或生成自己的密钥。在本文中,我们将使用调用。该小节是本文更有价值的一部分内容。
对于大多数想要运行验证节点的用户,可以使用这个调用。该调用将生成会话密钥,并返回其公钥。命令如下:
curl -H 'Content-Type: application/json' --data '{“jsonrpc”:“2.0”,“method”:“author_rotateKeys”,“id”:1}' localhost:9933
如果会话密钥需要匹配固定种子,则可以按类型单独设置它们。调用需要密钥种子和密钥类型。此处列出了中默认支持的类型。命令如下:
curl -H 'Content-Type: application/json' --data '{ "jsonrpc":"2.0", "method":"author_insertKey", "params":["KEY_TYPE", "SEED", "PUBLIC"],"id":1 }' localhost:9933
上一次,我们使用这是一个预定义的,它将和指定为验证人以及许多其他的默认值。本节将介绍如何创建自己的。
我们不是从头开始完全编写,而是对我们之前使用的那个进行一些修改。
首先,我们需要将导出到文件。
https://www.feixiaohaonode.com/news/target/debug/node-template build-spec --chain=local > customSpec.json
我们刚创建的文件包含几个字段,人们可以通过探索它们来学习很多东西。目前,最长的字段是一个十六进制编码的数据,它是我们的的二进制。
我们感兴趣的部分,是像这样的验证人地址:
我们需要做的就是将列出的验证人地址(当前为和)更改为我们在上一步中生成的地址。
注意:应该由一个人执行这些步骤,并共享生成的文件给其他验证人。因为从的构建不是“可重现的”,每个人都会得到一个略有不同的,如果每个参与者自己生成文件,这将破坏共识。
准备好后,将其转换为“raw”。 和之间的区别只是所有字段在"raw" 中编码为了十六进制。
https://www.feixiaohaonode.com/news/target/debug/node-template build-spec --chain customSpec.json --raw > customSpecRaw.json
最后与网络中的所有其他验证人共享。
你已完成所有必要的准备工作,现在准备好启动链。此过程非常类似于之前以和的身份启动链。
从干净的目录开始非常重要,如果你打算使用之前的目录,请删除该目录中的所有内容。
第一位参与者启动节点:
以下是我们启动时的一些不同之处。
后续验证人现在可以像之前一样加入网络,确保使用新的和密钥。你可以使用网络中任意已有的节点引导,而不仅是之前的节点。
恭喜你!你已启动了自己的区块链!
在本文中,你学会了编译节点模板,生成自己的公私钥对,创建一个自定义的链,使用这些密钥对,并根据自定义和节点模板启动了一个私有区块链网络。