我们怎么去在这样的系统中获得信任呢,并且在私有区块链中也是一样的情况。这就是共识机制的来源。
共识保证了区块链上的参与者可以互相信任,并且对下个区块进行验证。共识也确保了网络中的规则被遵守,同时承认在区块链环境下只有一个真理。
根据你使用的区块链种类不同,你需要不同的共识算法来确保区块链上最后的区块能够在任何时候都反应出全网的状态。在本文中,大白会大致说明不同的共识算法。
工作量证明(POW)
我们先从比特币和以太坊说起。工作量证明算法需要矿工解决复杂的密码数学难题。所以这是个依赖于算力的游戏。简单说,你将区块中的数据都打包并加密,直到你获得有效的哈希值。
优势:寻找有效的哈希值很困难,但是很容易控制哈希是正确的,所以无法欺骗整个系统。系统可以承受大量节点。
缺点:需要消耗非常多的能源,而且不是很环保。如果有人能控制51%的算力,就会有被攻击的风险。
权益证明(POS)
以太坊正在朝着PoS共识机制改变。下个区块的矿工会基于随机参数,例如他们拥有的代币数量,他们拥有这个代币的时间等等来确定。
同时也有其他机制,例如存款证明或者是燃烧证明等等。其实这个很简单,如果节点X有1个代币,节点Y有2个,那么节点Y就会有2倍几率去验证一个区块。
优点:比起工作量证明,更加节约能源。
缺点:更多的安全问题?如果同时在不同的链上工作,也不会有惩罚。这样做,就很难去保证转账的真实性。
消逝时间证明(PoET)
消逝时间证明是超级账本锯齿湖项目中使用的共识。每个参与者都需要有个等待时间,来确保安全的程序集。获得最短等待时间的参与者会被选为挖出区块,经过等待时间,挖出区块。
优势:挖出区块的人会一直变化,同样的人每次都不会选择下个区块。
劣势:安全程序集是复杂的技术,相对工作量证明来说,更容易进行欺诈。也有中心化的趋势,因为我们必须使用第三方信任机构来确保这个程序集是真的安全。
简化的拜占庭容错算法(SBFT)
在这个算法中,区块验证者是一个知名的机构。例如在整个商业网络中可以是一个监管者。这个区块验证者创造并提出新的区块转账。在SBFT共识中,一定数量的节点一定要接受这个区块,当然这取决于错误节点的数量。在这样的系统中,最少要有2f+1的节点必须要接受商业网络中的新区块,f就是错误节点的数量。
举例来说,我们假设现在系统中有30个参与者,其中包含了5个错误节点。作为需要验证的新区块,11(2×5+1)个节点。
这个错误可以是恶意的,也可能是无效的节点。
优点:比工作量证明更快,有更好的扩容性。
缺点:有中心化趋势。一个验证者提出下个区块。
权威证明(PoA)
适合私有链网络,并且不需要分布式信任体系。原理相对简单:网络中的一些人在满足某些条件之后被认证为验证者,例如身份认证。这些验证者负责维持区块链数据。
优点:非常适合私有链,速度非常快。
缺点:牺牲了信任。
结论
我们对区块链世界的共识机制做出了概览,这篇文章只是列举了一部分可能性,当然还有其他可能的共识机制。
总体来说,我们可以将这些共识分为3类:
- 标准的工作量共识
- 基于共识的许可性投票(PoA,SBFT)
- 基于共识的许可性投注(PoET)
到底选择哪个共识来进行区块链的实施取决于哪类网络和数据。