主页 > 怎么在华为下imtoken > 区块链项目中共识算法分类及存在问题分析

区块链项目中共识算法分类及存在问题分析

怎么在华为下imtoken 2023-06-27 08:29:38

共识算法分类

共识算法解决的是对一个提案(Proposal)达成共识的过程。

根据共识算法所采用的策略,可以分为两大类,即概率共识算法和绝对共识算法。

回顾CAP原理,两类算法的区别在于可用性和一致性的平衡:

概率共识算法以牺牲系统的一致性为代价来保证系统的可用性,而绝对共识算法则相反,以牺牲系统的可用性为代价来保证系统的一致性。

1. 概率共识算法

概率一致性算法是指在不同的分布式节点之间,有很大的概率保证节点之间的数据是一致的,但仍有一定的概率保证部分节点之间的数据不一致。

对于某个数据点,节点间数据不一致的概率会随着时间的推移逐渐降低为零,最终达到一致性。

例如,工作量证明(PoW)、权益证明(PoS)和委托权益证明(DPoS)都是概率共识算法。

2.绝对一致性算法

绝对一致性算法是指在任何时间点,不同分布式节点之间的数据将保持绝对一致,不同节点之间不会出现数据不一致的情况。

比如分布式系统中常用的Paxos算法及其衍生的Raft算法,还有拜占庭容错算法(类似BFT算法),比如PBFT算法。

区块链项目常用的共识算法

传统的分布式数据库主要使用Paxos和Raft算法来解决分布式一致性问题。 他们假设系统中的每个节点都是忠诚的,不作恶,但可能会出现消息丢失和延迟等问题。

当分布式数据库的所有节点由单个机构统一维护时,此假设成立。 在去中心化的区块链网络中,节点由互不认识、互不信任的多个参与者共同提供和维护。 在各种利益的驱使下,网络中的参与者可能会作弊作恶。 因此,Paxos 和 The Raft 算法不能直接用于区块链共识。

目前,区块链项目广泛使用的算法包括工作量证明(PoW)、权益证明(PoS)、共享授权证明(DPoS)、实用拜占庭容错(PBFT)等,其他项目使用混合算法两种算法,如PoW+PoS,DPoS+PBFT等。此外,还有燃烧证明(PoB,Proof of Burn),沉淀证明(PoD,Proof of Deposit),容量证明(PoC,Proof of Capacity)、经过时间证明(PoET,Proof of Elapsed TIme)等不成熟的算法。

工作量证明 (PoW)

工作量证明(PoW)需要工作端进行一些耗时且复杂的计算,而答案可以被服务器快速检查。 消耗的时间、设备、能源作为保障成本,确保服务和资源被真正的需求所使用。

工作量证明最常用的技术原理是哈希函数。 由于hash函数h()中输入的任意一个值n都会对应ah(n)的结果,而只要n改变一位,得到的结果就会完全不同,所以几乎不可能从中反推n h(n),因此,通过指定搜索h(n)的特性(比如要求小于某个值,即hash值的前缀需要一定数量的0,增加难度就意味着增加数量of prefix 0s), 允许用户进行大量的穷举计算, 只需工作量证明即可。

PoW项目案例

PoW 共识算法最初是在比特币系统中提出并应用的。

比特币系统在挖矿过程中每 10 分钟生成一个区块。 为了保证比特币系统的稳定发展和区块的不断产生,比特币协议人为设定了这个10分钟的规则,让系统中的所有节点都可以用这10分钟来完成接收、打包、见证工作,同时在整个网络中广播生成的交易。

比特币将区块间隔设计为 10 分钟,这实际上是更快的交易确认和更低的分叉概率之间的折衷。 然而,分叉是不可避免的。 例如,当两个矿工 A 和 B 几乎同时计算出工作量证明解决方案时,他们立即将自己的区块传播到网络,这导致部分节点跟随 A 的区块,而另一部分节点节点跟随B的块。两部分网络数据不一致,即分叉。

