主页 > imtoken钱包最新版下载不能 > 比特币挖矿原理

比特币挖矿原理

我之前写过两篇关于比特币和区块链原理的文章。它们是:

“什么是比特币”

《什么是区块链》

但是比特币是怎么来的?我们如何得到它?在上一篇《什么是区块链》的最后,我也留下了一些疑问和想法。

在本文中,我们继续从底层原理入手,揭开这些谜团(如果你还没有阅读过之前的文章,我强烈建议你先阅读它们)。

什么是比特币?

比特币是一种积分。

点的作用是什么?大家都知道:

在论坛上,您可以通过发帖和回复获得积分。积分高的用户将享有特权和荣誉。积分也可以兑换实物礼物。积分用于鼓励用户发帖回复,增加论坛活跃度。

在游戏中,经验值就是积分,通过击杀怪物可以获得经验值,经验值可以用来提升游戏角色等级和交换装备,让角色更强大,角色越强大,越有趣。

同样,在比特币网络中,挖矿可以获得比特币。比特币可用于在比特币网络内转账或购买产品和服务。

不同的是,在论坛和游戏中,论坛管理员或游戏运营商(也是管理员)可以给用户积分或扣用户积分,管理员拥有最高权限。

在比特币网络中,由于它是去中心化的,没有任何管理员,应该获得多少积分是由比特币软件定义的,而且由于比特币软件是开源的,任何人都可以阅读它的代码来了解比特币的工作原理和奖励规则。

比特币挖矿产生图片

比特币是比特币网络中用于奖励挖矿的点。

那么,什么是挖矿?

挖掘是用于寻找(生产)下一个区块的过程。

在上一篇《什么是区块链》中,我提到区块链是通过哈希算法将所有区块数据“链接”在一起的区块链。如下图:

什么是Hash算法可以看上一篇文章:《什么是区块链》

但是Hash算法有个特点,就是计算速度非常快,输入原值可以瞬间得到结果。因此,只要知道前一个区块的数据,就能瞬间计算出前一个区块的Hash结果。 , 生成下一个块。

但在这种情况下,生成下一个区块的成本非常低,并且可以通过非常低的成本来奖励积分(比特币)。那么,积分显然一文不值。

当中本聪发明比特币时,他的愿景是比特币可以用作货币。那么,比特币必须具备货币的特性:

获取比特币的成本很高,不能随便获得。

发行速度有限,很多比特币无法瞬间生成。

和黄金一样,总量是不变的,挖的越多,剩下的就越少。

比特币挖矿产生图片

您可以模拟现实生活中的转账交易(本章未讨论)。

那又怎样?因此,中本聪想出了一个解决方案(或定义了一个规范):

1、当第一个区块产生时,奖励50比特币,然后每四年减半。

所以自 2009 年区块链网络运行以来,已经减半了两次(一次是 2012 年,一次是 2016 年),现在每个区块的奖励是 12.5 个比特币。由于每4年减半,预计2140年达到上限,比特币总量约2100万枚(总量不变)。

2、10分钟左右可以出块,出块的过程不能太快。

每小时产生6个区块,每个区块奖励12.5个比特币。目前每天能够生产 1800 个比特币(12.5 x 6 x 24 = 1800)。

第一个规则足以通过程序代码规范,但是如何实现第二个规范呢?

如果上一个区块的数据已知,可以通过Hash算法瞬间计算出第二个区块的HashH值,然后矿工的电脑收到交易通知,就可以瞬间产生下一个区块,得到1< @2.5 BTC 奖励,完全不受 10 分钟限制。

为了解决这个问题,中本聪需要以下区块数据格式:

这个块数据比上一章提到的块数据有更多的难度系数和nonce值。

难度系数:要求下一个区块计算的Hash值前面有几个0。比如难度系数是10,那么计算出来的Hash值前面肯定有10个0。

但是,在上一篇《什么是区块链》中,我们知道对于固定的数据,哈希算法计算出来的哈希值必须是固定的,也就是说原始值和哈希值在一个一对一的对应关系。

比特币挖矿产生图片

那么,怎么会有Hash结果前面有几个0这样的要求呢?

