粒子币钱包(nxt在线钱包)

以太坊工作量证明算法是什么,有什么价值从算法层讲清楚以太坊工作量证明

以太坊的工作量证明算法是什么?对于没有学过数学的同学来说,从算法层面理解以太坊的工作量是非常困难的。一本黄皮书会压倒一大批吃瓜群众。因此,本文将尝试用图文和最简单的数学来解释以太坊中挖掘工作量的证明,包括以太坊如何对抗ASIC1、如何动态调整挖掘难度以及如何检查挖掘的正确性。

认识工作负载证明PoW

工作证明(PoW)是一种针对服务和资源滥用或拒绝服务攻击的经济对策。一般要求用户进行一些复杂耗时的操作,答案可以由服务提供者快速核对,以消耗的时间、设备和精力作为保障成本,保证服务和资源被真实需求所使用。

摘自维基百科

这个经济反应政策的概念是在1993年提出的,直到1999年才使用了工作证明这个词。

工作证明,直接翻译为工作量证明。这个中文词直接听起来有点混乱。其实如果我告诉你结婚证和离职证,你是不是先想到一张上面印着东西的纸?别人看到这张纸,就知道你确实结婚了,或者你确实离职了。工作量证明也是语法上的一个逻辑,也可以理解为一张纸,通过它你可以证明自己确实完成了一定的工作量。这就是工作量证明的字面意思。

工作量证明有什么特点?让我们抛开计算机,用真实世界的例子来说明。比如我上课不认真,老师罚我抄《桃花源记》十遍。我花了两个小时工作,最后给老师的是一张纸。老师要确定我做了很多作业,但只需要看一下。

这个例子展示了POW机制的一大特点,就是生成需要大量的劳动,而验证只需要一瞬间。工作量证明的另一个例子可以是,老师给我一道题,我给老师的计算结果,或者最后一个数字,就是我的工作量证明。回到电脑情况,当然纸是不存在的,所以所谓工作量证明就是花费大量劳动得到零币冷钱包的一个数字。

先说最早使用POW的。人们使用电子邮件时会受到垃圾邮件的骚扰。如果没有成本,发一百万封邮件真的很容易。所以,聪明的人会认为,如果每封邮件的发送成本都很小,那么垃圾邮件就会得到很大程度的遏制。

和POW就是为这个2022 coir web编辑器的目的而产生的。基本流程是邮件接收方会先广播一个问题,邮件发送方在发送邮件时必须附上这个问题的答案,这样邮件才会被接受,否则会被认为是垃圾邮件。

摘自

矿业

矿业只是解一个数学方程。方程的许多可能的解称为解空间。挖矿是为了找到解决办法。与几何方程不同,这个挖掘方程有以下特点:

1。没有比穷举法更有效的解决方法;

2。解在空间中均匀分布,每次穷举搜索找到解的概率基本相同;

3。解空间足够大,保证能找到解;

假设挖掘方程为:n=random(1.10),求n d.

当d为10时,我们可以求任意N只满足n10一次。但是当D=5时,平均需要两次运算才能找到n5。随着d的减小,运算次数会增加。

D这里是挖掘的难度。通过调整解空间中合格解的数量,可以控制解决问题的尝试次数,间接控制产生一个块所需的时间。从而可以调节和稳定块间隔时间。

当矿工多,单位时间尝试次数增加时,求解速度会更快,挖出块的时间会更少。

此时挖掘难度增加,平均尝试次数增加,挖掘时间增加。恰恰相反。

太太坊新区块的开采流程

新区块的开采难度可以通过母区块计算出来,然后求解开采方程。

挖掘工作量的证明通过一个密码学上安全的nonce证明“为了获得挖掘方程的解n,已经付出了一定的计算量”。工作负载证明函数可以用PoW来表示:

其中

是新的块头,但是nonce和mixHash都为空;2.

是块差值。3.

是块mixHash值;挖掘方程算法返回的第一个参数值;4.

是块随机数值;挖掘方程算法返回的第二个参数值;5.d是计算mixHash所需的大型dataset数据集;6.PoW是工作量证明函数,可以得到两个值,第一个是mixHash,第二个是伪随机数,它的密码学依赖于H和d

这个基本算法就是挖掘方程Ethash。通过求解可信挖掘方程,可以保证区块链的安全性。同时,挖掘出新的区块伴随着区块奖励,所以工作量证明不仅提供了保障,也是一种利益分配机制。

以下是开采工作量证明的计算过程:

一般过程如下:

1。根据父块头和新块头计算

;2.选择一个随机数作为PoW开头的Nonce的初始化值;3.将随机数和作为挖掘方程Ethash的参数;4.执行Ethash会得到两个返回值:mixHash和result5.确定结果是否高于

。如果是,nonce加1。继续彻底搜查;否则,如果是,则解决方案成功。返回mixHash和Nonce6.在块标题中记录这两个值,以完成挖掘。

方块难度

以太坊的挖掘难度是记录在方块头难度上的,那么是如何动态调整的呢?

