0

共识

共识知识专题栏目,提供与共识相关内容的知识集合,希望能快速帮助您找到有用的信息以解决您遇到的共识问题。

分享

浏览

4666

文章

30

教育数字化成普遍共识 为教育数字化创造有利条件

全文共 594 字

+ 加入清单

在当今社会中数字化变革已经出现在各个角落,数字化教育逐渐成为普遍共识,线下出现了更多的多媒体教室,以数字化来帮助国家成为教育强国,推进教育高质量的快速发展。学校的信息化基础设施已经从电脑、投影仪到现在的液晶一体机,科技的进步也让教学理念和模式大大提升,就连边远山区的教育资源也有非常明显的进步。

教育数字化转型正在有效地促进教育的质量,在教育资源上实现了共享,利用国家中小学智慧教育平台上的各种教育资源,帮助学生提升对学习的兴趣,老师们也能获得更多的教育模式,互动的数字化教学模式让课堂变得更加有趣,自主学习、客服服务、教师备课、作业审批等工作都能在线上完成,同时开展家校之间的便捷交流,让学生获得优质的受教育机会,老师也能提升自己的教学能力。

党的二十大报告中,首次提出“推进教育数字化”,让全民更好地进行终身学习,就连乡村的学生也通过智慧大屏幕,享受到了更多精彩的服务,职业教育类的学校也获得了更多虚拟模仿,基地虚拟协助教研等各种新的形态,以数字化来帮助教育发展,推动素质教育的正确方案。

基础设施的完善也是为教育数字化创造更多有利条件,从教育信息化到教育数字化,除了基础设施的完备之外,还扩大了教育模式,师生之间的素养也不断提高,为深入实施国家教育数字化行动创造了更多有利的条件。同时在“双减”政策的帮助下,学校和课堂的质量也越来越高,也能够开展更多有趣的课程,让孩子接触更全面的教育。

展开阅读全文

​国内外对结束新冠紧急状态达成共识 疫情真的消失了吗?

全文共 613 字

+ 加入清单

国内的局部地区依旧有新冠病毒感染的现象,人们还是要做好防护。2022年年低,国内宣布结束新冠疫情紧急状态,不在实行隔离措施。这标志着自2020年以来,国家对疫情的应对进入了一个新的阶段。

自2020年初以来,我国采取了一系列强有力的措施,包括封城、隔离、大规模检测等,有效地控制了疫情的传播。目前国内的疫情形势已经得到了有效的控制,疫苗接种工作也在全面展开。不能忽视的是,疫情的消失并不代表着病毒已经被彻底消灭。随着全球疫情的不断变异和扩散,还需要保持高度警惕,及时采取措施应对可能出现的新情况。

尽管全球疫情有所缓解,但仍存在很多不确定性和挑战。一方面,疫苗的接种速度和覆盖率存在差异,一些国家和地区的疫情仍然十分严峻。另一方面,病毒的变异和传播仍然存在很多未知因素,这也给疫情的防控带来了很大的挑战。需要加强国际合作,共同应对疫情的挑战,推动全球疫苗接种工作,加强疫情监测和预警,以确保全球疫情得到有效的控制。

需要认识到,疫情的结束不仅仅是政府的宣布,更需要全社会的共同努力和配合。在疫情防控的过程中,人们需要保持警惕,做好个人防护措施,遵守相关规定和要求,共同维护社会的安全和稳定。也需要关注和支持疫情防控工作的医护人员和志愿者,为他们的辛勤付出和贡献点赞。

结束新冠紧急状态是一个重要的里程碑,但疫情的消失并不代表可以掉以轻心。需要继续保持警惕,加强疫情防控工作,共同应对可能出现的新情况,为实现全球疫情的彻底消灭而努力。

展开阅读全文

什么是共识机制?

全文共 1005 字

+ 加入清单

OK区块链60讲第15集:什么是共识机制文字版:

今天我们要讲的内容是:“什么是共识机制”?

我们上节课讲过,分布式网络必须要解决的一个至关重要的问题,就是“拜占庭将军问题”,而区块链作为分布式网络中的典型代表,则采用了一系列新型的技术,来解决这个问题,这个技术就是共识机制。

简单来说,共识机制就是一种每个节点都必须遵守的规则。它同样是区块链的四大核心技术之一。共识机制在区块链网络中主要起到了协调全节点账目保持一致的作用。

为什么这么说?我们都知道区块链是去中心化的,基于分布式账本技术,每个人都可以自由地加入进来,成为其中的一个节点。但想一想,绝对的自由,必然会带来绝对的混乱,如果每个人都自由地在网络中处理数据,整个网络会发生什么样的情况?

比如,我作为一个节点加入进来,这个时候网络中产生了一笔数据,我是以方式A处理的,而另一个人是以方式B处理的,我们的处理方式不同,权限又都平等,那到底用谁处理的数据呢?一旦我们两个无法达成共识,整个网络就很容易发生分歧,产生混乱。

此外,在这种环境下,我和其他节点相互不认识,又没有一个中心化的权威机构来做担保,我怎么确定其他节点处理的数据没问题?

所以说,在去中心化的环境下,没有一个比较中心化的节点能做决策,协助网络运行,网络就很难在自由的环境下,自主运行。

为了解决这个问题,中本聪就想了个办法:虽然整个网络中没有一个中心化的节点能做决策,但是我可以设立一套规则,让这个规则成为一个中心化的机制,每个节点必须遵守,帮助网络自主运行,就好比法律约束社会的每个人一样。

这个规则内容要包含两点,第一是解决分布式账本中,每个节点怎么记账的问题;第二是解决不同节点间,如何交换信息、达成共识的问题。

具体是依赖某种方式,确定谁取得区块链中的记账权,谁取得了记账权,整个网络就用谁处理好的数据,并且这个人还可以获取打包区块的奖励,此外,谁如果意图危害网络,也会获得一定的惩罚。

这样就能在一个没有中心化节点存在的情况下,既能让每个节点比较统一地做一件事,又能保证每个节点的小数据库之间数据一致。从而令分布式网络,比较有序地去运行。

总的来说,共识机制就是一种制度,能够约束去中心化网络中的每一个分散的节点,维护系统的运作顺序与公平性,使每一个互不相干的节点能够验证、确认网络中的数据,进而产生信任,达成共识。

如果把区块链当成一个社会,那么共识机制就是这个世界中的法律,人人都得遵守,不仅解决了信任的问题,更维护着整个区块链社会的正常运行。

展开阅读全文

如何认清当前主流的共识算法及背后发展脉络?

全文共 3710 字

+ 加入清单

共识算法是近年来分布式系统研究的热点,也是区块链技术的核心要素。如何理解共识算法重要性及评价体系?如何认清当前主流的共识算法及背后发展脉络?接下来共识算法发展的趋势与阻碍又是什么?

本文由本体研究院撰写,作为一个开放性技术研究组织,它持续专注于区块链相关技术的研究和探讨。

原文标题:《共识算法演变史》

稿件来源:链捕手共识算法及评价体系

共识算法主要是解决分布式系统中多个节点之间对某个状态达成一致性结果的问题。分布式系统都是由多个服务节点共同完成对事务的处理,分布式系统中多个副本对外呈现的数据状态需要保持一致性。

但是由于节点的不可靠性和节点间通讯的不稳定性,甚至节点作恶伪造信息进行恶意响应,节点之间就存在数据状态不一致性的问题。通过共识算法,可以实现将多个不可靠的单独节点组建成一个可靠的分布式系统,实现数据状态的一致性,提高系统的可靠性。

区块链系统本身是一个超大规模的分布式系统,但又与传统的分布式系统存在明显区别。区块链系统建立在去中心化的点对点网络基础之上,在整个系统中没有中央权威,并由共识算法实现在分散的节点间对交易的处理顺序达成一致,这是共识算法在区块链系统中起到的最主要作用。

另外,与企业分布式系统不同,区块链系统中的共识算法还承担着区块链系统中激励模型和治理模型中的部分功能,包括每个区块中对哪些矿工进行激励发放、网络中所有交易手续费的结算和分配、区块链网络共识周期的切换等。

共识算法根据容错能力不同,即在考虑节点故障不响应的情况下,再考虑节点是否会伪造信息进行恶意响应,可以分为 CFT (Crash Fault Tolerance)类和 BFT (Byzantine Fault Tolerance)类共识算法。

CFT 共识算法只保证分布式系统中节点发生宕机错误时整个分布式系统的可靠性,而当系统中节点违反共识协议的时候(比如被黑客攻占,数据被恶意篡改等)将无法保障分布式系统的可靠性,因此 CFT 共识算法目前主要应用在企业内部的封闭式分布式系统中,目前流行的 CFT 共识算法主要有 Paxos 算法及其衍生的 Raft 共识算法。

采用 BFT 共识算法的分布式系统,即使系统中的节点发生了任意类型的错误,只要发生错误的节点少于一定比例,整个系统的可靠性就可以保证。因此,在开放式分布式系统中,比如区块链网络,必须采用 BFT 共识算法。

在区块链网络发展前,BFT 共识算法主要为 PBFT 共识算法,目前部分联盟链采用 PBFT 共识算法。由于公有链的开放性,任意节点都可以随时参与和退出网络并都有作恶的可能,近两年公有链的快速发展也带动了 BFT 共识算法的巨大进步。

另外,因为共识算法都建立在底层的网络模型基础上,所以从网络同步模型的角度来看,共识算法可以分为三种,即同步共识算法,半同步共识算法,和异步共识算法。

同步共识算法要求网络中任一消息能够在已知的限定时间内到达所有的共识节点,因此主要应用在限定规模的网络环境中,大多数联盟链采用同步共识算法。

异步共识算法对于消息在网络中的传播延迟没有任何限制,消息可以在无限长时间后才能发送到其他共识节点,由于 FLP 不可能定理(在网络可靠,存在节点失效,即便只有一个的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。),异步共识算法无法确定性保证共识终局,因此几乎没有高效的全异步共识算法,即使 Bitcoin 的 PoW 算法也是基于同步网络保证一致性,基于异步网络保证可用性。

半同步共识算法在前两者之间做了权衡,要求网络中消息某限定时间后到达所有共识节点的的概率与时间的关系是已知的,目前主流的区块链共识算法都是基于半同步的网络模型,即半同步共识算法。

评价一个区块链共识算法的优劣,可以从以下四个方面进行,即容错性能、终局性性能、扩展性(消息复杂度)以及网络模型性能。

容错性能:指共识算法的容错能力,比如 Raft 只能支持节点故障错误。而在区块链中,特别公有链中,由于节点间存在利益博弈,同时又是一个非中心化的网络状态,其共识算法必须支持节点作恶的容错,所以区块链的共识算法必然是 BFT 算法。

终局性性能:指区块链网络对一个候选区块完成终局一致性所需要的时间,这对于面向用户的 DApp 应用是非常重要的参数。

扩展性:指随着区块链网络节点数目与共识算法性能的相关关系,比如 PBFT 算法随着节点数目增加,完成一轮共识需要在网络中传播的消息数目呈平方比例增加,因此 PBFT 算法的天然特性无法支持大规模网络。

共识算法的网络模型性能对其容错性能和终局性能都有很大的影响。在区块链大规模网络条件下,同步共识算法要求所有节点在规定时间内响应对其他节点的消息,否则将被认为是故障节点,因此受网络波动影响较大,从而进一步导致算法容错性能的降低;而由于 FLP 不可能定理,异步共识算法无法给出确定的终局性性能,所以当前主流区块链共识算法都是基于半同步模型。当前主流的共识算法

在区块链发展初期,主流区块链网络都是基于 PoW 共识算法,包括 Bitcoin,Ethereum,Litecoin,Zcash 等。由于 PoW 存在挖矿的资源浪费问题,2017 年后基于 PoS 的共识算法研究得到了迅猛的发展,并在 2018 年各种基于 PoS 共识算法的公有链都逐步上线。

对于当前主流共识算法可以采用如下几种方式分类:

基于挖矿方式分类:

1) PoW : 所有节点通过解决某个计算难题(例如哈希难题)参与共识。包括:Bitcoin,Ethereum, Litecoin

2) PoS:所有节点通过质押代币的方式参与共识。包括:Ethereum-PoS,Tendermint,Algorand,EOS DPoS,DFINITY,VBFT

基于终局性分类:

1) GHOST:PoW,Ethereum-PoS

2) BFT:Tendermint,EOS DPoS,Algorand,DFINITY,VBFT

基于节点选择方式:

1)所有节点参与:PoW,Ethereum PoS,Tendermint

2)随机选择部分节点参与:Algorand,Dfinity,VBFT

Table 1: 主流共识算法比较

从上述的分类过程中,我们可以看出当前区块链共识算法在性能、扩展性、去中心化等方向上的演进过程。

在 Bitcoin 创建了区块链技术时,创建了 PoW 共识算法,通过计算哈希难题和最长链规则,实现去中心化的共识算法。随着 Bitcoin 网络规模的增大,后续区块在网络中传播延迟的增加,基于最长链规则造成了大量伪分叉,极大的浪费了网络中的算力和 PoW 共识算法的性能。

针对于伪分叉的问题,区块链社区后续提出了通过 DAG 方式扩展 PoW 共识算法,比如 PHANTOM,Conflux 等。但是针对于 PoW 的算力浪费的问题,区块链社区后续更多转向了基于 PoS 的共识算法。

Ethereum 也计划逐渐减少 PoW 激励,直至最终完全取消对 PoW 的共识激励,完成到 PoS 共识算法的切换。同时,也有大多数新兴区块链平台都采用了 PoS 的共识方式,其中最著名为 EOS 的 DPoS 共识算法。

与此同时,随着区块链应用的增加,区块链共识算法的扩展性问题也日益凸显。图灵奖获得者 Micali 教授提出了 Algorand 算法,提出基于 VRF 随机选择部分节点参与共识的方式,通过 BFT 的方式极大降低了共识算法的消息复杂度,在保证去中心化安全性的同时实现共识算法的可扩展性。

在此基础之上,VBFT 等共识算法增加了基于 PoS 治理机制,并基于此解决了随机节点选择的抽样陷阱问题,在保证算法扩展性的同时实现优秀的终局性性能。

混合共识算法也值得介绍,由于单一共识算法由于其本身具有的局限性,例如 PoW 共识速度偏慢等,区块链研究者尝试将两种或者多种共识算法融合起来,取长补短,来达到更好的共识特性。一般来说,混合共识有 PoW+PoS,PoW+BFT 以及 PoS+BFT 等种类。可以看到新一代的共识算法,比如 Algorand,DFINITY, BUMO 的 BU Firework 以及 Ontology 的 VBFT,都属于混合共识算法。共识算法的发展趋势

总体来看,目前主流共识算法逐渐由 PoW 转向 PoS 共识算法,并且采用 VRF 随机选择节点的方式实现算法的扩展性,即使 Ethereum 后续的宁静版本,也将是基于 PoS 的共识算法,并在其信标链中实现 VRF 随机选择验证者节点。另外,Avalanche 共识算法也是采用随机选择节点的方式实现区块链共识算法的扩展性,不过目前还没有上线的区块链采用此共识算法。

随着区块链社区对区块链共识算法的研究,技术社区已经发现在 Internet 规模的网络中可达到的性能上限不仅取决于共识算法的性能参数,更取决于在此规模的网络中完成消息传播的时间延迟等物理上限。因此,主流区块链的研究团队都将下一步区块链网络性能扩展方向投向了分片技术、状态通道和二层网络等方向。

