大家银行账户里面有哪些收入,又有哪些支出,余额还有多少,这样的信息是由银行这样的中心机构来统一记录和维护的。
那对于区块链这样的去中心化的、点对点的分布式数据库(该数据库是由一个连着一个的区块组成),网上成千上万的节点,谁有权创建下一个区块?对要创建的区块发生分歧怎么办?怎么防止有人恶意区块来盗取利益?
这就是共识机制负责解决的问题。简单讲,共识机制就是让分散在全球各地成千上万的节点就区块的创建达成一致的意见。共识机制是通过数学算法方式让大家都认可、信任数据库的内容,这就是区块链建立信任的基础。
共识机制是区块链的核心基石之一,是区块链系统安全性的重要保障。
区块链中的共识算法有很多,我们先从比特币使用的PoW(工作量证明,Proof-of-Work)来谈起。简单来讲,PoW的工作原理就是网络中的各个节点通过自身的计算能力(算力)来获得创建下一个区块的权利。
比特币早期,基本上都是个人电脑参与算力竞争,后来,由于比特币价格一路上涨,出现了专门的矿机。再后来,随着矿机算力的快速增强,个人电脑基本退出了算力比拼的舞台。
PoW饱受诟病的是对全球电量大量的消耗。例如,比特币2017年消耗的电量已经超过159个国家的年均耗电量(来源:powercompare)。另外目前总市值排名第二的ETH全网每秒消耗价值17美元的电力,每年消耗的电力的价值在5亿美元左右。
由于PoW提供的安全性由系统外的物理资产(矿机、矿池等等)来实现。这样会带来很大的安全隐患。最为典型的问题大部分算力集中在少数人和公司手中,这和理想中的去中心化分布式网络背道而驰。另一个典型的问题便是51%算力攻击。理论上,只要恶意攻击者控制了全网51%以上的算力,那么恶意攻击者便可以篡改区块链。例如,量子计算机可能比现有的矿机快10亿倍,第一获得量子计算能力的人或组织可能在很短的时间内破坏掉区块链。
由于这些问题的存在,更多的区块链会选择或转移到我们下面要讲的第二种共识机制:PoS(股权证明,Proof-of-Stake)。
PoS通过区块链系统内部的虚拟资产来管理安全性。区块链系统的参与者锁定他们在该区块链上持有的虚拟资产(Coin或Token),他们会签署消息以达成一致意见。只有那些已经成为系统一部分的参与者才能够决定下一个区块的内容。
PoW共识算法从经济角度,可以自然做到防止区块链分叉(区块链分叉的本质就是网络各节点对区块链的生成产生分歧,无法达成共识)。但是PoS则需要精心设计好相应的规则来防止分叉(即“nothing at stake”问题,矿工为获得生成区块的奖励而同时支持多个有冲突的区块链分叉,导致区块链系统无法达成共识)。例如PoS可以设定惩罚机制,参与挖矿的矿工被要求锁定一定数量的虚拟资产。如果他们被侦测到了存在不当的行为,则系统会没收全部或部分被锁定的虚拟资产。(参考:ETH PoS FAQ)
同时,一个好的PoS共识算法还需要解决远程攻击(LongRange Attacks)和卡特尔的形成(Cartel Formation)这两个问题。远程攻击是指矿工在撤回被锁定的虚拟资产后,再发起之前生成的历史区块的分叉。卡特尔是指在区块链上的寡头垄断。由于PoS共识算法的本质是谁“富有”,谁就有更大的话语权,这样少数富有矿工之间的“协调”将导致寡头垄断的形成。(参考:Consensus Compare: Casper vs. Tendermint)
目前业内的PoS共识算法的实现主要分为两大类:
第一类是简单的PoS系统,很少甚至没有从算法的设计上来解决这些问题。这类一般是比较早期的PoS尝试。比较典型的例子是Peer Coin(点点币,PPC)、新星币(Nova Coin,NVC)、黑币(Black Coin,BLK)、NextCoin(未来币,NXT)等等。
第二类是精心设计的PoS系统,相对来说都比较新。基于不同的实现方式,精心设计的PoS系统可以分为两种。一种是基于拜占庭容错的权益证明(BFT based PoS),另一种是基于链的权益证明(Chain based PoS)。(参考:Consensus Compare: Casper vs. Tendermint)
基于BFT的PoS的典型例子是Tendermint。基于链的PoS的典型例子是ETH Casper和ADA的Ouroboros。
第一类PoS系统安全性不够。第二类PoS系统目前还不够成熟,有一些处于早期运行阶段,有一些还处理讨论和测试阶段,这些都需要后续的持续迭代优化和长时间的运行检验。
最后,由于PoS区块链系统由于缺少了PoW挖矿的过程,PoS系统面临如何分发虚拟资产的问题。PoS系统一般通过社区空投、基于BTC/ETH等相对成熟的系统空投、分享合作等方式,快速获取用户,增加网络的节点数量。在实际操作上,也有一些区块链系统采用先采用PoW挖矿实现虚拟资产的分发,然后再逐步过渡到PoS。