一个故事读懂区块链原理】之证明机制(第五篇·共五篇)

大家好,今天小编带来【一个故事读懂区块链原理】之证明机制(第五篇·共五篇)的问题,以下是小编对此问题的归纳整理,来看看吧。

【一个故事读懂区块链原理】之证明机制(第五篇·共五篇)

接上篇:【一个故事读懂区块链原理】之奖励与共识机制(第四篇·共五篇)

【一个故事读懂区块链原理】之证明机制(第五篇·共五篇)
(图片来源网络,侵删)

怎么保证区块生成的频率为每十分钟一个,由谁来生成区块?

【一个故事读懂区块链原理】之证明机制(第五篇·共五篇)
(图片来源网络,侵删)

解决这个问题的方法有很多种,每种方法都有其偏向性,主要是在安全和效率还有数据一致性中找平衡点。下面我们介绍现有区块链中最常使用的两种共识机制,希望读者能设计出更好的机制,这也是现有区块链底层技术中最需要突破的方向。

工作量证明(POW)我们以工作量证明机制在比特币的实现来个大家做个介绍。

【一个故事读懂区块链原理】之证明机制(第五篇·共五篇)
(图片来源网络,侵删)

中本聪设计的工作量机制是在区块链打包生成哈希值的时候规定升成的哈希值必须由多个0开头。那么打包过程中就需要引入一个被称为(nonce)的随机值,区块链中想要参与打包区块工作的节点就得不停更换nonce的数值重新打包,直到生成了规定的哈希值为止。那么第一个打包成功的区块就会被其他节点认可。而这个找到随机值的难度会根据整个比特币网络的计算能力调整,确保在十分钟左右,整个网络将会有节点找到这个随机值并打包成新的区块广播到网络中。

由上可见这个机制还算挺公平的,只要你自己努力,肯计算,就会获得相应的打包权利。虽然本机制被实践证明是现在区块链世界中最可靠的共识机制,但是缺点显而易见,浪费了大量无谓的计算。现在很多人诟病比特币浪费电也是基于这个原因。

2.股权权益证明(POS)看名字就很容易该机制的运行原理,谁拥有的股权更多,谁就有更多的机会打包区块。

股权权益证明机制现在处于一个复杂的阶段,很多区块链产品的都有不同的实现方式。本文介绍一种实现方式以方便大家理解。***设比特币不使用POW而使用POS机制了,那么有打包权利的节点不再是所有愿意努力计算的节点了,而是账户上拥有比特币的节点。我们设计一个算法,账户上的每一个比特币一天产生1点比特币权益。***如我拥有10个比特币100天,那么我的账户上就拥有了1000个比特币权益。每次打包都会将我的比特币权益清零,而每次清零365个比特币权益将会收获一定的利息。而区块链在选择打包节点的概率与每个节点拥有的权益正相关。

和POW对比起来,明显减少了大量的无谓计算。但是很明显这种谁拥有的***更多,谁就更有权力,是不是很像资本主义社会

可以看到,在设计共识机制的时候我们设计者们已经抛开了纯粹的计算机算法思维,而引入了一些社会学的理论和概念。其主要原因在于分布式系统的cap定理(该定理主要描述了分布式系统中:数据一致性、系统性能、系统可靠性不能三折兼顾)。所以未来的共识机制的设计也将从人类历史上的社会机制、激励机制中找到灵感。

区块链的原理大概就讲述完了,很多概念都挺简单的,作者认为区块链很多基础的技术都是传统互联网已经非常成熟的,创新点以及未来仍有创新空间的部分就是共识机制这一块。如果有兴趣,可以更加深入的研究。和已经茁壮成长的传统互联网比起来,区块链还只是一个婴儿,无需丰富的技术经验,仅仅一次已有社会制度的***就有可能定义它的未来。

推荐阅读:

【一个故事读懂区块链原理】之什么是区块链(第一篇·共五篇)

【一个故事读懂区块链原理】之区块链如何实现(第二篇·共五篇)

【一个故事读懂区块链原理】之公钥私玥(第三篇·共五篇)

【一个故事读懂区块链原理】之奖励与共识机制(第四篇·共五篇)

我是链加加,欢迎关注我的头条号“区块链加加”,一起在区块链的世界成长!