展开阅读全文

Polkadot共识原理及其是怎样与Substrate交互的

全文共 2911 字

+ 加入清单

区块链节点使用共识引擎在区块链状态上达成统一。本文介绍了区块链系统中共识的基本原理,共识如何与Substrate框架中的 runtime交互,以及框架中可用的共识引擎。

状态机和冲突

区块链 runtime 是一个状态机 [1]。它有一些内部状态和状态转换功能,允许它从当前状态转换到未来状态。在大多数 runtime 中,有些状态具有到多个未来状态的有效转换,但必须选择一个转换。

区块链必须在以下几方面达成一致:

一些初始状态,叫做「创世」

一系列的状态转换,每个都称为「区块」

最终(当前)状态

为了对转换后的结果状态达成一致,区块链的状态转换功能 [2] 中的所有操作都必须是确定性的。

冲突排除

在中心化系统中,中心化的权限通过按照他们看到的顺序记录状态转换,在相互排斥的备选方案中进行选择,并在发生冲突时选择竞争备选方案中的第一个。在去中心化系统中,节点将看到不同顺序的交易,因此它们必须使用更精细的方法来排除交易。更复杂的是,区块链网络力求容错,这意味着即使某些参与者不遵守规则,系统也应继续提供共识的数据。

区块链将交易批处理成区块,并有一些方法来选择哪个参与者有权提交区块。例如,在 PoW 链中,首先找到有效工作证明的节点有权向链提交块。

Substrate 提供多种区块构造算法,还允许你创建自己的:

Aura (Round Robin)

BABE (基于插槽)

PoW

分叉选择的规则

作为一个基元,区块包含一个区块头和一批外部对象 [3]。区块头必须包含对其父块的引用,以便可以跟踪链的起源。当两个区块引用同一父块时,会发生分叉。必须解决分叉,以便只存在一个规范链。

分叉选择规则是一种算法,它获取一个区块链并选择「最佳」链,从而选择应该扩展的链。Substrate 通过SelectChain展现了这个概念。

Substrate 允许你编写一个自定义的分叉选择规则,或使用一个现成的。例如:最长链规则

最长链规则简单地说,最好的链就是最长的链。Substrate 用LongestChain结构提供这个链选择规则。GRANDPA 用最长链规则进行投票。GHOST 规则

GHOST 规则就是,从创世块开始,通过递归地选择在其上构建块最多的分支来解决每个分叉。

区块生产

区块链网络中的某些节点能够生成新的区块,这一过程称为 authoring。具体哪些节点可以编写区块取决于你使用的共识引擎。在一个中心化的网络中,一个节点就可以编写所有的区块,而在完全无权限的网络中,算法必须在每个高度选择区块的生产者。PoW

在像比特币这样的 PoW 系统中,任何节点都可以在任何时候生成一个块,只要它解决了计算密集的问题。解决这个问题需要 CPU 时间,因此矿工只能根据计算资源的比例生成块。

Substrate 提供了一个 PoW 块生产引擎。插槽

基于插槽的共识算法必须有一组已知的验证人,这些验证人可以生成块。时间被分配到不同的插槽中,在每个插槽中只有一些验证人可以产生块。在每个插槽中,验证人可以编写块的细节因引擎而异。Substrate 提供 Aura 和 Babe,这两个都是基于插槽的区块生产引擎。

最终性

任何系统中的用户都想知道他们的交易何时完成,区块链也不例外。在一些传统的系统中,最终性发生在收据被移交或文件被签署时。

使用到目前为止描述的区块生产方案和分叉选择规则,交易永远不会完全完成。总有一个机会,一个较长(或较重)的链将出现,并恢复你的交易。然而,在一个特定的块上构建的块越多,它被还原的可能性就越小。这样,块生产和适当的分叉选择规则提供了概率的最终性。

当需要确定的最终性时,可以向区块链的逻辑中添加一个终结性小工具。一个固定权限集的成员铸造最终性的投票,当对某个区块投了足够的票时,该区块被视为最终的。在大多数系统中,这个阈值是 2/3。如果没有外部协调(如硬分叉),由此类小工具完成的块将无法恢复。

一些共识系统将出块和最终性联系在一起,例如,最终性是出块过程的一部分,在块 N 完成之前,不能生成新的块 N+1。然而,Substrate 分离了这两个过程,并可以单独使用任何具有概率终结性的出块引擎,或者将其与最终性小工具耦合以获得确定性的最终性。

在使用最终性小工具的系统中,必须修改分叉选择规则以考虑最终性游戏的结果。例如,节点将选择包含最近完成的块的最长链,而不是选择最长链的周期。

Substrate 中的共识

Substrate 框架附带了几个共识引擎,这些引擎提供了块生产或最终性。本文简要概述了 Substrate 本身自带的产品。欢迎开发者提供自己的定制共识算法。Aura

Aura[4] 提供基于插槽的块生产机制。在 Aura 中,一个已知的权限集轮流出块。BABE

BABE[5] 是通过一组已知验证人的基于插槽的块生产共识。在这些方面它类似于 Aura。与 Aura 不同,插槽分配基于可验证随机函数(VRF)的评估。为每个验证人分配一个 epoch 的 weight。这个 epoch 被分成多个插槽,验证人在每个插槽计算它的 VRF。对于验证人的 VRF 输出低于其 weight 的每个插槽,允许生成一个块。

因为多个验证人可能会在同一个插槽中产生一个块,所以分叉在 BABE 中比在 Aura 中更常见,即使在良好的网络条件下也很常见。

当在给定的插槽内没有区块的生产者时,Substrate 的 BABE 实现也有一个后备机制。这些 「次要」 插槽分配允许 BABE 获得恒定的区块时间。PoW

PoW 块的生产不是基于插槽的,也不需要已知的权限集。在 PoW 中,任何人都可以在任何时候生成一个块,只要他们能够解决一个具有计算挑战性的问题(通常是找出哈希原像)。这个问题的难度可以调整为提供一个统计目标块时间。GRANDPA

GRANDPA[6] 提供区块的最终性。它有一个像 BABE 一样的已知 weight 的权限集。然而,GRANDPA 并不生产块,它只听取由生产引擎(比如上面三种)生成的块的「八卦」。GRANDPA 验证人在链上投票,而不是在区块上投票,也就是说,他们投票给一个他们认为「最好」的区块,并且他们的投票可以传递地应用到之前的所有区块。一旦超过三分之二的 GRANDPA 权限者投票支持某一特定区块,它就被认为是最终的。与 Runtime 协调

最简单的静态共识算法完全在 runtime 之外工作,正如我们目前所描述的那样。然而,许多共识游戏通过添加需要与 runtime 协调的功能而变得更加强大。例如,包括 PoW 中的可调难度、权威证明中的权限轮换以及 PoS 网络中的基于 stake 的权重。

为了适应这些共识特征,Substrate 有一个 DigestItem 的概念,一个从节点的外部(共识所在的地方)传递到 runtime 的消息,反之亦然。

了解更多

因为 BABE 和 GRANDPA 都在波卡网络中使用,Web3 基金会提供了研究级别的算法演示。

BABE Research[7]

GRANDPA Research[8]

并非所有的共识协议都定义了一个单一的规范链。当具有相同父块的两个块没有冲突的状态更改时,一些协议验证有向无环图 [11](DAG)。

展开阅读全文

“韭菜的共识也可以是共识” 莱特币对比特币来说有什么价值?

全文共 1032 字

+ 加入清单

比特币是去中心化数字货币的典型,是区块链应用的关键应用领域之一,具有去中心化、总产量有限、买卖安全性、信息公示的超前时期特征。比特币取代信用货币的较大阻碍更是去中心化的特点,它挑战了当今以国家信用为基础的全世界货币发行体制和核心理念,在我国政府部门对虚拟货币交易主题活动的管控逐渐趋紧。在了解到数字货币自身的风险性之后,人们不可以否认区块链应用的创新能力和发展前景。

如今讨论的是数字货币离真实的落地式还十分漫长,因此人们从一个独特视角来讨论,那就是莱特币对于比特币的价值

2018年是莱特币最惨的一年。

2017年末,莱特币随着大盘涨至369美元最高点,随后一路下跌到年末的22美元。李启威在巅峰时刻三次高位清仓莱特币,也因此获得了“逃顶之王”的称号。

接踵而来的是长达一年的质疑:莱特币开发缓慢,编码升级频率低。各种各样的山寨币问世,莱特币实际需求减少。

转机发生在2019年。包含减半和引入MimbleWimble隐私协议等利好在内,莱特币的币价从22美元开始飙升,最高触到122美元高位,如今则一直停滞在106美元左右,领先了一众主流币,上演了一次绝地大反击,变成群众关心的重点。这也体现出加密货币欠缺现金流量和实体线产业链支撑点,价值不确立,投机性强。价格因素成为了吸引群众的关键要素。

莱特币圆餐桌社区论坛副主席PZ称莱特币作用特点不凸出,但它历经了8年磨练,安全系数很好。实际上,没有社区的新项目是不易发展的,高涨是更大共识的反映。而共识背后能够分解为技术性、安全性、平稳、要求等。相比而言,创造了POS的PPC消退了,很大程度上是社区欠缺团队的凝聚力。COINBIG交易中心CEO一针见血:“共识度提高,接受程度广,那它就是有价值的。”

李笑来说:“韭菜的共识也可以是共识。”在加密货币发展的初期,对于一种加密货币来说,价格和社区在某种意义上是看它能不能穿越牛市。实质上财富效应决策了加密货币是不是具备“共识”。

莱特币相对于比特币的差别一般被觉得是它的优点,证实了莱特币的互联网价值。

优点包括:

(1)提升了货运量和减少了确定的时间

(2)低价买卖

(3)热衷于检测和实行新作用

(4)与比特币的兼容模式及其运用比特币产品研发結果的工作能力。

莱特币在数据加密生态体系中的经久不衰通常被误以为是其价值的基础标示。莱特币被看作虚拟货币界的白银,就如同虚拟货币金子是比特币一样,做为价值储存来看,也被觉得是比特币的测试网和最好的数据加密互换媒体,其互联网总市值约35亿美元。

展开阅读全文

一文了解Avalanche共识:设计和演变

全文共 5495 字

+ 加入清单

在 2018 年一个自称为火箭队的匿名团队提出了Avalanche共识协议。本篇文章描述了这个协议看起来魔幻(但实际真实)的特性,并将其与其他共识协议做对比,描述使其独特的技术基础。

什么是共识?

共识是一系列独立的投票者(常被称为“验证者”)对一个决策达成一致的过程。初步来看,这个过程听起来很直接:根据一系列规则搞清楚一组数据是否是一致的,网络的其他成员是否对这个数据认可。

像 Avalanche 这样的共识协议需要在网络中所有的节点达成一致,保障整个网络对这个数据有一个同步的视图(view)。强健的共识协议即使在一些验证者出问题或者是恶意的情况下仍然能够运行。

在这个过程的最后,所有节点对于所需要做的决策流程都会共享相同的数据,这被称为“状态”(State)。如果任何一个节点中有冲突的交易,和余下的整个网络都不一致,那么这个被称为“安全违规”。这意味着至少有一个节点和网络中其他节点不一致的。共识协议的目的就是减少网络中“安全违规”,最佳的情况就是让这样的冲突变得几乎不可能。

这个概念听起来是不是很简单?但是共识协议的话题是计算机科学领域其中一个最难的领域之一。

共识机制的历史

在分布式系统超过 45 年的历史中,只有三种共识协议能解决问题:经典共识协议(Classical),中本聪共识(Nakamoto)以及 Avalanche。我们先来讨论一下这三种共识来描述为什么会分成这样的三类,每一类和其他有什么不同,有什么样的优劣势。经典共识协议

经典共识协议,比如实用拜占庭容错(PBFT)和 HotStuff,都是基于所有对所有投票的(All-to-all voting)。这意味着一个验证者需要监听组成网络一系列节点来进行决策。此外,他们是“1 的概率”(P = 1)的协议,这意味着网络对于某一个决策需要有完全的确定性。在节点从组成系统的节点的必要部分接收到响应之后,交易立即完成。

在开放的、和互联网类似的环境中,经典共识协议就会遇到两个主要的问题。第一个问题是这些协议非常脆弱:他们的正确性极大程度依赖于系统中所有的节点了解其他的节点的身份。这样的结果就是在维持系统成员的过程中若出现了任何问题或者网络中成员的视图有不一样,就会导致安全违规。进一步来说,任何攻击者只需要控制网络的 33% 就能够实现一个双花攻击。

第二点,这些系统是缓慢的,并且不能在节点数量增加的时候扩展。Facebook 的 Libra 使用的 HotStuff (由我们的首席协议架构师 Ted Yin设计)已经是扩展性最好的经典共识协议了,但也只能在保障不牺牲性能的前提下支持大约 100 个验证者。

这两个问题让经典共识协议无法适用于开放的、无需许可的网络,毕竟对于这样的网络节点是需要随意加入和退出的,也随时会做出对网络不利的事情。中本聪共识(Nakamoto Consensus)

经典共识无法满足大规模的需求,在经过十年之后,实用拜占庭若错是一个不错的发明。之后,突然出现了中本聪,扔出了比特币的白皮书,向世界展示创造一个全球范围内有效的抗敌共识协议的可能性。中本聪重新定义了共识问题并让正确性定义具有概率性来实现这个目标。

使用基于中本聪共识的一些,无需等待网络中所有节点之间的绝对确定性,而是权衡了难以区别的可能性,来实现更好的可扩展性。在经典协议必须以1(P = 1)的概率达成共识的情况下,中本聪以1减去一些很小的错误机会(P = 1 —ε)的概率达成共识。在Nakamoto中,随着产生更多的区块,该误差值将随着时间的流逝而越来越小。区块越多,被重组的机会就成倍下降。

毫无疑问,中本聪共识作为健壮的全局协议是一项突破,但是它确实有缺点。它速度慢,消耗大量能量,并且需要很长时间进行区块确认才能对交易的最终结果足够确定。对于那些不经常移动或用作储备的资产来说,这些缺点是可以接受的,但对于点对点支付和去中心化金融等应用来说,它们却负担太大。

Avalanche

中本聪共识唤醒了整个世界,大家开始希望有一个强健、去中心化的协议,就如同中本聪共识一样,但希望有经典共识的所有优点:规模、速度、快速确认和能源效率。

之后在 2018 年 5 月,自称为火箭队的匿名团队提出了第三类共识协议,他们称为“Avalanche”。它同时具备了经典共识协议和能够实现大规模去中心化的中本聪共识协议的优势,事实证明,经典共识协议可以泛化为概率性行为,从而获得巨大的性能提升。

我们的文章会高度概括这个共识,如果你希望进一步了解详细内容可以查看白皮书。

Avalanche 共识是什么?

Avalanche 共识,和比特币的中本聪共识一样是一个概率性共识。就像中本聪共识在为共识的概率性牺牲了性能一样,Avalanche 也接受错误发生的可能性(更好的是,像 Avalanche 的所有部分一样,可以由验证器在自定义子网上配置)。

Avalanche 上出错的概率太小了,因此出现安全违规的可能性比找到 SHA-256 哈希冲撞的概率还要小。从更广的角度来看,在未来一百年里面有小行星和地球相撞的可能性要比在未来一千年中通过网络计算每秒 100 万个哈希并出现 SHA-256 哈希碰撞高出数十个数量级。真的非常安全。

