之前在将账户如何验证的时候,其实是把账户地址,交易信息进行hash打包的过程。这个过程是需要消耗计算机资源的,既然要消耗资源,那么节点为什么要参与记账呢。在比特币系统里面,完成记账的节点,他是可以获得一定数量的比特币奖励的,这个奖励其实也就是比特币的发行过程。
由于记账是有奖励的,每一次记账,是先发行一定数量的比特币到记账的账户,当前的一次记账的奖励是12.5个比特币,这样的话,就会出现大家都会去争相记账,如果大家同时去记账的话,就会引起一个问题,就是出现记账不一致的情况,这样的话必须有一个规则来限制。
这个规则是这样的:
由于在解决密码学难题的时候有一定的随机性,这个记账又可以获得奖励,因此大家形象的把记账的过程,形象的成为挖矿
之前在将账本记账的时候降到是把上一个hash值和这段时间的交易信息一起作为原始信息进行hash,如果只是这样的话,显然每个人都可以轻松的完成记账,而为了保证一段时间内,只有一个人能记账的话,就需要提高记账的难度。
比特币里是这样规定的,每次hash运算的hash值,必须满足一定的条件,即必须以n个0开头,为了满足这个条件,在计算hash的时候,就必须引入一个随机值变量(之前讲到hash函数任何一个微小的参数变化都会使得结果变化很大),因此在计算hash的时候,不断的去改变这个随机数的值,每次都可以得到一个全新的hash值,只要不停的尝试改变这个hash值,总能找到符合条件的结果
image.png
现在的电脑通常要得到一个四个0开头的hash值,通常需要一两分钟的时间,由于现在参与挖矿的计算机非常多,算力很大,所以现在的挖矿难度,是以18个0开头,率先满足这个条件的节点,就可以获得唯一的记账权
交易的记录集是这样得到的:
image.png
以上是一个真实的区块hash的例子,hash值是一个16进制的数,每一每得到一个0位,他的概率是1/16,得到18个0,他的概率就是1618,这个概率是非常小的,所以难度实现相当大的。
现在已经没有单独的节点(旷工)来挖矿了,因为基本办不到,一般都是多个节点组成矿池一起挖,然后按照算力进行收益的分成。
在将一个和技术无关的话题,从经济角度来讲,只要挖矿还有收益,总会有新的旷工参与来加剧竞争,提高算力的难度,而挖矿就会消耗更多的算力和电力,而最终这个成本是接近收益的,这是一个经济学的角度 我们国家由于电力成本比较低,所以收益相对较高,所以中国的算力会占据整个节点的一半以上。
因为记账是需要消耗资源的,因此比特币系统里面会奖励参与记账的人,同时又引入了工作量证明来引入记账冲突的问题