123456789101121314151617/**首先,使用创建区块链时的一些配置和consensusengineconsensus.engine等参数生成一个挖掘器,然后让矿工注册一个中央处理器
以太坊的共识机制是PoW(ProofofWorkWorkloadProvingMechanism),使用的算法是Ethash,是Dagger-Hashimoto算法的改进版本。流程如下
。
1。对于每个块,先计算一个种子,这个种子只与当前块的信息有关;然后根据种子[XY002]生成一个32M的随机数据集(缓存)。
2。根据缓存生成大小为1GB的数据集DAG(有向无环图),这是一个完整的搜索空间。挖掘的过程是从DAG中随机选取元素(类似于比特币挖掘中寻找合适的Nonce)然后哈希。,可以从Cache中快速计算出DAG指定位置的元素,然后哈希验证
要求Cache和DAG定期更新,每1000块更新一次,并规定DAG的大小随时间线性增加,从1G开始。年增长率在7G左右。
为了更好的理解这部分。我们可以简单看一下go-ethereum的代码
。1.调用miner.go中的New方法来生成一个挖掘器。
123456789101121314151617
/**首先,使用创建区块链时的一些配置和consensusengineconsensus.engine等参数生成一个挖掘器,然后让矿工注册一个中央处理器运算引擎,同时通过更新来监听同步状态并更新挖矿状态**/funcNew(eth后端,配置*参数.多路复用器链配置*事件TypeMux,引擎一致性.Engine)*Miner{Miner:=Miner{eth:eth,mux:mux,engine:engine,worker:newWorker(config,Engine,common.地址{},eth,mux),canStart:1,}miner.注册(NewCpuAgent(eth.区块链(),引擎))gominer.update()returnminer}
更新方法有一点需要注意:
1。