web3相关学习一并收录至该博客:web3学习博客目录大全
胡歌看了都得给我一键三连吧!
我们所说的共识,是指达成了广泛的一致。 比如,一群人去吃晚饭, 如果他们对于提议“吃某火锅”没有任何异议,那么就可以说共识达成了。 如果存在异议,那么他们就必须通过某种方法决定吃什么。 在极端情况下,这群人就会分开。
区块链要成为一个难以攻破的、公开的、不可篡改数据记录的去中心化诚实可信系统,需要在尽可能短的时间内做到分布式数据记录的安全、明确及不可逆,提供一个最坚实且去中心化的系统。共识机制在区块链中成为了重要的因素之一。
区块链分布式记账的方式使得每个人手上都有一本完整的账本,全网共有。但是随着节点的不断增多,数据越多,账本也越安全,难以摧毁。除此之外,任意一个或者部分节点的账本被篡改,都不可能被全网认同,除非你能控制51%的节点,即51%攻击,但是这耗能巨大,几乎是不可能的。同时随着节点不断增加,谁来记账,如何选择合适的人来记账成为一个问题,而制定一个记账人的选择方式以及规定,让大家来遵守这个规定,达成共识,这就是区块链里面的共识机制。
共识机制是区块链节点就区块信息达成全网一致共识的机制,说得更直白一些就是要解决所谓去中心化的信任问题,因为每个节点之间默认是不认识且不可靠的,同时每个节点都不能知道其他节点是否宕机或者背叛的情况下,尽可能的保证记录信息的准确性以及安全性。同时节点越分散,效率越低,网络对于信息的满意度越高,越安全。
区块链作为一种按时间顺序存储数据的数据结构,可支持不同的共识机制。共识机制是区块链技术的重要组件。区块链共识机制的目标是使所有的诚实节点保存一致的区块链视图,同时满足两个性质:
1)一致性:所有诚实节点保存的区块链的前缀部分完全相同。
2)有效性:由某诚实节点发布的信息终将被其他所有诚实节点记录在自己的区块链中。
在分布式系统中,各个不同的主机通过异步通信方式组成网络集群。为了保证每个主机达成一致的状态共识,就需要在主机之间进行状态复制。异步系统中,可能会出现各样的问题,例如主机出现故障无法通信,或者性能下降,而网络也可能发生拥堵延迟,类似的种种故障有可能会发生错误信息在系统内传播。因此需要在默认不可靠的异步网络中定义容错协议,以确保各主机达成安全可靠的状态共识。所以,利用区块链构造基于互联网的去中心化账本,需要解决的首要问题是如何实现不同账本节点上的账本数据的一致性和正确性。
这就需要借鉴已有的在分布式系统中实现状态共识的算法,确定网络中选择记账节点的机制,以及如何保障账本数据在全网中形成正确、一致的共识。
没有一种共识机制是完美无缺的,各共识机制都有其优缺点,有些共识机制是为解决一些特定的问题而生。
BTC作为区块链的第一个应用,它的共识机制PoW共识机制曾经一枝独秀,但是随着区块链技术的不断发展,各类不同的共识机制开始不断涌现,各有千秋,各有拥趸。
常见的共识就机制包括:POW(工作量证明机制)、POS(权益证明机制)、POW+POS(混合共识机制)、DPOS(股份授权证明)等等,另外还有Pool验证池、Ripple瑞波共识协议、PBFT(使用拜占庭容错算法)等等
最早(也是第一个)被应用的共识机制,最先被BTC采用并且获取了巨大成功,它支撑了BTC系统长达 10 多年无重大故障使其平稳运行。而且 PoW 构想也符合创始人中本聪最初的设想:人人皆可挖矿、按劳分配、公平公正。
PoW 属于按劳分配,多劳多得,就如同大家在BTC系统中一起进行数学运算,最先运算出的才能获得奖励。是一种衡量计算机工作量的共识机制。BTC使用的就是工作量证明机制。
工作量证明主要通过哈希计算找出合理数据的步骤来完成:将区块头数据带入哈希函数计算公式,不断调整区块头数据中的随机数,直到计算出满足特定标准的哈希值,工作量证明就会完成。
简单来说就是多劳多得,谁的算力强,计算得就更快,获得记账权的概率就越高,算力竞争的胜者将获得相应区块记账权和BTC奖励。 因此,矿机芯片的算力越高,挖矿的时间更长,就可以获得更多的数字货币。进行运算获得奖励的过程称之为挖矿,参与挖矿的人们称之为矿工。这种证明方式决定了其验证过程需要大量的数据计算,而其他节点却很容易验证计算结果是否正确,因此 区块链系统无法被恶意节点所欺骗。但是这种证明方式需要消耗大量能源(电力及计算硬件损耗),很不 环保。并且在理论上,如果集合了全网51%的算力即可对区块链网络进行有效攻击,因此许多基于比特币 代码产生的、市值较小的山寨币很容易遭受攻击。
代表token:BTC、BCH、LTC等。
因 PoW 存在的问题,PoS 在主流算法一路畅通的“杀了出来”,成为了最具有挑战者。近几年,基于 PoS共识打造的区块链项目越来越多,如目前市值保持第二的ETH也加入了 PoS。“Staking经济”在 2019年成为了热门词语,同时也被交易所和钱包大力追捧。
POS机制采用类似股权证明与投票的机制,选出记帐人,由它来创建区块。持有股权愈多则有较大的特权,且需负担更多的责任来产生区块,同时也获得更多收益的权力。 POS 机制中一般用币龄来计算记账权,每个币持有一天算一个币龄,比如 持有 100 个币,总共持有了 30 天,那么此时的币龄就为 3000。在 POS机制下,如果记账人发现一个 POS 区块, 他的币龄就会被清空为 0,每被清空 365 币龄,将会从区块中获得 0.05 个币的利息(可理解为年利率 5%)。
PoS权益证明同样需要通过计算找出合理的哈希值来完成。 但不同的是权益证明机制通过节点持有加密货币的时间和数量来判断节点的权益大小。根据权益大小不同,用户之间看到的计算目标值也不同。权益大的节点,获得目标值更加简单,更容易获得下一个区块的记账权。 这种方式不需要每个节点都进行大量的运算,节省了电力能源。同时全网51%的算力攻击在权益证明机制下是无效的,因为发起这种攻击反而会损害自身的利益。但是可能会出现币种持有数量大的节点权力过 大,对区块链记账享有绝对支配权的情况,容易引发信任问题。
在 PoS 机制中,是不需要消耗电力来进行运算,而是通过抵押 token 来获得打包区块的权利。当一笔交易发生时,系统会对打包区块和验证区块的节点来进行奖励,奖励则是增发或者解锁的 token。
代表token:ADA、ONT、ATOM等。
DPoS 机制是在 PoS 的基础上进行了改良,举例来说就是大家公认的投出选票,选举出一定数量的代表,让这些代表进行验证和记账等,可以理解为PoS 的升级版。与PoS的主要区别在于持币者投出一定数量的节点,代理他们进行验证和记账。其合规监管、性能、资源消耗和容错性与PoS相似。
DPoS的工作原理为:每个股东按其持股比例拥有影响力,51%股东投票的结果将是不可逆且有约束力的。其挑战是通过及时而高效的方法达到51%批准。为达到这个目标,每个股东可以将其投票权授予一名代表。获票数最多的前100位代表按既定时间表轮流产生区块。每名代表分配到一个时间段来生产区块。所有的代表将收到等同于一个平均水平的区块所含交易费的10%作为报酬。如果一个平均水平的区块含有100股作为交易费,一名代表将获得1股作为报酬。DPoS的投票模式可以每30秒产生一个新区块。
简单点说:DPoS 委托权益证明通过由持币人投票选举出一定数量的代表来达成共识。 每个持币人的投票所占的比重 与他持有的币种数量有关,持有的越多,所占的比重越大。被选出的代表可拥有记账权,轮流进行记账;未能很好履行职责的代表还会被投票除名。这一任期结束后,新的代表会再次通过投票产生。
代表token:EOS、TRX等。
PoC 机制早在 2014年存在了,但只是一直处于“落魄阶段”,简单说就是没火,无人问津。2019年随着POC一大公链Yottachain的崛起,越来越多的矿工加入了POC硬盘挖矿这个行业大军了。它是POW共识机制的一种,以硬盘作为共识参与者,它的特点是牺牲性能获得安全可信,相对POW减少了非常多的安全和信任成本,更低成本解决了全局信任和安全,几乎不耗电力资源,并且可共享和复用的信任生态。
PoC 机制是通过普通硬盘挖矿的共识机制。简单来说就是利用计算机硬盘中的闲置空间来进行存储进行挖矿获取收益,硬盘空间越大,存储的内容越多获得的收益就越大。 它更多地关注内存而不是处理能力。 从某种意义上说,这是对PoW的改进,即使在挖掘开始之前,容量证明也要求节点将预先计算的哈希值存储在其硬盘驱动器和其他内存单元上,这个过程称为绘图,绘图使容量证明成为比工作证明更快的机制。这种方法的另一个优点是它可以节省大量能源,这与工作量证明机制不同。更不用说,硬盘存储更多哈希值的任何技术改进也将为不在区块链中的人改进技术,这与许多制造商制造的专用芯片不同,后者除了采矿之外什么都不做。
IPFS 也类似,但不同的是 IPFS 衍生的区块链项目(激励层Filecoin)是一种去中心化存储服务的 Marketplace(撮合交易的市场),它的重点在于如何在系统参与者互不信任的条件下,实现存储和检索工作的量化;PoC 是一种底层共识机制,与 PoW、PoS一样都是去中心化网络达成一致性状态的算法。由此来看,两者是完全不同的概念,唯一的共同点就是都可以使用硬盘向网络贡献价值来换取收益。
代表token:BTT、BHD等。
有向无环图是计算机科学中众所周知的数据结构。事实上,区块链也是DAG的一个例子,因为它有一个明确的方向,没有任何循环,并且是一个图。1OTA使用的Tangle也是DAG共识机制的一种形式。在这种机制中,每个块必须有两个父块。所以,为了通过DAG共识机制完成一笔交易,用户需要验证自己之前的两笔交易。这种机制的最大优势是它可以减少延迟和交易费用。然而,这种共识模型对提高可扩展性几乎没有任何作用,而且极易受到攻击,因为任何攻击只需要34%的哈希算力就可以破坏系统。
DAG最初出现就是为了解决区块链的效率问题。其通过改变区块的链式存储结构,通过DAG的拓扑结构来存储区块。在区块打包时间不变的情况下,网络中可以并行的打包N个区块,网络中的交易就可以容纳N倍。
之后DAG发展成为脱离区块链,提出了blockless无区块的概念。新交易发起时,只需要选择网络中已经存在的并且比较新的交易作为链接确认,这一做法解决了网络宽度问题,大大加快了交易速度。
代表token:IOTA、byteball等。
前段时间国内首个基于DAG的物联网区块链项目ITC万物链也取得了不小的涨幅。
实用拜占庭容错在保证活性和安全性(liveness & safety)的前提下提供了(n-1)/3的容错性。
在分布式计算上,不同的计算机透过讯息交换,尝试达成共识;但有时候,系统上协调计算机(Coordinator / Commander)或成员计算机 (Member /Lieutanent)可能因系统错误并交换错的讯息,导致影响最终的系统一致性。拜占庭将军问题就根据错误计算机的数量,寻找可能的解决办法,这无法找到一个绝对的答案,但只可以用来验证一个机制的有效程度。而拜占庭问题的可能解决方法为:在 N ≥ 3F + 1 的情况下一致性是可能解决。其中,N为计算机总数,F为有问题计算机总数。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。
实用拜占庭容错主要应用于央行的数字货币以及布萌区块链。
小蚁采用的dBFT机制,是由权益来选出记账人,然后记账人之间通过拜占庭容错算法来达成共识。dBFT和PBFT的关系类似于PoS和DPoS的关系。
dBFT在PBFT基础上进行了以下改进:
以上总结来说,dBFT机制最核心的一点,就是最大限度地确保系统的最终性,使区块链能够适用于真正的金融应用场景。
基于传统的分布式一致性技术,加上数据验证机制;之前曾是行业链大范围在使用的共识机制,但是随着私有链项目的逐渐减少渐渐开始势微。
不需要token也可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础上,实现秒级共识验证。
去中心化程度不如bictoin;更适合多方参与的多中心商业模式。
拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则任何攻击行动的结果都是注定要失败的,只有完全达成一致的努力才能获得胜利。
这一问题是一种对现实世界的模型化,尤指网络当中由于软硬件错误、网络阻塞及恶意攻击导致的各种未知行为。
显然,在此处默认了将军们在达成一致的过程中正确的传递出了自己的决定,也就是说叛徒只存在于将军当中,不存在于传令兵当中。故要让拜占庭将军问题有解,必须要具备一个重要前提,即信道必须是安全可靠的。关于信道可靠问题,会引出两军问题。两军问题的结论是,在一个不可靠的通信链路上试图通过通信以达成一致是基本不可能或者十分困难的。
拜占庭将军问题提出后,有很多的算法被提出用于解决这个问题。这类算法统称拜占庭容错算法(BFT: Byzantine Fault Tolerance)。简略来说,拜占庭容错(BFT)不是某一个具体算法,而是能够抵抗拜占庭将军问题导致的一系列失利的系统特点。 这意味着即使某些节点出现缺点或恶意行为,拜占庭容错系统也能够继续运转。本质上来说,拜占庭容错方案就是少数服从多数。
拜占庭将军问题的原始论文给出了一些解决思路,但其更注重理论上的可行性。算法效率不高,算法复杂度为指数级,且文中明确指出时间成本及消息传递数量很大。因此不具备太大的实用价值。
拜占庭容错系统需要达成如下两个指标:
● 安全性:任何已经完成的请求都不会被更改,它可以在以后请求看到。在区块链系统中,可以理解为,已经生成的账本不可篡改,并且可以被节点随时查看。
● 活性:可以接受并且执行非拜占庭客户端的请求,不会被任何因素影响而导致非拜占庭客户端的请求不能执行。在区块链系统中,可以理解为,系统需要持续生成区块,为用户记账,这主要靠挖矿的激励机制来保证。
拜占庭系统目前普遍采用的假设条件包括:
● 拜占庭节点的行为可以是任意的,拜占庭节点之间可以共谋;
● 节点之间的错误是不相关的;
● 节点之间通过异步网络连接,网络中的消息可能丢失、乱序、延时到达;
● 服务器之间传递的信息,第三方可以知晓 ,但是不能窜改、伪造信息的内容和验证信息的完整性;
科普 | 什么是共识机制?
详解区块链中常见的八大共识机制!
区块链的几大共识机制及优缺点