上一期我们讲了区块链的基础知识,链接在这里《区块链入门教程***期:区块链》。今天我们就来说说区块链挖矿的知识。一、挖矿和矿工上一期我们已经说过,区块链是由很多节点组成的。为了保证节点间的同步,每个新区块的添加速度不能太快。想象一下,你刚刚同步了一个区块,准备根据它生成下一个区块,但是此时另一个节点生成了一个新的区块,你不得不放弃一半的计算重新同步。因为每个块只能跟一个块,所以你只能在第一个块之后生成下一个块。因此,您别无选择,只能在听到信号后立即同步。因此,区块链的领导者中本聪(这是化名,但他的真实身份仍然未知)故意让添加新区块变得困难。他的设计是,平均每10分钟,全网可以产生一个新的区块,一个小时只有六个。这种输出速度不是通过命令来实现的,而是通过刻意设置的海量计算来实现的。换句话说,只有通过极其大量的计算才能得到当前区块的有效哈希值,才能将新区块添加到区块链中。由于计算量大,无法快速起来。这个过程称为挖矿(mining),因为计算一个有效哈希的难度就像在全世界的沙子中找到一粒符合要求的沙子。计算哈希值的机器称为矿机,操作矿机的人称为矿工。2.难度系数看完这里,你可能会有一个疑问。都说挖矿难,但是用电脑算个hash算不上挖矿,计算也是电脑的强项。怎么会变难呢?,想不通?原因是不是任何哈希都是可接受的,只有满足条件的哈希才会被区块链接受。这个条件太苛刻了,大部分哈希都不符合要求,必须重新计算。因为每个区块都包含一个难度系数(difficulty),这个值决定了计算哈希的难度。例如,区块100,000的难度系数是14484.16236122。我们也可以将难度简单理解为:挖一个数据块需要多少时间。同时,难度值difficulty的计算公式为:难度值=***目标值/当前目标值什么是目标值:目标值是当前出块所达到的目标值的哈希值,用于矿工的工作量证明。矿工挖出的区块头哈希值必须小于目标值,才能成功挖出数据块。当前目标值是指生成的数据块的头部信息哈希值的参考索引。***目标值是一个固定值:0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF因为只有小于目标值的哈希才有效,否则哈希无效,必须重新计算。由于目标值很小,hash值小于这个值的可能性极小,可能要计算10亿次才算命中。这就是挖矿如此缓慢的根本原因。上一篇文章提到过,当前区块的哈希由区块头唯一确定。如果要对同一个区块重复计算hash,就意味着blockheader必须不断变化,否则不可能计算出不同的hash。区块头中的所有特征值都是固定的。为了让区块头发生变化,中本聪特意添加了一个名为Nonce的随机项。Nonce是一个随机值。矿工的作用其实就是猜测Nonce的值,让区块头的哈希值小于目标值,从而写入区块链。Nonce非常难猜,目前只能采用穷举法逐一试错。根据协议,Nonce是一个32位的二进制值,即最大为21.47亿。第100000个区块的Nonce值为274148111,可以理解为矿工从0开始,计算了2.74亿次才得到一个有效的Nonce值,这样计算出来的hash才满足条件。运气好的话,过段时间说不定就能找到Nonce。如果你运气不好,你可能计算了21.47亿次都没有找到Nonce,也就是不可能为当前的块体计算出满足条件的hash。此时,协议允许矿工更改区块体并开始新的计算。3.难度系数动态调整上一篇文章提到,挖矿是随机的,不能保证正好十分钟出块。有的时候一分钟就能算出来,有的时候可能几个小时也算不出结果。一般来说,随着硬件设备的提升,矿机数量的增加,计算速度肯定会越来越快。为了让输出速率保持在十分钟不变,中本聪还设计了难度系数动态调整机制。他规定难度系数每两周调整一次(2016个区块)。如果这两周的平均出块速度为9分钟,则意味着比法定速度快了10%,那么接下来的难度系数会增加10%;如果平均生成速度为11分钟,则表示这比法定速度慢10%,因此下一个难度系数将降低10%。难度系数调的越来越高(目标值越来越小),使得挖矿难度越来越大。不过,有人可能会问,区块链是去中心化的,谁来调节难度?难度调整在每个完整节点内独立且自动发生。所有节点每2,016个区块调整一次难度。难度调整公式是通过将最后2,016个区块的持续时间与20,160分钟(两周,这是这些区块以10分钟的速率计算的预期持续时间)进行比较来计算的。根据实际时间与预期时间的比率调整难度(更难或更容易)。简单来说,如果网络发现出块速度快于10分钟,就会增加难度。如果发现慢于10分钟,则降低难度。这个公式可以总结为:新难度=旧难度*(最后2016个区块的实际时间/20160分钟)4、矿工收入既然挖矿不容易,为什么会有人想当矿工?以比特币为例。一是交易的确认离不开矿工。二是比特币协议规定,挖出新区块的矿工将获得奖励。一开始(2008年)是50个比特币,后来每4年减半。目前(2018年)是12.5个比特币。这也是比特币的增发机制,流通中的新比特币就是这样诞生的。您可能已经看到奖励每4年减半。由于比特币可以分为八位小数,那么到2140年,矿工将得不到任何奖励,比特币的数量也将停止增长。此时,矿工的收入完全取决于交易手续费。所谓交易手续费,就是矿工可以从每笔交易中获得佣金,具体数额由支付方自愿确定。你可以什么都不带,不给矿工一分钱,但那样的话,你的交易将不会被处理,再写入区块链并得到确认就来不及了。矿工总是优先考虑费用最低的交易。目前,由于交易笔数激增,手续费水涨船高,一个区块2000笔以上交易的总手续费可达3到10个比特币。如果你的手续费降低了,很可能一周后交易还没有确认。一个区块的奖励是12.5个比特币,加上手续费,收益还是相当可观的。按照现在的价格,可以达到75万人民币左右。想想看,运气好的话,几分钟就能挖出一个区块,得到这么大的一笔钱,于是人们蜂拥而至挖矿。5.综上所述,矿工之所以存在,是因为当前的收益大于自身的成本,唯利是图是人之常情。