以太坊主网调整算法修改了很多次。甚至以太坊黄皮书中的定义也与实际实现代码不一致。在这里,我用程序实现代码来说明块难度调整算法。

其中:

是创造区块的难度值。难度参数

用于影响区块时间的动态平衡。使用变量而不是直接使用两个块之间的时间间隔,用于保持算法的粗粒度,防止在块时间间隔为1秒的情况下,难度仅略高。也可以确保在这种情况下容易引起软分叉。

-99的上限只是为了防止客户端安全错误或者其他黑天鹅问题导致两块在时间上相差太远,难度值不会下降太多。在数学理论上,两个区块之间的时间间隔不会超过24秒。

难度增量会慢慢越来越快地增加难度值(每10万块),从而增加块时间差,增加以太坊2.0的桩子证明开关的时间压力。这种效应就是所谓的“difcultybomb”或“iceage”。

以太坊的理念是最终从PoW过渡到PoS。为了在转场上施加时间压力,在方块难度中嵌入了一个难度炸弹,它以2的倍数增长。如果你听过“棋牌打饭”的数学故事,你应该知道,指数增长是非常可怕的。

最后,在拜占庭版本,伴随着EIP-649。通过伪造一个块号

来延缓冰河时代的到来。这是通过从实际块数中减去300万得到的。换句话说,就是减少和blocks的时间间隔,为权益证明的开展争取更多时间,防止网络被“冻结”。

在君士坦丁堡版本升级中,以太坊的开发者在视频会议中表示,如果直接执行难度炸弹,将很难保证以太坊能够成功切换到PoS,大量矿工将会离开,这很可能会极大地影响以太坊的安全。因此,与EIP-1234一起,

被再次修订为500万,以延迟冰期。

这种挖掘难度的调整机制保证了区块时间的动态平衡;如果最近的两个块之间的间隔短,难度值会增加,所以需要额外计算,下一个块的出块时间会大概率延长。相反,如果最近的两个区块之间的间隔太长,难度值和下一个区块的预期时间会缩短。

挖矿方程式Ethash

比特币,区块链的鼻祖,是PoW的共识,已经稳定运行了10年。但从2011年开始,因为比特币有利可图,市场上出现了专业挖矿机,对哈希算法、散热、能耗进行优化,背离了比特币网络节点运行在成千上万台普通电脑中,公平参与挖矿的初衷。这容易造成节点集中化,面临51%的攻击风险。所以以太坊需要预防和提高力量。所以在以太坊设计共识算法时,期望达到两个目的:

1。反ASIC1:为算法创建专用硬件的优势应该尽可能小。理想情况下,即使开发出专有集成电路,加速能力也足够小。以至于普通电脑上的用户依然可以获得微不足道的利润。2.轻客户端的可验证性3360 A块应该能够被轻客户端快速有效的验证。

以太坊前期起草的共识算法是Dagger-Hashimoto,由Buterin和Dryja提出。然而,它被证明容易受到Sergio Lerner的共享内存硬件加速的影响。所以我最终放弃了匕首-桥本,改变了研究方向。对Dag-Hashimoto进行了大量的修改,最终形成了与Dag-Hashimoto明显不同的新算法:Ethash。Ethash是以太坊1.0的挖掘方程式。

介绍

这个算法的大致流程如下:

1。通过扫描块头直到某个点,计算每个块的种子种子。2.根据种子,可以计算初始大小为16MB的小型缓存。客户端稍微保存这个缓存,用来辅助检查块和生成数据集。3.根据缓存,可以生成初始大小为1GB的DAG数据集。数据集(64字节)中的每个条目仅依赖于缓存中的少量条目。数据集随时间线性增长,每30,000个数据块更新一次。数据集只存储在完整的客户端和挖掘器节点,但大部分时间挖掘器的工作是读取这个数据集,而不是改变它。4.挖掘就是在数据集中随机选取部分,散列在一起。可以根据缓存只生成验证需要的部分,这样就可以用少量的内存进行完整的验证,所以对于验证来说,只需要保存缓存即可。

这里选择了16 MB的缓存,因为较小的缓存允许轻型评估方法,这对于ASIC来说太容易了。1MB的缓存仍然需要非常高的缓存读取带宽,而较小的缓存可以更容易地优化。大的缓存会使算法对于轻型客户端来说太难检查块。

选择初始大小为1GB的DAG数据集是为了要求内存级别超过大多数专用内存和缓存的大小,但普通计算机可以并且仍然可以使用它。数据集的30,000个块被选择更新一次,因为大的间隔更容易创建被设计为很少更新并且只频繁读取的内存。但如果间隔太短,会增加进入壁垒,因为弱机需要花费大量时间在更新数据集的固定成本上。

同时,缓存和数据集大小随时间线性增加,为了降低循环行为中偶然规律性的风险,数据大小是一个不超过上限的质数。年增长率约为0.73倍,大致相当于摩尔定律。仍然存在摩尔定律被越过的风险,这将导致挖掘所需的内存量非常大,使得普通GPU不再可用于挖掘。因为可以使用缓存重新生成所需数据集的特定部分,并且少量内存可以用于PoW验证,所以只需要存储缓存而不是数据集。

