由于区块链的去中心化的特性,没有中心记账节点,需要全网对账本达成共识,因此共识机制作为区块链的关键技术之一,在业务吞吐量、交易速度、不可篡改性、准入门槛等等方面发挥重要的作用。
本次笔记归纳如下几种共识算法:
- POW,工作量证明
- POS,权益证明
- DPOS,授权POS
- POA,权威证明
- PBFT,实用拜占庭容错算法
- DBFT,授权拜占庭容错算法
问题场景
区块链技术中非对称加密和可信的分布式网络解决拜占庭将军问题中的共识问题。
非对称加密
可以解决古代难以解决的签名问题:
- 消息传送的私密性
- 能够确认身份
- 签名不可伪造、篡改
作用:保护消息内容, 并且让消息接收方确定发送方的身份。
分布式记账场景
下面开始归纳现区块链主流共识算法(机制)
PoW(Proof of Work,工作量证明)
“解决一道数学难题”,****“机器性能越好,挖矿时间越长,获得的回报也越多。”
类型:竞争共识
概念:工作量证明,引入了对一个特定值的计算工作。**
**
POW共识算法应用场景:比特币(BTC)及其引申出来的BCH、BCD等
算法工作描述:
- 矿工们在挖一个新的区块时,必须对SHA-256密码散列函数进行运算,区块中的随机散列值以一个或多个0开始。
- 随着0数目的上升,找到这个解所需要的工作量将呈指数增长,矿工通过反复尝试找到这个解。
解决问题:
- 谁有权记账
- 如何避免记账者作弊
优点:
算法简单,采用大家认可的数学逻辑(找寻随机数),容易实现。安全系数最高,破坏整个系统,需要投入巨大成本。
缺点:
- 大量消耗能源。
- 它的价值回路必须要通过外部输入。也就是说,采用POW的数字货币仍旧不是理想状态的数字货币,因为它们的安全性不直接与使用者相关,而是要通过矿工这个媒介。
使用该算法的项目(包含且不限于):
Bitcoin、Ethereum、Litecoin、Dogecoin
POS(Proof of Stake,权益证明)
“拥有的币越多,有记账权的概率就越大?”
类型:竞争共识
因为POW大量消耗能源和安全性不与使用者相关的问题,POS的出现可以解决这些问题:
- 采用POS的货币的安全性直接与使用者相关,省去了矿工这个媒介。
- POS简单说就是,每当发表一条消息的时候,不用证明你付出了什么代价,而要证明你拥有一定数量的钱。而拥有钱代表着,如果你作弊损害了这个系统的安全性,你的钱会贬值,这变相地让你付出了代价。
- 这东西更好的一点是,如果采用POS,实际上连挖矿奖励都不需要,因为POS实际上不需要付出任何代价。
概念:
试图解决POW机制中大量资源被浪费的情况。这种机制通过计算你持有占总币数的百分比,包括你占有币数的时间来决定记账权。
优点:不需要拼算力挖矿,不会浪费电力。缩短了共识达成的时间,效率提高。
缺点:
- 拥有权益的参与者因为可以持币吃利息,所以卖币意愿不强烈,容易产生垄断。
- 所有的确认都只是概率上的表达,存在其他攻击的可能性。挖矿成本低,硬分叉十分容易。
使用该算法的项目(包含且不限于):
Ethereum、Peercoin、Nxt
DPOS(Delegated Proof of Stake,授权权益证明)
可理解为“公司董事会”。
类型:协同型共识
2014年4月由Bitshares 的首席开发者 Dan Larimer(BM)提出。它的原理是让每一个持有比特股的人进行投票,由此产生101位代表 , 我们可以将其理解为101个超级节点或者矿池,而这101个超级节点彼此的权利是完全相等的。
优点:节能;快速;高流量博客网站 Steemit 就使用了它。EOS 的块时间是 0.5 秒。
缺点:略为中心化;拥有高权益的参与者可投票使自己成为一名验证者(这是近期已在 EOS 中出现的问题)。
使用该算法的项目(包含且不限于):
BitShares、Steemit、EOS、Lisk、Ark。
POA(Proof-of-Authority,权威证明)
“投票指定一位被认可的账户作为矿工”
类型:协同型共识
基于 PoA 的网络、事务和区块,是由一些经认可的账户认证的,这些被认可的账户称为“验证者”(Validator)。验证者运行的软件,支持验证者将交易(transaction)置于区块中。该过程是自动的,无需验证者持续监控计算机,但需要维护计算机(权威节点)不妥协(uncompromised)。
使用 PoA,每个个体都具有变成验证者的权利,因此存在一旦获取就保持验证者位置的动机。通过对身份附加一个声誉,可以鼓励验证者去维护交易的过程。因为验证者并不希望让自己获得负面声誉,这会使其失去来之不易的验证者地位。
优点:节能、快速。
缺点:略为中心化;虽然可用于公有区块链,但是通常用于私有区块链和许可区块链。
使用该算法的项目(包含且不限于):
POA.Network、Ethereum Kovan testnet、VeChain
PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)
类型:协同型共识
首先从“拜占庭将军问题”开始(简书:中本聪与拜占庭将军问题),拜占庭将军问题的实质就是要寻找一个方法,使得将军们在一个有版徒的非信任环境中建立对战斗计划的共识。
实用拜占庭容错(PBFT,Practical Byzantine Fault Tolerance)是首个提出的该问题解决方案,当前已被 Hyperledger Fabric 采用。PBFT 使用了较少(少于 20 个,之后会稍有增加)的预选定将军数,因此运行非常高效。它的优点是高交易通量和吞吐量,但是不足之处在于是中心化的,并用于许可网络。
拜占庭容错系统是指:在一个拥有n台节点的系统,整个系统,对每个请求满足如下条件: 所有非拜占庭节点使用相同的输入信息,产生同样的结果; 如果输入的信息正确,那么所有非拜占庭节点必须接收这个信息,并计算相应的结果。
与此同时,在拜占庭系统的实际运行过程中一般假设系统中拜占庭节点不超过m台,并且对每个请求满足2个指标:
安全性——任何已经完成的请求都不会被更改,它可以在以后请求看到;
活性——可以接受并且执行非拜占庭客户端的请求,不会被任何因素影响而导致非拜占庭客户端的请求不能执行。
优点:高速、可扩展。
缺点:通常用于私有网络和许可网络。
使用该算法的项目(包含且不限于):
Hyperledger Fabric、Stellar、Ripple、Dispatch
DBFT (Delegated Byzantine Fault Tolerance, 授权拜占庭容错算法)
类型:协同型共识
同样是为了解决拜占庭将军问题,「授权拜占庭容错」机制,是一种在NEO区块链内部实现的保证容错的共识算法。
在这个机制当中,存在两个参与者,一个是专业记账的“记账节点”,一个是系统当中的普通用户。
普通用户基于持有权益的比例来投票决定记账节点,当需要通过一项共识时,在这些记账节点中随机推选出一名发言人拟定方案,然后由其他记账节点根据拜占庭容错算法,即少数服从多数的原则进行表态,如果超过66%的节点表示同意发言人方案,则共识达成;否则,重新推选发言人,重复投票过程。
优点:快速;可扩展。
缺点:每个人都争相成为根链。其中可能存在多个根链。
使用该算法的项目:
Neo