Avalanche 也能够立刻对所有交易进行确认,而不需要等待交易确认。Avalanche 能实现这样的特性的原因在于它是经典共识的泛化,因此原生就有经典共识的优势。事实上,Avalanche 平均来看能够在一秒内完成交易确认。相比于现有的去中心化网络,这是非常快的。

作为具有概率模型的经典共识协议的泛化,Avalanche 也能够同时实现用 CPU 运作和高吞吐量的特性。Avalanche 不需要特殊的或者昂贵的硬件设备来实现高吞吐量(超过每秒 4500 笔交易)。这意味着你手上的电脑(甚至在你仓库里面吃灰的设备)也完全能够运行 Avalanche 的节点。这些特性加起来让 Avalanche 非常的绿色和经济。

不止如此,和中本聪共识一样,Avalanche 对网络参与者没有限制,而经典共识则在网络参与者数量增加的时候牺牲性能指数级下降。想要实现大规模落地应用、让去中心化应用走向大众,Avalanche 是绝无仅有的。

Avalanche 并不想中本聪共识那样依靠工作量证明。像比特币这样的协议,工作量证明对于区块构造和网络安全都非常重要。Avalanche 可以使用过重了证明但是采用了权益证明来让用户对交易进行投票的时候抵押一些代币参与共识。

最后,与基于中本聪共识的比特币和其他系统需要不断运行的不同,Avalanche 的节点仅在有工作要做时才会运作。没有进行挖矿或轮询来获取新块的操作。交易会广播到更广泛的网络,然后网络会听到它们并开始投票。如果没有要投票的交易,则网络中的节点将不执行任何操作,除非监听到新的交易。简而言之,Avalanche 所做的工作更聪明,而不是更努力。

高级说明:Avalanche 最重要的属性确实使它与现有的经典共识协议区别开来,它就像中本聪共识一样,可以在网络中没有已知参与者上限的情况下运行。可以使用每个节点的O(1)(常数)个消息来确定 Avalanche 中的决策。将此与使用O(n²)消息达成共识的经典协议进行比较,经典共识协议的网络扩展问题则在 Avalanche 中消失了。Avalanche 共识如何运作?

首先我们来谈谈验证者在 Avalanche 共识中的作用。Avalanche 是一个投票协议,验证者监听网络中的交易,当他们听到交易的时候,他们投票来决定一笔交易是否被接受。验证者对看起来没问题的交易投票“接受”,如果交易出现冲突则“拒绝”。之后所有节点的投票结果进行贾总。如果一个验证者看到一个决策,做出一个初始决策,然后与网络的其余部分进行写作,来确定网络是否同意这个决定。这和经典共识协议中的期望相同,但是在 Avalanche 中,这种情况发生在验证者数量多地多的情况中。

Avalanche 的投票过程让他变得与众不同。每一个验证者都和决策者完全独立。没有 leader 的角色。然而每个节点都用完全相同的流程来决定一个交易是否是有效的,以及与网络中其他部分达成共识的可能性。一旦他们看到网络中有一个交易大概率会达成共识,节点就会锁定他们的投票并且接受这个交易。

用于确定是否首选交易以及网络的其余部分是否同意此决定的过程称为“重复随机子采样”。

从高层次上讲,这意味着验证者会随机选择其他验证者来询问他们喜欢什么。它会在新的随机选择的节点上一遍又一遍地执行此操作,直到建立足够的数据来确定其正确的可能性如此之高,以至于你可能会认为这不可能是错误的。

详细一点说,他是这样运作的:

一个验证者收到了很多发布的交易,他需要决定哪一个交易被“接受”

节点客户端会运行一个虚拟机(VM),虚拟机会提供这个交易是否能够被接受的信息。

验证者选择一组不冲突的交易,将这些交易标记,试图让网络接受这些交易。

任何询问这个验证者的节点都会收到这个节点最新标记的交易信息,也就是这个节点的决策。

这个验证者节点从整个验证者列表里面(这个选择可能是根据质押数量的)选择 K 个节点,询问他们接受的交易是哪些。

每一个被询问的节点都提供他们选择接受的交易的信息,验证者的投票结果不断被更新,并且逐渐确定对哪些交易被接受。

期间,其他节点也会从验证者集中随机选择其他验证者,并询问他们选择的交易,并更新自己的决策。

这件事情会在至少 M 轮里面不断持续,或者直到这些交易已经足够确定,达到了一定的可信度。否则还会继续进行,每个节点随机选择 K 个其他节点做问询。

一旦达到确定的门槛,交易就被锁定并且可以认为是最终确认了。

如果“被接受”,这个交易就会被送到虚拟机中被处理。如果被拒绝,那么这个交易就从共识过程中被移除。

匿名团队火箭队的白皮书显示,通过设定正确的参数设置,使用 Avalanche 共识的过程可以有一个参数化的概率,网络将做出相同的决策。概率的确定性

科学家需要确定其模型的确定性。在描述系统或流程时可以说“这绝对是事实,毫无疑问”。经典共识协议致力于完成这样的田园风格的模型,但是在现实世界中没有什么是确定的。在经典共识协议中假设有 100 个节点,有 33 % 的节点同时脱机或者某个人通过社交接管了其中的 33 台,并试图将其意志强加到网络上。还有一种可能性,就好像房间里的氧气分子突然全部跑到房间的一侧,然后另一侧的人就窒息了,这个理论上来讲也不是非零的可能性。但是概率太低了,没有人会担心。

中本聪共识不断向世界证明概率性确定是可以接受的,只要安全性上失败的可能性就如同天文数字那样遥远,现在比特币让全世界都认为这是可以接受的。这相比于运营商级SLA的五个九(99.999%)要好多了。

通过接受相同的微小误差范围,Avalanche 在具有正确参数的模型中每 20,000 年会有一次误差。互联网基础设施的老化可能会导致大规模的网络终端。正是这一关键的见解帮助火箭队为新的共识机制铺平了道路。

Avalanche 所带来的可扩展、去中心化的未来

经典拜占庭容错协议展示了在即使有恶意参与方的情况下网络还是能够达成共识的可能性。中本聪共识展示了概率性协议在实际应用中也是安全的,并且能够提供前所未有的去中心化和强健性。

Avalanche 吸收了上述协议的启发,并将他们的优势集合在一个新的协议中,你可以同时拥有中本聪共识和经典共识协议的优势,而无需面临任何一者的劣势。

通过让验证者随机选择其他验证者以询问他们的偏好,Avalanche 的参与者对网络中所有节点共享的正确决策有足够的置信度。有了足够的置信度,就可以立即最终决定。这个过程发生得如此之快,以至于 Avalanche 的能力过程和主要的支付系统都可以与主流的支付系统相媲美。

(完)

关于 Avalanche

Avalanche 是由康奈尔大学教授、IC3 联合创始人 Emin Gün Sirer、计算机学者 Kevin Sekniqi Facebook Libra 协议 HotStuff 共识第一作者 Ted Yin 共同创立。AVA Labs 主导开发的 Avalanche 区块链平台基于革命性的共识算法——Avalanche 构建的数字支付和计算平台。该共识使分布式账本可以保证去中心化、高并发处理和交易的快速确认,同时实现历史记录删减和链上治理。

Emin Gün Sirer 教授是密码学界的先驱 + 大神,在分布式系统领域有大量的研究成果,他所开发的虚拟货币系统 Karma 是首个采用 PoW 机制的货币系统,比中本聪发表的比特币白皮书早了七年。

Avalanche 于 2019 年获得 Andreessen Horowitz、Polychain、Coinbase 前 CTO Balaji Srinivasan、Metastable、 Initialized 和 Abstract Ventures 的创始人 Ramtin Naimi 等机构和投资人的投资,于 2020 年 3 月开源代码。Avalanche 于 2020 年 5 月完成 1200 万美元私募轮融资,由 Galaxy Digital、比特大陆,Initialized Capital,NGC Ventures,Dragongly Capital 五家机构领投,Continue Capital、Fundamental Labs、SNZ、IOSG Venture、优币等机构和个人也参与了本次投资。Avalanche 预计于今年八月上线主网。

展开阅读全文

一文带你读懂4种共识机制

全文共 6039 字

+ 加入清单

区块链作为一种按时间顺序存储数据的数据结构,可支持不同的共识机制。共识机制是区块链技术的重要组件。区块链共识机制的目标是使所有的诚实节点保存一致的区块链视图,同时满足两个性质:即一致性和有效性。

区块链的自信任主要体现于分布于区块链中的用户无须信任交易的另一方或任一个中心化的机构,只需要信任区块链协议即可实现交易,而这种自信任的前提是区块链的共识机制(consensus)。共识机制可确保系统中的每一个节点中都会自发、诚实地遵守协议中预先设定的规则,判断每一笔记录的真实性,最终将判断为真的记录记入区块链之中。

共识机制是区块链技术的核心, 在基本层面上决定了区块链系统的安全性、可扩展性和分布式特性。

4种共识机制

我们现在将通过一系列共识机制来解决拜占庭将军问题。

工作量证明

比特币的创造者中本聪(Satoshi Nakamoto)通过发明工作量证明协议而绕过了这个问题。首先,让我们看一下在拜占庭将军问题下它是如何工作的。

假设左侧的军队希望向右侧的军队发送一条名为“星期一进攻”的消息,他们将遵循某些步骤。

首先,他们将在原始文本后加上“随机数”。随机数可以是任何随机的十六进制值。之后,他们对带有随机数的文本进行哈希处理并查看结果。假设军队决定只共享消息,这些消息经过哈希处理后得出以5个“0”开头的结果。

如果满足哈希条件,它们将向消息发送者将消息的哈希值发送给信使。如果没有,那么他们将继续随机更改随机数的值,直到获得所需的结果。此操作非常繁琐且耗时,并且需要大量的计算能力。

如果使者确实被城市俘获,并且消息被篡改,则根据哈希函数属性,哈希值本身将发生巨大变化。如果在右侧的将军看到散列消息不是以所需的“0”开头,那么他们可以简单地取消进攻。

但是,这可能存在漏洞。

没有哈希函数是100%无冲突的。那么,如果城堡收到该消息,对其进行篡改,然后相应地更改随机数,直到他们获得所需的结果(具有所需的“0”),该怎么办?这将非常耗时,但仍然有可能。为了解决这个问题,将军们将使用大量数字资源。

假设不是左侧一位将军向右侧一位将军发送消息,而是左侧三位将军共同向右侧所有将军发送一条消息。为了做到这一点,他们可以制作自己的消息,然后对累积的消息进行哈希处理,将随机数附加到所得的哈希中,再次对其进行哈希处理。这次他们想要一条以六个“0”开头的消息。

显然,这将是非常耗时的,但是这一次,如果使者确实被城堡抓住,那么他们需要花费大量时间来篡改累积消息并为哈希找到相应的随机数,甚至可能需要花费数年时间。因此,如果将军派遣了多个使者,而不是一个使者,那么当城堡在计算过程中途时他们将受到攻击并被摧毁。

右侧的将军们很容易做到。他们所要做的就是在消息中附加将要提供给他们的正确随机数,对它们进行哈希处理,然后查看哈希值是否匹配。散列字符串非常容易,这本质上就是工作量证明背后的过程。

为适当的哈希目标查找现时的过程应该非常困难且耗时。但是,检查结果以查看是否没有篡改的过程应该非常简单。因此,我们要总结工作量证明协议如何与区块链一起工作。

- 矿工解决密码难题以“挖掘”一个区块,以便添加到区块链中。此过程需要大量的能量和计算量。密码难题的设计方式使它变得很费力,并给系统增加了负担。

- 当矿工解决密码难题时,他们将其区块提交给网络进行验证。验证区块是否属于链是一个非常简单的过程。

在解决拜占庭将军问题时,工作量证明机制无疑回答了很多问题,但工作量证明仍存在一些问题:

- 首先,工作量证明是一个极其低效的过程,因为它消耗了大量的能量和时间;

- 其次,能够负担得起更快、更强大的ASICs的人员和组织通常比其他人和组织具有更好的挖掘机会;

- 最后,比特币的分散程度不如预期。

让我们看一下哈希率分布图:

我们发现,仅5个采矿池就分布了约65%的哈希率!

从理论上讲,这些大型矿池可以相互协作,并在比特币网络上发起51%攻击的交易。

使用工作量证明协议的典型公链:比特币区块链

权益证明

以太坊即将计划从工作量证明(POW)转向权益证明(POS)。权益证明将使整个采矿过程变为虚拟,并用验证器代替采矿者。这是该过程的工作方式:

- 验证者必须锁定部分数字货币作为权益证明。

- 之后,他们将开始验证块。即:当他们发现自己认为可以添加到链中的区块时,将通过在其上下注来对其进行验证。

- 如果添加了区块,则验证者将获得与其下注成比例的奖励。

事实证明,POS协议比POW更加资源友好。在POW中,可能需要浪费大量资源才能与该协议一起使用,从根本上来说,这是为了浪费资源而浪费的资源。也是权益证明的最大障碍。

以太坊开发人员最终计划采用权益证明。但是,在这样做之前,他们必须解决权益证明(POS)的最大缺陷之一。

我们来考虑一下这种情况:

假设我们遇到如上述的情况:有一条主蓝链和一条红链,它们从主链本身分叉出来。那么有什么方法可以阻止恶意矿工在红色区块上进行挖掘并强制使用硬分叉?

在工作量证明(POW)系统中,可以减轻这种风险。

假设恶意矿工爱丽丝(Alice)想在红色链条上开采。即使她将所有的哈希算力都献给了它,也不会再有其他矿工加入她的新链条中。其他人仍将继续在蓝链上进行开采,因为在较长的链上进行开采更有利可图且无风险。

但请记住,POW在资源方面非常昂贵。

对于矿工而言,在一块将要被网络拒绝的区块上浪费如此多的资源是没有意义的。因此,由于攻击者必须浪费大量金钱,因此在工作量证明系统中避免了硬分叉。

但是,使用POS时情况看起来有些不同。

如果您是验证人,那么您只需将钱放入红色链和蓝色链中,根本不用担心会受到打击。无论发生什么情况,尽管您的行为可能多么恶意,但您始终会获胜,不会有任何损失。

这就是所谓的“无利害关系”问题。

为了整合POS共识系统,加密货币需要解决这个问题,以太坊将通过调整其Casper协议以一种非常有趣的方式来实现这一目标。

Casper是以太坊选择使用的POS协议。尽管整个团队都在忙于创建它,但弗拉德·扎姆菲尔(Vlad Zamfir)通常被认为是“卡斯珀面孔”。

那么,Casper协议与其他权益证明协议有何不同?卡斯珀实施一种程序可以惩罚所有恶意因素。这就是Casper协议下的POS工作方式:

- 首先,验证者将质押部分以太币作为权益证明。

- 之后,他们将开始验证区块。即:当他们发现自己认为可以添加到链中的区块时,将通过在其上下注来对其进行验证。

- 如果添加了区块,则验证者将获得与其下注成比例的奖励。

- 但是,如果验证者以恶意的方式行事并且试图做“无利害关系”,他们将立即受到谴责,其质押的所有以太币将被削减。

正因为Casper协议被设计为在不信任的系统中工作,并且具有更高的拜占庭容错能力。任何以恶意/拜占庭方式行事的人都会立即受到惩罚,被砍掉部分权益。这与大多数其他POS协议不同。恶意因素会有所损失,因此它不可能有任何危险。如果以太坊计划扩大规模,那么实施Casper协议和权益证明至关重要。

