区块链知识总结——以太坊的挖矿算法

BTC mining:

BTC chain is scured by mining.

BTC mining 饱受争议的是:需要用到专业的ASIC芯片,这与去中心化的理念背道而驰。

因此,包括以太坊在内的许多加密货币进行ASIC Resistance(抗拒专用矿机)。由于ASIC芯片相对普通计算机来说,算力强但访问内存性能差距不大,因此常用的方法为Memory Hard Mining Puzzle,即增加对内存访问的需求

莱特币:

  • 设置一个很大的数组,按照顺序填充伪随机数。
  • Seed为种子节点,通过Seed进行一些运算获得第一个数,之后每个数字都是通过前一个位置的值取哈希得到的,这样的数组中取值存在前后依赖关系。
  • 在需要求解Puzzle的时候,按照伪随机顺序,从数组中读取一些数,每次读取位置与前一个数相关。例如:第一次,从A位置读取其中数据,根据A中数据计算获得下一次读取位置B;第二次,从B位置读取其中数据,根据B中数据计算获得下一次读取位置C;如果数组足够大,对于挖矿矿工来说,必须保存该数组以便查询,否则每次不仅计算位置,还要根据Seed计算整个数组数据,才能查询到对应位置的数据。这对于矿工来说,计算复杂度大幅度上升。当然,矿工可以选择只保存一部分数据,例如:只保存奇数位置数据,偶数位置需要时再根据前一个奇数位置数据计算即可,从而对内存空间大小减少了一半(计算复杂度提高一点,但内存减少一半)。

以太坊算法:

核心思路:除了进行运算,还要增加其对内存的访问,从而实现对ASIC芯片不友好。

以太坊的puzzle基于Scrypt。Scrypt为一个对内存性能要求较高的哈希函数,之前多用于计算机安全密码学领域。

因为哈希函数的输出并不能提前预料,所以看上去就像是一大堆随机的数据,因此称其为"伪随机数"。

以太坊中,设计了两个数据集,一大一小。小的为16MB的cache(轻节点保存用于验证 ),大的数据集为1G的dataset(DAG )(矿工为了挖矿更快,减少重复计算则需要存储1GB的大数据集。),1G的数据集是通过16MB数据集生成而来的。(注:以太坊中这两个数组大小并不固定,因为考虑到计算机内存不断增大,因此该两个数组需要定期增大)

  • 16MB的Cache数据生成方式与莱特币中生成方式较为类似:通过Seed进行一些运算获得第一个数,之后每个数字都是通过前一个位置的值取哈希获得的
  • 大的DAG生成方式:大的数组中每个元素都是从小数组中按照伪随机顺序读取一些元素,方法同莱特币中相同。如第一次读取A位置数据,对当前哈希值更新迭代算出下一次读取位置B,再进行哈希值更新迭代计算出C位置元素。如此来回迭代读取256次,最终算出一个哈希值作为DAG中第一个元素,如此类推,DAG中每个元素生成方式都依次类推。

求解puzzle,即以太坊挖矿过程:

根据区块block header和其中的Nonce值计算一个初始哈希,根据其映射到某个初始位置A1,读取A1位置的数及其相邻的后一个位置A2上的数,根据该两个数进行运算,算得下一个位置B1,读取B1和B2位置上的数,依次类推,迭代读取64次,共读取128个数。最后,计算出一个哈希值与挖矿难度目标阈值比较,若不符合就更换Nonce,重复以上操作直到最终计算哈希值符合难度要求(注意有可能当前区块已经被挖出)。

python伪代码实现:

相关推荐
元媛媛9 小时前
金融行业信息
金融·区块链
电报号dapp1199 小时前
链游新纪元——链游平台开发引领游戏新潮流!
游戏·web3·去中心化·区块链
电报号dapp1199 小时前
区块链合约交易所开发攻略
web3·去中心化·区块链·智能合约
Sui_Network11 小时前
tBTC 现已上线 Sui,带来 5 亿美元的比特币流动性
人工智能·物联网·web3·区块链·量子计算
元宇宙时间1 天前
Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
人工智能·去中心化·区块链
Ashlee_code1 天前
什么是Web3?金融解决方案
开发语言·金融·架构·eclipse·web3·区块链·php
boyedu2 天前
物联网技术的关键技术与区块链发展趋势的深度融合分析
物联网·区块链
搞笑的秀儿2 天前
信息新技术
大数据·人工智能·物联网·云计算·区块链
YSGZJJ3 天前
股指期货贴水时,替代现货有啥好处?
区块链
小赖同学啊4 天前
物联网数据安全区块链服务
开发语言·python·区块链