此区块链100篇文章为在博客上看到较好的区块链解释,所以搜集而来,转载博客原地址https://blog.csdn.net/weixin_37504041
在第二篇中我遗留了一个问题,就是虽然收款人没办法验证付款人是否真的有足够的余额进行支付转账(因为现在没有一个中心机构进行认证),所以这时候就需要矿工来进行确认,对于为什么需要矿工这个角色和矿工是干什么的以及挖矿的过程,下面就来一一细说。
为什么需要矿工?
比特币是一个点对点去中心化的网络,在这个网络里任何人都可以参与进来,成为这个网络中的节点(普通节点或者矿工节点),正因为比特币的世界中没有一个中心机构来确保比特币整个系统的正常运行(这与我们现在中心化系统不一样,是比特币的一大魅力),那么如何确保比特币正常运行呢?这就需要矿工了。
矿工是干什么的?
因为比特币的交易需要进行确认,并需要将多笔交易打包成区块,矿工便是干这个的。矿工接收到用户广播的账单后,要对账单的合法性和真实性进行验证,这里的合法性,是指矿工会检验支付方的比特币是否充足。矿工们按照交易中支付方的地址,在过往合法的交易中查询该账户“转入”的比特币数量,当大于或者等于本账单中填写的数额时,这笔交易就是合法的,这回答了我们一开头的那个问题;接着矿工需要开始用不同的随机数进行哈希计算,直至找到符合目标值特征的随机数,如果找到了这个随机数,矿工需要将在 10 分钟左右发生的验证过的交易内容打包成一个不超过1MB大小的区块,然后全网广播出去,告诉其他矿工节点已经生成一个新的区块了,你们不需要再进行随机数的计算了,于是其他矿工就会进行验证这个随机数是否是正确的,如果通过了验那么这个新区块就会被添加到最长链的尾部(为什么说最长链,这里涉及到比特币的分叉,在第七篇讲),然后他们就会放弃当前区块的计算,马上继续下一个区块的随机数计算。
举个例子就是现在我和小明、小花、小白以及小李进行记账竞赛(谁赢了谁就有糖吃,所以都很努力的记账),我们都把每一笔有效的交易记录在一个本子上,因为我们的记账速度都差不多,所以我们几乎是同时把本子上的一页纸(相当于一个区块)写满,这个时候并不能以谁记账速度快来分胜负(因为大家几乎同时完成记账),所以我们还需要进行计算一道数学方程题,谁先接触这道题谁就可以获得糖果;于是大家开始埋头计算数学题,假设这时小明最先解除了答案,于是他就大喊一声,“我解出来”,这时大家就开始停下手上的计算工作,开始验证小明的答案是否就是这道题的解,结果大家都认为小明解出了答案,于是这颗糖(比特币)便属于小明的了。
挖矿的过程
挖矿的过程其实就类似于解题,谁先找到答案谁就获得记账权,从而获得比特币奖励。
挖矿的具体过程为:参与者根据上一个区块的hash值,10分钟内的验证过的交易内容,再加上自己猜测的一个随机数X,让新区块的hash值小于比特币网络中给定的一个数。这个数越小,计算出来就越难。系统每隔两周(即经过2016个区块)会根据上一周期的挖矿时间来调整挖矿难度(通过调整限制数的大小),来调节生成区块的时间稳定在10分钟左右。为了避免震荡,每次调整的最大幅度为 4 倍。
比特币如何保证矿工积极挖矿?
我在第一篇讲比特币的时候有简单提到过比特币的奖励机制,比特币的激励机制就是奖励矿工一些比特币用来激励矿工积极的记账以此来达到整个系统稳定运行的效果,所以矿工节点就需要不断的提高自己的算力来争夺打包区块的权力,因为你的算力越大你就有可能先计算出符合某一个标准的比特币区块头的哈希散列值,这就是工作量证明共识机制,简称POW,除了POW外还有POS、DPOS、RAFT等等(这个留到第六篇讲共识机制的时候再说)。比特币是通过工作量证明的共识机制来决定记账权的,通俗来讲,谁证明了自己的工作量最大,谁就负责记账。
矿工除了可以得到比特币网络奖励的比特币,还可以获得每一笔交易的手续费,奖励手续费可以保证当所有的比特币发行完毕后(总量2100万,预计到2140年发完)比特币网络仍然可以正常运行。
总结
比特币是一个设计很巧妙的系统。