使用权益证明协议的典型代表:以太坊区块链

委托权益证明

现在,我们来介绍一种有趣的权益证明形式,称为DPOS或委托权益证明。EOS正在使用这种共识机制来扩展到每秒数百万个事务。EOS区块链上任何持有令牌的人都可以通过持续投票系统选择区块生产者。任何人都可以参加区块生产者选举,他们将有机会生产相对于其他所有生产者的总票数成比例的区块。

它是如何工作的?

- 每轮开始时,选择21个区块生产者。系统自动选择前20名,而选择第21名则与他们相对于其他生产者的票数成正比。

- 然后,使用区块时间得出的伪随机数对生产者进行混洗。这样做是为了确保与所有其他生产者的平衡连接。

- 为确保正常的区块生产并保持区块时间为3秒,生产者因未参与而受到惩罚,将其从考虑范围中删除。生产者必须每24小时至少生产一个块。

DPOS系统不会遇到麻烦,因为生产者必须竞争合作,而不是寻找区块。如果发生分叉,则共识会自动切换到最长链。

如何确认DPOS中的交易?

DPOS区块链通常具有100%的区块生产者参与。通常在广播1.5秒钟之内就有99.9%的节点数确认交易。为了保证交易的绝对有效性,节点仅需等待15/21(即2/3多数)生产者达成共识。

那么,万一因疏忽或恶意企图而导致分叉,将会发生什么呢?

默认情况下,所有节点都不会切换到不包含15/21生产者未最终确定的任何区块的分支。无论链长如何,这都是正确的。每个区块都必须获得15/21批准才能被视为链的一部分。

由于区块创建时间短,因此可以在9秒内警告节点,它们是位于主链还是次链中,这样的原因很简单。请记住,每个块之间经过的平均时间为3秒。

- 如果节点错过2个连续的区块,则它们有95%的机会处于少数分支。

- 如果一个节点错过了3个区块,则它们有99%的机会位于少数链上。

什么是TAPOS?

作为权益证明或TAPOS的交易是EOS软件的功能。系统中的每个事务都必须具有最近区块头的哈希值。这将执行以下操作:

- 防止不同链上的交易重播。

- 向网络发送信号,告知用户及其利益在特定分支上。

这样可以防止验证者对其他链进行恶意操作,而且将拥有一个快速有效的权益证明协议。但这有什么陷阱吗?根据以太坊联合创始人Vitalik Buterin介绍,DPOS系统无法进行协调博弈。

什么是协调博弈论?

考虑以下矩阵:

在此矩阵中,有两个纳什均衡:(A,A)和(B,B),偏离任何一种状态都不会使他们受益。博弈论的核心观点是,如何说服人们从(A,A)转到(B,B)?如果只涉及一小群人,则相对简单,只需通过电话或电子邮件进行协调。但是,当我们涉及一大群人时,这种情况发生了变化。

囚徒困境和协调问题之间的根本区别在于,在囚徒困境中,两个参与者都必须选择(B,B),因为尽管(A,A)在道德上是一个更好的解决方案,但这是收益最大的选择。在协调问题中,这与道德或收益无关,而与一个人从一种状态过渡到另一种状态的动机有关。为什么一大群人应该改变他们做事的方式?

当小组中只有少数改变状态而多数没有改变时,协调博弈就会失败,反之,当小组中的大多数改变状态时,协调博弈就会成功。让我们来看一个例子。

假设我们要将语言更改为基于符号的语言。例如:原始陈述:“给我您的电话号码?”新陈述:“#?”

如果您仅使用这种语言说话,那将是失败的,因为大多数人不会理解您在说什么,并且您会被谈话所回避,也就是您的收益非常低,并且您没有改变的动力。

但是,如果您的社群大多数人改用这种语言并仅使用它,则您将不得不更改语言,否则您将永远无法适应。现在,加入该组织的动机非常强烈。

DPOS系统可以利用协调博弈理论来弥补其缺点。在某些情况下,区块生产者可能会偏爱某些情况,而这种情况与其余节点不符。

假设主节点希望将链从状态A转换为状态B,需要帮助整个链与它们一起完成相同的转换可能是一项艰巨的任务,尤其是在其他节点与状态B相对的情况下。只有时间会证明EOS是否可以正确地集成DPOS。

使用委托权益证明协议的典型代表:EOS区块链

授权拜占庭容错算法

现在我们来谈谈NEO的共识机制选择。

想象有一个国家“ Blockgeeks”,这个国家有很多公民。这些公民中的每一个都会选出一个代表来代表他们并使他们高兴。这些代表的职责是通过法律,使公民感到高兴,如果他们不擅长自己的工作,则公民可以在下一次简单地投票给另一位代表。

那么,代表们如何通过法律?

一位代表被随机选为议长。议长研究公民的所有要求并制定法律。然后,他们计算这些法律的“幸福因子”,以查看该数字是否足以满足公民的需求。他们将其传递给代表们。然后,代表们分别检查议长的计算。如果议长的数字与代表们的数字相符,则表示同意;否则,则表示不赞成。66%的代表需要批准才能通过法律。如果没有被大多数人认可,则选择新的领导者,然后该过程再次开始。

让我们看下这种共识决策模式在区块链中的应用。

公民是拥有NEO令牌(又称普通节点)的人。代表是簿记节点。为了成为簿记节点,需要满足一定的条件:拥有专用设备、专用的互联网连接和一定数量的GAS(根据basiccrypto的文章,为1000)。

- “公民的需求”基本上是代币持有人进行的各种交易。

- “法律”是要添加到区区块链的当前区块。

- “幸福因子”是当前区块的哈希值。

现在,在两种情况下,其中一个参与者可能以恶意方式行事。让我们来看看:

案例1:议长是恶意的

在这种情况下,议长已向两个代表发送了恶意消息B,并向一个代表发送了准确消息。由于多数规则,可以轻松缓解这种情况。两位代表将看到他们的哈希值与议长的哈希值不匹配,而一位代表将看到他们的哈希值完美匹配。但是,三分之二的人会拒绝该提案,并且无法达成共识。此后议长将被废除,重选议长。

情况2:一名代表是恶意的

议长向所有代表发送了正确的消息,但是其中一位代表决定以恶意的方式行事,并声明他的数字与议长的数字不符。

但是,由于3位代表中有2位是非恶意的,因此他们将批准该法律,因为已达成66%的共识,该法律将获得通过。

可以看出,dBFT提供了一种非常有趣的共识机制形式。

使用授权拜占庭容错算法的典型代表:NEO区块链

总结

以上这些是在公链中使用最常见的4种共识机制。但是,还有更多的共识机制以提供选择。他们是:

- 能力证明机制 (proof of capacity)

- 消逝时间证明 (proof of elapsed time)

- 融入知识证明的工作量证明 (entangled proof of work and knowledge, EWoK)

- 融入知识证明的工作量证明 (entangled proof of work and knowledge, EWoK)

虽然工作量证明和权益证明无疑是最受欢迎的选择,但是时不时会有更新的共识机制出现。没有“完美”的共识机制,而且有可能永远不会出现,但未来的新公链往往是伴随新的共识协议而诞生的。

本期小结

区块链共识机制是区块链技术的核心, 未来的发展趋势主要有以下几点:

安全层面:设计并完善可证明安全的区块链共识机制,解决如POS机制面临的安全威胁; 将经典分布式一致性算法与区块链技术结合, 利用委员会实现强一致性, 解决委员会重配置的安全问题;

扩容层面:利用分片技术, 通过计算分片、通信分片和存储分片, 实现交易处理的可扩展性, 解决跨片交易问题; 利用 DAG 技术, 采用并行区块的架构, 使得同一时间内区块链能够容纳更多的交易;

启动层面:通过安全多方计算等密码技术在非可信环境下完成协议自启动, 解决区块链协议的初始化问题; 通过对区块链历史数据的合理裁剪, 使新加入节点能够快速获取当前区块链状态, 参与共识运行, 解决新加入节点的启动问题;

激励层面:设计合理可行的奖励和惩罚机制, 以理性用户作为出发点, 激励用户以诚实行为参与共识机制的运行和维护; 合理惩罚恶意用户, 同时给予举报者一定的奖励。

展开阅读全文

一文详解Polkadot的三种共识

全文共 4012 字

+ 加入清单

Polkadot共识主要有三种:NPOS, BABE, GRANDPA

接下来我们对这三种共识进行逐一的解释

NPOS

什么是NPOS共识

在Polkadot 中,中继链上的验证者需要分配到各个平行链,为它们提供区块链验证能力,是 Polkadot 共享安全性的一部分,因此中继链的验证者对于整个Polkadot多链系统的安全性至关重要。

如何公平安全地选举出中继链上的验证者也就成了保障整个系统共享安全性的第一步,是不可或缺的一步。

NPOS( Nominated Proof of Stake)共识算法就是用来选举出能让系统更安全,更高效的验证者集合的。和传统意义上的POS共识相比,NPOS算法结合了Polkadot链自身架构的一些特点,进行相应的优化。

下面看看NPOS是如何进行工作的。

在说明NPOS之前,我们需要先回顾一下Polkadot中重要的两种角色。

▲ 验证人

中继链的全节点,中继链会在验证人池中通过随机分组把验证人指定给不同的平行链。验证人会接受来自收集人打包的区块并进行有效性验证,然后结合共识算法对收集人提交的区块进行确认。

▲ 提名人

PolkaDOT中数字货币DOT的持有人,它会选择自己所信任的验证人进行DOT质押,然后分享验证人的收益。

Polkadot的选举模型是建立在这两种角色基础上的。要成为验证人,必须先成为验证人候选人参加选举的过程,而这个选举过程中的“选民”就是提名人。

在Polkadot的设计中,提名人数量在理论是可以不设置上限的,如果能够让更多的提名者参与到投票阶段,那么参与到选举的资金量也就越大,整个系统就更加的安全;而对于验证者来说,为了区块链的性能,不能太多(所有节点都能作为验证者的话,那就是比特币采用的模式了),验证者的数量由系统确定的固定值,这一点来说和POS共识是一致的。

选举模型

为了明确选举问题,Polkadot中将选举验证者集合的问题抽象为一个数学的选举问题:

▲ 问题:m 个选民对 n 个候选者的情况下,选出最终的 t 为当选者

(注:提名人可以有任意个,验证者是有限个)

问题的描述很简单,但是如何做到让系统更安全,会有不同的策略。Polkadot的设计哲学中,认为选举策略需要满足下面的“三大原则”:

Balance: 验证者在出块时候的比重相同,因此该策略在Stake分配需要尽量平均,保证网络的安全;

Support: 该策略需要让尽可能多的 Stake 资金参与进来。因为提名者只负责选投哪些候选者,但是对于的 Stake具体分配给多少到哪个验证者是没有决定权的,这部分是NPOS算法通过计算来决定的。这也是NPOS和普通的POS共识中很大的不同之处;

Fair representation: Stake 多的提名者选投的验证人更可能出现在验证者集合中。

基于上述的问题和要求,可以将该问题转化为下面的数学模型:输入:给定,其中是Nominator集合,是Validator候选者集合,是边的集合,表示提名者投了候选者一票。同时给定向量 ,表示各个提名者各自的Stake数量,是选出的最终验证者集合的大小。输出:给定解,其中是最终选定的Validator,大小为,是提名者分配多少 Stake 到最终的Validator。限制条件:

Balance: 给定,能够给出一个,使得最小

Support: 给定,能够给出一个,使得最大Fair representation: proportional justified representation(PJR)规则任意一个 ,都不会存在一个提名者的子集,导致出现下面的情况:

用较为通俗的话来说就是不允许出现:存在某些中的提名者的stake 超过了总的staking的的比重,并且他们支持的人选有交集的超过个,但是他们支持的Validator的数量入选却没有超过个。上述的问题在数学上就是一个最优化问题,很可惜这个选举在数学上已经被证明是 NP完全问题,并不能在多项式时间内给出最优解。所以Polkadot给出了自己的一套解决方案,来绕过这个难解问题。NPOS流程上述推导的数学模型中,由于是NP完全问题,也就是说给出最优解的计算时间复杂度是无法确定在多项式时间内的。Polkadot给出了一个相对来说可行的方案。不追求最优解,达到相对最优即可NP完全问题中给出可行解是很困难的,但是验证已有解是简单的,能在多项式时间内完全。所以验证可行解的部分放在链上进行。▲完整的流程如下:

在提名者给出自己的投票之后,每一个候选者都可以给出自己对于上述选举问题的一个可行解。

在上述这些可行解的集合中,利用链上的方案比较方案,按照之前的“三大原则”来比较这些方案,选取其中最优的方案最为最后验证人选举结果,这样就完成了一轮选举。

BABE

BABE的全称是Blind Assignment for Blockchain Extension,BABE是一个用来出块的引擎,类似于Ourobros Praos,一种PoS的协议。BABE算法是基于slots的。

在Polkadot中每一个slot差不多6秒长的时间。

每个slot时间段中BABE会选出一个leader来出块。

BABE中leader的选举是通过一个随机函数(VRF)来实现的,在每个slot阶段,每一个节点会通过运算VRF函数来获得一个数值,如果这个数值小于网络中预先规定好的阈值,那么节点就会认为自己就是这个时间段的leader,于是节点就开始出块了。

值得注意的是在上述的过程中,由于VRF函数是随机生成数字的,所以可能造成在某一slot中没有leader或者有多个节点算出自己的VRF值小于阈值进而产生多个leader的情况。我们依次分析两种情况:

当没有leader产生时,Polkadot就规定按照顺序来决定谁是leader,这个顺序是预先确定好的。

当出现多个leader的时候,Polkadot允许多个节点都提交区块,而最终区块的确认则由GRANDPA来决定。

GRANDPA

GRANDPA则是用来做区块确认的,在文章的第二部分我们有提到BABE将会对Polkadot的交易进行出块,那么这些出块最终就是由GRANDPA来确定的。

像其他PBFT的衍生算法一样,GRANDPA的时间复杂度也是O(n²)。但是Polkadot之所以采用GRANDPA是因为GRANDPA并不是每次只确认一个区块,它每一次都会确定好几个区块来做确认。

Idle (24 peers), best: #664257 (0x706c…76b7), finalized #664253 (0xe4ab…4d2a)Imported #664258 (0xee71…6321)Idle (24 peers), best: #664258 (0xee71…6321), finalized #664256 (0x809a…a5d8)

上面是Polkadot测试网络的一段日志,可以看到一次确认区块高度从664253到了664256,所以GRANDPA一次性确认了三个区块。这样的话跟一次性只确认一个相比,GRANDPA的效率要比其他PBFT的衍生算法要高出很多。

▲ 下面介绍一下GRANDPA的具体流程:

1. 一个主节点广播之前一轮确认后的区块高度;

2. 等待网络延迟以后,每个节点都广播他们认为的可以被确认的最高的区块(pre-vote);

3. 每个节点对步骤2接受到的区块集进行计算,算出他们认为的能够被确认的最高区块,并且将结果广播出去(pre-commit);

4. 当节点接收到足够的pre-commit的消息能够确认区块后就会形成commit的消息,一般认为大于2/3就可以被确认了。

上述就是GRANDPA确认区块的主要流程。

我们需要担心的是在步骤2的pre-vote过程中可能会有作恶的节点投票了两个区块并且广播出去,这样的话就有可能产生链的分叉行为。 Polkadot为了防止这种情况的发生使用了一个叫做Account Safety的方式。

