1. 首页
  2. 专栏

以太课堂 | 一文看懂区块链挖矿技术原理

区块链行业龙头:比特大陆,

一家上千亿估值的独角兽,有94%的收入来自矿机销售,

半年近7.5亿美元的净收入刷新了资本圈对挖矿行业的陈旧看法,

挖矿概念也在一次席卷圈外人,

本文将用最通俗的语言带你了解挖矿背后的原理!

 

来源:以太财经
作者:丁一

 

我们从众所周知的比特币切入。

 

比特币挖矿,其中有两点传播最为广泛:

 

其一,随着时间的推移,挖矿难度越来越大。

其二,挖矿人数约多,挖矿难度越来越大。

 

这两个结论看似简单且广为传播,然而它的背后却蕴含着极其复杂的原理。当我们搞清楚这两个原因时,也就能加深对挖矿以及哈希算法了。

以太课堂 | 一文看懂区块链挖矿技术原理

1

首先,区块链挖矿的本质是:生成一个区块,链入区块链的过程,就是挖矿。挖矿的人,便是矿工。

 

那区块又是什么呢?

 

区块是一块储存空间,可以储存数据。而无数区块被串在一起,便是区块链。对这些无数区块的管理方式,便是按照一个约定好的方式进行串连。而这个方式便是哈希算法。也就是挖矿的本质。

以太课堂 | 一文看懂区块链挖矿技术原理

举个栗子:

 

比如有一笔交易,从A地址转入B地址。我们需要将其记录嵌入到区块链上。我们首先是需要对这个信息进行“翻译”,因为在区块链的世界里所有的行为都是被哈希算法加密后记录的。就比如我们想将一句法语记录到只有中文系统的软件里。我们首先需要将其统一化。

以太课堂 | 一文看懂区块链挖矿技术原理

而这个“翻译”的行为,是需要有人来操作的。那么就需要矿工。矿工通过哈希算法将这个信息“翻译”并打包成一个区块。然后嵌入这条区块链的“末端”。

 

那么难点就来了:我们想要嵌入区块链的“末端”,就需要先找到上一个位于末端的那一个区块,即前一个区块。

 

前面我们说了,在区块链世界里运用的是“哈希加密”的方式运行的。这就是难点所在:哈希加密是不可解密的!没错,只有加密这个过程,却没有解密这个逆向操作。不过,因为它的这种特质,区块链也拥有了绝对安全的优势。

 

2

那么,如果我们想找到这个区块链的合适位置,并且使之能将信息成功记录到区块链上,到底该怎么操作呢?

以太课堂 | 一文看懂区块链挖矿技术原理

穷举法,没错,最简单粗暴的方式,这也是对矿机的运算能力有高要求的原因。

 

具体来讲,假如对最新的区块头进行两次SHA256计算,得到的256bit哈希结果,高位48bit是0x00000000FFFF,才算挖矿成的话,那么其概率为:(1/2)^48

 

这就好比在一座山上随手捡一块石头,正好是一块金子。我想,这也正是把生成区块并记录叫做“挖矿”的原因。

 

也许会有人说,只要矿机运算时间足够久,那么总能挖到矿呀?

 

错,这时你得了解一下上述提到的低二个广为流传的观点:越多人参与进来,挖矿难度越大!

 

为什么呢?

 

原因是这样的:如果别人计算能力强,在你挖到矿之前,如果别人先打包完成区块,并找到正确的位置并嵌入。那么就算你找到了,因为不是第一个,你所打包好的这个区块就被视为作废。此时你需要更新最新的区块链重新挖,才有可能挖到矿。

以太课堂 | 一文看懂区块链挖矿技术原理

再回过头来看上文提到的第一条:随着时间推移,挖矿难度越来越大。这到底是为什么呢?

 

简单来说,因为区块太多,链条越来越长,区块的加密计算位数会越来越多,越来越复杂。再加上比特币每四年减少一半的特点,这就加大了我们挖矿的难度系数了。如果你想获得等额的比特币,之前你只需要打包100个区块,就能获得一个比特币奖励。随着比特币四年减半的特点,现在你至少需要一千乃至上万个有效区块。

 

3

最后,我们聊点实际也是大家最关系的问题:到底通过什么方式我们可以提升挖矿速度呢?

以太课堂 | 一文看懂区块链挖矿技术原理

我们不妨先从原理角度出发:

 

“缓存”是无效的:每个区块链的哈希值都不同,历史计算过的值无法通过“查表”的方式来节省时间。

 

“scale up纵向扩展”是有效的:增强CPU的计算能力,使用特殊的芯片计算哈希是有效的。

 

“scale out横向扩展”也是有效的:单机总是有极限的,那么可以并行,一台抢不到,稿群集,这也是为什么会有那么多矿场的原因。

 

 

看完本文,在题头提到的两个被普遍传播的挖矿特点,我相信你已经有了属于你自己的理解方式。后面,以太财经将会更通俗易懂的给你带来区块链世界里其它专业知识。

 

出品:以太财经(ID:yitaicj)
作者:丁一

转载授权联系微信:Mr_Etiger(以太哥)

– END –

原创文章,作者:丁一,如若转载,请注明出处:http://www.etaicj.com/19390.html

QR code