前言

  区块链最有价值的地方就在于共识算法,目前各种公链、联盟链群魔乱舞,共识算法林林总总。

  研究了一段时日,也到了总结的时候,用几篇文章将它们梳理一下。

作用、意义

  区块链是当下的大热门,各种各样的区块链项目都会用一定篇幅来描述它的共识机制。那么,共识在区块链中扮演了什么样的角色?有何重要的意义?

  区块链简单而言是一种组织数据的方式,人们对区块链发起的每一次动作 (事务)( Transaction ) 最终的结果都是改变数据,区块链需要保证每一次对数据的修改都是合法的。和传统中心化服务不同,区块链的服务(算力、存储)是由分散、平等(大多数情况)且互不信任的节点提供,那么,区块链世界里的有效和合法则指的是满足大多数 “人” 的认可,认可的过程就是区块链的共识过程。

  对普通用户来说,我们对区块链发起的每一次 Transaction 都是将我们的事务数据用私钥签名后发送到某一个节点,由该节点处理并向全网广播。我们无法假设区块链网络中的节点都是不做恶的,也无法保证网络在任何情况下都不出问题,因此我们引入了共识算法来处理共识过程,保证只有在大多数节点都认可的情况下,事务才会被记录到区块链上,同时数据 (状态) 发生修改。这个共识过程的难题就是拜占庭将军问题,共识算法的出发点就是解决拜占庭将军问题。

拜占庭将军问题

  拜占庭的将军们率领军队进攻一个敌人的城市,由于敌人的城市很大,将军们的军队各自分散,互相之间只能靠派遣通信兵传递消息,同时敌人的实力不弱,至少得一半以上的将军同时发动攻击才能获得战争的胜利。但是将军当中可能有叛徒,叛徒可以随意伪造篡改互相传递的信息,而且通信兵传递信息的方式并不可靠,可能出现信息未送达的情况。这时就引出了一个问题,在这样的前提假设下,如何确保能有一半以上的将军达成进攻的共识?

  这就是 莱斯利·兰伯特(Leslie Lamport) 提出的 拜占庭将军问题(Byzantine failures)。 区块链的节点就类似于将军,要达成的共识则是交易的有效性和记账权利。区块链的共识算法就是在不同的假设前提下,一定程度的解决拜占庭将军问题。

不同的共识算法

  简而言之,共识算法就是达到一个少数服从多数的效果。而不同共识算法的差异性体现在不同的区块链网络中,评价 “多数” 所用的指标不同,有的用算力来评价,有的用 “股权” 来评价,等等。 由此也就衍生出了各种各样的共识算法,如:PBFT,DBFT,POW,POS,DPOS,PAXOS,RAFT 等。

  下一篇文章,再对这里列举出的几个共识算法做详细分析。

标签: blockchain

添加新评论