大家如果要来学习区块链,比特币系统是我们一定会面对的第一个大的知识模块。为什么是这样?在昨天的分享中,我们已经提到了,比特币是区块链的前身实现,区块链是比特币的后期提炼,两者的逻辑关系决定了比特币是个绕不开的家伙;如果大家是初次接触比特币,当你想和别人交流的时候,面对的第一个概念可能就是挖矿。
那么问题来了?挖矿是什么意思?挖矿和比特币是什么关系?挖矿的原理是什么?等等。这些问题在我学习区块链的过程中,困扰过我很长一段时间。下面呢,就让我们来逐一看看。
首先让我们从 比特币和挖矿的关系说起;
在开始这个话题之前,我先提个问题:大家有没有想过为什么每个区块链系统都要发行自己的数字货币?也就是前段时间的ICO热;这里面就涉及到区块链的根本作用,这个作用就是:实现社会价值在区块链上的自由流通(类比下互联网的根本作用:实现信息的自由流通);比如我可以针对汽车开发一个汽车链,针对房子开发一个房子链,针对母猪开发一个母猪链;等等;如果一个组织或个人的能量足够大,也可以发布一个面向全行业的链,这个事估计只有央行能做;那汽车、房子、母猪…想在各自的链上自由流转,从A的名下流转到B的名下,或者从C的名下流转到D的名下,一定需要个度量的尺度;这个尺度就是靠支出相应的数字货币来完成的;换句话说,每条链发布的数字货币,充当的是该链上价值流通的一般等价物;做个现实的类比:也就是我们生活中用于交易的人民币、美元、泰铢、英镑等中央货币,在我们购物时充当的作用。每条链可以类比成一个国家,每个国家是不是都有自己的货币系统?这样一想,是不是就清楚为什么每条链发行数字货币的原因了,其目的就是促使链上资产的顺利流通;
就数字货币而言,对于想做事的人,他充当的是价值流通的一般等价物;对于敛财的人,就是个圈钱的工具;
下面我们就进入正题:分析下比特币和挖矿的关系;说起二者的关系,需要先说一下在区块链中,数字货币的发布模式;
从笼统的角度来说:区块链发布链上的数字货币有两种主要形式:一种就是像比特币这种的,通过挖矿节点,不断消耗自身的算力,也就是不断挖矿的意思,来换取比特币;由于比特币系统是完全开源的,在这套开源的代码里,包含了挖矿的功能,只要一个人懂代码,就可以把这套代码进行编译部署,加入到比特币网络里面去,把挖矿功能开启,那你的宿主机开始挖矿了;在比特币系统,通过自身的算法可以动态调整全网节点的挖矿难度,保证每过大约10分钟,比特币网络中,就会有一个节点挖矿成功;一旦有人挖矿成功,比特币系统就会奖励此人一定数量的比特币,这个数量也是通过算法控制的,这个算法可以说一下:最开始的头四年,每个挖矿成功的人会得到25个比特币的奖励,每过四年衰减一半;也就是下一个四年挖矿成功奖励12.5个,再下一个四年奖励6.25个,以此类推;大约到2140年的时候,区块链发行完毕,共计约2100万个比特币;
通过上面的阐述,大家应该明白挖矿和比特币的关系了,这个关系就是:挖矿,是比特币系统发行自身数字货币,也就是比特币的必经之路。比特币系统,借助挖矿完成自身数字货币的发行;发行数字货币的过程,就是各个矿工竞争挖矿的过程。在每一个10分钟内,看谁先挖到矿,就奖励一定数量的比特币,这个奖励的过程就是比特币发行的过程;每个挖矿节点,受利益的驱使,也是不断的想办法能更快的挖矿,这也就催生了市面上的各种各样的矿池节点;
刚才我们说了,数字货币的发行有两种主要形式;比特币的是一种;另外一种,我以国内的NEO为例;NEO的发行模式是:在系统创建的时候,一次性的在创世块里,写入1亿个NEO;借助ICO,用户可以直接用人民币认购持有;这种模式有点类似于央行发行人民币;而比特币那种发行模式,和淘金很相似;
在刚才的分享中,我们不断提到了挖矿,那比特币中的挖矿到低是怎么一回事呢?
其实挖矿是比特币系统中一个形象化的表达;它背后真正的名称是POW算法,也就是工作量证明算法;工作量证明,是从经济学中来的;是1993年,由两个经济学家提出来的一种策略,就是,防止对服务滥用或者资源滥用,而采取的一种有效阻断的经济策略;
这个POW在比特币之前就已经被广泛使用了;其中比较有名的就是Google邮箱的反垃圾邮件系统;Google是怎么用的呢?google是这样做的:他要求每一个给google邮件服务器发电邮的对方服务器,必须先完成一定量的计算工作;这个计算可能会耗时对方服务线程2到3秒;2到3秒,如果是一个人在发邮件,是完全可以忍受的;如果对方是个发送垃圾邮件的脚本程序,他是根本无法忍受的,邮件脚本要做的是每秒成千上百封的往外发;
那在比特币系统是怎样用的呢?中本聪在设计实现比特币系统的时候,希望每10分钟完成一次比特币发行,由于比特币网络中有成千上万个节点,那该把币发行给谁呢?按照工作量证明的策略,也就是POW算法的思路,中本聪在比特币系统中,给每一个节点出了一个难题,大家先看下语音下方的这个截图,这是一个区块头的数据结构,大家注意一下,里面有个Nonce字段;中本聪的难题呢就是:在其他字段值不变的前提下,通过不断调节Nonce的值,来对BlockHeader这个结构体值算Hash,要求找到一个Nonce值,使得算出来的hash值小于或大于某个固定值,这个固定值,在BlockHeader结构体中,由Bits来标示;
由于hash算法是一个不可以逆的算法,没法通过具体的hash值,倒推出原文;这样每个节点只能采用穷举的方法,也就是从1开始,2 3 4 5...不断的往后试;在这个过程就开始考验各个节点的CPU计算速度了,算的快的,很快就能得到Nonce值,然后他就把这个Nonce值放在结构体里,通过P2P网络广播出去;每个系统节点收到后,发现这个Nonce值是合法的,能满足要求,就认为挖矿成功;对于那些算到半截的节点,发现有人已经算出来了,就放弃本次穷举了;然后开始通过穷举的办法,去寻找下一个区块头的Nonce值;
这样大家是不是就明白了,所谓挖矿,就是计算机通过穷举的办法,不断去找Nonce值、算Hash值的过程;谁先找到,谁就挖成功了;
到这里,基本就把挖矿及挖矿和比特币的关系说清楚了,其实围绕挖矿还有很多其他的问题需要解决,比如:挖矿难度的动态调整,入链时的孤块处理,由于网络时延或计算机处理能力导致的分叉处理等等问题,这些问题留着以后再说,今天先把挖矿这件事情和大家说明白了;希望大家听完能够有收货,如果大家愿意,可以转发给你周围对区块链感兴趣的朋友,一起学习进步;