区块链加加——专注于区块链的资讯、技术与应用!

官方博客***.blockchainxx.cn微信公众号:区块链加加

区块链共识机制之一:POW工作量证明机制

区块链可以理解为一个不可篡改的公共账本,所有参与者都能验证交易并进行记账,即为分布式账本。那到底由谁来记账?又如何保证账本的一致性、准确性呢?也就是区块链的共识机制是如何的?

区块链的共识机制就是解决由谁来记账(构造区块),以及如何维护区块链的一致性问题。目前区块链项目***用的共识机制有多种,如:POW工作量证明机制,POS权益证明机制,DPOS股份授权证明机制等等。本文说明POW工作量证明机制。

区块链的第一个成功应用比特币系统***用的POW工作量证明机制。即以比特币系统为例说明POW机制,首先比特币系统有一套激励机制让所有参与者竞争记账的权利,即谁拥有记账权谁将获取构造新区块的比特币奖励(目前奖励为12.5比特币),同时获取新区块内所有交易的手续费作为奖励。

参与者如何竞争记账权利呢?参与者通过自己的算力计算一道数学难题,谁先计算的结果,谁就拥有了记账的权利,也就可获得构造新区块的奖励。这道数学难题就是寻找一个随机数Nonce,使得对区块头的哈希计算的结果小于目标值,Nonce本身是区块头中的一个字段,所以通过不断的尝试Nonce的值,以满足区块头的哈希计算结果小于目标值。通过动态调整目标值,即可调整计算的Nonce值的难度。

关于哈希计算Nonce的过程通常类比为掷筛子游戏,基于参与游戏的筛子的个数通过调整掷得筛子的点数可调整游戏的难度。例如:100个人参与掷筛子,总共有100个筛子,要求掷得点数为100为赢,则100个人谁先掷得点数100即为胜利者,即拥有了记账权。如果发现大家掷出100点的时间太快,则可增加难度,要求掷得点数为80为赢。如果又有100个人参与游戏,则游戏中增加了筛子数,如:筛子数增加为200个,同样通过设置掷得点数来调整游戏的难度。

筛子类似于比特币网络的算力,掷得点数类似于比特币网络可动态调整的目标值。

区块链以最长的链条视为正确的链条,如果存在同时出现两个区块,会暂时并行记录两个区块,后续再生成的区块基于其中的某一个区块,将会形成的最长的链条作为一致性的链条,另外一个区块将会被丢弃,比特币是基于6个区块的确认,所以被丢弃的区块将不会获得比特币系统的奖励,也就是白白将竞争记账权的算力(电费)浪费了。基于工作量的激励,参与者必然尽最大能力构造正确的区块,也就是满足区块链的一致性。即全网的所有用户可以达成唯一的一致性的公共账本。

目前比特币系统全网算力已达到惊人的24.75EH/s,其中1E=1000P,1P=1000T,1T=1000G,1G=1000M,1M=1000K,1K=1000,H/s为每秒一次哈希计算(哈希碰撞),也就是每秒进行24.75E次哈希计算,且仍有持续的算力加入比特币系统。比特币记账权的竞争,提供算力的硬件从CPU,GPU,专业矿机,矿池。目前单机版的专业矿机已无法竞争到记账权,必须由多台矿机组合为矿池才能竞争到记账权。

深入了解区块链的共识机制及算法原理

所谓“共识机制”,是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共识。再通俗一点来讲,如果中国一名微博大V、美国一名虚拟币玩家、一名非洲留学生和一名欧洲旅行者互不相识,但他们都一致认为你是个好人,那么基本上就可以断定你这人还不坏。

要想整个区块链网络节点维持一份相同的数据,同时保证每个参与者的公平性,整个体系的所有参与者必须要有统一的协议,也就是我们这里要将的共识算法。比特币所有的节点都遵循统一的协议规范。协议规范(共识算法)由相关的共识规则组成,这些规则可以分为两个大的核心:工作量证明与最长链机制。所有规则(共识)的最终体现就是比特币的最长链。共识算法的目的就是保证比特币不停地在最长链条上运转,从而保证整个记账系统的一致性和可靠性。

