文|李伟志
现实社会中共识指一个社会不同阶层、不同利益的人所寻求的共同认识、价值、理想。
区块链上的共识机制主要解决由构建和检验区块的主体是谁,以及如何维护区块链统一的问题。
事件的信息越透明、所涉及到的人员参与度越高,最终形成的共识也就越稳定、越持久。可以说,共识算法是区块链的灵魂。它对区块链系统的运行特别是商业与金融乃至工业化运行有一定的先行决定作用,也就是说它界定了区块链运行应用场景的路径。
拜占庭问题
共识机制论题理论基础是拜占庭容错(Byzantine Fault-Tolerant,BFT)。
拜占庭将军问题(Byzantine failures),是由莱斯利·兰伯特1982年提出的点对点通信中的基本问题。
拜占庭容错是对现实世界的一种模型化描述,在点对点的分布式网络系统中,节点由于硬件设备故障,或者被恶意攻击等,导致了整个系统出现不可预估的后果。而拜占庭容错的协议就必须处理这些未知的错误。
FLP不可能原理
1985年,Fischer,Lynch和Patterson提出了一个FLP不可能的原理:在网络可靠的前提下,任意节点失效,一个或者多个的最小化异步模型系统中,不可能存在一个解决一致问题的确定性算法。
共识算法
共识算法细分为以下几种:工作量证明算法(Proof of Work - PoW),股权证明算法(Proof of Stake-PoS),DPoS(Delegate Proof of Stake) ,实用拜占庭容错算法PBFT(Practical Byzantine Fault Tolerance),Paxos(一致性),pool验证池等主要算法。
工作量证明算法(Proof of Work - PoW)
工作量证明算法就是大家熟悉的挖矿,通过工作以获得指定成果,用成果来证明曾经付出的努力。一句话介绍:干的越多,收的越多。其实我们日常工作生活中比如学生考试成绩,毕业证以及驾照等都是工作证明。
场景:比特币
原理:
比特币最核心的突破是在去中心化的情况下对交易事件达成了共识,即在没有中心组织的情况下对某个交易的有效性达成了一致。比特币在区块的生成过程中使用了POW机制。
它引入外部资源确保安全,即通过大量的外部计算来确保共识的安全性,通过每个区块产生一定量的新比特币来激励参与者。
算法:
一个符合要求的区块Hash由N个前导零构成,零的个数取决于网络的难度值。计算时间取决于机器的哈希运算速度。验证方却很容易通过结果来检查出矿工是不是做了相应的工作。比特币采用SHA256哈希运算,且每次都是连续进行两次SHA256运算才能作为最终结果,前一次运算的结果作为后一次运算的输入,即Double SHA256,一般简称SHA256D。
优点:
POW逻辑简单,容易实现,容错达50%,其安全有严格的数学论证。
缺点:
区块的确认时间难以缩短;
消耗大量的资源;
容易产生分叉,需要等待多个确认;
只要有足够的挖矿算力(超过维护系统算力的51%)就能对系统成功进行攻击,这也是比特币长期存在的安全隐患之一。
股权证明算法(Proof of Stake-PoS)
正是由于比特币存在的问题,例如消耗大量的资源、外部51%攻击等,才出现了PoS(Proof of Stake)共识机理。
股权证明算法(Proof of Stake-PoS)类似于财产储存在银行,这种模式会根据你持有数字货币的量和时间,分配给你相应的利息。一句话介绍:持有越多,获得越多。
原理:
简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,在股权证明POS模式下,点点币的权益证明机制使用了币龄的概念,未使用至少30天的币可以参与竞争下一区块的构建,越久和越大的币集有多的概率性去签名下一区块。而一旦币的权益被用于签名一个区块,则币龄将归零,这样必须等待至少30日才能签署另一个区块。而且,为防止旧币龄拥有者控制区块链,寻找下一区块的最大概率在90天后达到最大值,这一过程保护了网络,并随着时间逐渐成为新的币而无需消耗大量的计算能力。
POS是一个合格区块的区块时间必须在前一个区块时间的规定范围之内,时间太早或者太超前的区块都不会被其他节点接纳。
场景:Peercoin(点点币,PPC)。
Pos更适合token固定的网络,不会产生通货膨胀,它的收益奖励主要来自于用户的交易。
优点:
缩短了共识达成的时间;不再需要大量消耗电力挖矿。
缺点:
存在内部的Nothing-at-Stake(常写作N@S)攻击。
在某个情况下,发起攻击的分叉链是极有可能成功的。
以太坊的DAO攻击事件造成以太坊硬分叉,而ETC由此事件出现,事实上证明了此次硬分叉的失败。
重写历史攻击
有足够数量币的原始账户攻击者可以通过购买原始持有币种的账户来从头发起攻击,重新分叉一个区块链。
在交易费不高的情况下,对矿工的激励也是很有限的。
DPoS(Delegate Proof of Stake)
DPoS(Delegate Proof of Stake) 采用类似股权授权证明,如PoS是一币一票的直选制度,DPoS则是间接民主的代议制。
场景:ASCH 比特股
原理:
去中心化表示每个股东按其持股比例拥有影响力,51%股东投票的结果将是不可逆且有约束力的。其挑战是通过及时而高效的方法达到51%批准。为达到这个目标,每个股东可以将其投票权授予一名代表。获票数最多的前100位代表按既定时间表轮流产生区块。每名代表分配到一个时间段来生产区块。所有的代表将收到等同于一个平均水平的区块所含交易费的10%作为报酬。如果一个平均水平的区块含有100股作为交易费,一名代表将获得1股作为报酬。持币者投出一定数量的节点,代理他们进行验证和记账。
优点:
大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。它不会分叉,比Pos有优势。
缺点:
整个共识机制还是依赖于token,很多商业应用是不需要token存在的。
PBFT(实用拜占庭容错)
拜占庭将军问题就根据错误计算机的数量,寻找可能的解决办法,在保证活性和安全性的前提下提供了(n-1)/3的容错性。
其中C为发送请求端,0123为服务端,3为宕机的服务端。
拜占庭问题的可能解决方法为:在 N ≥ 3F + 1 的情况下一致性是可能解决。其中,N为计算机总数,F为有问题计算机总数。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。
优点:
系统运转可以脱离通证的存在,也可以运用通证,PBFT算法安全性与稳定性可以由计算机直接执行。
共识的时延短,大约在2-5秒钟,达到商用实时处理的需求
共识效率高,可满足高频交易量的需求。
缺点:
当有1/3或以上记账人停止工作后,系统将无法提供服务;
当有1/3或以上记账人联合作恶,且其它所有的记账人被恰好分割为两个网络孤岛时,恶意记账人可以使系统出现分叉,但是会留下密码学证据;
对一些共识要求随时响应的场景,需要改造。
Paxos(一致性算法)
Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",与1990年提出的一种基于消息传递的一致性算法。这个算法被认为是类似算法中最有效的。
Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。 节点通信存在两种模型:共享内存和消息传递。
Paxos算法就是一种基于消息传递模型的一致性算法。
优点:
拥有“提案”概念,可以在多场景范围内运用。
系统运转可以脱离通证的存在。
共识效率高
缺点:
中心化比较严重,
算法晦涩难懂,执行困难。
需要预定指令,修正比较复杂
Pool(联营)验证池
Pool验证池算法是基于传统的分布式一致性技术以及数据验证机制,Pool验证池是目前行业内大范围使用的共识机制。
优点:
不需要通证可以运行,在成熟的分布式Paxos的基础上,实现秒级共识的构建验证。
缺点:
去中心化程度不如比特币,更适合多方参与的多中心商业模式。
基于传统的分布式一致性技术,加上数据验证机制。
依赖于Paxos。
此外,在共识机制上,还有投注共识,活动证明(Proof of activity,PoA),燃烧证明(proof of burn,PoB),能力证明(proof of capacity, PoC),消逝时间证明(Proof of elapsed time)等非主流的算法。
未来
未来,根据对手方信任度分级,自由选择共识机制是趋势