在一个 PoW 链生态的早期,在全网算力较低的时候,可能会出现 51% 攻击的问题。特别是公有链的发展催生了一些算力租借平台的时候。在去年,以太经典、Grin 和 Verge 都曾出现了 51% 攻击的问题。

为了应对 51% 攻击可能带来的威胁,Conflux 将引入一条独立运行的 PoS 链。PoS 链的共识参与者将定期对树图结构 pivot 区块签名。拥有足够多签名的 pivot 区块应当被所有 PoW 矿工选进 pivot 链,哪怕它的兄弟区块权重更大。简单来说,PoS 链指定了一个 pivot 区块,所有的 PoW 矿工都应该跟随。

这意味着,一旦 PoS 共识对一个 pivot 区块投票,即使 51% 攻击者尝试逆转这个区块,也不会被 PoW 节点认可。

Conflux 要求 PoS 共识克制地使用“指定 pivot 区块”的权力。一个区块首先要根据 PoW 的规则确认满几分钟,诚实的 PoS 节点才会对它进行签名。这意味着,树图结构的区块排序和确认依然由 PoW 的矿工完成。

下面介绍一些和 PoS finality 相关的基础概念。本文档里,Conflux 链指目前运行的区块链,PoS 链指新引入的链。

PoS 账户

地址

一般来说,区块链上的账户模型都是:私钥产生公钥,公钥产生地址。PoS 链上的账户类似,但有两个私钥,称为BLS私钥VRF私钥。对应BLS公钥VRF公钥。两个公钥计算哈希得到 PoS 的地址,目前是 256 bit.

钱包

Conflux 的 PoS 链只是应对 51% 攻击用的。所以除了对 pivot 区块投票,以及 PoS 链选举共识节点等基本功能外,没有通用的区块链的功能,如转账、合约执行等。PoS 账户也没有余额的概念。

PoS 账户的主要职责是维护 Conflux 的共识协议。每一个 PoS 账户是 Conflux 网络的维护者,而不是普通的用户。

每个 PoS 账户应当运行一个独立的 Conflux 全节点。Conflux 核心代码 conflux-rust 将内置 PoS 账户的钱包功能,包括

与 PoW 账户的绑定

PoS 账户在创建后,需要与 PoW 的账户进行绑定,我们把这个过程叫做注册。PoW 账户通过抵押(Staking)和 PoS 锁仓,为绑定的 PoS 账户赋予投票权。这个过程通过在 Conflux 链上与特定的内置合约交互完成。有了投票权的 PoS 账户才能成为一个 PoS 共识节点。

PoS 参与共识的奖励直接打入绑定的 PoW 账户中。

绑定过程