2009年1月3日 18:15:05(国际标准时间)
2009年1月4日 02:15:05(北京时间)
由于中本聪2011年春天之后就不再出现,留下了许多未解之谜,而其中这个区块就有一些有趣的迷。1
第一个迷 中本聪是怎么挖出这个区块的?
创世区块在许多方面与众不同,首先它是整个比特币区块链的第一个区块,它没有上一个区块的指针。那么作为区块链的第一个区块,必然是开发这个区块链的人创造的。所以这一点非常重要,尽管我们说比特币网络是去中心化的,可是从第一个区块的诞生来看,这必然是中心化的,而且是100%中心化的。
因此,我们可以这么说,创世区块与其说是挖出来的,不如说是中本聪编出来的,而且是直接写在比特币客户端软件的代码里。不过即便是编出来的,创造这个创世区块还是有一些难度的,因为中本聪尽管可以随意提前编制好这个区块里的内容,可是要猜一个随机数,用来与区块内容组合产生一个符合目标值的哈希值,还是得费一翻力气的。
在创世区块里,中本聪自己设定的目标值是一个16进制前面留了8个“0”,二进制前面留了32个“0”的数字:
0000 0000 ffff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
而中本聪最后算出来创世区块的哈希值,是一个16进制前面有10个“0”,二进制前面留了43个“0”2的数字:
0000 0000 0019 d668 9c08 5ae1 6583 1e93 4ff7 63ae 46a2 a6c1 72b3 f1b6 0a8c e26f
我把这串数字搬出来并不是想烧大家的脑,而是告诉大家这里面有一个有趣的情况,就是说如果中本聪只是用了自己一台PC机来计算这个区块哈希值,找到符合目标的值,前面留32个“0”的难度要远远小于前面留43个“0”的难度。按照2009年计算机的配置来看,中本聪要算出43个“0”的哈希值,给他六天时间,也只有17%的可能性算出来。所以有一些人认为中本聪运气就是特别好,就是能在创世区块算出一个远远小于目标值的数字,但是这种说法相信的人并不多。
有人专门去研究比特币网络诞生一年左右的三万六千多个区块,首先按照从来没有使用过作为特征,粗略的把中本聪挖的区块给分离出来,然后对区块里的随机数进行分析,发现随机数的末位存在明显的规律。据此猜测中本聪可能用了59台电脑(其中有9台电脑后来退出了,不知道是宕机还是那是其他机房的电脑,中本聪失去控制了)合作来计算区块,而这些电脑为了不做重复工作,所以他们在选择随机数时按照一定规律,每台机器取不同的值。这个发现非常有意思,也就是说中本聪从一开就就对挖矿采用了一些优化的计算方案,这有点像我们未来要介绍的各种挖矿优化方案,这也在某种角度说明中本聪其实是预测到未来挖矿可能会出现更加优化的专业设备的,不过一切都是猜测。
现在在看看中本聪能算出一个远远小于目标值的数字,似乎难度就不大了,因为他不仅有那么多设备在合作计算,而且他还有六天的时间呢。
第二个迷 为啥说中本聪用了六天时间来创造创世区块?
在圣经的《创世纪》里,说到上帝创造世界用了六天时间,“到第七日,神造物的工已经完毕,就在第七日歇了他一切的工,安息了。”3不知道是巧合,还是中本聪故意所为,比特币的第一个区块(创世区块)与第二个区块之间隔了六天时间。
第一个区块时间:国际标准时间2009年1月3日18:15:05,北京时间2009年1月4日2:15:05;
第二个区块时间:国际标准时间2009年1月9日02:54:25,北京时间2009年1月9日10:54:25
仔细看看其实时间并不是整整齐齐的六天时间,只是五天多一点点的时间。不过网上还是有不少人相信中本聪就是想当比特币网络的上帝,甚至有迷信他就是上帝,对此我的观点就是“呵呵”,没必要那么神话中本聪嘛。
因为那个时候,谁也不知道比特币会变成今天的样子,而且在那时之前的二十多年里,所有的密码货币的尝试都是失败的,所以中本聪不会那么盲目自信认为自己一出手就能搞定,这在他后来发表的言论也能看出来他还觉得比特币并不完美。
我们不去管这个神话传说,可是为啥这两个区块之间隔了那么多天呢?区块间隔不是十分钟吗?这个问题有许多猜测,中本聪一天不出来解释,估计这个迷会随着比特币在世的时间越来越长,会有越来越多的神话传说来解释。我来谈谈我觉得比较合理的解释。
首先我们来看看比特币诞生前后很短的时间内,一系列事件时间:
1、国际标准时间2009年1月3日,泰晤士报头版上有一则新闻《Chancellor on brink of second bailout for banks(财政大臣正处于实施第二轮银行紧急援助的边缘点)》;
2、国际标准时间2009年1月3日18:15:05,比特币创世区块的时间戳字段记录了这个时间;
3、国际标准时间2009年1月9日02:54:25,第二个比特币区块的时间戳字段记录了这个时间;
4、国际标准时间2009年1月9日04:33:09,第十四个比特币区块的时间戳字段记录了这个时间;
5、国际标准时间2009年1月10日01:05:49,比特币节点软件最早版本“Bitcoin V0.1”发布;
6、国际标准时间2009年1月10日04:45:46,第十五个比特币区块的时间戳字段记录了这个时间;
7、国际标准时间2009年1月10日22:47:26,Hal Finney挖出了大概是非中本聪的第一个区块,编号#70;
8、国际标准时间2009年月11日18:22:14,Hal Finney在中本聪发布软件的帖子后面回帖,占了头坑。
从这个时间顺序里,我们按照是否可信程度来分成三类:
第一类是可信时间,就是第1、5、7和8条,这四条都是基于第三方的时间的,不是中本聪能控制的,因此是可信的;
第二类是非可信时间,就是第2、3、4条,也就是说是比特币前十四个区块上的时间戳时间,此时的区块链是完全中心化掌握在中本聪手中,上面的时间戳完全可以由他随便编制;
第三类是逐渐可信时间,就是第6条,也就是说在比特币节点软件发布后,比特币区块链第十五个区块开始,我们可以认为逐渐会有其他非中本聪控制的节点加入比特币网络,因此由此开始,比特币开始从100%中心化逐步向可信任的去中心化迈进。
到这里我可以谈谈我对“为啥说中本聪用了六天时间创造创世区块?”的看法,我觉得这个问题其实应该换成“为啥第一个区块与第二个区块隔了差不多6天?”。
首先创世区块里因为要写上泰晤士报的那条头版新闻标题,因此中本聪只能是看到这个头版新闻后才决定以此新闻作为创世区块的“永恒之语”。于是他必须把这句话打包进区块,开始不断变化随机数与这个打包的区块进行运算,直到找到符合他自己定的难度目标值的区块哈希值。
其次中本聪直到第六天才正式发布比特币节点软件,那么他显然在这六天里,不断的测试软件,并且要用自己制作的区块来测试即将发布的比特币节点软件。现在我们知道中本聪其实已经有了一点小小规模的算力(59台计算机假说),那么中本聪可能在这些天里,不断去算创世区块的哈希值,即便找到了符合要求的目标值,但是出于测试的需要,可能也要不断的继续算来测试区块难度与速度关系之类的问题,因此最终他可能得到了多个符合创世区块目标值(前面是32个“0”)的区块哈希值,他为了表达得意或者其他什么意思,选择了一个最小的哈希值作为区块哈希值。
最后,他在六天的时间里用创世区块测试后续的区块生成的软件功能,不断的修改他的第一版本软件,直到最稳定的区块链开始产生。那一定是他最后一次测试软件,系统稳定有序的自动运行产生了14个区块以后,中本聪停下机器,对软件进行整理打包之后公布于众。然后在发布软件三个多小时后,他再次启动系统,作为一个节点正式开始参与挖矿游戏,相信第15个区块还是他挖出来的,因为第一个参与游戏挖出区块的Hal Finney说他挖到的第一个区块好像是第70个区块(有可能是编号70,那应该是第71个区块,不过这前后十分钟对我的分析影响不大)再回他帖子是在一天半以后了。
第三个迷 中本聪在创世区块里得到的50枚比特币奖励为啥不能花出去?
创世区块里面唯一的一笔交易就是所有挖出区块的人得到的奖励,中本聪在这个区块得到了50枚比特币(按目前一枚比特币价值7000美元的价格,50比特币值35万美元)。但是这50枚比特币是不能用的,这是为什么呢?
中本聪在设计比特币节点软件的时候,为了提高交易的效率,在软件里专门建了一个叫做“chainstate”的数据库,用来存储当前所有的UTXO(unspent transaction output,未花费交易输出)以及一些元数据。
这里我简单解释一下,我们知道比特币转账交易的时候,我们要确认是不是双重支付的,必须要把所有的区块进行查看,来确定转出账号是不是有那么多钱。那么就算是技术小白也知道随着区块链越来越长,这个查看的效率肯定会越来越低,因此软件必须进行优化,于是中本聪在第一版的节点软件里就创建了刚才说的那个数据库,里面保存了全比特币网上所有还没有支付出去的账号信息,这样每当一个新区块出来的时候,只要把里面产生交易的转出转入账号在这个数据库里更新一下,就可以非常方便进行验证是否双重支付了。
这种实现方式并没有改变区块链作为所有原始数据的基本原理,只是在为了提升效率上,在节点软件上进行了数据预加工而已。可是就在这样的软件里,出现了一个bug(bug就是缺陷的意思)。不知道什么原因,创世区块里获得奖励的那个账号地址没有被记录进那个数据库,那么在未来就算中本聪重现人间,开始用自己的私钥签名去花费创世区块里面的比特币,可是全网所有节点在收到这个交易后,在自己的预加工数据库里无法找到这个账号地址,因此就会当作非法交易不予接受。所以说创世区块的这50枚比特币无法花出去。
这个情况其实到底是一个bug,还是一个深谋远虑的大设计,各种观点都有。因为这完全是可以随便打个补丁就能解决的问题,然而,快十年了,没有人去修补这个补丁。因为有人说,创世区块并不是挖矿比赛比出来的,那个时候中本聪想怎么挖就怎么挖,因此中本聪为了表示他不占这个便宜,就把这50枚比特币设计成花不掉的状态。可是我不这么看,在我看来除了创世区块,其实在他发布软件之前的14个区块,都属于他为所欲为的时间,如果要显出不占这个便宜,那么这14个区块应该都被设计成花不掉才对呀。
可是为什么现在比特币社区的专家们不去把这个bug给打补丁呢,原因在于现在的比特币网络所有节点软件不能随便升级,尤其是修补补丁或者增加新功能,因为就算是比特币社区发布了最新版本,但是升级与否是由每个节点自己决定的,那么就会造成比特币区块链的分叉(具体原理和细节我会单独写一篇),分叉会对比特币网络稳定性和安全性造成很大的影响。比特币历史上经历了几次分叉,每一次分叉都造成比特币的社会共识产生一次分歧,甚至是骂战。因此如果为了中本聪的那50枚比特币对节点软件进行升级,那么这可是创世区块,升级的结果就是直接造成比特币区块链分裂为两条,因此随着比特币区块链越来越长,这个bug应该是永远也不会去修改了。
况且这是一个无伤大雅的错误,损失也只是中本聪自己,有人算过他有100万枚比特币,应该无所谓这50枚吧?然而,浪漫的是,就算是造物主犯的低级错误,经过很长很长时间以后,那个错误也会被各种神话传说所美化,哪怕有一天有个人说那就是一个错误,估计也没有人相信了。
注释:
- 该部分我参考了网上许多有趣的文章和帖子,主要从以下两篇展开看了一系列的文章:
(1)比特币论坛(Bitcoin Forum)的 Sergio Demian Lerner 发的一个帖子《A mistery hidden in the Genesis Block》。
(2)Sergio_Demian_Lerner发表在他的博客Bitslog的文章《A new mystery about Satoshi hidden in the Bitcoin block-chain》。[回到原位] - 这里是指十六进制有10个“0”,一般比较专业的表示,应该是二进制的43个“0”。因为16进制的一个“0”对应二进制是4个“0”,10个“0”就表示有40个二进制的“0”。而16进制的“1”,在二进制是“0001”,前面有3个二进制“0”,所以总共有43个“0”。后面关于目标值也是指16进制的8个“0”,相当于二进制的32个“0”。而后面的16进制“f”相当于二进制的“1111”,所以目标值总共前面有32个“0”。这个目标值也是比特币“难度(difficulty)”为“1”的基准,这是我们上一篇《比特币网络的挖矿难度是怎么回事?》介绍的。[回到原位]
- 引用自:圣经[回到原位]