首页 资讯 正文

技术 | Substrate 2.0 搭建私有区块链网络

金色财经 2020年02月05日 18:07

相信很多朋友已经在使用构建自己的模块,但官方开发者中心还没有版本的教程。

在本文中,我整理总结了如何使用启动一个区块链网络,并使用你选择的验证者/管理者集合。

你需要

你将学习到:

是一个开源区块链开发框架,用来构建你自己的区块链,以及可以用来开发各种各样的去中心化应用程序。

目前没有提供二进制安装包,因此必须从源代码中编译它,这可能是一个耗时的过程。

仓库会经常更新,请确保参加此网络的每个节点都有同样版本的以保证成功。在实践中,类似但不完全相同的版本通常可以正常工作,但是依靠这个通常会让人感到沮丧。

我们将使用分支的这个)来获取更多的一致性。

首先,我们将通过下载代码。目前还没有的分支。



仓库中包含一个名为的工具,我们需要用它来生成和检查密钥对。让我们先编译它。选项意味着我们将移除之前安装的版本,重新安装此版本。

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

最后与网络中的所有其他验证人共享

你已完成所有必要的准备工作,现在准备好启动链。此过程非常类似于之前以的身份启动链。

从干净的目录开始非常重要,如果你打算使用之前的目录,请删除该目录中的所有内容。

第一位参与者启动节点:



以下是我们启动时的一些不同之处。

后续验证人现在可以像之前一样加入网络,确保使用新的和密钥。你可以使用网络中任意已有的节点引导,而不仅是之前的节点。

恭喜你!你已启动了自己的区块链!

在本文中,你学会了编译节点模板,生成自己的公私钥对,创建一个自定义的链,使用这些密钥对,并根据自定义和节点模板启动了一个私有区块链网络。