以太坊网络中的共识是指多个节点或代理在给定的时间点就区块链状态达成一致的能力。这与传统的定义为个人或群体之间的一般协议的共识密切相关但不同。在这里,社区必须解决在技术上(在网络内)和社交上达成共识的挑战(以确保协议不会分叉或破裂)。本章将概述建立共识的一些技术方法。
当涉及区块链上分散记录保存和验证的核心功能时,单独依靠信任来确保添加到账本的信息是正确的可能会成为问题。这种挑战在去中心化网络中更为明显,因为没有中央实体来决定什么应该和不应该被视为是真实的。缺乏一个中央决策实体是区块链受欢迎程度的主要吸引力之一,因为系统能够抵抗审查制度,并且无需对许可或信息获取权限的依赖。然而,这些好处可能带来成本,因为如果没有可信的仲裁员,任何分歧,欺骗或差异都需要使用数学,经济或社会技术进行协调。因此,分散的系统更有抵御攻击的能力,但在应对变化时却不那么果断。
获得共识和信任信息的能力将对区块链技术作为资产类别和技术的未来采用和实用具有重要意义。为了应对这一挑战并保持权力下放的重要性,社区不断尝试不同共识模式,我们将在本章中探讨。
共识度量是可测量的数据,区块链网络的节点必须在该数据上达成一致,以便为每个块中包含的数据建立并保持一致。在区块链技术中,每次将新块添加到链中时,每个网络节点都会测量并批准一致性度量。作为共识度量的结果,区块链充当了从一个确定可验证的事实延伸到下一个事实的真理链。由于共识度量,区块链协议的节点变为 迷你公证人 mini-notaries,能够从真实的节点中立即分辨出区块链的错误副本,并将该事实报告给整个网络。这些措施是必需的,以便阻止通过提交包含虚假信息的区块来欺骗网络不良行为者。由于一致性度量,区块链不仅建立了的完整性,而且长期保持不变。共识度量有多种形式,但对于此讨论而言,最重要的两种是基于风险的度量和基于工作量的度量。
通常称为工作量证明(PoW)度量,这些度量建立了共识,因为使用它们的协议将计算机设置为查找难题的答案。找到适合网络参数的散列的难题要求节点提交处理能力并使用电力与其他节点竞争以提出有效的哈希。为了便于说明,可以考虑超级计算机,它的唯一工作就是在整数空间中搜索素数。现在考虑由普通计算机组成的整个网络。这些计算机放在一起时,可以说具有超级计算机的组合计算能力。这个计算机网络的唯一工作类似于搜索另一种称为SHA-256哈希的数字的可能数字。这些数字具有独特的属性,就像素数一样,尽管在生成符合网络设定标准的哈希方面存在很大困难,但在发现时可以轻松验证它们。想象计算哈希和验证哈希的一种方法是使用拼图游戏类比。这个难题非常困难且耗时,但是一眼就能看出它是否已经完成。
当准确计算SHA-256哈希值时,它们可用作证明已使用一定量的计算能力来查找数字的证明。最新的素数是asciimath:[2^(77,232,917)- 1]。它是由计算机发现的,就像计算机发现的SHA-256哈希一样。SHA-256哈希比新素数更容易找到,但是找到哈希的固有难点在于基于哈希的度量得出它们的能力。
每个SHA-256哈希都有64个十六进制字符。例如,这里是单词“yank”的SHA-256哈希。
“yank”(SHA-256)= 45F1B9FC8FD5F760A2134289579DF920AA55830F2A23DCF50D34E16C1292D7E0
将其与三个字母“yan”的SHA-256哈希:
“yan”(SHA-256)= 281ACA1A80B52620BD717E8B14A0386B8ADA92AE859AC2C8A2AC222EFA02EDBB
两个字母“ya”的SHA-256哈希:
“ya”(SHA-256)= 6663103A3E47EFC879EA31FA38458BE23BE0CE0895F3D8B27B7EA19A1120B3D4
单个字母“y”的SHA-256哈希:
“y”(SHA-256)= A1FCE4363854FF888CFF4B8E7875D600C2682390412A8CF79B37D0B11148B0FA
如果你对足够多的随机短语进行了哈希,有点像打字机上的猴子,最终你会发现一个匹配特定模式的哈希。在哈希为“ya”的情况下,请注意它以模式“666”开头。这类似于比特币,但比特币要求找到与以“000”开头的模式匹配的哈希值。可以通过将前一个区块中的信息插入到SHA-256哈希算法中来创建的任何哈希,并用于创建下一个块,只要它在数字中具有正确数量的前导零,网络就会认可,并且区块奖励将是你的。
由于想要挖掘比特币的人数不断增加,因此每秒寻找SHA-256哈希值的算力总是越来越多。比特币软件通过自动调整共识度量的难度来处理这种意外事件,增加前导零的数量以形成共识。这可以保证新块的创建时间与前面的块大致相同。对于比特币网络,为十分钟,但可以轻松更改。在以太坊中,平均区块生成时间约为10秒。
通常称为Proof-of-Stake(PoS)度量,这些度量基于以下事实建立共识:选择创建无效区块的每个人都会失去比通过创建有效区块获得的更多的东西。该度量是通过关于链内数据的共识创造的,而不是关于链外数据的共识。基于哈希的共识度量主要关注SHA-256哈希的质量和精确性。基于风险的度量主要关注任何特定节点在添加新块时所承担的风险。
所有节点在这里达成一致的度量是哪些节点创建了正确的块,哪些节点没有。在某种程度上,这已经内置在比特币协议中。比特币协议假定正确的块是大多数节点正在挖掘的块。它假设矿工不会选择不正确的区块,因为这不利于挖掘坏区块。
另一方面,基于风险的链依赖于对未能创建网络中其他节点认可的块的创建者的快速,即时和不可逆转的影响。通过强制执行资源丢失的风险,基于哈希的度量(也依赖于不想浪费资源的人员)过程可以以更简单的方式进行缩短和实施。目前正在研究在以太坊中实现这种共识度量模型。
工作量证明是一种共识协议,它将网络中的有效区块链视为创建计算成本最高的链。这里提到的计算工作是将所有块添加到当前区块链所必须完成的工作。这项工作由网络节点完成,并且必须在计算上很困难,以便使工作变得非常重要,但也必须是可行的,以便在经过合理的努力之后可以实现。最终,网络将依赖于提供此PoW的节点以维持区块链,因此,网络的最佳利益是需要合理的PoW。
在以太坊网络以及许多其他区块链网络中,获取PoW需要找到要添加到区块链的块的哈希。这个哈希是通过散列由块的数据和随机数组成的字符串获得的(创建此字符串的方法可能会有所不同,但整个过程是相同的)。该哈希必须小于某个阈值(由网络的难度确定),并且一旦节点发现产生该哈希的随机数,则接受相应的块并将其添加到区块链中。
找到这个有效散列的方法是修改nonce,通常将其初始化为零并在每次迭代时递增,直到产生低于网络阈值的哈希。此过程称为挖掘。由于挖掘中使用的哈希函数的性质,找到有效随机数的唯一方法是通过暴力搜索,即检查随机数的每个可能值,直到找到满足网络要求的散列。因此,提供有效的随机数被认为是PoW。
权益证明(PoS,Proof-of-Stake)是公共区块链的一类共识算法,它依赖于验证者在网络中的经济利益。在基于工作量证明(PoW)的公共区块链(例如比特币和以太坊的当前实现)中,该算法奖励解密加密谜题的参与者,以便验证交易并创建新的块(即挖掘)。在基于PoS的公共区块链中(例如以太坊即将发布的Casper实现),一组验证者轮流对下一个块进行建议和投票,每个验证者的投票权重取决于其存款的大小(即赌注)。PoS的显着优势包括安全性,降低集中风险和能源效率。
通常,权益证明算法如下。区块链跟踪一组验证者,任何持有区块链基本加密货币的人(在以太坊的情况下是ether)都可以通过发送一种特殊类型的交易来将其以太币锁定到存款中,从而成为验证者。然后,通过所有当前验证者都可以参与的一致性算法来完成创建和同意新块的过程。
有许多种共识算法,以及许多方法可以为参与共识算法的验证人分配奖励,因此有许多“口味”的权益证明。从算法的角度来看,有两种主要类型:基于链的权益证明和BFT风格的权益证明。
-
在基于链的证明中,算法在每个时隙中伪随机地选择一个验证者(例如,每个10秒的周期可能是一个时隙),并为该验证者分配创建单个块的权限,这个块必须指向一些前一个块(通常是前一个最长链末端的块),因此随着时间的推移,大多数块会聚成一个不断增长的链。
-
在BFT风格的股权证明中,验证者被随机分配提出区块的权利,但是通过多轮过程来确定哪个区块是规范的,其中每个验证者在每轮中发送对某个特定区块的“投票”,在流程结束时,所有(诚实和在线)验证者永久同意任何给定的块是否属于链条的一部分。请注意,块可能仍然链接在一起; 关键的区别在于块上的共识可以在一个块内,并且不依赖于它之后的链的长度或大小。
授权证明(PoA)是PoS一致性算法的子集,主要由测试网和私有或联盟网络使用。在基于PoA的区块链中,交易有效性最终由一组经批准的链上账户确定,称为“授权节点”。确定授权节点的标准是通过网络治理结构中编写的方法确定性地决定的。
PoA被广泛认为是达成共识的最快途径,但依赖于验证节点尚未受到损害的假设。非验证参与者可以像公共以太网那样访问和使用网络(通过利用p2p交易,合约,账户等)
PoA共识依赖于验证者的声誉和过去的表现。这个想法是验证者节点将其身份/声誉放到我的身上。私人联盟网络的一个重要方面是链上地址与已知的现实世界身份之间的联系。因此,我们可以说验证节点正在盯着他们的“身份”或“声誉”(而不是他们的经济持有)。这为验证者创建了一定程度的问责制,最适合企业,私有或测试网络。
PoA目前由测试网络Kovan(PoA网络)使用,并且可以在Parity中轻松配置用于私人联盟网络。
代理权益证明(DPoS)是一种经过修改的权益证明形式,网络参与者投票选举一系列代表(也称为证人)来验证和保护区块链。这些代表有点类似于PoA中的权威节点,除非他们的权限可能被选民撤销。
在DPoS共识中,与PoS一样,投票权重与用户注入的投注金额成正比。这就产生了一个场景,即较多token持有者比较少token的持有者拥有更多的投票权。从游戏理论的角度来看,这是有道理的,因为那些具有更多经济的“游戏中的皮肤”的人自然会有更大的动力来选出最有效的代表证人。
此外,代表证人会收到验证每个区块的奖励,因此被激励保持诚实和有效 - 以免被替换。然而,有一些方法可以使“贿赂”变得相当合理; 例如,交易所可以提供存款利率(或者更加含糊地,使用交易所自己的资金建立一个很好的界面和功能),交易所运营商可以使用大量存款进行DPoS共识投票。。
Ethash是以太坊*工作量证明(PoW)算法*,它依赖于数据集的初始纪元的生成,该数据集的大小约为1GB,称为有向无环图(DAG)。DAG*使用 Dagger-Hashimoto算法*的版本,它是*Vitalik Buterin的Dagger算法*和*Thaddeus Dryja的Hashimoto算法*的组合。* Dagger-Hashimoto算法*是以太坊1.0使用的挖掘算法。随着时间的推移,DAG*线性增长,每*纪元(30,000块,125小时)更新一次。
PoW算法*涉及:
- 通过扫描*DAG*的先前块头来计算每个块的*Seed。+
- Cache 是一个16MB的伪随机缓存,根据种子计算,用于轻量级客户端中的存储。
- 来自cache的*DAG* Data Generation 在完整客户端和矿工上用于存储 (数据集中的每一项只依赖cache中的一小部分项目)+
- *矿工*通过随机抽取数据集的片段并将它们混合在一起进行挖掘。可以使用存储的缓存和低内存进行验证,以重新生成所需的数据集的特定部分。
-
Ethash-DAG: https://github.com/ethereum/wiki/wiki/Ethash-DAG
-
Ethash Specification: https://github.com/ethereum/wiki/wiki/Ethash
-
Mining Ethash DAG: https://github.com/ethereum/wiki/wiki/Mining#ethash-dag
-
Dagger-Hashimoto Algorithm: https://github.com/ethereum/wiki/blob/master/Dagger-Hashimoto.md
-
DAG Explanation and Images: https://ethereum.stackexchange.com/questions/1993/what-actually-is-a-dag
-
Ethash in Ethereum Yellowpaper: https://ethereum.github.io/yellowpaper/paper.pdf#appendix.J
-
Ethash C API Example Usage: https://github.com/ethereum/wiki/wiki/Ethash-C-API
Polkadot是一种链间区块链协议,包括与权益证明(PoS)链的整合,允许Parachain在没有内部共识的情况下获得共识。
-
Relay-Chains 连接到所有Parachains并协调区块链之间的共识和交易传递,并使用*验证函数*通过验证PoV候选块的正确性来促进Parachain交易的最终确定。
-
Parachains(跨网络的并行链),它们是区块链,用于收集和并行处理交易以实现可伸缩性。
-
无需信任,交易直接在区块链之间转移,而不是通过中间人或分散交易所。
-
汇总安全,根据共识协议规则(Rules)检查Parachain交易有效性。通过结合由动态治理系统确定的每个集团成员的一定比例的权益token资本来实现安全性。群组成员资格需要绑定来自Validators和Nominators的赌注token的输入,如果出现不良行为,可以在试验中使用不当行为证明进行扣除。
-
Bridges 通过解耦具有不同共识架构机制的区块链网络之间的链接来提供可扩展性。
-
Collators 负责监管和维护特定的Parachain,方法是将其可用交易整理为有效性证明(PoV)候选块,向Validators报告以证明交易有效并在块中正确执行。如果它有winning ticket(由最接近Golden Ticket的Polkadot地址的Collator签名)并且变得规范和最终确定,则通过支付他们从创建PoV候选区块所收集的任何交易费来激励他们。Collators被给予Polkadot地址。胶合剂不与铆接标记粘合。
-
*Golden Ticket*是包含奖励的每个Parachain的每个区块中的特定Polkadot地址。Collators被赋予一个Polkadot地址,并向Validator提供由Collator签名的PoV候选块。奖励的获奖者在PoV候选区块中有一个Collator Polkadot地址,该区域最接近Golden Ticket Polkadot地址
-
Fisherman 监控Polkadot网络交易,以发现Polkadot社区的不良行为。将验证者带到法庭并证明他们表现得很糟糕的Fisherman会被确认者的债券激励,因为债券被用作惩罚不良行为的惩罚。
-
验证者 是Parachain社区中的维护者,他们被部署到不同的Parachains来监管系统。验证者同意Merkle Trees的根源。验证者必须使交易可用。渔民可以将验证员带到法庭,因为没有进行交易,相关的Collators可能会质疑该交易是否可以作为整理证明。
-
提名者(类似于PoW挖掘)被动监督并投票给他们认为可以通过赌注代币资助他们认可的确认者。
Polkadot的Relay-Chains使用*Proof of Stake(PoS*系统,其中结构化状态机(SM)并行执行多个拜占庭容错(BFT)共识,以便SM过程收敛于越多个Parachain维度的包含有效候选者的解决方案跨的块。每个Parachain中的有效候选块是根据交易的可用性和有效性确定的,因为根据共识机制,目标验证者(下一个块)只有在具有足够的交易信息时才能从源验证者(前一个块)执行传入消息。可用和有效。验证人投票选择Collators使用规则达成共识的有效候选区块。
-
Polkadot link: https://polkadot.network
-
Polkadot presentation at Berlin Parity Ethereum link: https://www.youtube.com/watch?v=gbXEcNTgNco