区块链中的共识机制是什么? | 科普
区块链是一种分布式总账技术,区块链和传统的分布式系统之间的关系,一般如下图所示:
传统的分布式系统是为了解决单机性能不足,某些应用中需要更大的存储、更强的计算能力而产生的技术。而区块链则是为了解决各个节点互不信任,又需要协同工作而产生的。
区块链与不同分布式系统的重要区别就是——区块链之间的各节点是通过信任算法而实现相互信任,而一般的分布式系统可以通过信任一个共同的中心来实现相互信任。
区块链的基础是P2P分布式网络、加密算法和共识机制。在这些基础技术中,共识机制是至关重要的。可以说共识机制是区块链技术的核心,共识机制对于一个区块链系统来说就是它的灵魂。共识机制很大程度上决定了整个区块链系统节点间的相互信任程度,也决定了其他使用者对于区块链上数据的信任程度。
区块链与普通分布式系统,尤其是分布式数据库最大的区别就是“去中心化”,而正是共识机制决定了一个区块链系统“去中心化”的程度。
通常,我们把区块链分为两大类:一种是公有链,一种是非公有链。这两种区块链的核心区别在于:参与共识的节点是否是受控的。
对于公有链来说,互联网上的任何计算机都可以通过运行相应的区块链程序,参与整个区块链的共识;而对于非公有链来说,通常需要获得之前区块链节点中大部分节点的同意,或者通过其他某种机制,获得参与共识的权力。
对于公有链来说,共识机制面临的最大问题就是:根本不知道有多少个节点在整个区块链系统中。想像一下,一个团队在做一项决策时——假设需要决策去爬山还是去玩水,每个人都不知道队伍里面有多少人,每个人该怎么合理的做出自己的决策,以便让团队行动一致?
投票确定?别逗了,你都不知道一共有多少人,怎么制作选票、发放选票、最后确定少数和多数?
有一个办法,把所有人拴在一起。然后想爬山的就往山那边走,想玩水的就往水那边走。看看最后整体移动方向是哪儿,你就知道有可能大多数人的选择,然后跟着走就好了。
在公有链中,我们只能通过比较力量或者类似的办法来进行决策。比较力量的共识机制,我们通常叫它PoW(Proof of Work 工作量证明机制)。
比较力量的共识有一个的缺陷,大家的力气都耗费在了拼力量中,最后没劲儿爬山或玩水了。所以,很多人提出了PoS(Proof of Stack 权益证明机制)一类的算法,利用区块链上的Token,将Token转换为选票来投票决策。(注意,这里Token账户数量对应的是系统用户,而之前说不知道总数是不知道服务器数量。本质上,PoW是在“系统运维人员”之间进行共识,而PoS一类的算法,相当于在“系统用户”之间进行共识。)这种机制,在公平性上也存在着很多争议。
对于非公有链来说,情况简单了很多:每个节点都知道总共的节点数,我们只要简单投票就可以了。但是,谁来组织投票?谁监票谁唱票?
PBFT算法是一个经典的解决这个问题的办法。PBFT的核心方法就是:每个节点都告诉其他所有节点自己的选票是啥,这样,就不需要有人组织投票,有人监票和唱票了,每个节点都有其他节点的投票结果,于是每个节点都按照多数票的决议来执行就好了。
人们对于PBFT算法也有关于公平性方面的争议,对于一个包含有Token的系统,投票的权力和Token无关,导致作恶成本降低,在涉及到Token的重大问题上,可能会由于经济诱惑而导致作恶节点数量超过算法限制。
而在没有拜占庭容错需求的分布式总账系统中,还有效率更高的RAFT\PAXOS等算法,但是一般我们认为,没有拜占庭容错需求的分布式总账系统不是区块链系统。因此,这些算法单独使用的话,并不能作为区块链系统的共识算法。但是,他们可以通过和DPoS等算法结合,发挥重要作用。
作者简介
敖萌,现就职于中国信息通信研究院北京泰尔英福网络科技有限责任公司,主要研究模式识别和区块链,联系方式:aomeng@caict.ac.cn。
校 审 | 陈 力、凌 霄
编 辑 | 陆 廷
推荐阅读