06 ETH-挖矿算法

发布时间 2023-05-02 14:51:46作者: YangYi215

《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click


06 ETH-挖矿算法

挖矿是保障区块链安全的一个重要手段。

Blockchain is secured by mining.


bug bounty(悬赏找漏洞)

比特币的挖矿算法是一个天然的bug bounty,如果你能找到bug,就能获得很大的利润。


比特币的挖矿算法也有值得改进的地方。有一个饱受争议的问题,挖矿设备的专业化。

很多人认为与去中心化的理念背道而驰。也和比特币的设计初衷相违背的。

中本聪论文(one cpu,one vote)。


以太坊的mining puzzle的设计目标便是 ASIC resistance。

常用的做法是增加对内存访问的需求,也就是 memory hard mining puzzle。

ASIC芯片的优势是计算能力,但是对于内存访问上,没有很大的优势。


litecoin 莱特币的puzzle是基于scrypt(对内存要求很高的hash函数)。

scrypt的简单设计思想,内存中开设数组,使用伪随机数seed,对其进行hash,后面依次对前的数据进行hash。之后求解puzzle的时候,按照相应规则进行读取。

time-memory trade off

思想:增加运算过程中对内存访问的需求。(设计的任务更像是一个普通计算机该干的事情,而不是一个专用的挖矿设备)


问题:该设计思想好的地方是,挖矿的时候,对矿工来说,是memory hard,坏的地方,对轻节点来说,也是memory hard。

原则:difficult to solve, but easy to verify。

问题:验证puzzle需要的内存区域,和求解puzzle需要的把内存区域,几乎是一样大的。(轻节点也需要验证区块)


因为这个原因,实际莱特币使用的时候,数组只有128k,就是为了照顾轻节点。

当初莱特币发行的时候,目标不仅仅是 ASIC resistance,而且还是 gpu resistance。

实际上,莱特币要求的128kb的内存,不足以对ASIC芯片带来实质性的障碍。莱特币的设计目标没有达到。


虽然没有达到目标,但是对莱特币的能启动问题,是很有帮助的。

任何加密货币都存在能启动的问题。

莱特币早期的宣传对于聚集人气来说,是很重要的。

莱特币的出快速度是比特币的4倍(2.5分钟)。除此之外,两种加密货币基本是一样的。


以太坊的 memory hard mining puzzle

小:16M Cache

大:1G dataset,DAG


伪代码实现:

为什么挖矿只要hash块头的信息?

轻节点只需要下载区块头,就可以验证区块是否符合挖矿的难度要求。

汇总内容:


以太坊挖矿主要以使用GPU为主,从这一点来说,比莱特币要成功,起到了ASIC resistance。

ethash:以太坊的挖矿算法。

以太坊没有出现ASIC矿机,还有另外一个原因,以太坊计划从 PoW 转向 PoS。

权益证明:按照所占的权益进行投票,来形成共识。(类似股份投票的方式)

一个简单的办法,是不断吓唬大家。


以太坊中采用了预挖矿的过程(pre-mining)。

就是系统预留一部分加密货币给系统的早期开发者。比特币没有采用pre-mining。

pre-sale:将pre-mining中预留的一些币出售出去,换取一些资产。用于加密货币的开发工作。


以太坊的统计数据:

挖矿挖的在努力,关键还是不能输现在起跑线上。


以太坊最大的25个矿池比重:

以太坊价格变化:

以太坊市值:

以太坊的hashrate(所有矿工每秒挖矿的计算力):

以太坊中尝试一个nonce的工作量,要比比特币大得多。


有人认为让通用计算设备参与挖矿反而是不安全的。像比特币那样,采用专门的ASIC挖矿才是更安全的。

发动攻击的成本变得很高。

通用计算机挖矿,发动攻击的成本大幅度下降。(大型公司有很多服务器)

所有,有人认为让通用计算机参与挖矿是不好的,ASIC矿机一统天下才是最安全的。