比特币的策略是发生分叉后,两个分叉的网络分别继续挖矿。 由于算力的差异,一段时间后,两条分叉链的长度会不一致。 当网络上的节点收到两个分叉广播的区块后,选择包含区块最多的链(最长链)作为主链,这样较短的分叉上的工作就会停止,这样大家就会 All in同样的顺序,所以它起作用了。 尽管一段时间内会有分歧,但可以保证最终会达成一致。

同时,由于比特币分叉问题的存在,为了防止重复支付问题,规定每笔交易至少需要5个验证块进行验证后才能算作确认,即可以说,比特币的共识机制认为,在等待6次确认的情况下,分叉切换的概率足够低(例如,基于节点1%的算力,被分叉的概率超过6 个块后的长度是 100 1) 的 1/6。

以太坊是此类协议的另一个典型示例,它的同步假设出块时间仅为 15 秒。 以太坊的出块速度明显短于比特币的 10 分钟,这使得以太坊系统在输出速度上更加高效,交易在全网广播所需的时间更短,但正因为如此,结果很多孤立块形成了。

总结一下PoW共识算法的思想,其实就是放宽对最终一致性确认的要求。 约定大家选择最长的已知链进行确认。 PoW 系统的最终确认是概率性的,被迫推迟。 这样做的好处是即使有人试图恶意破坏它,也会付出高昂的经济代价(付出系统一半以上的算力)。

PoW 共识算法中的问题

1)算力竞争的设计导致了中心化矿池:虽然PoW的目的是保证系统的去中心化运行,但系统到现在实际上已经形成了五个高度中心化的矿池。 五大矿池垄断了全球90%以上的算力,可能导致大矿池毁全网的行为。

2)算力竞争的设计导致大量的能源消耗:另外,PoW系统需要产生大量的能源消耗:比特币挖矿消耗的能源超过159个国家; 目前全球77.7%的比特币网络算力仍在中国; 受益于内蒙古和四川丰富的电力资源,中国拥有世界上最多的比特币矿场; 到 2019 年 7 月,比特币网络需要的电力将超过美国目前的用电量; 到 2020 年 2 月,它将使用与当今整个世界一样多的电力。

3)业务处理性能低:虽然投入了大量的能源来支持系统的运行,但大部分能源消耗都用于工作量证明中的哈希计算,处理交易业务的性能很低. 每秒仅约 7 个事务; 以太坊每秒 10-20 笔交易。

股权证明(PoS)

Proof of Stake(POS),所有持有区块链电子货币的用户都可以通过特殊的交易将自己的电子货币锁定在一个金库中比特币采用的共识算法是什么,然后他们就可以成为验证者。

算法通过固定的时间协调所有节点参与投票,根据一定的规则(比如持有的代币数量,或者提供的存储空间大小等)判断每个节点的权重,最终选出节点以最高权重作为支票。

POS 相对于 PoW 的优势包括:

1)PoW 需要耗费大量的算力资源。 POS的好处当然是去掉了很多算力的竞争;

2)不需要通过不断发行新币来激励矿工参与算力竞争。 规避未知的通胀风险;

3) 提出了一种利用博弈论避免区块链网络中集中大参与者的新方法。 PoW的算力竞争设计模式导致算力越来越集中在大型矿池中,可能导致整个网络被大型矿池破坏;

4) PoS 也可以让 51% 的攻击变得极其昂贵。 恶意参与者将面临押金被没收的风险。

PoS项目案例

PoS 的原始版本是由 Peercoin 设计和实现的。 用户必须满足以下条件才能生成区块:

hash (stake_modifier, current_TIme, UTXO) < 硬币 (UTXO) * 年龄 (UTXO) * 难度。

具体解释如下:

1)用户每秒(current_TIme)遍历自己所有的UTXO,代入上式,看是否满足不等式条件; 如果是比特币采用的共识算法是什么,则在区块中记录相应的UTXO并发布区块;

