ETH-挖矿算法
约 1513 字大约 5 分钟
2021-11-05
相关术语
block chain is secured by mining 区块链被挖矿所保护
bug bounty 漏洞赏金
one cpu,one vote 一个cpu一票
ASIC resistance 抗ASIC性
mining puzzle 挖矿谜题
memory hard mining puzzle 内存困难的挖矿谜题
time-memory trade off 时间-内存折中攻击
difficult to solve,but easy to verify 难以解决,但易于验证
pre-mining 预挖矿
pre-sale 预售
overview
对于基于工作量证明的区块链系统来说,挖矿是保护系统的重要手段。block chain is secured by mining。比特币中的挖矿算法是比较成功的,经受住了时间的检验。bug bounty
漏洞赏金,有的公司会悬赏来找软件中的漏洞。比特币中的挖矿算法是一个天然的bug bounty
,如果你能找到里面的漏洞就能取得很大的利益。但是比特币的挖矿算法也是值得改进的地方,其中一个饱受争议的问题就是挖矿设备的专业化,用普通的计算机挖不到矿,现在都发展为ASIC芯片甚至集中好矿池了,很多人认为这与比特币的初衷、去中心化的思想是相违背的。 最早中本聪的比特币论文中提到过one cpu,one vote
。理想状态下,可以让每个人用家用电脑甚至手机都可以挖矿,这样想要聚集到51%算力发动攻击就会很难,使得系统更安全。
所以后面的加密货币设计目标中就多了一个ASIC resistance
。怎么才能设计一套对ASIC不友好的mining puzzle
呢?一种常用的做法就是增加这个puzzle对内存访问的需求,也就是所谓的memory hard mining puzzle
。ASIC芯片对于普通计算机的优势就是算力强,但是对内存访问的性能上并没有什么优势。
LiteCoin
早期的一个例子,就是LiteCoin。曾经这个莱特币是市值仅次于比特币的加密货币,它用的puzzle是基于scrypt
的,这是一个对内存要求很高的哈希函数,以前是用于计算机安全领域跟安全相关的。它的设计思想是设计一个很大的数组,然后按照顺序填充一些伪随机数,然后一次采用前一个的值去取hash填充后一个元素,填充完整个数组。这里面的数据是有依次关系的,是从第一个依次算出来的。需要求解这个puzzle的时候,按照伪随机的顺序,读取一个数,然后进行某种运算,取到下一个数,再依次类推。 这样做的好处就是对于矿工是memory hard
,必须保存整个数组。但是也会有破解之道,比如只保存奇数位的数组,不保存偶数位的,需要用到偶数位的根据奇数位算出来,这种手段称为time-memory trade off
,能减小一般所需内存。
这种puzzle如何?
好处是对于矿工来说确实是memory hard
的。但是坏处是对于轻节点来说,也是memory hard的。而设计puzzle的原则是difficult to solve,but easy to verify
。验证这个puzzle跟求解这个puzzle的区域是一样大的。是不容易验证的。
ETH
以太坊用的是俩个数据集,小的是16M cache,大的是1G的dataset叫做DAG
,这1G的数据集是从cache生成出来的。为什么要设计成一大一小呢,就是为了便于验证。轻节点只需要16M的cache就可以验证。全节点需要都使用。
它的基本思想是这样的,小的16M的cache跟上面的数组生成方式是类似的。接下来是生成一个更大的数组,比小数组要大的多的多,而且小的大的数据都会增长的。小的数组依次读256次,得到一个数,放入大的数组的第一个位置,依次类推,直到把大的dataset填充满。而求解puzzle的时候,用的是大数据集中的数,cache是不用的。第一个是根据block header中的nonce来确定读大数据集的某一个,有了第一个后,按照伪随机的顺序读去128个数。另外有区别的是读取时候要读取相邻的俩个数,读64次,所以是读128个数。最后算出一个hash值来,跟挖矿难道目标预值比较一下,是不是符合难度要求,如果不是话,把block header的nonce替换一下,换另外一个nonce,因为换了nonce,那么第一个就变了,然后就重复这个过程。
看一下ethash的伪代码,帮助理解:
第一步,生成cache
第二步,通过cache生成DAG
挖矿的函数,和轻节点验证的函数
挖矿函数
最后是一个汇总。
到目前为止,以太坊主要是有GPU的,它的算法叫做ethash。还是实现了ASIC resistance。以太坊还计划从PoW(Proof of Work)
转向PoS(Proof of Stake)
,所谓的权益证明就是按照所占的权益进行投票来形成共识,不用挖矿。 以太坊中还采用预挖矿pre-mining
,就是给早期开发者预留了以太币,等成功的时候就会很有价值,像早期以太坊的开发者现在基本都自由了。与pre-mining
相关的概念叫pre-sale
,就是把预留的币通过出售的方式卖出用来支持开发工作。
statistics
预留的是蓝色的,是不是很大占比,哈哈。
价格走势
算力分布