位置:芙蓉财经网 >> 区块链

以太坊的工作量证明算法是什么?从算法层面讲清楚以太坊的工作量证明。

2023年06月22日 03:16

欧易okx交易所下载

欧易交易所又称欧易OKX,是世界领先的数字资产交易所,主要面向全球用户提供比特币、莱特币、以太币等数字资产的现货和衍生品交易服务,通过使用区块链技术为全球交易者提供高级金融服务。

APP下载   官网注册

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

了解工作负载证明能力

工作证明(PoW)是一种针对服务和资源滥用或拒绝服务攻击经济对策。通常,用户需要执行一些复杂的操作,这些操作需要一定的时间,服务提供商可以快速检查答案。以消耗的时间、设备、能源作为保证成本,保证服务和资源被真实需求所使用。

这个经济应对政策的概念取自维基百科

,是1993年提出的。直到1999年才开始使用工作证明这个词。

工作证明,直接翻译过来就是工作量证明。这个词直接用中文听起来有点莫名其妙。事实上,如果我告诉你结婚证,分居证你会先想到一张印着东西的纸吗?别人看到这张纸,就会知道你真的结婚了,或者说你真的离开了一家公司。工作量证明也是语法上的逻辑,也可以理解为一张纸。这张纸可以证明你确实完成了一定的工作量。这是工作量证明的字面意思。

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

此示例显示了POW机制的一个主要特征。也就是说,生成需要大量的劳动,但验证只需要一瞬间。工作量证明的另一个例子可以是,老师给我一道题,我给老师的计算结果,或者最后一个数字,就是我的工作量证明。回到电脑,纸肯定不行';不存在。所以所谓工作量证明,就是花费大量劳动得到的一个数字。

Let';让我们来谈谈电力的最早用途。人们在使用电子邮件时会受到垃圾邮件的骚扰。如果没有成本,发一百万封邮件真的很容易。。所以,聪明的人会认为,如果每封邮件的发送成本都很小,那么垃圾邮件就会得到很大的遏制。为了达到这个目,产生了粉末。基本流程是,接收者会先广播一个问题。当发送电子邮件时,发件人必须附上这个问题的答案,以便该电子邮件将被接受,否则将被视为垃圾邮件。

摘自:https://juanlan.zhihu.com/p/42694998

挖掘

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

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

2。解在空间上均匀分布,每次找到解的概率基本相同;

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

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

当D为10时,我们只需一次运算就可以找到满足n

的任意N。这里的D通常是指挖掘的难度,通过调整解空间中所需解的数量来控制尝试的次数。,间接控制生成一个块所需的时间。从而可以调节和稳定块之间的间隔时间。

挖的人多,单位时间尝试次数增加,求解的速度会更快,挖块的时间会更短。此时挖掘难度增加,平均尝试次数增加。,使得挖掘耗时增加。相反,它保持不变。

伊泰坊新区块的开采流程

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

采矿工作量证明证明"为了得到采矿方程"通过一个加密的安全随机数。工作量证明函数可以用PoW表示:

其中

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

istheblockdifficultyvalue.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的赌注证明切换的时间压力。。这种效果就是所谓的"difficultybomb";或者"iceage"。

以太坊的思路是最终从PoW过渡到PoS,以便在过渡上施加时间压力。所以在方块难度中嵌入了一个难度炸弹,难度指数增加2。如果你听过数学故事"棋牌荡饭",你要知道指数级增长是很吓人的。

最后,在拜占庭版本中,

用EIP-649,通过伪造一个块号

来推迟冰河时代的到来。这是通过从实际块数中减去300万得到的。换句话说,这是为了减少和块之间的时间间隔,以便为权限证书的开发赢得更多的时间,并防止网络被"冷冻"。

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

有了EIP-1234,

修改为500万,以延缓冰期。

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

挖矿方程式Ethash

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

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

以太坊早期起草的共识算法是Dagger-Hashimoto。,由Buterin和Dryja提出。然而,它被证明是脆弱的硬件加速塞尔吉奥勒纳';共享内存。所以我最终放弃了匕首-桥本,改变了研究方向。。经过对Dag-Hashimoto的大量修改,最终形成了一种新的算法Ethash,它与Dag-Hashimoto有着明显的不同。Ethash是以太坊1.0的挖掘方程式。

简介

这个算法的一般流程如下:

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

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

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

