主页 > 苹果版下载imtoken > 北京大学肖震老师《区块链技术与应用》ETH笔记-7.0 ETH挖矿算法之二

北京大学肖震老师《区块链技术与应用》ETH笔记-7.0 ETH挖矿算法之二

苹果版下载imtoken 2023-02-18 07:52:23

7.0 ETH挖矿算法之二

7.1 理解以太坊挖矿算法的伪代码

mkcache:根据一个种子,填充整个缓存数组。

以太坊挖矿计算_以太坊挖矿教程_以太坊挖矿全教程

calc_dataset_item:通过缓存生成大数据集中的第i个元素。 基本思路是伪随机顺序读取缓存中的256个数字,每次读取的位置从上次读取的数字算起。 从缓存中最先读取数据的位置由初始mix决定,而mix由“i”决定,而“i”每次都不一样,所以mix也一定不一样。 (不同的mix可能对应最开始读的缓存数组有相同的下标,但是第二次读的数字下标mix也会参与,所以虽然第一次读的位置可以相同,但后面的读顺序不同。那就是mix了)确定初始读取的位置也确定读取顺序。)

get_int_from_item:从hash值中解析location下标,即利用当前计算的hash值mix找到下一个要读取的cache_index。

make_item:使用两个哈希值得到一个新的哈希值。 下一个哈希值也称为mix,就是利用缓存中这个位置的cache_index的个数和当前的哈希值mix。

在这里插入图片描述

calc_dataset:填充整个DAG数组就是不断调用calc_dataset_item。

以太坊挖矿全教程_以太坊挖矿计算_以太坊挖矿教程

hashimoto_full:矿工挖矿使用的函数,header是当前要生成的区块的区块头,(挖矿只需要使用区块头,因为轻节点只需要保存区块头来验证区块是否满足挖矿难度。)nonce是当前尝试的nonce值,full_size是大数据集中的元素个数,每30000个区块元素个数会增加一次,增加原来大小的1/128,dataset是前面生成的大数据集DAG。

挖矿过程:首先根据区块头信息和初始nonce生成hash值mix,然后经过64个循环。 在每一次循环中,先根据当前的哈希值mix值获取大数据中的元素下标,然后读取移除下标指向的元素数据,再用当前的哈希值mix更新哈希值mix。 与生成DAG类似,使用了make_item函数。 使用新更新的mix和数组下标得到数组下标最后一位的值和更新后的mix。 循环64次后,返回一个hash值与目标阈值进行比较。 虽然每个循环都会读取DAG的两个相邻位置的哈希值 ,但这两个哈希值的生成过程是独立的,每个都是由16M缓存中的256个数生成的,而这个读取256个数的顺序是按照伪随机顺序生成的,没有任何联系。

hashimoto_light是轻节点用来验证的函数,header是矿工挖出的区块头,nonce是区块头包含的nonce,full_size还是大数据集的元素个数,cache是用于验证的16M缓存。 calc_dataset_item通过缓存计算大数据中的dataset_index元素。 轻节点虽然不能保存大数据集,但可以独立计算每次特定位置的元素。 它与挖矿的区别在于,DAG中某个位置的元素是从缓存中推出的,而挖矿是直接从DAG中取出并读取。

以太坊挖矿计算_以太坊挖矿教程_以太坊挖矿全教程

mine:挖矿函数是不断修改nonce值,从0到2到64次方。 先随机生成一个nonce值,然后继续+1试试。

以太坊挖矿全教程_以太坊挖矿计算_以太坊挖矿教程

所有功能的总结说明了读取顺序的随机性,验证只需要保存缓存,而挖矿则需要DAG输入。

以太坊挖矿计算_以太坊挖矿教程_以太坊挖矿全教程

目前以太坊的挖矿主要是基于GPU。 可以看出它的设计是比较成功的,这与以太坊设计的挖矿算法(Ethash)需要的大内存有很大关系。 与128K相比,1G大阵列要大8000多倍。 即使是 16MB 也比 128K 大 100 多倍。 可以看出内存需求差距很大(而且两个数组的大小会不断增长)。 当然,除了挖矿算法的设计,以太坊实现ASIC Resistance还有一个原因,那就是有望从工作量证明(POW)转向权益证明(POS)