缓存和数据集大小

缓存c和数据集d的大小取决于块的窗口周期Eepoch。

在每个窗口周期之后,数据集增长8MB(223字节),缓存增长128kb(217字节)。为了降低循环行为中偶然规律性的风险,数据大小必须是一个质数。计算缓存大小的公式:

计算数据大小的公式:

,其中素数公式如下:

这个素数从上限开始按降序计算。

生成种子哈希值

种子实际上是一个哈希值,每个窗口期(30,000块)更新一次。是将Keccak256叠加几次计算出来的。

第一个窗口期的种子hash值S为空的32字节数组,后续各期的种子hash值通过对上一期的种子hash值再次进行Keccak256 hash得到。

生成缓存

在缓存生成的过程中,缓存被切割成若干行64字节。

首先将种子哈希值的Keccak512结果作为初始值写入第一行;然后,用上行数据的Keccak512哈希值填充每一行的数据;最后,RandMemoHash算法(严格内存硬哈希函数(2014)中定义的内存难题算法)执行了三次。这个算法的目的是证明此时指定的内存量用于计算。

RandoMemosh算法可以理解为将若干行首尾相连的环形链,其中n为行数。

每次RandMemoHash计算都是依次重新填充每一行。求第I行前后两行的OR结果,然后对结果进行Keccak512 hash,填入第I行。

最后,如果操作系统是Big-Endian(非little-endian)字节序,则表示低位字节排列在内存的高端,高位字节排列在内存的低端。此时,高速缓存内容被反转以调整存储器存储顺序。最后,高速缓存数据在存储器中排序顺序与机器的字节顺序一致。

生成数据集

使用缓存生成数据集。首先,将缓存分成N个16字节的单元。在生成过程中,数据集被切割成多个64字节大小的数据项,每个数据项可以混合并发生成。最后,将所有数据项拼接成一个数据集。

1。生成索引行的数据时,先从缓存中获取索引第% n个单元的值U;

2。数据项mix的长度为64字节,分为16个4字节的uint32。第一个uint32等于u^index,另一个第I个uint32等于u I;

3。用数据项混合的Keccak512哈希值覆盖混合;

4。对混合执行FNV散列。在FNV散列法中,从高速缓存中检索256个双亲。行运算。

1)确定第p个父项位置: FNV(index^p , mix[p]) % n;2)再将FNV( mix[p], cache[p] )的值填充到 mix[p]中;其中,FNV(x,y)= x*0x01000193 ^ y ;这里的256次计算,相当于mix的16个uint32循环执行了16次。

5.再一次用数据项mix的Keccak512哈希值覆盖mix;

6.如果机器字节序是Big-Endian的,则还需要交换高低位;

7.最后将mix填充到数据集中,即 dataset[index]=mix;

2022蓑衣网小编

注意,在FNV哈希计算中,初始大小1 GB数据集累积需要约42亿次(16777216 * 256) 次计算。即使并发计算,也需要一定的时间才能完成一次数据集生成。这也就是为什么在启动一个geth挖矿节点时,刚开始时会看到一段“Generating DAG in progress” 的日志,直到生成数据集完成后,才可以开始挖矿。

Ethash挖矿方程求解

准备好数据集dataset就可以用于工作量证明计算。依赖nonce、h、dataset可计算出的一个伪随机数N,工作量证明就是校验N是否符合难度要求。工作量计算由挖矿方程Ethash定义。

上图是Ethash的计算流程图。说明如下:

1.首先将传入的新区块头哈希值和随机数nonce拼接后进行KEC512哈希,得到64字节的种子seed;

2.然后初始化一个128字节长的mix,初始化时分割成32个4字节的单元;使用128字节的顺序访问,以便每次Ethash计算都始终从RAM提取整页,从而最小化页表缓存未命中情况。理论上,ASIC是可以避免的;

3.mix数组的每个元素值来自于seed; mix[i]= s[i*4];是seed的第0、4、8…60位的值;

4.紧接着完成64次循环内存随机读写。每次循环需要从 dataset 中取指定位置p(fnv(i^s[:32],i%32) % rows)和p+1上的两个16字节拼接成32字节的m;然后,使用fnv(mix[i],m[i])去覆盖mix[i]; 其中,i是循环索引、s[:32]是种子seed的前32字节、rows是表示数据集dataset可分成rows个2022蓑衣网小编128字节。

5.然后压缩mix。压缩是将mix以每16字节分别压缩得到8个压缩项。每16字节又是4小份的fnv叠加哈希值fnv(fnv(fnv(m[0],m[1]),m[2]),m[3]);

6.拼接这8个压缩项就得到mix的哈希值mixHash;

7.最后将seed和mixHash进行KEC256哈希得到伪随机数N;8.最终,返回这两个参数:mixHash和N;

粒子币钱包(nxt在线钱包)文档下载: PDF DOC TXT
文章来源: 肖肖
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至2384272385@qq.com举报,一经查实,本站将立刻删除。