2) stake_modifier 是前一个区块中某些字段的哈希值。 增加此项是为了防止用户提前预知什么时候有挖矿权;

3)难度会根据最近的出块时间动态调整,保证稳定的出块时间间隔;

4)由于每秒只需要完成与自身UTXO个数相等的哈希计算,所需算力相对较低;

5)从不等式可以看出,持有的UTXO越多,UTXO(币(UTXO))中的代币数量就越大,UTXO(币龄(UTXO),即币龄)的持有时间越长,不平等越大,设置越容易,挖矿越容易。

这个版本的 PoS 面临以下问题

1)由于构建新区块没有算力成本,当区块链发生分叉时,用户可能倾向于同时在多个分支上挖矿以获得潜在的更高收益,从而产生大量分支,破坏一致性;

2)存在币龄累积现象,即关闭节点,直到币龄(UTXO)大到可以省电时,重新开始节点挖矿,造成在线节点过少,系统脆弱的问题;

3)在积累足够的币龄后,保证自己有足够的UTXO能够持续出块,从而发起双花攻击。

Blackcoin在Peercoin的基础上进行了修改,以缓解上述问题。 主要变化是:

1)去掉不等式右边的年龄(UTXO),从而解决问题3中先累加币龄再双花的现象; 但是区块奖励仍然使用币龄,所以不能完全解决问题2中节点关闭的问题现象;

2)优化了stake_modifier的计算逻辑,使得用户更难提前预知自己获得挖矿权的时间。

PoS机制虽然兼顾了PoW的不足,但也有不足之处:

1)基于股权平衡的选择会导致首富的账户拥有更大的权力,并可能控制记账权;

2)PoS的一致性:PoS的挖矿过程与PoW的问题类似。 全网所有节点共同参与。 每时每刻,成千上万的节点都在同时尝试产生下一个区块,因此时不时会出现区块链分叉。 由于分叉的存在,出块时间间隔不能太短。 每个区块链通过动态调整的挖矿难度将块时间间隔稳定在其期望的水平。 长区块生成时间伴随着长交易确认时间和低交易处理性能。

委托权益证明(DPoS)

针对 PoW 和 PoS 的不足,提出了委托权益证明(DPoS)机制。

DPoS算法通过一定的机制(比如持有的代币数量)从数千个PoS节点中选出若干个节点,在它们之间进行投票(有些实现甚至以代币环的形式进行轮询),进一步减少投票开销)出来每个检查点(块)节点,而不是在网络中的所有节点之间进行选择。

DPoS项目案例

石墨烯框架和EOS前身bitshares(比特股)项目提出的DPOS方案,步骤简述如下:

1)持有代币的用户可以投票选出候选区块生产者;

2)选出票数最高的n个用户作为代表,负责下一个周期的出块,目前n=21;

3) 打乱代表顺序后,每个代表开始依次出块。 每个代表都有自己固定的时间间隔,需要在自己的时间间隔内完成区块的生产发布。 目前这个间隔是3秒,即正常情况下每3秒出一个块;

4)在生产一个区块时,每个代表需要找到当时唯一最长的链进行生产,不能在其他分支上生产。

通过上述方法,保证了较短的出块时间,并且由于为每个生产者设置了固定的时间间隔,不会因为候选节点的延迟而延迟出块。

EOS最初使用的是DPoS算法,后来为了缩短出块时间,改为BPT-DPoS算法。

DPoS共识算法存在的问题

1)以EOS为代表的DPoS算法,旨在用少数节点代替多数节点进行共识,实际上是以牺牲区块链的去中心化来换取共识效率的提升;

2)EOS的21个超级节点并不是21个不同的实体,节点之间可能存在内部串通;

3)超级节点选举的争议。 由于网络无法解决女巫攻击问题,1人1票的民主投票制度将被1代币1票制度所取代,导致“财阀政治”的结果; 而相对不那么富有、投票权较少的投资者将对投票漠不关心; 超级节点可以用钱购买选民的选票; 鼓励超级节点相互勾结,以便他们可以改变他们与选民分享的奖励比例;

