ETH 挖矿算法 :设计目标,莱特币,以太坊解决方案
中本聪在比特币白皮书中指出区块链的目标是one cpu,one vote, 然而比特币的设计不足导致,简单重复的hash计算挖矿,导致出现了大量的集中矿池采用ASIC矿机,占用了大部分的算力,这与比特币的设计初衷和区块链的去中心化理念背道而驰,因此为了防止出现比特币的ASIC专业矿机,ETH挖矿算法 在设计之初就主要考虑考虑增加内存的需求,而专业矿机在内存上的差距并不大,因此对内存的提升能够有效的避免矿机的出现,于此同时,以太坊也一直考虑采用PoS(proof of stake)权益证明避免算力的集中。
早起莱特币也考虑了该问题,莱特币提出的解决方案为memory hard,增加对内存的需求,需要存储一个128K(由于对于轻节点来说不够友好,轻节点挖矿本身就不能够存储过大,因此该内存需求又不能够太大,所以只设计了128K)的随机字段的数组来计算nonce
由于设计问题,内存需求较小,且同时通过time memory trade off 来节省一半的内存),所以并没有解决实际问题,但是他的思想理念和早期的宣传还是带来了很大的影响,使得莱特币至今仍流行,莱特币的出块间隔为2分半。
以太坊的提出的设计算法为ethash,是指通过设置一大一小的数据集,初始时,其中小的为16M的cache用于验证,轻节点只需要保存这个cache即可对区块的合法性进行验证,大的是通过cache计算生成的1G的dataset,该dataset用于计算nonce,也就是挖矿,只有矿工全节点需要保存该节点,同时这两个数据集都会定期增长来增加对内存的需求。下面是挖矿的整个过程
cache: 从Seed 计算出第一个数值,然后依次计算哈希填充第二个数,然后依次填充
dataset:从cache的尾随机数进行生成 lastModify=1656662157)nonce计算:从dataset中读取两个相邻的数,与难度计算得到target范围内的数,下面是挖矿代码
全部代码
同时以太坊也提出了pre-mining 和pre-sale来提前集资为开发工作提供资金
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!