在一个 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 链上的账户类似,但有两个私钥,称为BLS私钥和VRF私钥。对应BLS公钥和VRF公钥。两个公钥计算哈希得到 PoS 的地址,目前是 256 bit.
Conflux 的 PoS 链只是应对 51% 攻击用的。所以除了对 pivot 区块投票,以及 PoS 链选举共识节点等基本功能外,没有通用的区块链的功能,如转账、合约执行等。PoS 账户也没有余额的概念。
PoS 账户的主要职责是维护 Conflux 的共识协议。每一个 PoS 账户是 Conflux 网络的维护者,而不是普通的用户。
每个 PoS 账户应当运行一个独立的 Conflux 全节点。Conflux 核心代码 conflux-rust
将内置 PoS 账户的钱包功能,包括
PoS 账户在创建后,需要与 PoW 的账户进行绑定,我们把这个过程叫做注册。PoW 账户通过抵押(Staking)和 PoS 锁仓,为绑定的 PoS 账户赋予投票权。这个过程通过在 Conflux 链上与特定的内置合约交互完成。有了投票权的 PoS 账户才能成为一个 PoS 共识节点。
PoS 参与共识的奖励直接打入绑定的 PoW 账户中。
conflux-rust
会自动监听注册信息,并进行相应操作,无需用户干预。Conflux 链的注册信息大约需要10分钟同步到 PoS 链上,之后 PoS 账户即可参与 PoS 共识。