五月的加密市场,BTC(比特币)在6万刀踟蹰不前,春去花落一片红。无甚热闹,但徜徉湖边,看绿水青山,心底宁静,仓位致远。
BTC乃加密行业之根。总量2100万之上限,乃BTC之本。一切都从这个神奇的数字展开。可是它,为何是这样一个数字呢?
1.每区块产量50BTC
2.每21万个区块,产量减半
使用等比数列求和可以轻松算出,最终BTC的总产量为:(50+25+12.5+6.25+3.125+...)x21万=2100万枚。
进一步的,调节“挖矿”难度使得大约每10分钟产生一个新区块,即每小时6个新区块,21万个区块就大概是人间4年。
这也就是比特币4年产量减半周期的来历。
但是,如此只是对既定事实的一个铺叙而已。一是缺乏一些细节的考察;二是并未真正揭示比特币发明人中本聪为何要选择和设计这样一个数字的原因。
首先,
2100万并非2100万,而是2,099,999,997,690,000。对,后面这个数字比2100万要大1亿倍,即大约是2100万亿。在比特币系统内部,都是这个万亿级的整数。
当我们把BTC“展示”为这个整数点上8位小数位,也就变成了20,999,999.97690000。这里我用空格提示了上面作为整数时的千分位分割点。我们一眼就会看到,中本聪选择8位小数位其实有些奇怪的,因为这样会导致8位小数的BTC整数部分的逗号分割点,和系统内真正的整数的逗号分割点不一致。
8位小数位,也就是1亿分之一,这个就不太西方。众所周知,英文里对数字采用千分位分割,所以计数法的单位是千(thousand)、百万(million)、十亿(billion)、万亿(trillion)。英文里并没有“亿”这个单位。而中国的计数法略有不同,是以4位数字也就是万分位为分割的,乃有万、亿、万亿。
2100万亿用万分位分割就是这样的:2099999997690000;2100万带8位小数则是这样的:20999999.97690000。都是4小节,每小节4位数字,没有任何混乱。所以看起来,8位小数位,1亿分之一,嗯,这很东方。
其次,
2100万亿之所以是2,099,999,997,690,000而不是精确的2,100,000,000,000,000,也正是因为8位小数位的精度限制。
上文的等比数列(50+25+12.5+6.25+3.125+...)并非真正的无穷数列,而是当它减小到0.00000001之后,再减半就归零了。因此,这是一个截断了的有穷数列,其加和就要小于无穷数列求和的结果100。所以,乘以21万之后,最终结果也要略小于2100万。
第三,
注意第一点的叙述,8位小数位和小数点仅仅是一个“展示”层面的设计。在系统内部只有那个万亿级的整数。
既然仅仅是“展示”,那么其实小数点是可以任意挪动的。现在点在8位小数的位置,以后也可以点在5位或者4位小数的位置。
比如,20,999,999,976.90000(5位小数),或者209999999769.0000(4位小数)。
那么,8位小数时的1枚比特币,当移位到5位小数时,就显示为1000,移位到4位小数时,就显示为10000。相应的,原来的0.001或者0.0001BTC现在就会显示为1。
这移位的想法并非教链杜撰的,而是中本聪真实的想法。在2009年4月12日中本聪给MikeHearn的回信[1]中,他这样写道:
原文:
翻译:
有人说,对于普遍的64位计算机而言,如果我们使用64位二进制数同时表示整数和小数(又称浮点数),那么最安全的做法是把整数限制在浮点数的整数部分可表达的上限内。
稍微了解计算机原理的朋友都知道,计算机内部并没有什么小数,都是0和1的数位。所谓64位整数,就是指64个0或者1所组成的二进制整数。对应10进制就是2^64=18446744073709551616。这个数字要远大于2100万亿。但是,如果要让计算机能够处理浮点数,那么就要把64位中拆出一部分用来表达小数部分,还要留出1位来表示正负号。这就成了IEEE754浮点数编码标准。其中标准定义,双精度浮点数用64位二进制是这样编码的:
这样一来,整数部分就只能使用53位,也就是最大不超过2^53=9007199254740992。而如果希望容易测试结果是否为整数,则最好不要超过2^51=2251799813685248。如此,可以选择22(百万亿),但是22不是一个“三角数”(triangularnumber),所以中本聪选择了21(百万亿)。
不过,教链看了中本聪的邮件后,觉得中本聪也许并没有这么复杂的想法。或者他的确思忖过,但是并没有讲透他的全盘考虑。他只是讲,也曾经考虑过其他数字,比如4200万亿,但是感觉太大了,于是就折中成了2100万亿。在2011年1月10日中本聪回复MikeHearn的邮件[2]中,他是这样写的:
"Itworksouttoaneven10minutesperblock:
21000000/(50BTC*24hrs*365days*4years*2)=5.99blocks/hour
"Ithoughtabout100BTCand42million,but42millionseemedhigh.
"Ifitgetsreallybig,thedecimalcanmovetwoplacesandcentsbecomethenewcoins."
依中本聪的意思,大多数人手里的BTC数量最好在0.01到1000之间,不要动辄就搞个6、7位数的币,那样会缺乏稀缺感。
比特币总量2100万个,这可能是刚接触比特币的小白们记得最清楚,也是最迷惑的数字。中本聪没在任何公开的言论中提到:为什么选这个数字,于是网上出现了各种各样的猜测和逻辑推理。
【1】20999999.97690000
最终产生的比特币数量,准确的说是20999999.97690000个,比2100万少一点。
下面挑几个重点分析一下这张表。
【2】50.00000000
【3】目标高度210000
【4】4年1次的约定
每4年减半是不太严格的说法。实际情况:比特币大约每10分钟产生一个区块,而210000个10分钟接近4年(4年等于210384个10分钟。这应该是中本聪特意选取的数字)。
【5】2016前,2016后
2016年将发生第二次减半,但现在讨论这个有点早。我要说的是2016个块的问题。
难度调整的话题涉及到挖矿,以后再一并分析。
网络上有很多种猜测,有些很靠谱,有些不靠谱但很欢乐。
【答案1】
It'sthefirsthalfoftheanswer:42.
翻译:因为21是终极答案42的一半。
(说明:英语里,2100万表示为:21million。所以,老外一般直接问:为啥是21。)
当然,他是开玩笑的。不过,我个人最喜欢这个猜测,这也是reddit里顶的人最多的。
这个梗来自电影《银河系漫游指南》里终极答案的桥段。
直接看视频吧(找了一圈,只有youtube上有剪辑,所以俺加了字幕搞过来):
【答案2】
Becausewerelivinginthe21stcentury!
翻译:因为我们生活在21世纪!
太天真,不忍吐槽。
【答案3】
Hechosearewardschemeand10minuteblocks.Whenhedidthemath,itcameto21million.Hedidntchoosethe21million,hejustacceptedtheconsequenceoftheparametershechose.
翻译:中本聪订好10分钟、50币、4年减半的原则,结果自然出来了。他没有选,而是接受了这个自然的结果。
这个答案也是有可能的。中本聪在比特币中的很多选择确实是撞大运的,但都是“基于经验的撞大运”。
【答案4】
Allgoldminedinhumanhistorycanbefitintoacuberoughly21metersoneachside.
Satoshicreatedbitcoinwiththeideaofbeingsortofadigitalanalogofgold(finitesupply,mining,etc),aswellasthefactthatitbuiltuponNickSzabos“BitGold”proposal,soIthinkthat21millionwassortofaclevernodtothat.
翻译:全世界所有黄金熔在一起,是一个边长大约为21米的正方体。中本聪用这个概念,隐喻比特币是一种虚拟黄金。
原来阴谋论不止中国有
【答案5】
Iwasgoingtosay:SatoshilikestoplayVegasblackjack.
翻译:我觉得中本聪喜欢玩21点。
上帝玩骰子么
【答案6】
计算机双精度浮点数最多存储2^53精度的数。而比特币按最小单位算的总精度是2^51,刚好够用。(英文太长不贴了)
详细:
比特币有争议的属性之一就是它的固定的供应量。当前每10分钟又25个新的比特币被生产出来,并且这一数字每4年减半。总的来讲,不会有超过2100万个比特币的存在>。另一方面,每个比特币可以被划分成1亿份(每份叫做1“聪”),如果一美分都足够买辆车的话,用美元来交易就麻烦重重了,但比特币就算升值到和上面假设的美元的>状况,也不会遇到那样的问题。
因此,总之,将永远存在的货币单位的总数字是2,100,000,000,000,000,也就是2100万亿,或者说250.899。在选择这个数值的方>面,中本聪比大多数人意识到的要幸运的多或者说聪明的多。首先,这个数字远小于264-1,这是一台计算机里面可以以标准整数形式存放的最大整数,超过那个值的话,>数值将像里程表那样归零。
其次,然而,还有一个总“聪”数要设法低于的更小的阈值:可以用浮点的格式表示的可能的最大整数。整数不是计算机可以存储的唯一一种数字;为了处理小数,计算机>使用一种做浮点表示法的格式。浮点表示法本质上就是一个科学记数法的二进制版本。举个例子,下面是一个在你学习物理学的时候会遇到的值:
地球的质量:5.9721024kg
太阳的质量:1.9891030kg
光速:2.998108m/s
一光年:9.4601015m
质子的质量:1.67210-27kg
普朗克长度:1.61610-35m
我们可以注意到,科学记数法是如何使得你可以在合理的精度下表示所有的这些数值,尽管它们的大小相差极大。浮点表示法本质上就是二进制的科学记数法;当你存储数>字9.625的时候,你的计算机存放的是“1.001101*1011”(或者说,它存放的是010000000010001101000000000000000000000000000000>0000000000000000,这是高精度序列形式的同样一回事)。在这个高精度形式中,系数(也就是不是指数的那部分)有52位(52bits)。这意味着高精度(更加精>确的说法是“双精度”)浮点数足以存贮高达253的数字,但不能再高了,如果超过了,你就得开始砍掉末尾的数字。比特币的250.9这一以指数形式表现的总“聪”数,刚>好低于这个最大值。
如果我们有了整数,我们为什么还要关心浮点值呢因为更多的高阶编程语言(比如说Javascript)并不开放低阶的“浮点”和“整数表示法”,而只给程序员提供“数”的>概念当然以浮点的形式提供。如果中本聪当时选择了2亿1千万而不是2100万这个值的话,用很多语言里比特币编程就会比现在要麻烦得多了。
注意,StefanThomas不幸的在他写BitcoinJS的时候没有及时留意到这个,以至于那个库使用了一个专门的“大数bignumber”对象,而不是一个普通数来存储教程输出值;我自己分叉的的BitcoinJS(同时还加入了其他的改进)使用了普通数。
【答案7】
Thatexplanationisclosebutnotentirelycompelling.IEEEdouble-precisionfloating-pointformathas53bitsofsignificandprecision,meaningitcanaddressupto2531satoshiswithoutanyroundingerror.Well,thats9,007,199,254,740,991satoshis,whichisnotanywherecloseto2,100,000,000,000,000satoshis(oreven2,099,999,997,690,000satoshis,whichistheactualasymptoticlimit).
Ithinkamuchmorecompellingexplanationisthatasigned32-bitintegercanstorevaluesupto2311,whichis2,147,483,647.Ifyouassumeafixed-pointformatwithtwodecimaldigitsoffractionalprecision(whichistypicalformoney),thenasigned32-bitintegercanaddressupto21,474,836.47bitcoins,whichwemightaswellroundoffto21million.MyguessisthatSatoshiderivedthe21-millionlimitfromhereearlyindevelopmentandthenlaterrealizedthatthiswouldntbeenoughcurrencyunitsandsoextendedthenumberofdecimalplacesfrom2to8andchangedthevariablesfrom32-bitto64-bit.
翻译:答案6的解释很接近,但有点牵强。IEEE双精度浮点数是53bits,能表示的最大数是9,007,199,254,740,991聪,而比特币是2,099,999,997,690,000聪,差别还是很大的。
我觉得更好的解释:有符号32位整数可存储最大2^32-1的数,是2,147,483,647。如果比特币是小数点后两位的话,就是21,474,836.47个比特币。也就是21-million。我猜中本聪在最初开发的时候用32位精度的整数,后来发现对于一种全球通用货币来说这个精度不够,所以把小数点后2位延展成8位,从32位存储改成64位存储。
这是我觉得最靠谱的答案,因为从中本聪的过往言论可以看出,他不是一个完美主义者,而是一个实用主义者。
研究比特币技术原理,是深入了解比特币的最佳途径,也是推动比特币行业发展的基石。希望国内有更多专业的开发、技术专家进入这个领域。还有,炒币虽爽,盯盘伤身,切记切记!