区块链中的用户进行交易时不需要考虑对方的信用、不需要信任对方,也无需一个可信的中介机构或中央机构,只需要依据区块链协议即可实现交易。这种不需要可信第三方中介就可以顺利交易的前提是区块链的共识机制,即在互不了解、信任的市场环境中,参与交易的各节点出于对自身利益考虑,没有任何违规***的动机、行为,因此各节点会主动自觉遵守预先设定的规则,来判断每一笔交易的真实性和可靠性,并将检验通过的记录写入到区块链中。各节点的利益各不相同,逻辑上将它们没有合谋欺骗***的动机产生,而当网络中有的节点拥有公共信誉时,这一点尤为明显。区块链技术运用基于数学原理的共识算法,在节点之间建立“信任”网络,利用技术手段从而实现一种创新式的信用网络。

目前区款连行业内主流的共识算法机制包含:工作量证明机制、权益证明机制、股份授权证明机制和Pool验证池这四大类。

工作量证明机制即对于工作量的证明,是生成要加入到区块链中的一笔新的交易信息(即新区块)时必须满足的要求。在基于工作量证明机制构建的区块链网络中,节点通过计算随机哈希散列的数值解争夺记账权,求得正确的数值解以生成区块的能力是节点算力的具体表现。工作量证明机制具有完全去中心化的优点,在以工作量证明机制为共识的区块链中,节点可以自由进出。大家所熟知的比特币网络就应用工作量证明机制来生产新的货币。然而,由于工作量证明机制在比特币网络中的应用已经吸引了全球计算机大部分的算力,其他想尝试使用该机制的区块链应用很难获得同样规模的算力来维持自身的安全。同时,基于工作量证明机制的挖矿行为还造成了大量的***浪费,达成共识所需要的周期也较长,因此该机制并不适合商业应用。

2012年,化名Sunny King的网友推出了Peercoin,该加密电子货币***用工作量证明机制发行新币,***用权益证明机制维护网络安全,这是权益证明机制在加密电子货币中的首次应用。与要求证明人执行一定量的计算工作不同,权益证明要求证明人提供一定数量加密货币的所有权即可。权益证明机制的运作方式是,当创造一个新区块时,矿工需要创建一个“币权”交易,交易会按照预先设定的比例把一些币发送给矿工本身。权益证明机制根据每个节点拥有代币的比例和时间,依据算法等比例地降低节点的挖矿难度,从而加快了寻找随机数的速度。这种共识机制可以缩短达成共识所需的时间,但本质上仍然需要网络中的节点进行挖矿运算。因此,PoS机制并没有从根本上解决PoW机制难以应用于商业领域的问题。

股份授权证明机制是一种新的保障网络安全的共识机制。它在尝试解决传统的PoW机制和PoS机制问题的同时,还能通过实施科技式的民主抵消中心化所带来的负面效应。

股份授权证明机制与董事会投票类似,该机制拥有一个内置的实时股权人投票系统,就像系统随时都在召开一个永不散场的股东大会,所有股东都在这里投票决定公司决策。基于DPoS机制建立的区块链的去中心化依赖于一定数量的代表,而非全体用户。在这样的区块链中,全体节点投票选举出一定数量的节点代表,由他们来代理全体节点确认区块、维持系统有序运行。同时,区块链中的全体节点具有随时罢免和任命代表的权力。如果必要,全体节点可以通过投票让现任节点代表失去代表资格,重新选举新的代表,实现实时的民主。

股份授权证明机制可以大大缩小参与验证和记账节点的数量,从而达到秒级的共识验证。然而,该共识机制仍然不能完美解决区块链在商业中的应用问题,因为该共识机制无法摆脱对于代币的依赖,而在很多商业应用中并不需要代币的存在。

Pool验证池基于传统的分布式一致性技术建立,并辅之以数据验证机制,是目前区块链中广泛使用的一种共识机制。

Pool验证池不需要依赖代币就可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础之上,可以实现秒级共识验证,更适合有多方参与的多中心商业模式。不过,Pool验证池也存在一些不足,例如该共识机制能够实现的分布式程度不如PoW机制等

这里主要讲解区块链工作量证明机制的一些算法原理以及比特币网络是如何证明自己的工作量的,希望大家能够对共识算法有一个基本的认识。

