迅雷链基于智能硬件的DPoA共识机制介绍

周茂青,网心科技软件工程师,现从事迅雷链底层技术研发工作。曾负责过广域网优化产品、分布式文件系统、CDN缓存系统等技术设计和开发等工作,在Linux内核开发、网络协议优化、分布式系统等方面有着丰富的从业经验。

迅雷链基于智能硬件的DPoA共识机制介绍

迅雷链基于海量的玩客云设备作为记账节点来构建区块链服务。这些玩客云设备放置在用户家里,共享家庭带宽和存储,作为CDN、云计算、区块链等服务的基础设施,构成了一个庞大的计算机网络。
玩客云网络相对于中心化的服务器节点组成的网络,其特点可概括为以下几个方面:
1)网络节点多:目前已经过150万节点;
2)计算性能低:采用廉价、低功耗的ARM架构的CPU,绿色环保但计算性能较低;
3)存储容量小:存储容量各不相同,但与服务器相比容量很小;
4)网络环境差:用户家庭的网络环境各不相同,包括不同的地理位置、不同的网络运营商、不同的带宽,普遍带宽小、时延高、稳定性低。

面对这种基础设施环境和业务需求,我们需要一种安全的、一致性强、可扩展性高的共识算法。
已有的共识算法研究
PoW(Proof of Work):工作量证明消耗大量算力寻找满足条件的随机数,它存在以下缺点:
1)速度慢。绝大部分时间消耗在工作量证明中的hash运算;
2)能源消耗巨大,对环境不好。目前比特币挖矿比159个国家消耗的能源还多;到2020年2月,它将使用和今天全世界一样多的电力;
3)属于概率一致性算法,而非绝对一致性算法。在产生分叉后,两个分叉的网络各自继续挖矿,经过一段时间后选择包含最多区块的那个链(最长链)为主链,例如比特币中的一个交易等待6个区块才能确认。

PoS(Proof of Stake): 权益证明根据节点持有的token数量以及时间获得相应的记账权。PoS减少了PoW的资源消耗,但是也存在问题:
1)安全性问题:带来如Nothing-at-Stake Problem和Long-range attacks安全性上的问题;
2)依据权益结余来选择,会导致首富账户的权力更大,有可能支配记账权;
3)PoS同样属于概率一致性算法,而非绝对一致性算法。
DPoS(Delegated Proof of Stake):授权权益证明是通过拥有token的人投票选出代理节点行使记账的权利,是在可用性和去中心化这两个维度上做出的平衡。它存在的问题包括:
1)由少数节点代替多数节点进行共识,其实是牺牲了区块链去中心化的特性,以此来换取共识效率的提升;
2)节点之间可能存在内在联系的共谋;
3)超级节点竞选争议。由于网络无法解决女巫攻击问题,1人1票的民主投票制会被1代币1票制度所取代,导致“富豪统治”的结果;
4)DPoS同样属于概率一致性算法,而非绝对一致性算法。

Paxos 算法:Paxos 算法及其衍生出的 Raft 算法等是强一致性算法,但它们是CFT(Crash Fault Tolerance)类算法,也就是它们只能处理节点故障的错误,而不能处理存在作恶节点的情况。

PBFT(Practical Byzantine Fault Tolerance): 实用拜占庭容错共识是一种基于严格数学证明的强一致性算法,经过多阶段的信息交互最终达成共识,只要系统中有三分之二以上的诚实节点,就能保证最终达成共识。PBFT的问题是通信量大—— PBFT共识需要大量信息交互,并且数量会随着节点数的增加而急剧上升。这一特性决定了PBFT无法直接支持众多的玩客云节点参与共识。

根据我们的业务需求,PoW、PoS、DPoS等概率一致性算法都不能满足需求;Paxos、Raft等CFT类算法也不适用于公共链;PBFT是强一致的BFT类算法,但存在通信量大的问题,也不能直接用于公有链。

同构多链架构下的DPoA + PBFT


根据玩客云网络的实际情况和业务需求,现有的共识机制都无法满足要求,因此迅雷链提出了独有的同构多链架构结合DPoA + PBFT的共识机制。

同构多链架构,即系统由一条条相对独立(独立进行共识)的链组成,每条链有多个节点,每个节点被分配到其中一条链上,不同的账户数据被锚定在不同的同构链上,然后接入层将交易路由到发送方所在的链上进行区块打包与共识。系统中链的数量能够按业务需求动态增加。因此同构多链的架构首先保证了系统的可扩展性,解决了玩客云存储容量小的问题,因为节点无需存储全量的区块数据,而是只存储它所在子链的数据。

改进的PBFT,为保证分布式系统中的强一致性,并具备一定的容错和防拜占庭节点作恶的能力,因此我们选择了类 BFT 算法。在每一条单独的链上,我们使用了改进的实用拜占庭容错算法(PBFT)保证强一致性。为了解决PBFT算法网络消耗高的问题,对算法作出了一些优化,降低网络消耗,提高了算法的可用性。

DPoA(Delegated Proof-of-Ability),迅雷链在PBFT的基础上,还根据DPoS的思想,提出了适用于玩客云设备的、我们称之为DPoA共识机制。与传统的DPoS不同之处在于,迅雷链的DPoA并不是根据矿工持有的代币数量或币龄作为选举标准投票权重,而是按玩客云节点的存储容量、网络稳定性、带宽、时延、CPU使用率等指标作为衡量标准,以获得更好的公平性和网络效率。

DPoA的具体处理机制如下:


1)对于存储空间不足的设备,则不再参与记账;
2)对于网络不稳定的节点,则减小其权重,则由它提议(Propose)区块的机率降低,这样就能让网络状况好的节点多提议区块;
3)对于带宽大的节点,则增加其权重,以提高它提议区块的机率;
4)对于时延低的节点,则增加其权重,以提高它提议区块的机率;
5)对于CPU使用率高的节点,则减小其权重,以降低它提议区块的机率。

DPoA的共识机制说起来其实很简单,但它能有效保证参与记账的节点总是有足够存储空间、系统状态较好、网络环境较好的节点,保证了区块链系统的稳定运行,解决了玩客云节点网络环境差异大的问题。由于DPoA每轮动态选择部分满足条件的节点作为投票节点,使共识机制更加安全、稳定和高效。

为什么我们能够使用DPoA的共识机制?我们之所以能够采用DPoA的共识机制,原因在于:
1)在玩客云设备中,我们可以内置完善的检测与监控系统,能持续检测玩客户云设备的存储容量、在线时长、带宽、时延等信息,为DPoA共识算法提供实时状态的数据支持,而这是普通的公共链项目无法做到的。
2)玩客云节点数量庞大,并且一直在增加,即使排除不满足条件的节点,也仍然有大量的节点可以使用,并能一直得到补充。
玩客云的激励机制和作为家庭共享存储的功能,让用户乐于投入更大的存储空间。
总结
迅雷链结合玩客云网络节点多、计算性能低、存储容量小、网络环境差的实际情况,采用同构多链架构实现了可扩展性,采用PBFT实现了强一致性和高效率共识,用更公平的DPoA机制得到了更高的可用性,也进一步提升了共识效率。