371  
添加和删除 IBFT 验证节点
作者: 姜天雨 于 2021年07月15日 发布在分类 / 区块链基础知识 / 底层框架资料 / GoQuorum 下,并于 2021年07月15日 编辑

添加和删除 IBFT 验证节点

IBFT 网络的整个生命周期中,随着权限的变化,需要添加和删除验证节点。 在这里,我们将展示向 IBFT 网络添加新验证节点并删除现有验证节点。

将节点添加到验证集

一旦节点成为网络的一部分,将节点添加到 IBFT 验证集相对容易。 节点是否已经在线并不重要,因为添加新节点作为验证的过程只需要现有的验证节点。

粘贴图片

添加新验证节点需要大多数现有验证节点提议要添加的新节点。 这是通过调用具有 true  值的 proposeRPC 方法并将地址替换为您需要的地址来实现的:在  geth 控制台中,运行:

粘贴图片

geth 控制台中,运行:

粘贴图片

返回 null

这表明当前节点希望添加地址 0xb131288f355bc27090e542ae0be213c20350b767  作为新的验证节点。


例子

1.  您可以在 quorum-examples   存储库中找到运行示例所需的资源。

这些示例使用 docker-compose 作为容器定义。 如果您通过复制所描述的命令进行操作,那么为 Docker Compose 设置项目名称很重要,或者记住更改目录的前缀。 有关更多详细信息,请参阅 Docker documentation

要设置项目名称,请运行以下命令:

粘贴图片

2.启动网络,其中包含 7 个节点,其中 6 个是验证节点。

粘贴图片

我们将添加第 7 个节点作为验证节点。 您可能会在节点 7 消息的日志中注意到 node7_1 | WARN [01-20|10:37:16.034] Block sealing failed err=unauthorized  这是因为该节点在启动时启用了铸造,但没有创建区块的权限,因此会引发此错误。

3.现在我们需要从现有节点中提议节点 7 作为新提议者。

粘贴图片

在更改生效之前,我们需要大多数现有验证节点来提议新节点。

让我们从节点 1 开始,看看会发生什么:

从节点 1 提出节点 7

粘贴图片

返回 null

等待大约 5 秒钟,然后运行:

粘贴图片

结果是:

粘贴图片

让我们分解一下。 首先,我们建议添加地址 0xb131288f355bc27090e542ae0be213c20350b767 这就是 true  参数的用途。 如果我们将其设置为 false ,则意味着我们要删除具有该地址的现有验证节点。

其次,我们获取了当前的快照,这让我们可以深入了解投票的当前运行状态。 我们可以看到新地址在 tally  部分下有 1 票,   1 票描述在 votes  部分。 您的投票已登记!

4. 让我们从节点 2 运行它并查看类似的结果:

粘贴图片

返回 null

同样,您可能需要等待 5-10 秒的快照才能显示投票

粘贴图片

结果是:

粘贴图片

一如往常,您已经登记了第二票!

5. 好的,让我们最后对节点 3 4 进行投票。

粘贴图片

返回 null

粘贴图片

返回 null

6. 现在您获得了多数票,让我们再次检查快照:

粘贴图片

结果是:

粘贴图片

您可以看到投票现在已被清除,准备进行新一轮。 此外,您添加的地址 0xb131288f355bc27090e542ae0be213c20350b767  现在存在于 validators  列表中! 最后,节点 7 之前发出的未经授权的消息已经停止,因为它现在有权创建区块。

从验证节点集中删除节点

删除验证节点类似于添加节点,但这次您想提议值为 false  的节点,以表明您正在取消对它们的授权。 节点是否仍然在线并不重要,因为它不需要来自被删除节点的任何输入。

粘贴图片

删除新验证节点需要大多数现有验证节点提议删除新节点。 这是通过使用值为 false 调用 propose RPC 方法并将地址替换为您需要的地址来实现的:

粘贴图片

返回 null

例子

可以在 quorum-examples   存储库中找到运行示例所需的资源。

1.  这些示例使用  docker-compose  作为容器定义。 如果您通过复制所描述的命令进行操作,那么为 Docker Compose 设置项目名称很重要,或者记住更改目录的前缀。 有关更多详细信息,请参阅   Docker documentation

要设置项目名称,请运行以下命令:

粘贴图片

2.启动网络,其中包含 7 个节点,其中 6 个是验证节点。

docker-compose 设置环境变量:

粘贴图片

启动 7 节点网络,其中 6 个是验证者:

粘贴图片

3.现在您需要提议节点 6 作为要删除的节点  

粘贴图片

让我们从节点 1 开始,看看会发生什么:返回空值。

从节点 1 提出节点 7

粘贴图片

返回 null

待大约 5 秒钟,然后运行:

粘贴图片

结果是:

粘贴图片

让我们分解一下。 首先,您建议删除地址 0x8157d4437104e3b8df4451a85f7b2438ef6699ff 这就是 false  参数的用途。

其次,您获取了当前快照,这使我们可以深入了解投票的当前运行状态。 您可以看到提议的地址在计数部分下有 1 票,而在 votes 部分下描述了 1 票。 在这里, authorize 部分设置为 false ,这符合我们删除验证节点的建议。

1.  您需要获得多数票,所以让我们在另外 3 个节点上运行提案

粘贴图片

返回 null

粘贴图片

返回 null

粘贴图片

现在让我们检查快照,所有必需的投票都在:

粘贴图片

结果是:

粘贴图片

验证节点已从 validators  列表中删除,剩下的 5 个仍然存在。 您还将在节点 6 的日志中看到类似 node6_1 | WARN [01-20|11:35:52.044] Block sealing failed err=unauthorized 这是因为它仍在铸造块,但意识到它无权将它们推送到网络上的任何其他节点(您还将看到节点 7 的此消息,该节点从未被授权但仍设置为挖掘 )。

另见 




 推荐知识

 历史版本

修改日期 修改人 备注
2021-07-15 16:37:43[当前版本] 姜天雨 创建版本

 附件
  目录
    区块链服务网络发展联盟