工作量证明系统的主要特征是客户端要做一定难度的工作来得到一个结果,验证方则很容易通过结果来检查客户端是不是做了相应的工作。这种方案的一个核心特征是不对称性:工作对于请求方是适中中的,对于验证方是易于验证的。它与验证码不同,验证码是易于被人类解决而不是易于被计算机解决。

下图所示的为工作量证明流程

举个例子,给个一个基本的字符创“hello,world!”,我们给出的工作量要求是,可以在这个字符创后面添加一个叫做nonce(随机数)的整数值,对变更后(添加nonce)的字符创进行SHA-256运算,如果得到的结果(一十六进制的形式表示)以“0000”开头的,则验证通过。为了达到这个工作量证明的目标,需要不停地递增nonce值,对得到的字符创进行SHA-256哈希运算。按照这个规则,需要经过4251次运算,才能找到前导为4个0的哈希散列。

通过这个示例我们对工作量证明机制有了一个初步的理解。有人或许认为如果工作量证明只是这样一个过程,那是不是只要记住nonce为4521使计算能通过验证就行了,当然不是了,这只是一个例子。

下面我们将输入简单的变更为”Hello,World!+整数值”,整数值取1~1000,也就是说将输入变成一个1~1000的数组:Hello,World!1;Hello,World!2;...;Hello,World!1000。然后对数组中的每一个输入依次进行上面的工作量证明—找到前导为4个0的哈希散列。

由于哈希值伪随机的特性,根据概率论的相关知识容易计算出,预计要进行2的16次方次数的尝试,才能得到前导为4个0的哈希散列。而统计一下刚刚进行的1000次计算的实际结果会发现,进行计算的平均次数为66958次,十分接近2的16次方(65536)。在这个例子中,数学期望的计算次数实际就是要求的“工作量”,重复进行多次的工作量证明会是一个符合统计学规律的概率***。

统计输入的字符创与得到对应目标结果实际使用的计算次数如下:

对于比特币网络中的任何节点,如果想生成一个新的区块加入到区块链中,则必须解决出比特币网络出的这道谜题。这道题的关键要素是工作量证明函数、区块及难度值。工作量证明函数是这道题的计算方法,区块是这道题的输入数据,难度值决定了解这道题的所需要的计算量。

比特币网络中使用的工作量证明函数正是上文提及的SHA-256。区块其实就是在工作量证明环节产生的。旷工通过不停地构造区块数据,检验每次计算出的结果是否满足要求的工作量,从而判断该区块是不是符合网络难度。区块头即比特币工作量证明函数的输入数据。

难度值是矿工们挖掘的重要参考指标,它决定了旷工需要经过多少次哈希运算才能产生一个合法的区块。比特币网络大约每10分钟生成一个区块,如果在不同的全网算力条件下,新区块的产生基本都保持这个速度,难度值必须根据全网算力的变化进行调整。总的原则即为无论挖矿能力如何,使得网络始终保持10分钟产生一个新区块。

难度值的调整是在每个完整节点中独立自动发生的。每隔2016个区块,所有节点都会按照统一的格式自动调整难度值,这个公式是由最新产生的2016个区块的花费时长与期望时长(按每10分钟产生一个取款,则期望时长为20160分钟)比较得出来的,根据实际时长一期望时长的比值进行调整。也就是说,如果区块产生的速度比10分钟快,则增加难度值;反正,则降低难度值。用公式来表达如下:

新难度值=旧难度值*(20160分钟/过去2016个区块花费时长)。

工作量证明需要有一个目标值。比特币工作量证明的目标值(Target)的计算公式如下:

目标值=最大目标值/难度值,其中最大目标值为一个恒定值0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

目标值的大小与难度值成反比,比特币工作量证明的达成就是矿中计算出来的区块哈希值必须小于目标值。

我们也可以将比特币工作量的过程简单的理解成,通过不停变更区块头(即尝试不同nonce值)并将其作为输入,进行SHA-256哈希运算,找出一个有特定格式哈希值的过程(即要求有一定数量的前导0),而要求的前导0个数越多,难度越大。

可以把比特币将这道工作量证明谜题的步骤大致归纳如下:

该过程可以用下图表示:

比特币的工作量证明,就是我们俗称“挖矿”所做的主要工作。理解工作量证明机制,将为我们进一步理解比特币区块链的共识机制奠定基础。

后缀:【一个故事读懂区块链原理】之证明机制(第五篇·共五篇)