如果当网络中出现了要分叉的commit信息时,Polkadot的节点会马上采取Account Safety的机制。每个节点都会询问其他节点他们所看到的pre-vote的情况,节点都会回复他们收到的信息,这样就很容易检查到有哪些恶意节点投了两个区块。最后这些被抓到的作恶节点将会被踢出共识网络,永远不能进入。

让我们回到BABE,通过结合BABE和GRANDPA我们可以看到在出块的时候Polkadot采用BABE出块,此时节点之间只要发送一次块信息即可,这样的话时间复杂度仅仅是O(n),在出块之后节点之间再采用GRANDPA进行块确认,此时由于确认阶段节点之间要通过二次确认来保证确认块结果的一致性,时间复杂度是O(n²),不过由于是多个块一次性进行确认,所以两者结合的混合共识是非常高效的,比普通的PBFT共识要高效很多。

结语

上面三种就是我们向大家介绍的Polkadot的共识算法,可以看到NPOS主要是为了选取Polkadot的共识节点,BABE和GRANDPA通过混合来高效的进行区块链的出块和确认。

这样的混合共识比传统的PBFT共识速度更快,并且在速度更快的基础上并没有丢失掉安全性。将出块和确认区块两个阶段分开并且使用不同的算法是在区块链共识中值得学习的地方。

通过这三种算法,Polkadot可以说在一定程度上高效的实现了Polkadot上区块链的共识算法。

参考文献:

[1] Ouroboros Praos: An adaptively-secure, semi-synchronous proof-of-stake blockchain Bernardo David , Peter Gaˇzi , Aggelos Kiayias November 14, 2017

展开阅读全文

带你了解分布式共识存在的问题

全文共 5728 字

+ 加入清单

01

混乱的“一致性”问题

Consensus != Consistency

受翻译影响,网上很多讨论 paxos 或 raft 的博客使用“分布式一致性协议”或者“分布式一致性算法”这样的字眼,虽然在汉语中“达成共识”和“达成一致”是一个意思,但是必须要说明在这里讨论的是 consensus 问题,使用“共识”来表达更清晰一些。而 CAP 定理中的 C 和数据库 ACID 的 C 才是真正的“一致性”—— consistency 问题,尽管这两个 C 讨论的也不是同一个问题,但在这里不展开。

为了规范和清晰表达,在讨论 consensus 问题的时候统一使用“共识”一词。

注:在早些的文献中,共识(consensus)也叫做协商(agreement)。

02

那么共识问题到底是什么呢?举个生活中的例子,小明和小王出去聚会,小明问:“小王,我们喝点什么吧?” 小王:“喝咖啡怎么样?” 小明:“好啊,那就来杯咖啡。”

在上面的场景中,小王提议喝一杯咖啡,小明表示同意,两人就“喝杯咖啡”这个问题达成共识,并根据这个结果采取行动。这就是生活中的共识。

在分布式系统中,共识就是系统中的多个节点对某个值达成一致。共识问题可以用数学语言来描述:一个分布式系统包含 n 个进程 ,每个进程都有一个初值,进程之间互相通信,设计一种算法使得尽管出现故障,进程们仍协商出某个不可撤销的最终决定值,且每次执行都满足以下三个性质:

终止性(Termination):所有正确的进程最终都会认同某一个值。

协定性(Agreement):所有正确的进程认同的值都是同一个值。

完整性(Integrity),也称作有效性(Validity):如果正确的进程都提议同一个值,那么所有处于认同状态的正确进程都选择该值。

完整性可以有一些变化,例如,一种较弱的完整性是认定值等于某些正确经常提议的值,而不必是所有进程提议的值。完整性也隐含了,最终被认同的值必定是某个节点提出过的。

03

为什么要达成共识?

我们首先介绍分布式系统达成共识的动机。

在前文中,我们已经了解到分布式系统的几个主要难题:

网络问题

时钟问题

节点故障问题

第一篇提到共识问题的文献[1]来自于 lamport 的 "Time, Clocks and the Ordering of Events in a Distributed System[2]",尽管它并没有明确的提出共识(consensus)或者协商(agreement)的概念。论文阐述了在分布式系统中,你无法判断事件 A 是否发生在事件 B 之前,除非 A 和 B存在某种依赖关系。由此还引出了分布式状态机的概念。

在分布式系统中,共识就常常应用在这种多副本状态机(Replicated state machines),状态机在每台节点上都存有副本,这些状态机都有相同的初始状态,每次状态转变、下个状态是什么都由相关进程共同决定,每一台节点的日志的值和顺序都相同。每个状态机在“哪个状态是下一个需要处理的状态”这个问题上达成共识,这就是一个共识问题。

最终,这些节点看起来就像一个单独的、高可靠的状态机。Raft 的论文[3]提到,使用状态机我们就能克服上述三个问题:

满足在所有非拜占庭条件下确保安全(不会返回错误结果),包括网络延迟、分区、丢包、重复和重排序。•不依赖于时序。

高可用。只要集群中的大部分节点正常运行,并能够互相通信且可以同客户端通信,这个集群就完全可用。因此,拥有5个节点的集群可以容忍其中的2个节点失败。假使通过停掉某些节点使其失败,稍后它们会从持久化存储的状态进行恢复,并重新加入到集群中。

不仅如此,达成共识还可以解决分布式系统中的以下经典问题:

互斥(Mutual exclusion):哪个进程进入临界区访问资源?

选主(Leader election):在单主复制的数据库,需要所有节点就哪个节点是领导者达成共识。如果一些由于网络故障而无法与其他节点通信,可能会产生两个领导者,它们都会接受写入,数据就可能会产生分歧,从而导致数据不一致或丢失。

原子提交(Atomic commit):跨多节点或跨多分区事务的数据库中,一个事务可能在某些节点上失败,但在其他节点上成功。如果我们想要维护这种事务的原子性,必须让所有节点对事务的结果达成共识:要么全部提交,要么全部中止/回滚。

总而言之,在共识的帮助下,分布式系统就可以像单一节点一样工作——所以共识问题是分布式系统最基本的问题。

04

系统模型

在考虑如何达成共识之前,需要考虑分布式系统中有哪些可供选择的计算模型。主要有以下几个方面:

网络模型:

同步(Synchronous):响应时间是在一个固定且已知的有限范围内。

异步(Asynchronous):响应时间是无限的。

故障类型:

Fail-stop failures:节点突然宕机并停止响应其它节点。

Byzantine failures[4]:源自“拜占庭将军问题” ,是指节点响应的数据会产生无法预料的结果,可能会互相矛盾或完全没有意义,这个节点甚至是在“说谎”,例如一个被黑客入侵的节点。

消息模型:

口头消息(oral messages):消息被转述的时候是可能被篡改的。

签名消息(signed messages):消息被发出来之后是无法伪造的,只要被篡改就会被发现。

作为最常见的,我们将分别讨论在同步系统和异步系统中的共识。在同步通信系统中达成共识是可行的(下文将会谈论这点),但是,在实际的分布式系统中同步通信是不切实际的,我们不知道消息是故障了还是延迟了。异步与同步相比是一种更通用的情况。一个适用于异步系统的算法,也能被用于同步系统,但是反过来并不成立。

让我们先从异步的情况开始。

05

FLP 不可能(FLP Impossibility)

早在 1985 年,Fischer、Lynch 和 Paterson (FLP)在 "Impossibility of Distributed Consensus with One Faulty Process[5]" 证明了:在一个异步系统中,即使只有一个进程出现了故障,也没有算法能保证达成共识。

简单来说,因为在一个异步系统中,进程可以随时发出响应,所以没有办法分辨一个进程是速度很慢还是已经崩溃,这不满足终止性(Termination)。详细的证明已经超出本文范围,不在细述。

此时,人们意识到一个分布式共识算法需要具有的两个属性:安全性(safety)和活性(liveness)。安全性意味着所有正确的进程都认同同一个值,活性意味着分布式系统最终会认同某一个值。每个共识算法要么牺牲掉一个属性,要么放宽对网络异步的假设。

虽然 FLP 不可能定理听着让人望而生畏,但也给后来的人们提供了研究的思路——不再尝试寻找异步通信系统中共识问题完全正确的解法。FLP 不可能是指无法确保达成共识,并不是说如果有一个进程出错,就永远无法达成共识。这种不可能的结果来自于算法流程中最坏的结果:

一个完全异步的系统

发生了故障

最后,不可能有一个确定的共识算法。

针对这些最坏的情况,可以找到一些方法,尽可能去绕过 FLP 不可能,能满足大部分情况下都能达成共识。《分布式系统:概念与设计》[6]提到一般有三种办法:

故障屏蔽(Fault masking)

使用故障检测器(Failure detectors)

使用随机性算法(Non-Determinism)

1、故障屏蔽(Fault masking)

既然异步系统中无法证明能够达成共识,我们可以将异步系统转换为同步系统,故障屏蔽就是第一种方法。故障屏蔽假设故障的进程最终会恢复,并找到一种重新加入分布式系统的方式。如果没有收到来自某个进程的消息,就一直等待直到收到预期的消息。

例如,两阶段提交事务使用持久存储,能够从崩溃中恢复。如果一个进程崩溃,它会被重启(自动重启或由管理员重启)。进程在程序的关键点的持久存储中保留了足够多的信息,以便在崩溃和重启时能够利用这些数据继续工作。换句话说故障程序也能够像正确的进程一样工作,只是它有时候需要很长时间来执行一个恢复处理。

故障屏蔽被应用在各种系统设计中。

2、使用故障检测器(Failure detectors)

将异步系统转换为同步系统的第二个办法就是引入故障检测器,进程可以认为在超过一定时间没有响应的进程已经故障。一种很常见的故障检测器的实现:超时(timeout)。

但是,这种办法要求故障检测器是精确的。如果故障器不精确的话,系统可能放弃一个正常的进程;如果超时时间设定得很长,进程就需要等待(并且不能执行任何工作)较长的时间才能得出出错的结论。这个方法甚至有可能导致网络分区。

解决办法是使用“不完美”的故障检测器。Chanadra 和 Toueg 在 "The weakest failure detector for solving consensus[7]" 中分析了一个故障检测器必须拥有的两个属性:

完全性(Completeness):每一个故障的进程都会被每一个正确的进程怀疑。

精确性(Accuracy):正确的进程没有被怀疑。

同时,他们还证明了,即使是使用不可靠的故障检测器,只要通信可靠,崩溃的进程不超过 N/2,那么共识问题是可以解决的。我们不需要实现 Strong Completeness 和 Strong Accuracy,只需要一个最终弱故障检测器(eventually weakly failure detector),该检测器具有如下性质:

最终弱完全性(eventually weakly complete):每一个错误进程最终常常被一些正确进程怀疑;

最终弱精确性(eventually weakly accurate):经过某个时刻后,至少一个正确的进程从来没有被其它正确进程怀疑。

该论文还证明了,在异步系统中,我们不能只依靠消息来实现一个最终弱故障检测器。但是,实际的故障检测器能够根据观察到的响应时间调节它的超时值。如果一个进程或者一个到检测器的连接很慢,那么超时值就会增加,那么错误地怀疑一个进程的情况将变得很少。从实用目的来看,这样的弱故障检测器与理想的最终弱故障检测器十分接近。

3、使用随机性算法(Non-Determinism)

这种解决不可能性的技术是引入一个随机算法,随机算法的输出不仅取决于外部的输入,还取决于执行过程中的随机概率。因此,给定两个完全相同的输入,该算法可能会输出两个不同的值。随机性算法使得“敌人”不能有效地阻碍达成共识。

和传统选出领导、节点再协作的模式不同,像区块链这类共识是基于哪个节点最快计算出难题来达成的。区块链中每一个新区块都由本轮最快计算出数学难题的节点添加,整个分布式网络持续不断地建设这条有时间戳的区块链,而承载了最多计算量的区块链正是达成了共识的主链(即累积计算难度最大)。

比特币使用了 PoW(Proof of Work)来维持共识,一些其它加密货币(如 DASH、NEO)使用 PoS(Proof of Stake),还有一些(如 Ripple)使用分布式账本(ledger)。

但是,这些随机性算法都无法严格满足安全性(safety)。攻击者可以囤积巨量算力,从而控制或影响网络的大量正常节点,例如控制 50% 以上网络算力即可以对 PoW 发起女巫攻击(Sybil Attack)[8]。只不过前提是攻击者需要付出一大笔资金来囤积算力,实际中这种风险性很低,如果有这么强的算力还不如直接挖矿赚取收益。

06

同步系统中的共识

上述的方法 1 和 2,都想办法让系统比较“同步”。我们熟知的 Paxos 在异步系统中,由于活锁的存在,并没有完全解决共识问题(liveness不满足)。但 Paxos 被广泛应用在各种分布式系统中,就是因为在达成共识之前,系统并没有那么“异步”,还是有极大概率达成共识的。

Dolev 和 Strong 在论文 "Authenticated Algorithms for Byzantine Agreement[9]" 中证明了:同步系统中,如果 N 个进程中最多有 f 个会出现崩溃故障,那么经过 f + 1 轮消息传递后即可达成共识。

Fischer 和 Lynch 的论文 "A lower bound for the time to assure interactive consistency[10]" 证明了,该结论同样适用于拜占庭故障。

基于此,大多数实际应用都依赖于同步系统或部分同步系统的假设。

07

同步系统中的拜占庭将军问题

Leslie Lamport、Robert Shostak 和 Marshall Pease 在 "拜占庭将军问题(The Byzantine General’s Problem)[11]" 论文中讨论了 3 个进程互相发送未签名(口头的)的消息,并证明了只要有一个进程出现故障,就无法满足拜占庭将军的条件。但如果使用签名的消息,那么 3 个将军中有一个出现故障,也能实现拜占庭共识。

Pease 将这种情况推广到了 N 个进程,也就是在一个有 f 个拜占庭故障节点的系统中,必须总共至少有 3f + 1 个节点才能够达成共识。即 N >= 3f + 1。

虽然同步系统下拜占庭将军问题的确存在解,但是代价很高,需要 O(N^f+1 ) 的信息交换量,只有在那些安全威胁很严重的地方使用(例如:航天工业)。

PBFT 算法

PBFT(Practical Byzantine Fault Tolerance)[12] 算法顾名思义是一种实用的拜占庭容错算法,由 Miguel Castro 和 Barbara Liskov 发表于 1999 年。

算法的主要细节不再展开。PBFT 也是通过使用同步假设保证活性来绕过 FLP 不可能。PBFT 算法容错数量同样也是 N >= 3f + 1,但只需要 O(n^2 ) 信息交换量,即每台计算机都需要与网络中其他所有计算机通讯。

虽然 PBFT 已经有了一定的改进,但在大量参与者的场景还是不够实用,不过在拜占庭容错上已经作出很重要的突破,一些重要的思想也被后面的共识算法所借鉴。

08

结语

本文参考了很多资料文献,对“共识问题”的研究历史做一些基础概述,希望能对你带来一点帮助。

本文提到的论文,很多直接谈论结果,忽略了其中的数学证明,一是本文只是提纲挈领的讨论共识问题,建立一个知识框架,后续方便往里面填充内容;二是考虑到大部分读者对数学证明过程并不敢兴趣,也不想本文变成一本书那么长。本文也遗漏许多重要算法,后续如有必要会继续补充。

展开阅读全文

Filecoin的共识机制是什么?

全文共 643 字

+ 加入清单