4)DPoS 允许不超过节点总数三分之一的恶意或故障节点创建少量分叉。 在这种情况下,少数分叉每 9 秒只能产生一个区块,而多数分叉每 9 秒可以产生两个区块。 这样,诚实的 2/3 多数人将永远比少数人更长。

实用拜占庭容错 (PBFT)

PBFT算法的结论是n》=3f+1,n是系统中的节点总数,f是允许失败的节点数。 换句话说,如果系统容忍 f 次故障,则系统必须包括 n 个节点才能解决故障。 这和上面口头约定的结论是一样的,或者说PBFT优化了口头约定机制的效率,但是结论没有改变。

区块链项目中共识算法的分类,及存在的问题分析

PBFT算法的步骤:

1)取一份作为主节点(图中0),其他份作为备份;

2)用户(图中C)向主节点发送消息请求;

3)主节点通过广播向其他节点发送请求(图中1、2、3);

4)所有节点执行请求并将结果返回给客户端;

5)客户端需要等待f+1个不同的副本节点发回相同的结果,可以作为整个操作的最终结果。

PBFT项目案例

Hyperledger Fabric 推荐并实现了 PBFT 共识算法。

PBFT不仅具有强一致性的特点,还提供了高共识效率,更适合对一致性和性能要求高的区块链项目。 但是,由于PBFT需要两个或两个节点进行通信,通信量为O(n^2)(可以通过优化减少通信量),在公链全局环境下,节点数量和网络环境是不可控的,如此巨大的通信量是无法实现的。

但是对于联盟链和私有链来说,节点数量不是很多,使用PBFT效率更高,结果也更好。 因此,PBFT广泛应用于联盟链和私有链的区块链项目。 这就是 Fabric 项目使用 PBFT 算法的原因。

PBFT共识算法存在的问题

1)通信量为O(n^2),不适用于节点数量和网络环境不可控的公链项目;

2)PBFT是一种强一致性算法,在可用性方面做出了让步。 当1/3或更多记账员停止工作时,系统将无法提供服务。

工作量证明+证明

共识机制已经成为区块链系统性能的关键瓶颈。 单一的共识算法存在各种问题。 例如,PoW算法消耗大量计算资源,性能低下; PoS 或 DPoS 存在“财阀政治”的问题; 而具有良好理论证明的PBFT算法面临广播带来的网络开销。 问题太大了。 结合多种共识算法优势的想法越来越受到关注。

例如,以太坊社区提出的正在开发的共识协议称为Casper,它是一种覆盖现有以太坊PoW提案机制的PoS。 Casper 结合了 PoW 和 PoS 算法。

Casper 的基本思想是,任何人只要抵押足够的以太坊到系统中,就可以成为矿工,参与到挖矿过程中。 共识算法要求所有矿工诚实工作。 如果矿工故意破坏且不遵守协议,系统将通过没收之前抵押的以太坊来惩罚矿工。 有人将Casper这样的挖矿机制称为“虚拟挖矿”。 比特币矿工需要购买矿机参与挖矿,Casper首先要抵押Ether到系统中; 然而,在卡斯帕,不遵守规则的惩罚更为严重。 除了失去挖矿收益外,“矿机”也必须被销毁:抵押的以太坊将被系统没收!

Casper 的应用程序逻辑存在于智能合约中。 要成为 Casper 中的验证者,您必须拥有 ETH,并将 ETH 作为杠杆权益存储在 Casper 智能合约中。 Casper 第一次迭代中的区块提议机制将被保留:它仍然使用中本聪的 PoW 共识,矿工可以创建区块。 但为了最终确定区块,Casper 的 PoS 覆盖层取得了控制权,并拥有自己的验证者,他们在 PoW 矿工之后投票。