那么需要一个nonce值。

最后,区块的hash值应该是这样计算的:前一个区块的数据+这个区块的nonce值,然后进行hash计算。如果得到的哈希结果与前一个区块所需的难度系数相同,则链接成功。即生成了一个新的合法区块。

虽然上一个block的数据是固定的,但是你可以随意填写这个block的nonce值。只要填写正确,就代表你挖了一个区块。

如何填写nonce值才正确?

唯一的办法就是一个一个尝试。

例如:假设前一个区块的数据是:海哥,要求的难度系数为1,那么计算机可以这样尝试nonce值:

第一次尝试:nonce值为1,海格1的Hash值等于:c280c187c153782b542b2ae7110d71aab33d8c2d732f8aaaa06564f03b4a6b52不正确

第三次尝试:nonce值为3,海格3的Hash值等于:

2b27abb39ca314f3dcc1bee13c35df0f49bfa0b8fa55b5a02d2079387b191c90 不正确

...

第十九次尝试:nonce值为19,海格19的Hash值等于:

比特币挖矿产生图片

f17c24e8bcbdf8dd5ca658142b7ed70c0fcabb6c817aa96fb2006a7d2d5e9b5c 不正确

第二十次尝试:nonce值为20,海格20的Hash值等于:

0def78fd007911beac1a7cfa9b2b47381875e687fe7c1978b988f3e36df9d3b9 正确:难度系数为1,哈希值前面有一个0。

如果最后一个block的值是单词Haige,要得到难度系数为1的nonce值,可以计算20次。

其实:上面的Hash结果是16进制的(0~F),所以16次的理论平均值会计算出nonce值,难度为1。

所以:当难度系数为 1 时比特币挖矿产生图片,概率为 1/16(一) 共 16 个。

因此,难度系数为 2(连接两个 0)的概率为 1/16 x 1/16 = 1/256。也就是说:难度系数为2时,计算次数约为16×16。

同样:

备注:在比特币中,难度系数不是0-64的数值,而是通过公式计算出来的数值。数值越小,难度系数越大,但是文章可以让大家了解难度系数和nonce的关系。可以认为,难度系数为1表示前面有一个0,难度系数为2表示前面有两个0。

同时注意:在比特币网络中,难度值是不断变化的。它通过监控区块链的生成速度不断修改难度系数的值。难度值每 2015 个区块调整一次。

如果平均出块时间小于10分钟,说明比特币网络的算力在增加,难度值也会增加。如果平均出块时间大于 10 分钟比特币挖矿产生图片,说明算力在下降,难度值也会增加减少。因此,难度值随着全网算力的增减动态调整,从而保证大约每10分钟出块一次。

备注:中本聪原本计划每两周(14天)调整难度系数,每10分钟出块,每小时出块6块,每天出块144块,14天=2016块,但由于比特币代码中的一个bug,实际周期是2015个区块。

比特币挖矿产生图片

当难度系数为20时,如果你的电脑每秒可以计算1000万次(现在的办公笔记本,计算速度大约是每秒10000到100万次),那么你需要计算下一个nonce值块,需要7610350076(76亿)年。

所以,如果你想用办公笔记本电脑挖矿,洗漱睡觉,真正的挖矿应该是这样的。

(鄂尔多斯比特币挖矿设施,图片来自网络)

当一个节点(矿工)成功找到一个新区块后,他会立即将该区块广播到区块链网络,告诉其他节点我挖到了一个新区块,其他节点正在接收广播消息之后,新的区块将被验证,如果有效,则将新区块添加到该节点的区块链末尾。然后开始下一轮计算……

这样,比特币保证:

1、获取比特币的成本很高,不能随便获取。

2、发行速度有限,无法瞬间生成大量比特币。

3、就像金矿一样,总量不变,挖的越多,剩下的就越少。

等等这些货币特性,让比特币有了价值。

但是,还有很多问题没有解决,比如:

1、我挖了一个新区块,如何证明这个区块的奖励是我的?

2、我挖了一个新块。当我向全网广播时,如何保证我的劳动成果不被窃取?

3、我挖了一个新区块,我该怎么办?