作为一个以“去中心化存储”为核心目标的技术,IPFS最重要的功能、能提供给用户最好的服务就是存储。作为IPFS激励层的区块链Filecoin,自然也要把“存储”作为重中之重的共识

Filecoin的共识机制是预期共识,共识机制中最重要的证明系统是复制证明与时空证明。

在给矿工激励时,更多考察对方是否能够完成“存储”这一行为。存储能力越强的矿工,就越大几率获得生成区块的权利。考核标准有两个:1.矿工能够有足够的空间,容纳客户原始数据的物理唯一副本;2矿工能够长期、稳定、有效进行.数据存储。

实现第一个考核标准的共识机制是复制证明(Proof-of-Replication),缩写为PoReP。

矿工所有用矿机中专用于IPFS系统的存储空间,称为“扇区”,用于存储客户的数据。把数据填充该扇区后,将其密封。密封就是让这个扇区成为原始数据的唯一副本。矿工然后将副本的加密哈希提交到公共 Filecoin 区块链。

这是为了防止矿工偷工减料。比如一个数据同时分配给A、B、C三个矿机,但是A、B矿机属于同一个矿工,矿工为了减少麻烦就只存一份,谎称自己存了两份。

而使用PoReP,加密哈希能够辨别出这三份数据真的存储在三个分别的矿机里。

实现第二个考核标准的共识机制是时空证明(Proof-of-Spacetime),缩写为PoSt。

PoSt要求随机选择的矿工,为他们维护的随机选择的存储扇区提供 PoRep。矿工必须在严格的时限内应对这一挑战。确保矿工时刻保持对密封区域随时访问的能力和数据完整性。

展开阅读全文

一文读懂跨链的核心技术点:共识穿透

全文共 1601 字

+ 加入清单

CHAINX PCX

我们先来认识共识。“共识”,其汉语解释为共同的认识。相互没有联系的彼此,对一个特定问题持有共同的看法,除了因为一些不可控的道德、价值等方面的共识,规则的作用是非常重要的。

区块链的共识机制

共识机制,就是游戏的规则,社会的法律,是人们共同采用的达成和维护共识的方式,也就是所有人都认可并遵守的规则,这也是区块链的灵魂所在。

区块链最早的共识是 Bitcoin 的 POW,这是挑战 dificulty,谁最先产生合适的 nonce。POW:proof of work, 翻译过来是工作量证明,即用一定量的工作量来换取记账权利,在比特币中,就是计算一个数学难题,谁先算出来并广播出来,谁就有权利记账。

区块链时代的拜占庭容错:Tendermint

因为 POW 共识有巨大的能源浪费,效率低的缺点,大家就开始实现类 BFT 共识, 最知名的是 Tendermint。

Tendermint 开源项目诞生于 2014 年,旨在解决比特币的工作证明共识算法的速度,可扩展性和环境问题。通过使用和改进 1988 年在麻省理工学院开发的经过验证的 BFT 算法,Tendermint 团队是第一个在概念上展示股权证明加密货币的公司,它解决了第一代股权证明加密货币所遭受的无关紧要问题。正因为它的名气,才成就了后面的 Cosmos。

区块链时代的进阶:BFT-DPoS

又因为类 BFT 共识有多方网络交互,带来的网络压力和性能导致区块链上层应用无法拓展。接着就出来了 EOS 的 DPOS, 这个共识在类 BFT 上用“时间换空间”来提升效率,大家轮流出块,用大家出块了的 BFT 签名来统计 BFT 确认,当然这个,至今没有论文证明这符合严格的拜占庭协议。

ChainX 1.0 在线跑的共识,就是这类共识, 用时间换空间,每个 Epoch 中大家轮流出块,统计在该 Epoch 后的某个块高度,出块人大于 2/3 签名,视该 Epoch 为确认。

因为没有严格的 BFT 论文验证, 该共识虽然在性能上已经是单共识中最快的模式。但 ChainX 2.0 还是舍弃了该共识,升级为 Polkadot 的共识。

Polkadot 的共识

Polkadot 共识是 babe + grandpa 的组合, babe 负责出块,grandpa 负责 BFT 确认。

babe 共识又是 aura +vrf 随机的组合。primary slot 走的是 vrf 路线, second slot 走的是 aura 路线。当出块人 vrf 签名挑战 primary threhold 成功,出的是 primary slot,否则出的是 second slot。

当然, 在算最长链时, primary(vrf 随机验证通过)产生的 slot 权重要高于 second(aura)产生的 slot。

grandpa 共识负责 BFT 确认, 因为 BFT 网络通信的压力, 我们把 grandpa 和出块分开, 这样导致 grandpa 共识完全不影响链的出块性能。

跨链的核心技术点:共识穿透

言归正传,我们讲回共识穿透。

我们先来给共识穿透下个定义, 共识穿透是指两条不同共识的区块链,如何从共识层打通,让两条链互联有无,最终实现共识跨链。

共识穿透有两种路径

1.从点对点网络层 着手,直接和共识交互。

2.从交易入手,通过交易输入到区块链共识。

共识穿透是选择 “出块”共识实施 还是在“确认块”共识实施较好, 当然是在“确认块”实施有意义, 因为跨链交互产生的区块或者交易信息,必须是确认的。

具体的如何去实操,实现共识跨链,想法很多,实现的方法也很多,至于如何更好,需要更多的实践经验。

杭州链网科技在这块技术的研发有很长时间的积累。如果谁对这块技术感兴趣,或者有好的想法,也欢迎向 gavin@chainnet.tech 邮箱投稿或交流。

展开阅读全文

解密动态成员多方签名如何确认共识

全文共 7928 字

+ 加入清单

引言

2009 年,中本聪创造了比特币 [Nak09]。比特币是一种互联网货币系统,可以实现点对点的数字代币转账。为确保所有人就代币所有权达成共识,中本聪采用了一种可由所有网络参与者复制并验证的公共账本。为了避免单点故障,该账本采用一种动态成员多方签名(dynamic membership multiparty signature,DMMS)[BCD+14] 机制来证实(authenticated),即,在每次 “心跳” 时对整个账本历史执行一次高成本计算(但是验证成本很低)。

不同于传统的数字签名,DMMS 中没有 “可伪造性” 的概念(there is no notion of “forgeability” for a DMMS)。每个 DMMS 的创建成本都很高(在比特币中,需要消耗高昂的电力成本),并且,这种行为可以得到账本上增发的新货币作为奖励。由于这些新代币必须得到其他人的认可才有用,参与者会受到激励来共同扩展“真正的账本”,而非自行创建账本1。(译者注:此处的 “认可” 一词原文为 “recognize”,也就是说它的原意可能并没有那么多 “社会共识” 的暗示,其本身可以有严格的技术含义:如果你没有收到一个区块,你就不会认可由这个区块发行的货币。)

由于比特币的 DMMS 在计算和热力学 [Poe14a] 方面成本非常高,人们已经提出了其它更为经济环保的方案。最常被提议的方案是 PoS(权益证明),它是一种低成本的分布式共识机制。正如 Andrew Poelstra [Poe14b] 在 2014 年所言,PoS 是不可行的,但还是涌现出各种形式的 PoS 方案。与此同时,各种论坛上经常有人声称 Poelstra 的论点是 “虚假” 或 “错误” 的,尽管他们从来没有提出任何有说服力的反例或错误。此外,也有人给出了中肯的意见,认为 Poelstra 的这篇论文写得晦涩枯燥。由此可见,这篇论文还有许多不足之处。虽然 Poelstra 没有发现他的前作有任何不准确之处,但是他准备借此机会进一步地正式阐述他的论点。

相比 Poelstra 撰写论文时,人们对比特币共识的科学认识已经有了巨大进步 [MLJ14, BMC+15] 。

本文旨在更新 Poelstra 的论文,阐明比特币所解决的问题,PoS 背后的设计原理,以及 PoS 之类的机制无法在比特币的信任模型中产生分布式共识的原因。

注 1: 为了确保所有参与者都可以看到 “真正的账本”,我们需要一个同步网络:所有(有效)数据都能在一定的时间长度 λ 内到达所有参与者,而且网络心跳时间比 λ 长得多。如果没有同步网络,分布式共识的难度会大得多。(经常被人引用的一个结论是,使用确定性算法是不可能实现分布式共识的 [FLP85];但使用概率算法就可以很容易避免这一问题,因此在共识系统的设计难度上没有很多讨论。本文档的旧版本错误地引用了这一结论,以为这一点使得所有分布式共识机制在异步网络中都不可能达成共识,感谢 Dominic Williams 指出了这一点。)

分布式共识

在讨论比特币对于分布式共识问题的解决方案之前,我们首先要理解这个问题的本质。分布式共识(比特币系统所使用的术语)是一种彼此之间缺乏信任的参与方之间达成的共识(即,全局一致 global agreement)。这些参与方都是匿名的,而且在系统建立时并不一定存在。正如 Poelstra 在其论文中所解释的那样:

就密码学货币而言,仅在交易的时间顺序上达成分布式共识就足够了,即,就 “第一个转移特定资金的交易达成共识”。这样可以确保整个网络都认可新的资金所有者。

之所以需要达成这种共识,是为了防止重复花费问题(double-spending)。在所有去中心化数字货币机制中,都有可能出现付款方将同一笔资金发送给两个不同的人的情况,而且这两笔交易看起来都是有效的。因此,收款方需要能够确保没有发生冲突,或者在有冲突的情况下,网络会认可其交易为正确版本。就交易顺序达成分布式共识可以实现这一目的:在发生冲突的情况下,每个人都认可第一笔交易是有效的,其余交易是无效的。

(数字货币的其它问题,如权限和防伪,相对来说比较容易,可以通过传统密码学解决。)

重点是,我们应该意识到,尽管分布式共识是个难题,但是普通共识更加容易,经过了更深入的研究,而且使用受信任且可识别的签名方可以将效率提高数万亿倍。因此,(即使是在有限条件下)引入了受信任方的密码学货币都应该考虑的一点是,其新型信任模型是不是能帮助降低达成共识的难度。对更高效的、具备受信任方的共识机制感兴趣的读者可以研究一下。

动态成员多方签名(Dynamic Membership Multiparty Signatures)

比特币的账本是公开可用的,比特币网络中的所有参与者都可以验证账本上每笔交易的有效性。然而,由于账本在根本上属于历史记录,密码学无法辨别真伪,必须要有人来证明账本,而且其他人必须相信这个人不会签署错误的历史。

最早的数字现金系统都由单个非匿名者签署所有交易 [Cha83]。然而,这样不仅为系统引入了单点故障风险,而且可以让签署方(以及任何可以通过权力或武力来胁迫该签署方的人)审查交易或发起重复花费。虽然我们可以采用盲签名(具体参见 [Cha83])来防止审查制度,但是无法防范单点故障和重复花费问题。多方签名或许有可以解决后面两个问题,但是所有签名方难以同时遭到胁迫与所有签名方必须得到所有参与者的信任这两个要求是相互冲突的。非匿名性也意味着,特定攻击者总能持续攻击系统。

比特币的解决方案是完全去掉固定且可识别的签名者。比特币的账本由一组被称为矿工的签名者验证,他们不向其它参与者公开自己的身份,或许还可以零成本进入或退出系统。矿工通过叫做 “挖矿”的过程来生成签名。在挖矿过程中,他们会共同为连续的、由交易数据组成的区块生成工作量证明[Bac02]。

在本节中,我们将解释挖矿是如何运作以及如何提供验证的。

匿名世界里的鉴别(authentication)

密码学数字签名机制的运作原理如下。签名方生成 “签名” 和 “验证” 密钥对(s,v),并将 v 连同其姓名一起发布在某个公共渠道上。该签名方可以根据给定消息 m 生成签名 σ,任何人都可以验证 σ 的有效性。也就是说,将 v,m 和 σ 输入验证算法,如果签名是有效的,总是会输出 1。

为了安全起见,传统数字签名必须具备抗伪造性,即,任何计算能力有限的攻击者伪造签名的概率都微乎其微。具体而言,“伪造” 指的是(攻击者)能在下列游戏中胜出:

签名者将验证密钥 v 交给攻击者。

攻击者将消息 m_i 发送给签名者,并收到这些消息的有效签名 σ_i。攻击者可以多次重复该操作。

攻击者生成一个新的消息 m 连同一个基于 m 的有效签名 σ。

这种安全性被称为选择明文攻击下的不可伪造性(existential unforgeability under chosen-message attack),是密码学文献中的常见标准。

在多方签名机制中,每个签名者都有一个验证密钥。只有签名者(或者说签名密钥)的 “可采信子集” 生成的签名才有效。在定义安全性时,上述游戏经过了修改,允许攻击者请求(并获取)签名密钥,只要该攻击者获得的密钥无法组成 “可采信子集” 即可。

可以看出,验证算法使用验证密钥 v 来验证签名,并通过这种方式来验证签名者的 “身份”。由于任何人都可以创建密钥对,若想签名具有价值,必须通过公共记录将验证密钥与签名者的真实身份联系起来。如果出现失信行为(签署无效历史),失信方会被问责。

这样来看,身份鉴别并不适用于签名者匿名且不固定的系统。事实上,我们还不清楚 “身份鉴别” 在这类系统中能发挥什么作用!如果任何人都能以匿名方式生成签名,就无法区分诚实的签名和不诚实的签名、真实的历史和虚假的历史。那么上述安全性定义就丧失了意义,因为攻击者可以自由加入签名者集,并 “伪造签名”2。

为了解决这一问题,比特币采用了另一种安全模型。在该模型中,所有参与者都平等,但是他们会在经济激励下保持诚实。在下一部分,我们将介绍该安全模型。

注 2: 正如我们在第四部分所见,如果是密码学货币,匿名参与方就有可能锁定保证金,并通过某种机制在无需确认任何人的身份的情况下,惩罚失信行为者。这实际上就是权益证明。然而,密码学货币离不开共识,因此 “如果是密码学货币” 这个前提导致我们在这里无法使用权益证明,否则就会陷入循环推理。我们会在下一部分解决这个问题。

为 DMMS 定义安全性

就 DMMS 而言,所有参与方都是平等的;无法通过让 “敌手” 仅拥有不完全知识(incomplete knowledge)来获得安全性。因此,我们使用以下三部分定义了 DMMS。这些部分都不同于传统签名的密钥生成算法:

使用代价函数 c 来追踪算法的执行并输出 “代价(cost)” t ∈,其中是某个 “代价域”。该函数必须是线性的,因为连续运行两个算法的成本是它们各自成本的总和。

随机化算法 AttemptSign 将消息 m 作为输入,输入签名 σ。输入任何消息 m,该算法的代价都应该是 1。

确定性算法 Verify 将消息 m、签名 σ 和目标代价 T 作为输入,输出 0 或 1。

当且仅当 Verify(m, T, AttempSign(m)) = 1 对所有属于的 T 都有 1/T 的概率成立,则我们说该 DMMS 是正确的(correct),这个概率是由 AtemptSign 算法来保证的;当且仅当任意多项式算法实现 Verify(m, T, A (m)) = 1 的概率都不超过 1−(1−1/T)t,则我们说这样的 DMMS 是安全的(secure)(其中 t 是算法 A 的执行代价)。

换言之,安全的 DMMS 指的是没有比重复执行 AttemptSign 更好的签名算法(从创建验证签名的意义上来说)。

