孟斌

在前一篇文章中,我们介绍了PoA Clique共识下如何新增同步节点。本文将介绍如何在PoA Clique共识下新增验证者节点。

Clique 共识是以太坊的权威证明(Proof of Authority, PoA)共识机制的一种实现,主要用于私链或测试链场景。在 Clique 共识中,验证者节点(Sealer Nodes)扮演了核心角色,负责区块的生成和链的维护。

1. 验证者节点的定义

验证者节点是 Clique 共识下的核心节点,负责以下任务:

2. 验证者节点的特点

3. 验证者节点的职责

  1. 轮流出块
    • 验证者节点按顺序轮流出块。
    • 如果轮到某个验证者,但它未及时出块(例如离线),下一个验证者将接替。
  2. 遵守出块时间
    • 出块间隔通常为固定时间(period,默认 15 秒),定义在创世文件中。
    • 每个验证者节点只能在自己的时间段内出块。
  3. 签署区块
    • 每个区块都必须由验证者节点签署,其签名信息保存在区块头中。
    • 验证者的签名证明区块是由合法的节点生成。
  4. 防止恶意行为
    • 验证者不能连续生成多个区块(除非其他验证者离线)。
    • Clique 共识通过强制的冷却时间防止一个验证者频繁出块。
  5. 参与验证者管理:验证者节点可以通过投票机制增加或移除其他验证者。

4. 验证者的管理

Clique 共识支持动态管理验证者节点:

5. 验证者节点的出块机制

Clique 共识的出块机制如下:

  1. 按顺序轮流出块:每个验证者按预定顺序生成区块,顺序在创世文件中定义或通过验证者列表确定。
  2. 冷却时间
    • 验证者在生成一个区块后,必须等待其他验证者出块后才能再次出块。
    • 如果强制出块,其他节点会拒绝该区块。
  3. 容错机制:如果某个验证者离线,其他验证者会接管出块,网络仍能正常运行。

6. 验证者节点的设置

创世文件中定义验证者:在创世区块配置(genesis.json)中,可以通过 extraData 字段定义初始验证者。

示例:

"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000<validators_addresses_in_hex>0000000000000000000000000000000000000000000000000000000000000000"

<validators_addresses_in_hex> 是验证者地址的拼接,每个地址为 20 字节。

节点启动时开启挖矿:验证者节点需要使用 --mine 参数启动 Geth:

$ geth --datadir /path/to/data --networkid 1234 --mine --miner.etherbase "0xYourValidatorAddress" --unlock "0xYourValidatorAddress" --password password.txt

检查是否正在挖矿:通过以下命令查看节点是否正在挖矿:

eth.mining

返回 true 表示节点正在尝试生成区块。


孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特