比特币(6):挖矿

比特币(1):从一个简单支付场景说起

比特币(2):私钥、公钥和地址

比特币(3):交易详解

比特币(4):网络架构

比特币(5):区块链数据结构

如果把比特币比喻为「虚拟黄金」的话,那么比特币的挖坑,你好比当年美国淘金热时,成千上万的淘金者去美国西部淘金的事迹。淘金者付出体力,获得金子;挖矿者付出算力,获得比特币。

比特币是一种总量恒定且通货紧缩的电子货币。总量恒定是指比特币总共只有2100万个,到2140后就不会再产生新的比特币。通货紧缩是指新产生的比特币的数量每4年减半,2009年1月比特币诞生的时候每个区块奖励50个比特币,然后到2012年11月减半为25个比特币,在2016年再次减半为12.5个比特币。基于这个公式,比特币挖矿奖励以指数方式递减,直到2140年为0。因此比特币在这点上和各国央行发行的法币是有本质区别的,不用担心政府滥发货币导致个人资产缩水。

比特币挖坑的过程简单说就是:矿工使用挖矿节点尝试解一道数学难题,谁先解出来谁就能获得新产生的比特币和交易费。具体过程如下:

1.整合交易至候选区块

挖矿节点不断监听比特币网络中的交易信息,并将这些交易信息暂存到自己的内存池里,挖矿节点会根据以下信息对这些交易进行排序:

1)优先选择「块龄」更大的交易,「块龄」是指自该交易被记录到区块链为止所经历过的区块数,即这个交易在区块链中的深度。简单说,就是会优先处理那些旧的交易,这样确保即使没有交易费的交易最终也能得到确认,只是要等的时间比较长一些。

2)优先选择相对交易费更高的交易,也就是说出的交易费越高,越有可能越快得到确认。因此如果你想你的交易被尽快确认,应该主动多付些交易费。

挖矿节点根据上述条件排序后生成候选区块,同时会在候选区块里加入一笔特殊的交易-「Coinbase交易」,该交易是候选区块的第一笔交易,它会把新产生的比特币(当前是12.5个)和交易费发送给矿工的地址,是给矿工挖矿的奖励。

2.求解数学难题使候选区块成为合法的新区块(PoW)

构建候选区块完毕后,矿机就要开始使用PoW(Proof of Work,工作量证明)算法来获得一个正确的nonce值,来向全网证明新区块是它挖的。

所谓的PoW算法其实并不复杂,假设你是一个矿机,你会不断的尝试改变nonce值,并计算区块头的哈希值,如果你足够幸运,算出的哈希值正好小于难度值,说明你的这个nonce值是有效的,表示你成功挖到矿了,于是你会迅速的向全网广播,告诉大家这个区块我已经挖到了,你们继续挖下一个吧。但现实更多的情况是,你尝试了成千上亿次后,还是没有猜出有效地nonce值,却收到了其它矿工发来的通知说他已经挖到了,于是你只好放弃之前的所有工作,继续尝试挖下一个区块。上述描述的整个过程大概每10分钟会重复一次,生生不息,永不停止。

看到这里,相信很多人会有以下两个疑问。

第一个疑问是「我难道只能不断尝试不同的nonce值这种暴力破解的笨办法吗?是否存在更好的办法呢?」。我可以明确的告诉你,数学家已经证明没有比暴力破解更好的办法,所以这也是很多人诟病比特币不环保、空耗大量算力的原因,但这也是比特币能够维持一个去中心化共识的根本原因。

第二个疑问是「难度值是如何确定的?」。比特币为了确保平均每10分钟出个新区块,它必须能够动态调整难度值,起初由于全网算力很小,因此难度值也比较小,但随着全网算力越来越大,难度值必须不断动态增大才行。但大家知道比特币是去中心化的,也就是说从来没有一个中心可以动态调整难度值,那比特币是怎么做到的呢?它把难度值的调整交给了每个全节点(什么是全节点可参考「比特币(4):网络架构」),具体是这样的:每2,016个区块调整一次难度值,难度的调整公式是由最新2,016个区块的真正花费时长与20,160分钟(两周,即这些区块如以10分钟速率所期望花费的时长)比较得出的,如果发现平均时长小于10分钟,说明之前的难度值过小,需要加大难度,反之亦然。

3.区块链分叉

上述描述的基于PoW算法的挖矿过程可能会产生这样一种状况:假设矿工A挖到了新区块,但由于比特币的节点分布在全球各地,网络传输需要一定的时间,所以在他向全网广播的过程中,正好又有一个矿工B挖到了新区块,他也会向全网广播他挖到的新区块,这时就会出现两个新区块互相竞争的情况,这就是区块链分叉。

那么比特币是怎么解决分叉的问题呢?答案是暂时不解决,就让分叉存在着,相信时间最终来解决。也就是说,这时候比特币网络被分成了两派,一派基于A继续挖新区块,另一派基于B继续挖新区块,随着时间的推移,一定会出现其中一个分叉成为主链,另外一个分支慢慢被放弃。注意:这里谁能成为主链,并不是简单的基于谁先挖到算谁的,而是谁后续能获得大多数节点的认可。

这样又会带来两个问题:

问题1:有可能导致已被确认的交易被取消。比如上述例子我们假设A成为了主链,B被抛弃了,那么B挖到的这个新区块,虽然已被确认是有效的,但由于不是主链,最终会被抛弃,也就是说B创建的这个新区块上的交易都失效了。这也是为什么虽然比特币平均每10分钟生成一个区块,但一个交易真正被确认需要60分钟,因为一般认为经过后续6个区块的确认后,基本就很难被取消了。

问题2:有可能受到51%的算力攻击。假设有个人或机构非常强大,他能控制比特币全网51%的算力,就可能随意强行分叉,并让他的链总是成为主链,那么比特币的共识就崩溃了。虽然理论上存在这样的可能性,但由于现在比特币全网的算力过于强大,想要控制51%的算力,几乎不可能,美国总统都做不到。

你可能感兴趣的:(比特币(6):挖矿)