《区块链技术与应用》北大肖臻老师——课程笔记【19-20】

《区块链技术与应用》北大肖臻老师——课程笔记【19-20】


提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课程的截图,可供参考。如有错误或不足之处,请大家指正。

一、ETH-挖矿算法

Block chain is secured by mining.
对于基于工作量证明的系统来说,挖矿是保障区块链安全的一个重要手段。
比特币的挖矿算法总的来说比较成功,没有发现什么大的漏洞。但是也有值得改进的地方,就是挖矿设备的专业化,只能用专门的设备来挖矿,这种做法和去中心化和设计初衷是相违背的。

Bug bounty——有的公司悬赏来找软件中的漏洞,如果可以找到就会得到一笔赏金。
比特币的挖矿算法是一个天然的Bug bounty,如果能发现里面的漏洞或有挖矿的捷径,就可以得到赏金。

怎么才能设计出对ASIC 不友好的mining puzzle?
一个常用的做法就是增加puzzle对内存访问的需求,即memory hard mining puzzle。ASIC在内存访问方面性能不强。例子:莱特币——puzzle基于scrypt,对内存要求很高的加密算法,用伪随机数填充进数组,按照伪随机数顺序读取一些数运算求解puzzle。

莱特币伪随机数的好处:如果数组足够大,会增加求解puzzle的难度,提高挖矿难度。

Time-memory tradeoff——只保存内存区数组内奇数位的伪随机数,要用到偶数位的就根据另一半计算得到,计算复杂度高一些,内存减少一半。这个设计不像比特币主要进行哈希运算,是在运算过程中增加对内存访问的需求,对矿工来说是mining hard,缺点是对轻节点是mining hard,轻节点验证难度和挖矿难度差不多一样。

实际莱特币使用数组只有128K,实验证明这样设计对遏制ASIC的生产和使用不足以带来实质性障碍。

设计puzzle的原则difficult to solve,but easy to verify。挖矿很难,验证很容易

任何一个加密货币都存在冷启动问题,包括比特币。
冷启动:
对于基于工作量证明的加密货币来说,挖矿人数越少,越不安全,发动恶意攻击的难度越低。

莱特币的出块速度是比特币的四倍,出块间隔是每隔两分半出一个,除了scrypt ,莱特币和比特币大致一样。

以太坊的mining puzzle设计和莱特币很不一样。以太坊有一大一小两个数据集,小的是16M cache,大的是1G dataset——DAG,大的是从小的中生成出来的,设计原因是便于验证,挖矿矿工保存大的,轻节点保存小的。
小的数据集是生成一个种子节点,经过运算数组第一个元素,依次取哈希,第一个元素取哈希得到第二个元素,依次类推,填充完伪随机数的数组,得到一个cache;莱特币是直接从数组中按照伪随机数顺序读取一些数进行运算。

以太坊还要生成一个大数组,两个数组都要定期增长。大的数组的元素都是从小数组按照伪随机顺序读取一些元素,和莱特币类似,一共读256次,最后得到一个哈希放在大数据集中的第一个元素。读取大数组中元素是每次读取两个相邻的元素,循环64次,大数组有128个数,最后算出一个哈希值和目标预值比较,是否符合难度要求,不是就把块头的nonce,重复过程,通过哈希值计算得到结果。

Ethash算法伪代码
在这里插入图片描述
在这里插入图片描述
calc_dataset函数通过不断调用calc_dataset_item函数来依次生成dataset中全部full_size个元素。
在这里插入图片描述
在这里插入图片描述
这两个哈希值无关,位置相邻,生成过程独立,每个元素独立生成给轻节点验证提供了方便。
在这里插入图片描述
这些是矿工挖矿的函数的伪代码,同样省略了一些细节,展示原理。
full_size指的是dataset的元素个数,dataset就是从cache生成的DAG,header是区块头,target就是挖矿的目标,我们需要调整nonce来使hashimoto_full的返回值小于等于target。
这里先随机初始化nonce,再一个个尝试nonce,直到得到的值小于target。
在这里插入图片描述
以太坊挖矿主要以GPU为主,ethash算法有效遏制了ASIC resistance
以太坊没有出现ASIC矿机还有另一个原因,以太坊很早就计算要从工作量证明转向权益证明,权益证明不挖矿,对ASIC产生有很大威胁,因为ASIC的研发生成成本很高。

要做到ASIC resistance一个做法是不断“吓唬”大家。

以太坊采用了**预挖矿(pre-mining)**的过程,在发行货币时预留一部分货币给以太坊开发者。
Pre-sale把pre-mining预留的币通过出售的方式换取一些资产,用于加密货币的开发工作。
在这里插入图片描述
最大的25个以太坊矿池所占的算力比重(挖矿集中化程度很高):
在这里插入图片描述
以太币价格随时间变化情况(大幅度涨幅是2017-2018年):
在这里插入图片描述
以太坊市值变化情况:
在这里插入图片描述
以太坊HashRate变化情况:
HashRate——所有矿工加在一起每秒钟计算哈希的速度
(不同加密货币的HashRate不能互相比较,它们的mining puzzle不同)
在这里插入图片描述
为什么有人认为用专业的ASIC芯片挖矿更安全?
用ASIC矿机发动攻击成本很高,一旦攻击成功会证明某种加密货币是不安全的,市值会大幅度降低,早期投入的成本就收不回来了。
如果用通用设备参与挖矿,发动攻击的成本大幅度下降,不用专门购买设备,可以临时攻击,不攻击时可以进行日常生产需要。有恶意的攻击者可能会租用云服务器来发动攻击。

二、ETH-难度调整

以太坊每个区块都有可能调整出块难度,调整方法也比较复杂。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总体稳定在15s左右。说明早期挖矿难度的调整主要是以稳定出块时间为主。
在这里插入图片描述
最长合法链对于以太坊来说应该叫做最难合法链,总难度最大。
一般来说,靠后的区块难度较大。


猜你喜欢

转载自blog.csdn.net/weixin_45671901/article/details/127262941