我们简要论证了我们的安全性定义。为了实现动态成员集合,我们不能让参与成本过于昂贵,也不能让已有签名者通过显而易见的手段或经济因素排斥新加入的签名者。这就意味着,签名过程应该是 “可分割的”,既不需要也不激励签名者之间进行任何通信。也就是说,花两倍长的时间运行一个签名算法应该与在同样的两个硬件上并行运行该签名算法的成功概率一样高。在极端情况下,这意味着最好的签名算法应该由对单一基础步骤的重复、独立执行来组成,这是由定义推导出来的。

挖矿机制作为一种 DMMS

比特币挖矿采用的是基于哈希函数的工作量证明算法 hashcash [Bac02]。这是一种使用随机数神谕模型(random oracle model)的 DMMS [BR93]。作为一种计算模型,随机神谕是指,该模型把哈希函数当成一个 “随机数神谕” ,或者说真随机函数3,其输出都是纯然随机的,而且只有通过该函数才能计算出来。

虽然随机数神谕模型的使用引起了很多争议 [Gre11],但是有力的实证证据证实了它可以用来保障安全性。下文中,H 指的是输入可多达 256 位的哈希函数,它被当成是一个随机数神谕。

比特币的 DMMS 如下:

代价函数给出执行中调用随机数神谕的次数。

AttemptSign 将消息 m 作为输入,并输出随机数 σ ∈ 256。

Verify 将签名 σ 、消息 m 和目标 T 作为输入。仅当 H(m || σ)

不难看出,在随机数神谕模型中,没有比重复运行哈希函数更好的创建有效签名的方法。

注 3:该模型是完全不现实的,因为真正的随机函数,from, say, 512 bits to 256 bits,平均需要 2512·256 位来表示,已经超过了目前已知的表达极限。

没有世界时间

请注意,在上一部分,我们将哈希函数调用的数量作为我们的代价函数,它与计算次数大致成正比,而计算次数又与散热量大致成正比。最后,散热量与创建这些签名的经济和环境成本大致成正比。

一个显而易见的问题是,我们是否可以采用 “成本更低” 的代价函数?尤其是,为什么我们不能直接使用时钟时间?为什么我们使用 DMMS 对区块进行签名来创建区块链,而非直接按照时间顺序对交易进行排序来解决共识冲突?

答案是,分布式系统中缺少明确定义的时钟时间。网络延迟限制了信息的传播速度。根据狭义相对论可知,如果是几乎同时发生的事件,不同的观察者无法就其时间顺序达成共识。

如果只是这个问题,那么要求每笔交易之间间隔几秒钟即可(如果相互冲突的交易之间间隔太短,这两个交易都会被拒绝;但是等到每笔交易完成几秒钟后,所有参与方就能确保不会发生这种情况)。但是,实际情况会更加糟糕,原因有两点:

“网络延迟” 在恶意环境中无法得到限制。攻击者或能使用拒绝服务攻击(denial-of-service measures)来任意降低系统速度,并通过其它方式对网络进行物理分区。

用相对论来说,这意味着无论将等待时间设为多久,都无法确保参与者不会与网络中的其他参与者类空分离(spacelike separated)。

新加入网络或最近离线的用户需要访问历史数据。但是,没有办法可以事后验证交易发生的顺序,因此在出现交易冲突的情况下,用户无法保证他们收到的交易是先发生的。

来自 DMMS 的共识

既然我们已经了解了 DMMS,并解释了为什么比特币的 hashcash 是一个安全的算法,接着来思考如何通过 DMMS 实现分布式共识。

我们的主张是,通过 DMMS 实现分布式共识是有可能的。

我们首先需要通过我们的代价函数(单调函数)来衡量(a)某种无法一次为多个消息创建签名的稀缺资源,和(b)创建签名所需的平均时间。(为了实现去中心化,这种稀缺资源可能需要被永久消耗,就像在比特币系统中那样,让挖矿的边际成本在资本成本中占主导。Poelstra 支持这一观点 [Poe14a],但是 John Tromp 并不认同 [Tro14]。)

以比特币为例,我们的代价函数的定义是 “哈希函数调用的次数”。我们主张,该函数实际上用来衡量计算签名所需消耗的能源,并且得到了 Landauer limit 的论证 [Lan61]。从物理学上来说,所谓的能源,就是任意不可逆的位操作所需消耗的最低热量。通过计算 sha256 计算中涉及的不可逆位操作的数量,(至少从原则上来说)我们可以为创建一个比特币 DMMS 所需消耗的能源量设定下限。

代价函数也可以用来衡量创建签名所需的时间,因为每单位时间只能消耗一定量的能源,除非你去制造黑洞(black hole)(即,不让签名乃至任何信息以可用的形式提取出来)。当然了,在现实生活中,比特币矿工不会在接近黑洞极限的情况下操作,而且所需时间取决于挖矿硬件的速度。随着挖矿硬件的改进,以及同时在线的硬件数量增多,创建 DMMS 所需的时间减少。在比特币中,目标代价会根据这一情况进行调整,将创建每个签名所需的时间保持在 10 分钟左右4。

注 4:鉴于 3.4 中提到的无世界时间,读者可能会想知道如何准确调整时间。实际上,时间戳是由矿工插入区块的,而且确实没有任何方法可以防止矿工弄虚作假。比特币可以抵御不实时间戳导致的较小目标偏离,并且也禁止了目标(译者注:即难度)过快地发生变化。因此,想要制造大幅的目标偏离是非常昂贵的,而且有可能遭到不配合的矿工的阻挠。关于更多讨论,请参阅 [Poe14c, Section 6.3]。

那么,有了一个可以通过代价函数来衡量稀缺资源的安全 DMMS,我们该如何获得共识历史?首先,我们假设网络是同步的,因此(绝大部分)参与者可以在一定时间 λ 内获得所有有效数据。我们将交易历史分割成一系列区块,其中每个区块都包含一系列交易,以及前一个区块的密码学承诺(commitment)5。每个有效区块必须拥有一个已经设定好目标的 DMMS,且目标使得创建区块所需的时间比 λ 长的多 (这样一来,在同一个共识历史上工作的矿工都知道哪个区块是最新的,而且区块创建者也不会因为优先知道最新区块而占据很大优势)。需要明确的是,每个 DMMS 的目标代价是由系统规则定义的,不由矿工决定。

注 5:承诺(commitment)是一种密码学对象,由某个秘密数据计算得出,但是不会泄漏该数据,因此该数据在事后无法修改。抗碰撞哈希函数就是一例:给定数据 x,你可以先发布 H(x)(H 是哈希函数),之后再公开 x。验证者可以使用公开的值计算 H(x),来确认这个值是否与原始值相同。

网络参与者的运作方式是:首先考虑以同一个创世块(已硬编码到系统中)开头的所有有效区块分支。(由于每个区块都包含前一个区块的承诺,结果会形成以创世块为根的有向非循环图,这些区块分支就是图中的路径。)然后计算每个区块上的 DMMS 的目标成本总和得出每条区块分支的重量。最重的区块分支会被视为 “真实的” 历史。

在创建区块时,矿工根据自己的意愿选择交易,并加入一个特殊的 “奖励交易” 用来将其它交易的费用以及网络定义的补贴分配给自己,再加上(他所认为的正统链上的)最新区块的承诺,然后计算 DMMS。如果另一名矿工创建并发布了一个区块,矿工就会相应地更新他们的 “真实历史上的最新区块”,并在自己所挖的区块中改变承诺以适配这种变化。计算出一个 DMMS 之后,他们会把这个完成的区块公布到网络中。

我们主张这样就能形成一个共识的历史,是说整个网络会渐进地对到底哪些区块是真实历史的一部分(而哪些不是)达成共识,而且不一致只会发生在最近的历史中。具体的论述可见 Miller 和 La Viola Jr. [MLJ14](我们这篇文章中可度量耗能程度 DMMS, 在那篇文章中的表述是 “moderately-hard puzzles”),但我们这里附上一个不那么正式的论证。

因为网络是同步的,区块传输的时间大大短于区块生产的时间,所以所有参与者都能迅速认识到最重的历史。

我们还进一步认为,网络中的大部分参与者都会参与生产能延伸真实历史的 DMMS。一个优雅且正确的理由是由 Vitalik Buterin 提出的 [But15]:因为 “奖励交易” 当且仅当其区块属于真实历史才会被大家接受,所以对每一个矿工来说,纳什均衡就是服从绝大多数6。

注 6:也是在同一篇文章里,Buterin 说:“要是你已经厌烦了 PoS 的反对者老是跟你引用 Andrew Poelstra 写的这篇文章(即 [Poe 14b]),请尽情链上本文,作为还击。” 不太清楚他这么说是什么意思;自始至终,无论在哪儿,他都没能驳倒本文的主张:除了消耗一种系统外的资源,没有别的产生共识的办法。

要想改变 “真实历史”,攻击者必须产生另一个权重更大(即目标开销更大)的历史(这样的另类历史版本可以定义为从当前的历史最新顶端向后回溯 N 个区块处产生的一个分叉)。他具有的资源比正在延伸真实历史的矿工团体要少,因为那个矿工团体才是多数。所以,他在网络中能胜出的概率是小于 1 的(因为在任意给定时间段里,网络中延伸真实历史的尝试次数都多过他延伸自己的另类历史的尝试),而且,要想让自己的历史超过真实历史,他还必须胜出 N 次以上。如果胜出一次的概率是 P

(这里的论证是很弱的,因为只考虑到了一个攻击者要连续不断地胜出,没有考虑到出块难度会调整;难度的调整会使得攻击者在重新制造旧区块时速度可以比网络制造新区块更快。笔者在这里主张,没有任何根据地主张,这些都不是严肃的问题,只是乏味的问题。)

(未完)

展开阅读全文

比特币“数字黄金”的共识遭到挑战

全文共 899 字

+ 加入清单

比特币是数字黄金共识也在这次下跌中受到了挑战

币圈大佬以前对比特币的估值推算都是参考黄金市值来估算的,比如咕噜说过的几年后市值达到黄金8万亿。或者有些大佬公开说的看好比特币以后100万美元一个等等。大家也都把比特币当成黄金来储存。

而这次面对突发大危机时,比特币数字黄金的共识瞬间被动摇了。因为黄金是公认的避险资产,而比特币价格被一夜腰斩,这还是数字黄金吗?

比特币是数字黄金这个共识,还有多少人确信无疑呢?

有币圈的投资者说:

18年跌到3000时大家都有信心,现在还没有到呢!

18年的情况和现在不同,那时大家相信比特币就是金融危机的诺亚方舟,那怕是熊市里大家对大牛市的到来也毫不怀疑。没想到真的来了金融危机,比特币居然率先崩盘。

信心去得快,恢复的也快,只是时候未到。数字黄金本来就没有任何理论支持,比特币是再典型不过的风险资产,比特币会再好起来的,不需要“数字黄金”这个概念支撑。

那么后面比特币的估值要参考什么呢?

最近几天比特币的走势完全看美股的脸色和美股展开了高度的联动,在目前的特殊时期,比特币的参考物变成了美股指数。

但有投资者认为比特币和股票市场没啥关系:

不然为什么比特币2017年涨了30倍,股市没有涨30倍,为什么2018币圈熊市,美股牛市?

因为,比特币原来的价值参考物是黄金,所以有小危机时一直和黄金有高度联动。这次大家发现大危机来临时,比特币是被首先抛售的金融资产,于是大家只能用美股来作为参考标的。

比特币现在再5000美元的位置太尴尬了!

6000上方主力砸盘出来的巨量资金,目前5000多这个位置是不会接回来的。而且在第一波暴跌到5500后大量的抄底盘建仓价在6000上面。这部分抄底套牢盘不会很快给你解套的。

上涨需要追涨资金,多头这几天被团灭后,短期多头已经没有资金再支持上涨了。

这波的胜利方做空资金,目前也只会持USDT观望,短期不会去追涨。只会看准时机落井下石再做空踩一脚。

抛开减半来看,目前5000就是大熊市,熊市没这么快能走出来,市场需要足够的时间来疗伤。

目前全球都在放水,比特币虚拟币数字资产这一块儿无国界无成本流通,所以一旦点火了,全球资金涌入,到时候史无前例的大牛市。

展开阅读全文

共识算法的类型有哪些?

全文共 806 字

+ 加入清单

共识算法类型

有几种类型的共识算法。最常见的是工作证明和权益证明。考虑到安全性,功能性和可伸缩性之间的平衡,每种方法都有优点和缺点。

工作证明(PoW)

工作量证明是创建的第一个共识算法。这已应用于比特币和许多加密货币。工作量证明算法是采矿过程的 组成部分。

工作量证明挖掘涉及大量的哈希尝试,因此您拥有的计算能力越强,每秒进行的尝试就越多。换句话说,哈希率越低,找到下一个块(块哈希)的有效解决方案的可能性就越大。工作量证明共识算法允许去中心化的网络节点验证新的区块交易并将其添加到区块链中,前提是达成共识,并且同意矿工提供的区块哈希是有效的工作证明。

权益证明(PoS)

权益证明共识算法于2011年开发,是工作证明的替代方法。股权证明与业务证明具有相似的目标,但是存在一些根本性的差异和奇异之处。特别是用于验证新块。

简而言之,权益证明共识算法通过根据利益相关者的权益来验证区块,从而代替了工作量证明挖掘过程。每个区块的验证器(也称为伪造者或造币商)由对加密货币的投资而不是分配的计算能力来确定。每个权益证明系统都可以以不同的方式实现算法,但是总的来说,区块链使用随机选择方案和随机因素,这些因素考虑了节点的丰富程度以及绑定或抵押硬币的时间。为了安全。

以太坊区块链目前基于工作量证明算法,但将发布Casper协议,以公平证明取代工作量证明以增加网络可扩展性。

为什么共识算法对加密货币很重要

如前所述,共识算法对于维护加密货币网络的完整性和安全性很重要。共识算法允许分散节点同意区块链的哪个版本是真实版本。为了使数字经济系统正常运行,必须就当前的区块链达成一致。

工作量证明共识算法被认为是解决拜占庭将军问题的最佳解决方案,该问题使比特币成为拜占庭的容错系统。这意味着,比特币区块链对诸如51%攻击(或多次攻击)之类的攻击非常强大。网络不仅是分散的,而且还使用工作量证明算法。采矿过程的高成本使矿工很难投资其资源来破坏网络。

展开阅读全文

Blockstack为新的比特币链接的共识机制开放Testnet

全文共 1275 字

+ 加入清单

Blockstack打算让人们试着其新的共识机制

星期四宣布,Blockstack测试网已经开放。开发人员现在可以模拟Stacks区块链的新混合共识机制,Blockstack称作迁移证明(PoX)。

正常情况下运行的区块链是Blockstack促进新型去中心化互联网的能力的关键,这个功能使用户能够 更好地调节其数据信息,并使内容核查变得更加困难。

这种新的共识机制的关键创新:它使用比特币。除了定期将Stacks区块链的哈希值存储在比特币上之外,区块链中的许多节点参与者还将获得BTC的奖励,BTC是比Stacks原生代币STX奖励更可靠的价值来源。

BlockstackPBC首席执行官MuneebAli在一份声明中说:“成功开展传输证明的试用将表明,可行的第三种选择是依靠比特币作为Web3前进的基础。”“这事实上将为BTC建立一个新的用例。”

回顾一下,PoX使用矿工和堆垛机。矿工记录交易,就像比特币或以太坊区块链上的矿工一样,并且堆栈器会保留区块链的副本,同时发出要挖的分叉的信号。矿工从通货膨胀中赚取新的STX,他们付费参加BTC。BTC被分发给必须向STX放样的堆垛机。

