小朋友也能看懂的挖矿原理
大家知道比特币需要通过“挖矿”来获得,但真正了解其原理的不多,那些艰深又复杂的密码学算法看了就头大。挖矿到底在做什么?为什么必须是挖矿这种形式?今天我们来一次性了解比特币的挖矿原理。
1. 区块链网络
比特币底层是一个 区块链网络,这是一个完全去中心化的系统,所谓去中心化,就是说数据并不是集中存在数据库里,而是区块链的参与者自己保存,这些参与者称为结点。所有结点共同维护一份数据。

这份数据就是交易数据,例如A给B转了1个BTC,E给F转了0.5个BTC,把交易数据打包到一个 区块 里面,一个又一个区块串联起来就形成了区块链。

交易要生效,就必须打包进区块,现在问题是:
- 谁有资格打包区块?
- 怎样提高参与打包的积极性?如果没人参与打包,那这个系统就没办法运行下去
- 怎么防止打包区块的人作恶?例如往自己的账户里转10000个BTC
问题2很容易解决,每发现一个有效的区块,就给打包该区块的人一些BTC作为奖励(挖矿奖励),同时区块里打包的每一笔交易,也可以获得一定的打包费(交易奖励)。既然有利可图,参与的人就多了,怎么防止参与者作恶?这一点对于小朋友们来说还不太好理解,我们放下一期再说。
现在先假设区块链的参与者都很诚实,那就还剩下一个问题:谁有资格打包区块?
2. 为什么要挖矿
我们现在已经知道答案了,矿工通过挖矿来争夺打包区块的权利,人们形象地称之为“记账权”。但一定要挖矿吗,不挖矿行不行?
这就好比几百万人在一起开会,也没有主持人,如何才能达成共识?
可能的方案一:抽签决定。这个方案有个很大的问题,就是所有人都要把签投进抽奖箱,那么“抽奖箱”就成为了一个中心化的东西,没法保证抽奖箱不被操控,这违背了去中心化的初衷
可能的方案二:轮流参与打包。这虽然能解决打包的冲突,但会降低参与者的积极性,某个参与者一旦打包过一次,下次再轮到就要过很久了,聪明的人可能会在打完包拿了奖励后立即退出
可能的方案三:提名选举。在一些分布式系统架构中(如zookeeper)就有选举算法,在节点数量不多的情况下还可以,如果节点达到百万级,选举的效率会极其低下。而且选举本身带有主观性,其公平性很难得到保证
所以这套系统必须同时解决这几个问题:
- 去中心化存储和计算,需要避免依赖任何中心化的技术
- 需要有足够多的参与者,才能防止数据被篡改
- 要足够公平,让所有参与者都有机会
“挖矿”就能解决这些问题,遍地是黄金,挖到就是你的,而能不能挖到取决于你的镐子挥动了多少下,付出越多得到越多,一定程度上很公平。
3. 什么是挖矿
当然“挖矿”只是一个比喻,在比特币这个区块链系统中,算力就是镐子,矿工需要通过不断进行数学计算得出满足条件的计算结果,只要算出来了就表示挖矿成功,获得了记账权,矿工把这个区块发布到区块链网络中,其他节点验证过后就会把这个区块追加到链的末尾。
在真正介绍挖矿过程之前,还需要了解一个非常重要的东西
3.1 哈希算法
哈希(Hash)算法也可以看做是一个哈希函数:y=H(x),给定一个输入x,经过一通计算就可以得到y。咱们暂时不需要关心这个函数的具体表达式,而只需知道它有什么特点:
- 不会出现哈希碰撞,也就是给定两个输入x1和x2,它们分别算出来的y1和y2几乎不可能相等
- 计算过程是单向不可逆的,已知y的值,没办法推算出x是什么
- 很容易验证,已知x和y,只需再算一次H(x)就可以知道y是否正确
提示
比特币中用到的哈希算法是SHA256,感兴趣的朋友可以自己研究
3.2 挖矿过程
矿工会维护一个还未完成的交易列表
- 取出一部分交易,验证合法性
- 选择合法的交易打包进区块,由于区块的总数据量大小有限制,所以区块里也只能包含有限的交易数量
- 计算所有交易的总Hash(Merkle Root Hash)
- 区块的Header有一个随机数,通过不断调整随机数来计算Header的Hash值
- 直到找到小于特定值的Hash值,则出块成功

由于符合条件的Hash值都很小,通常前面都带有很多个0,类似这样:000000000000000000000841c59a4679d6e70715212415b195666666665175e。显然这个阈值越小,挖矿难度就越大,比特币系统就是通过这个阈值来控制大约每10分钟出一个新的区块。
由于Hash函数的特性,导致要想“挖”到合法的区块,只能不断尝试新的随机数,就目前的技术来说无法破解,唯一的办法就是增强算力。这个过程被形象地比作是挖矿,通过挖矿来争取记账权的机制叫做 工作量证明(PoW Proof of Work)
4. 挖矿的进化史
运行比特币系统的代码都是开源的,只要把代码下载下来运行,理论上任意一台计算机都可以参与到比特币的挖矿中。早期也确实如此,参与挖矿的都是家用PC机,或配置稍好的服务器,这一阶段挖矿主要靠CPU来工作。
学过计算机的朋友会知道,CPU适合处理复杂的程序和任务调度,而GPU更适合处理大量简单的并行数学计算。为了提升算力,矿工逐渐改为使用GPU来挖矿,这也导致显卡的价格水涨船高。
不过GPU仍属于通用芯片,GPU不是为了挖矿而设计的,其中有许多挖矿用不到的指令。更加专业的挖矿机构发现了这个问题,为了省电并提升芯片利用率,开始研发专门用于挖矿的专用芯片。这些芯片的出现让挖矿算力得到进一步提升。
除了提升设备的专业性之外,挖矿的规模也在逐渐增大,从单台机器到专用挖矿机房再到大型矿场,这就导致能挖到币的概率越来越集中在头部矿场中,挖矿耗电巨大,有些矿场甚至有自建的水力发电站。

现阶段只靠个人设备挖矿已经毫无可能,即便你有专用挖矿芯片,算力也无法和大型矿场抗衡,这样有部分矿工就不得不选择和大型矿场合作,出卖算力来赚钱。矿场中的矿主负责打包交易,而尝试随机数,计算哈希值的任务则交给了矿工。挖到矿后矿主会给矿工分配利润。

5. 挖矿风险
目前挖矿的利润主要来自于出块奖励,支出则来源于设备成本、电力成本,据业内朋友透露,目前挖出一枚BTC的成本大约8-9w美元,根据目前的BTC价格,仍能有不少利润空间。
这里面的风险在于1.币价波动较大,如果BTC价格下跌则无法保证利润;2.BTC每4年出块奖励减半。还有一个隐藏风险,随着整个比特币网络算力的集中化,将来或许会出现超过51%算力的挖矿机构,届时整个比特币系统都可能受到威胁。不过这一天是否会到来还很难说,我们就拭目以待吧。