7.2 权益证明(POS:Proof of State)

股权证明:根据持股量通过投票达成共识,类似于股权制的有限共识,根据股份数量进行投票,股权证明不需要挖矿。 对于ASIC矿机厂商来说以太坊挖矿计算,这就像悬在他们头上的达摩克利斯之剑。 因为ASIC芯片研发周期很长,成本高,如果以太坊转为权益证明,投入的研发费用全部打水漂(ASIC矿机只能挖特定的加密货币). 但实际上,以太坊仍然是一种 POW 挖矿共识机制。 在设计之初,以太坊的开发者就设想从 POW 切换到 POS,并埋下了“难度炸弹”,以防止部分矿工不愿意切换。 但截至目前,以太坊仍然基于 POW 共识机制。

其实很多时候,在面对一些问题的时候,我们只要换个思路,就能得到很好的解决办法。 在这里,如果按照最初的思路,通过挖矿算法的不断改进,无疑很难做到ASIC Resistance。 而这里通过不断推动转POS来不断威慑矿工,让矿工不敢擅自转ASIC挖矿,从而实现ASIC Resistance。

7.3 预挖(Pre-Mining)

以太坊使用的预挖机制。 这里的“预挖”不是挖矿,而是在开发以太坊时为开发者预留一部分币种。 以太坊的早期开发者现在非常富有。 比特币不采用这种模式,所有的比特币都是通过挖矿产生的。 但是早期的挖矿难度很容易,中本聪自己也有很多币。 与Pre-Mining相对应的还有Pre-Sale。 Pre-Sale 是指出售预留货币用于后续开发,类似于风险投资或众筹。 目前,加密货币的种类很多,其中一些是通过Pre-Sale来获取资金的。 如果这时候买入,如果以后上币成功,也能得到不少好处。

7.4 以太坊统计

以太坊供应量饼图(2018年)总量约1亿,蓝色部分为Pre-Mining产生(接近3/4)。 黑色部分为区块奖励产生的以太币,绿色部分为叔块产生的奖励以太币。 不管你怎么挖,关键是不要输在起跑线上。 .

以太坊挖矿教程_以太坊挖矿全教程_以太坊挖矿计算

最大25家矿池挖矿算力占比(2018年)

可见挖矿中心化程度比较高。

以太坊挖矿教程_以太坊挖矿计算_以太坊挖矿全教程

以太坊价格变化(至2018年) 可以看出,2017年,以太坊开始大幅上涨。

以太坊挖矿计算_以太坊挖矿教程_以太坊挖矿全教程

以太坊市值变化(至2018年)

以太坊挖矿教程_以太坊挖矿计算_以太坊挖矿全教程

以太坊哈希率的变化(至 2018 年)

不同数字货币的哈希率无法比较。 例如,在以太坊中尝试 nonce 的难度要比比特币大得多。

以太坊挖矿计算_以太坊挖矿教程_以太坊挖矿全教程

7.5 其他观点

本文的挖矿算法设计一直倾向于让大众参与,这才公平。 并且由于参与者的分散和算力的分散,进一步使得系统更加安全。 但是同样的事情,不同的观点会有不同的看法。 有人认为让普通电脑参与挖矿是不安全的。 和比特币一样,让中心化矿池参与挖矿是安全的。 为什么? 因为为了攻击系统,需要购买大量只能挖特定币种的矿机,通过算力进行强制51%攻击。 攻击成功后,币值必然暴跌,攻击者投入的硬件成本将全部付诸东流。 而如果允许通用计算机参与挖矿,发起攻击的成本将大大降低。 目前,大型互联网公司可以聚集他们的服务器进行攻击,攻击完成后,这些服务器仍然可以运行日常业务。 因此,有人认为,就挖矿而言以太坊挖矿计算,ASIC矿机“一统天下”是最稳妥的方式。