最初将比特币并入是一种将安全性与全部安全性最高的加密网络联系在一起的方式,并为更多用户出示了积极参与的更好动力。随着设计的发展,团队开始看见大量的可能性。

在给CoinDesk的电子邮件中,阿里说:

“用户能够 在Stacks链上开展数千笔交易,而比特币链只可以看见Stacks区块的哈希值。当您开始探索这些链之间的资产或加密货币的潜在移动时,它变得越来越有趣,例如,比特币被锁定在比特币链和正在使用……在堆栈上。该领域目前处于研发阶段,但我们对这种可能性感到非常兴奋。”

我们用Keep建造的比特币和以太坊之间的桥梁覆盖了一个类似的项目。

测试网

测试网络上的全部BTC和STX都将被模拟,可是开发人员有明确的理由参加。Blockstack计划了一系列的漏洞赏金计划,涉及从安全到智能合约功能的全部内容。

利用参加测试网,开发人员能够 协助Blockstack发现问题并获得奖励。

关于堆栈共识设计的一些注意事项,将在此处开展测试:

由于过失行为而失去抵押密码的通常威胁不是Stacks区块链上“堆栈”节点设计的一部分。

已实现Tezos样式的委派,因此用户无需运行节点即可参加。

根据参加级别,运行节点所需的STX阈值已降低并且将是动态的。Blockstack并没有得出实际的数字,可是当我们上一次介绍Blockstack2.0时,它是100,000STX。

该测试网将为智能合约开发人员出示一个机遇,以试用Blockstack的新编程语言Clarity,该语言也将在此处开展预览。

针对新网络而言,测试网可能是促进开发人员选用的重要机遇。ElectricCapital去年的一份报告显示信息,精心设计的测试网一直是使大量开发人员对新的公共区块链感兴趣的最好工具之一。

Stacks区块链于2018年末首次启动。Blockstack期待今年夏天主网发布其新的共识机制Blockstack2.0。

展开阅读全文

区块链共识机制有哪些?投资者要牢记这些!

全文共 917 字

+ 加入清单

区块共识机制有哪些?区块链在市场上并没有像银行一样的中心化机构,区块链共识机制有哪些?共识机制指的是不同的群体找寻共同的目标,在某些方面可以达成一致的意见,为区块链是完全去中心化的,所以在传输信息以及价值转移时,共识机制可以保证每一次的交易都可以是一致的,并且是正确的区块链,这种共识机制在不依靠任何组织的情况下,可以大规模高效的完成,那区块链共识机制有哪些?

1、工作量证明区块链共识机制有哪些工作量证明可以算是其中之一,这可以简单的理解为市场当中的一份证明,证明过你做到了一定量的工作,然后去检查工作结果,这个时候就可以看一下,投资者是否完成了一定量的工作。在区块链共识算法当中使用最多的便是pow,如今的比特币和以太坊货币在市场当中都是基于这样的机制。比如比特币区块生成的过程当中,所使用的便是pow的机制,也就是大家简单理解的共同去争夺记账权,谁能够抢到并正确完成工作就可以获得一定的奖励,也就是市场当中说到的挖矿。许多矿工都是通过计算机的算力去完成工作的,有这个计算能力的就是矿机,投资者若不理解,可以来到OKLink浏览器上查看学习,在OKLink浏览器中可以查看到具体知识。

2、权益证明投资者最想了解的便是区块链共识机制有哪些?而权益证明就是其中一项,持有代币的数量和时长可以直接决定着投资者在市场当中记账的几率,这就类似于在购买股票时可以拿到的分红制度,如果手里的股票越多,那么可以获得的分红也就越多,所以代币在市场当中也就相当于权益,市场当中有很多数字产品,用到的都是pow的新币。像这些基础的知识在OKLink浏览器上是可以查看到的,很方便。

3、委托权益证明区块链共识机制有哪些?委托权益证明是投资者经常听到的一个词,这也是基于pos直接延伸出来的一个解决方案,像这种方式在市场当中更像是董事会进行投票,如果有投资者获得代币,那么可以直接把票投给那些固定的节点,然后再去选择很多的代理人,由这些代理人进行验证和记账,当然不同的pow和pos在市场当中可以参与记账的竞争,而dpos在市场当中记账点的时间是可以确定的。为了能够让更多的人去参与竞争,系统会生成很少的一些代币当做奖励,就比如比特币才用的,就是这种方式。

展开阅读全文

区块链上的共识机制到底是什么意思?如何加以改善?

全文共 862 字

+ 加入清单

区块链上的共识机制是什么?如今的区块链早已进入到火热投资的阶段,所以许多的企业都已经开始利用区块链技术,但是你是否知道区块链上的共识机制到底是什么意思?在平时使用过程中能够发挥出实际的效果吗?下面内容就为大家详细的介绍一下,很多人会发现,这其实就是一种很明显的差异化表现,也同样拥有着一致性和有效性。

1、区块链上的共识机制是什么意思

首先我们可以看一下每一个人,其实差异不仅仅是在外貌上,同样也体现在个人的能力,或者是个人的兴趣,以及文化观点等众多的方面。简而言之,协商一致是根据某一个特定的方面所达成的协议,因此区块链上的共识机制也是为了有效解决区块链统一性的问题,但是也需要满足于两个属性,首先就应该满足于一致性,另外也需要满足于有效性,因此后期在使用过程中就有着更好的效果。

2、区块链上的共识机制需要如何加以改善

在当前的分布式系统中,同样也需要通过异步通信的方式来形成一个不同的网络群体,能够保证每一个主机都具有一致性,由于错误的消息很有可能就会出现不断传播的现象。那么首先就应该保证每一个主机都拥有安全可靠的一致性,这是必要的一点,在相互不信任的市场环境中,首先就应该考虑到自身利益的最大化,然后就可以判断每一个记录的真实性,最终就可以确定的记录在区块链中。换句话说,如果节点之间有相互竞争,也根本就不可能会欺骗到投资者。

另外区块链是否拥有一致性的机制,这一点也非常的重要,会导致整个性能产生不同的影响,首先还是要从不同的方面来考虑区块链上的共识机制技术水平分别是安全性还有可扩展性。安全性是指能不能够预防二次支付,是否拥有更好的容错能力,可扩展性主要是看是否能够支持网络节点的扩展,是否可以按照对象的不同来分成完全不一样的部分。

区块链上的共识机制,简单来说,拥有着不一样的属性,也是为了能有效解决当前统一性的问题,但是到底怎么样才能够加以改善呢?首先还需要从安全性方面还有容错方面来考虑,如果说节点之间确实有竞争,这也无可厚非,但是因为能够有效的判断每一个记录的真实性,所以就算有相互的竞争,也同样不会影响到投资者。

展开阅读全文

区块链共识机制算法有几种?共识机制有几种?

全文共 818 字

+ 加入清单

比特币出现后,区块链吸引了大众视线,不过很多人都不知道区块链共识机制算法是什么?如果你想学习区块链技术,那你就要知道区块链共识机制算法包括些什么?区块链是去中心化的技术,它没有中心服务器,不会受到任何人或者任何机构的控制。不过区块链可不是单一的技术,它包含着多种底层技术,而且还含有特殊的共识机制。下面就一起来看看区块链共识机制有哪几种?区块链共识机制算法是什么?

一、区块链共识机制有几种区块链我们常见的共识机制有三种,而这三种区块链共识机制算法是什么?先来看看包括哪几种机制?第一种指的就是权益证明PoS,这是一种可以升级的共识机制,本质上是用来证明代替算力的正面。记账的权利由最高权益的节点来获得,而不是最高算力的节点。另外还包括股份授权证明机制,这就像是董事会的投票一样,持有比特币的人可以投出节点,然后代理他们的验证和记账等等。当然还包括第三种,也就是工作量的证明。这是通过计算来获得记账权的一种算法证明机制。

二、区块链共识机制算法什么上面的三种机制共同来完成了区块链的共识证明,不过区块链共识机制算法不止一种,是保瑞波共识算法和实用拜占庭容若算法两种。瑞波共识算法则是使得一组节点的列表可以达成共识,然后特殊的列表就可以接纳其他的新的成员。然而拜占庭容错算法指的是客户端可以向主节点来发送一些请求调用的服务,主要的节点就可以广播给其他的副本,然后副本又回执到客户端。

区块链是现在重点发展的技术之一,很多人之所以在意区块链技术,正是因为区块链共识机制算法的存在。区块链不但用来创造出了比特币、以太币和莱特币,甚至还运用到了金融业务上。政府利用区块链来管理数据,银行发展区块链到跨境支付,我国还有很多行业在等着区块链融入。你要是对区块链技术感兴趣,你可以到oklink浏览器上感受它的强大。OKLink浏览器就是采用全球领先的区块链技术打造的。在这个平台上可以直接搜索钱包里的虚拟币数目,可以查询虚拟币交易状态,效率高且操作简单。

展开阅读全文

关于共识机制 | 你知道的、不知道的

全文共 2551 字

+ 加入清单

【导读】共识机制的发展史,代表着区块链技术从1.0走向2.0以及更远的未来。从某种程度上讲,对于共识机制的突破与创新,直接决定了区块链未来大规模商业化的应用。

如果将去中心化的区块链技术比作一个生命体,那么共识机制可以说就是它的生命之源。

1.什么是共识机制?

相信每一位对区块链技术有所了解的人,都或多或少的了解过一个相关的理论——“拜占庭将军问题”,甚至对于很多人而言,拜占庭将军问题是很多人了解区块链技术原理的“第一扇大门”。

“拜占庭将军问题”源自著名图灵奖得主莱斯利·兰波特在其同名论文中提出的分布式对等网络通信容错问题。根据维基百科的解释,拜占庭将军问题即:

在分布式计算中,不同的计算机通过通讯交换信息达成共识,按照同一套协作策略行动。但有時候,系统中的成员计算机可能出错而发送错误的信息,用于传递信息的通讯网络也可能导致信息损坏,使得网络中不同的成员关于全体协作的策略得出不同结论,从而破坏系统一致性。

拜占庭是古代东罗马帝国的首都,由于当时帝国的国土幅员辽阔,为了达到防御的目的,因此每个军队都分散驻守,将军与将军之间只能依靠邮差进行通信。当战争的发生时,所有将军需要达成一致的共识共同出击才能取得成功,否则就会失败。但是军队内部可能存在叛徒或间谍,因此将军们需要一种机制保证所有的将军都对进攻的时间有一个相同的认识,也就是——即使信使真的有奸细,而且他采用了任何他能想到的措施,其余忠诚的将军也可以在不受叛徒的影响下达成一致的协议。

“共识”就是在一个由多方组成的系统中,在某一个步骤中让一个系统中所有的节点对一个值达成一致。

也就是说,在区块链系统中,每一个共识机制都需要回答下面的问题(包括但不限于):

What——下一个区块应包含哪些交易?

Who——下一个区块应该由谁来生成?

When——下一个区块应该何时产生?

Evolution——如何升级共识协议?

Immunity——如何解决交易历史的竞争问题?

共识机制的目标,就是找到这些问题的答案,并确保其健壮性以抵制攻击者试图获得网络的控制权。实际上,获得控制就意味着获得了单方面审查交易的能力。共识机制也应当能健壮地抵御攻击者利用在不同计算机上的数据库状态中的临时不一致性获取好处。

2.共识机制可以解什么问题?

在回答“共识”究竟能解决什么问题之前,我们必须了解两个在分布式系统中已经被证明的结论:CAP定理和FLP不可能性定理。

CAP定理指的是在一个分布式系统中,在Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)中,最多只能实现两点,不可三者兼得。

其中,一致性代要求在分布式系统中的所有数据,在同一时刻达到同样的值,也就是说所有节点访问同一分最新的数据副本;可用性要求,系统中部分节点出现故障以后,系统整体可以正常相应,不被故障节点影响;分区容错性则要求,系统如果不能在时限内达成数据的一致性,就必须在C和A之间做出选择。

FLP不可能性定理则是指,对于允许节点失效情况下,纯粹异步系统无法确保一致性在有限时间内完成。

FLP不可能性定理已经证明,在一个异步网络中我们永远也达不成一致。而CAP定理,则让我们在设计算法时所有倾向,是使用CP算法(高一致性算法),还是AP算法(高可用算法)。

共识算法本身可以描述为在某一个步骤中让一个系统中所有的节点对一个值达成一致,即使系统中存在故障, 我们也要忽略掉这些故障节点的噪音让整个系统继续正确运行, 而问题的难点就在于在一个异步网络中将这些噪音降到最小。

3. 不得不谈的去中心化

至此,我们可以清晰地看到一些区别所在:

在一个中心化的结构体系中,整个系统的共识可以由中心来决定,各个节点只需要接受中心所下达的“命令”即可,这也是中心化系统运作更加高效的原因所在。而在去中心的体系中,所有参与系统的节点是处于一个平等的地位,当节点之间出现分歧时,就需要依靠设计巧妙的共识机制来使其顺利地运转下去。

因此,共识机制也被很多人称作是去中心化系统的核心灵魂所在,二者相辅相成、缺一不可。只有在保证去中心化的前提下共识才能保持一致,如果确保共识的节点数量较小或者受到中心化的控制,那么就很容易被攻击。

判断一个协议是不是去中心化,需要看这个协议能不能在全部节点都永久性删除后,仅依靠一个节点仍然能够恢复过来正常运作。如同一个菌丝体借助单细胞就能恢复过来一样。我们称之为完全去中心化,但逃脱不了生物学界的一个事实,多细胞生物比单细胞生物更高级,即以损失一定程度的去中心化为代价。

其实,我们在讨论一个项目是不是去中心化的时候,有所争议的往往是此节。比如对于EOS这种DPOS共识机制是否是去中心化的争论:

提问方问的是系统治理的去中心化程度,而回答者则回答其他两者的去中心化程度。如此沟通如何达成一致?因此我们有对去中心化分层的必要,并从以下三个层面来理解去中心化:

首先是系统部署的去中心化。在现实世界中,基于docker(一个开源的应用容器引擎)等虚拟技术和运用这些技术的云计算平台,以下三个问题往往很难拆分:

①系统有多少节点组成?

②部署在几台物理计算机中?

③分数多少个地区?

但是最终我们想实现系统部署去中心化的目的是一样的,就是降低同一时间节点崩溃的数量,例如地震、海啸、云平台安全事件等。

其次是系统逻辑去中心化;在系统的运行流程中,这个系统是由一种角色组成?还是多种角色合作组成?或者说,是由一台完整的单一设备组成,还是多种不同种类的设备组装的小组?举个例子,针对一个系统,我们在任意一个时刻,将系统分成2份,系统都能完整的独立运行下去么?如果以后两部分又合二为一了,系统还能正常运行么?

第三,系统治理去中心化;针对一个区块链项目,有两个重要的权限控制:系统修改权限和系统数据权限。针对系统修改权限,有多少个人或者组织,对组成系统的计算机拥有最终的控制权?针对系统数据权限,权限控制是否亏归属于每个个体?有多少涉及管理,查看非自身数据的权限?以及如何制定权利边界?

其实,我们不仅需要对区块链的去中心化进行分层理解,更重要的是,目前区块链技术已经发展到了2019年,从某种程度上讲,单纯用“中心化”和“去中心化”无法准确的描述我们目前所用到的方案。

展开阅读全文