美股月内四次熔断,比特币也从一万美元跌至最低三千八百美元,在比特币产量减半之前,首先实现了市值减半,可以说很刺激了。随着币价的暴跌,也出现了各种流言,我就听到了一个这样的消息,真实唯恐天下不乱。
“比特币系统出错,矿工已经四小时没有出块了,后台增发数量造成算力漏洞被攻击,可以双花了。黑客利用这个漏洞凭空造出了一千万个比特币出来”。
虽然说的有头有尾,但是稍微了解比特币的人直接可以确认这是谣言了。那么我们就针对这个谣言来聊聊细节吧。
比特币挖矿 挖矿在区块链中就是出块的意思,也就是矿机做哈希计算得到合法并且符合预期结果,进而获得更多节点的认可并入区块链。所有的块连接到一起就形成区块链,这就像是链表一样的结构,然后通过共识进而达到无法篡改的目的。那么如果说比特币系统出错,或者算力大幅度减少,后台也不可能增发数量(额,比特币是没有后台的),也不太可能一直不出块(也只有算力暴跌百分之九十才有可能很难出块),或者在一些区块链浏览器看一下谣言也不证自破了。
目标(Target) Target是一个256位的数,在挖矿时,块哈希必须小于或等于网络当前的Target。Target越小就越难计算。Target每2016个块调整一次难度(大概两周的时间),每个比特币客户端将生成2016块的实际时间与两周的目标(2016*10分钟)进行了比较,并通过百分比差异修改了目标,单次调整Target永远不会向下降低(增加难度)超过4倍,向上升高(降低难度)超过0.75倍。目标中的变化也叫做Difficulty adjustment
(难度调整),
在2017年8月从BTC分叉之前,都是2016个块重新计算一次难度。由于早期一个版本的BUG,调整了算法,变成了每2015个块调整一次难度。
区块链以Bits的形式存储Target,十六进制有固定的公式来计算,比如区块在存储的值为0x1b0404cb
(以小阶数排序存储:CB 04 04 04 1B),十六进制标识为:
0x0404cb * 2**(8*(0x1b - 3)) = 0x00000000000404CB000000000000000000000000000000000000000000000000
比特币定义创世纪块中使用的目标为Difficulty Level 1(难度就是difficulty_1_target),Bits值为0x1d00ffff,十六进制也就是:
0x00ffff * 2**(8 * (0x1d - 3)) = 0x00000000FFFF0000000000000000000000000000000000000000000000000000
难度(Difficulty) 哈希计算出来的值,哈希值前面的0
越多,计算出来的难度就越大。也就是一个计算难度的衡量标准。
Target用十六进制来表示,Difficulty就可以这样计算:
difficulty = difficulty_1_target / current_target
比如在0x1b0404cb
的难度就是
1 2 3 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x00000000000404CB000000000000000000000000000000000000000000000000 = 16307.420938523983 (bdiff)
也可以
1 2 3 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF / 0x00000000000404CB000000000000000000000000000000000000000000000000 = 16307.669773817162 (pdiff)
还有一种就是,btc.com通过算例推算出的难度。
在挖矿时,谁计算的快,也就是谁的算力大,就有更大机会得到挖矿奖励,目前大概是12.5个比特币奖励,区块包括矿工费所以一般大于12.5个。下次奖励减半时间大概是2020年5月14日。具体可以看https://btc.com/stats/halving 。
比特币大概每十分钟出一个块 为了保持每十分钟一个块,比特币每2016个块重新计算一次网络的难度。如果说上一个2016个块的周期时间大于两个星期,那么就要降低难度,反之亦然。这样我们就可以通过时间比率来调整难度了。
可以看我的实现github.com/ciknight/microchain/blob/master/microchain/chain.py#L76 ,我使用比率来计算,并且规定比率在4到1/4之间。
如果想要了解更多的比特币知识 可以看一下《Mastering Bitcoin》这本书,想了解更多技术相关可以看比特币的开发手册和Bitcoin wiki。当然比特币只是区块链技术的一种,还有其他的链可以学习,他们互相取长补短,不知道在未来的某一天,区块链会不会改变我们的生活。
参考