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

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伪代码实现:

相关推荐
区块链小八歌23 分钟前
链上资本的“工业革命”:拆解 Berachain “Bera Builds Businesses” 的真实业务版图
区块链
狙击主力投资工具1 天前
26年5月4日本周复盘总结,好票机会,下周大盘方向,热门板块方向,操作建议,实用干货
人工智能·区块链
长安链开源社区2 天前
长安链开发大赛 在期待什么样的作品?
web3·区块链
Blockchain Learning2 天前
去中心化身份(DID)模型解析:区块链如何重塑身份管理?
大数据·去中心化·区块链
BlockChain8882 天前
以太坊开发入门:从 0 到 1 搭建第一个 DApp
区块链·智能合约
haizhongjien2 天前
初始化代币发行数量并设置好锁仓和释放信息
区块链
财***权8602 天前
期权手续费一览表最新的标准
区块链
BlockChain8882 天前
AI+区块链深度探索:算法与账本的共生时代
人工智能·算法·区块链
中冕—霍格沃兹软件开发测试2 天前
区块链交易最终一致性测试的核心挑战与实践框架
微服务·架构·单元测试·区块链·集成测试·旅游
开源Z2 天前
WeDPR v3.0 适配国密(SM)区块链节点部署实战:填坑官方文档未覆盖的配置
区块链·密码学·可信计算技术