同时,缓存和数据集的大小随时间线性增长,为了降低循环行为偶然规律性的风险,数据大小为不超过上限的质数。。年增长率约为0.73倍,与摩尔';的法律。超越摩尔的风险仍然存在。s定律,这将导致挖掘的内存量非常大,以至于普通的GPU已经不能用于挖掘了。因为可以使用缓存重新生成所需数据集的特定部分。少量内存用于PoW验证,因此您只需要存储缓存,而不是数据集。

缓存和数据集大小

缓存C和数据集D取决于块的窗口周期Eepoch。

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

其中

计算数据大小的公式为

,素数公式如下:

这个素数计算是一个递归搜索,从上限值开始递减2*64字节,直到x/64是一个素数。

生成种子哈希值

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

第一个窗口周期中的种子哈希值S是一个空的32字节数组,而后续每个周期中的种子哈希值,最后一个周期的种子散列值由Keccak256再次散列。

生成缓存

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

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

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

每次随机存储器计算都是依次填充每一行。首先,第I行前后两行的值是OR'd,然后用Keccak512对结果进行哈希运算,填充到第I行。

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

生成数据集

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

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

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

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次计算相当于16个uint32混音周期。

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

6。如果机器字节顺序是Big-Endian,就需要交换高低位;

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

注意,在FNV哈希计算中,累积初始大小为1GB的数据集大约需要42亿次(16777216*256)。即使有并行计算完成数据集生成也需要一些时间。这就是为什么当您启动一个geth挖掘节点时,您会看到一个"正在生成DAG从一开始就记录日志,直到生成数据集。才能开始采矿。

Ethash挖掘方程求解

准备好的数据集可用于工作量证明计算。可以依靠nonce、h和dataset计算的伪随机数n。工作量证明是检查n是否满足难度要求。工作负荷计算由挖掘等式Ethash定义。

上图是Ethash的计算流程图。解释如下:

1。首先对传入的新块头hash值和随机数nonce进行拼接,然后进行KEC512hash得到64字节的种子;

2。然后初始化一个128字节的mix,初始化的时候分成32个4字节的单元;使用128字节顺序访问,以便每次Ethash计算时总是从RAM中获取整个页面,从而最大限度地减少页表缓存未命中。理论上ASIC可以不用;

3。mix数组的每个元素值都来自seed混合[I]=s[i*4];是位0、4、8的值.60的种子;

4。然后完成64次循环内存的随机读写。在每个周期中,两个16字节的m'指定位置p上的s(FNV(Is[:32],i2)%行)和p1需要拼接成32字节的m'来自数据集的;然后用fnv(mix[i],m[i])来覆盖mix[I];其中I是循环索引,s[:32]是种子的前32个字节,rows是128个字节,表示数据集可以分成多个行。

5。然后压缩混合物。压缩是将mix压缩成每16字节8个压缩项。每16个字节为4小部分fnv叠加哈希值FNV(FNV(FNV(m[0],m[1]),m[2],m[3]);

6。将这八个压缩项连接起来,得到mix的mixHash值。

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

推荐阅读

以太坊的工作量证明算法是什么?从算法层面讲清楚以太坊的工作量证明。
文章来源: summer
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至405936398@qq.com 举报,一经查实,本站将立刻删除。
相关资讯
虚拟币交易平台app活动 正规的虚拟币交易平台有哪些?
虚拟币交易平台app活动 正规的虚拟币交易平台有哪些? 1970-01-01

Ethash挖掘方程求解准备好的数据集可用于工作量证明计算

虚拟快币充值平台官网入口,虚拟快币充值平台官网入口下载
虚拟快币充值平台官网入口,虚拟快币充值平台官网入口下载 1970-01-01

Ethash挖掘方程求解准备好的数据集可用于工作量证明计算

整治虚拟货币挖矿省份排名?欧美国家为什么没有禁止?
整治虚拟货币挖矿省份排名?欧美国家为什么没有禁止? 1970-01-01

Ethash挖掘方程求解准备好的数据集可用于工作量证明计算

虚拟货币与虚拟银行学?什么是虚拟币账户
虚拟货币与虚拟银行学?什么是虚拟币账户 1970-01-01

Ethash挖掘方程求解准备好的数据集可用于工作量证明计算

加强虚拟货币 关于进一步规范和处置虚拟货币交易
加强虚拟货币 关于进一步规范和处置虚拟货币交易 1970-01-01

Ethash挖掘方程求解准备好的数据集可用于工作量证明计算

虚拟币 平台?虚拟币平台
虚拟币 平台?虚拟币平台 1970-01-01

Ethash挖掘方程求解准备好的数据集可用于工作量证明计算