什么是挖矿

区块链中常常会听到挖矿这个名词,由于它和现实中的挖矿不同,因此不少人对这个词很费解。为何那么多人去挖矿呢?由于挖矿成功后会有奖励。为何挖矿须要大量的矿机呢?由于有大量的哈希计算。这个计算的过程就被称为挖矿。算法

哈希函数

要想明白什么是挖矿,就必需要先了解计算机中的一类函数——哈希函数。好比md五、sha256等都是哈希函数的一种实现方式,它们最终都是将任意长度的数据都转换为固定长度的数据。就如同你去办身份证同样,无论你高矮胖瘦、贫富贵贱,给你的身份证id都是一个18为的数字,这个过程就如同进行了一次哈希。函数

咱们来简单感觉一下sha256哈希函数:区块链

1. 输入可变,输出定长

不论输入的是多长,都能获得一个固定长度的字符串spa

hash("a")
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
hash("hongtao")
7530e08344cf1ec5157f34e2447182d7ec7040a36fba24fc7006499513d96c26

2. 对数据敏感

只要数据有一点变化,那么就能获得一个彻底不同的字符串3d

hash("hongtao")
7530e08344cf1ec5157f34e2447182d7ec7040a36fba24fc7006499513d96c26
hash("hongtaofu")
1059ac7a8f6d4eb9024231eb260bfcc30d23fdf1b461164741f71835c4968906

3. 单向性

给定一个字符串,好比“hongtao”,咱们能够立刻计算出他的哈希是:code

“7530e08344cf1ec5157f34e2447182d7ec7040a36fba24fc7006499513d96c26”。

可是给你一个哈希:blog

“3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d”,

要想计算出他的一个原像,这比登天还难内存

4. 不可被碰撞

好比给定一个字符串“a”,他的哈希是:md5

“ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb”。

你不可能经过计算或者暴力破解去找到另一个字符串,使得他的哈希也是:资源

“ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb”

5.从几率的角度分析

sha256函数:实际上输出的值就是256个bit(比特),若是咱们想随机去碰撞一个哈希值,那么他的几率是多少呢?每个bit能够是0或者1,256位要求所有相同,那么几率就是1 / 2^256 ≈ 1 / 10^77。而宇宙的总原子量是10^79个,总质量10^56 g。大型计算机的速度在10^20 Hz/s,我的计算机计的速度在10^10 Hz/s,我的电脑哈希计算速度在10^5 H/s。因此若是要想去碰撞哈希的话,这彻底是不可能的。

挖矿

先上一副全网挖矿统计图:
挖矿统计图

当前全网算力是95.21EH/s,1EH/s = 百亿亿次哈希/秒。而比特币的全部矿工大概须要计算十分钟,才会有一个矿工碰巧找到知足要求的哈希

1. 一个哈希的部分碰撞

好比有一个数据和一个随机数(nonce),咱们对它们做哈希,但愿获得的哈希前面有6个0

Hash("hongtao"+nonce)=000000xxxx..50...xxxx(十六进制,共64位);

这个时候咱们修改nonce,哈希也会发生变化,须要通过

16 x 16 x 16 x 16 x 16 x 16 = 16,777,216

次哈希计算,才能获得想要的哈希。

hash("hongtao623022891")
0000000bd07143fcbb02e54dc5b68f0e391f80a44d72f9ebe53ae7cc31434056

笔者的电脑是2.9GHz x 6核,大概用了1分钟才计算完,这个时候任何人想要修改前面的数据,好比把hongtao修改成taohong,修改事后都须要进行一分钟的计算才能找到合法的随机数

若是前面要求不是6个0,而是16个0,就须要计算16^10 x 1分钟。笔者的电脑须要计算2091917年才能计算出来。

如今咱们就能够利用一个哈希的部分碰撞去保证数据的很难修改了,最终达到我的、组织或国家没法修改的难度。当区块被连接起来事后,历史数据将达到全部国家都没法修改的难度

2.什么是挖矿

咱们先看看比特比区块的数据:
区块链

  • 难度:这个难度前面讲过,是根据以往的2016可区块计算出来的,表示这个区块头的哈希须要知足前面有多少个0。
  • 随机数nonce:这个就是矿工不停修的数字,而后去获得知足相应要求的哈希,若是算出来了,就表明成功挖到这个区块的矿了。将得到这个区块的奖励

注:(nonce定义的空间比较小,后面须要修改币基交易的信息才能继续挖矿)

咱们来看一个区块头的信息:
区块头信息

能够看到,当前区块的哈希和上一个区块的哈希,前面都是0。0越多表明挖矿难度越大,0越少表明挖矿难度越小。如今要求的挖矿难度是17个0。咱们前面计算了须要16个0的话须要挖2091917年,因此如今的比特币,想要用我的电脑去挖矿,简直是比中彩票、比陨石撞击地球还难。

注:这里为了方便你们的理解,直接将难度说成了前面须要多少个0,实际上对难度的定义是经过其余表达式来表示的

最后

因此挖矿须要大量的矿机,这些矿机实际上就是计算机,只是这些计算机对哈希的计算能力进行了加强。好比将哈希算法固定到硬件上面,以此来得到高速的哈希计算能力。还有的机器经过显卡挖矿,这是由于显卡也具备必定的计算能力,这样能够充分利用计算机的资源。因为计算机的速度知足摩尔定律,每过18个月,速度就会翻倍。而计算机内存的速度增加却很缓慢,大概每一年7%,因此有的虚拟币挖矿须要求结合内存,这样你们的挖矿就相对于平等一些。挖矿是一个很消耗资源的,尤为是电力,因此矿机通常都选择电费便宜的地方。

相关文章
相关标签/搜索