如何运行 PoS 节点

Conflux-rust v2.0 引入了 PoS 机制,用于提高网络的 finality,从而提高网络的安全性,并且 CFX 持有者可以通过参与 PoS 获取一定(至少年化10%以上)的收益。 参与 PoS 机制需要运行一个 Fullnode/Archivenode, 并将 Conflux 账户地址与该节点进行绑定。绑定之后 CFX 持有者可以通过与 PoSRegister 内置合约交互增加或减少投票。 获取的收益将直接发送至绑定的 Conflux PoW 账户地址。

运行 PoS 节点

PoS 节点的运行方式与 Conflux 普通节点运行方式 基本一致,

需要说明的是节点在首次启动时会自动生成 pos_key 文件(pos_config 目录中),并要求用户为该文件设置密码(一次设置,一次确认)。pos_key 文件保存了节点参与 pos 机制账号的私钥,因此需要妥善保管。

之后每次节点重启都会要求输入 pos_key 密码,如果输入错误节点启动将会失败。另外也可将该密码配置到配置文件中,配置项为 dev_pos_private_key_encryption_password

也可以通过环境变量 CFX_POS_KEY_ENCRYPTION_PASSWORD 进行设置

运行 PoS 节点的风险

PoS 节点运营者,需要保证 PoS 节点的稳定性,节点越稳定收益越高。

forceRetired

如果 PoS 节点当选成为了委员会委员,但又没有正常履行委员的职责(参与 PoS 投票),且持续超过一定时间(三小时),则节点将会被强制退休(forceRetired)。 通常以下三种情况会导致节点被强制退休:

如果节点被强制退休,该节点的所有 PoS 投票会被自动进行解锁操作,解锁的票需要经过 1-14 天的时间才会变成解锁状态,解锁的票无法获取 PoS 收益。 节点的强制退休状态会持续 1 天,七天之后才会变为正常状态。

节点发生强制退休,其质押的 CFX 本金不会丢失,只是会被锁定 1-14 天,期间无法获取收益。

CFX 被罚没

参与 PoS 共识,只有一种情况 CFX 会被罚没:同一个节点参与投票时,对同一个投票选项(比如 PoS 区块)投出了不同的票,此种情况节点会被认为恶意攻击 PoS 共识。 该节点所质押的所有 CFX 将会被永久锁死,无法取出.

导致此种情况发生只有一种 case:两个 PoS node 使用同一个 pos_key 同时参与 PoS 共识。

运营 PoS 节点注意事项

运行 PoS 节点除了正确的配置 pos_config 并运行节点外,需要注意一下事项:

除此之外建议增加以下监控:

另外如果想重新生成 pos_config/pos_key 文件,需要将 pos_db/secure_storage.json 文件一并删除,然后重启即可。

如何升级节点保证不被强制退休

PoS 节点非不必要,不建议进行升级操作,如果的确需要进行升级操作,建议在升级前,先通知节点停止参与选举,待节点状态变为不参与状态后再关停节点并进行升级操作。 节点重启后会自动重新开始参与 PoS 选举。具体操作步骤如下:

  1. 运行命令 ./conflux rpc local pos stop_election 通知节点停止参与选举,但节点不会立刻结束参与选举,整个停止参选过程可能需要几个小时。该命令会返回节点停止参与投票的区块号
  2. 每隔一段时间重复执行此命令以查看节点的状态,如果命令返回为 null 则节点已完成停止参与投票,此时可进行节点关闭操作。
  3. 升级完成后重启节点,节点会自动重新参与投票。(节点重启时会自动重新执行从最近 checkpoint 到最新的区块,此过程可能持续较长(几个小时),也可能很快)

如何实现 PoS 节点不停机更新

Conflux-rust 最新版本 v2.0.1 允许节点启动时不参与 PoS 投票,并通过命令控制节点停止/开始参与投票,通过此特性可以实现节点的宕机切换和无缝升级,从而保证 PoS 节点的持续运行。

注意:此模式下主备两台机器会使用同一个 pos_key, 因此操作时千万不能让两台机子同时参与 PoS 投票,否则会有 CFX 被锁死的风险。

该模式是通过 PR2438 添加进来的,在 PR 中有主备升级操作的英文介绍。大致步骤如下:

假设已经获取了 pos_config/pos_key 文件

此时我们搭建了两个节点,一主一备,并且只有一个节点参与 PoS 共识,如果需要进行节点升级可进行主备切换操作:

至此我们就完成了主备切换操作,此时可对为参与共识的节点进行升级操作。

再次提醒: 进行主备切换一定要再三检查确保主节点已停止参与 PoS 共识

如果主节点直接宕掉了,可以手动把节点的 pos_db/secure_storage.json 重命名为 pos_db/secure_storage.json.save,并复制到备节点的 pos_db 目录中,然后让备节点开始参与投票。

资源链接

PoS 注册操作教程


Revision #10
Created 11 June 2022 14:50:04 by Pana
Updated 10 October 2022 09:01:14 by Pana