玩币族移动版

玩币族首页 > 币圈百科 >

比特币总量2100万的原因分析

8631889823_48c97e00cf_b

  比特币总量2100万 个,这可能是刚接触比特币的小白们记得最清楚,也是最迷惑的数字。

  中本聪没在任何公开的言论中提到:为什么选这个数字,于是网上出现了各种各样的猜测和逻辑推理。

  我们就来聊聊这个数:

  2100万是怎么来的

  选2100万的真正原因

  2100万是怎么来的

  【1】20999999.97690000

  最终产生的比特币数量,准确的说是20999999.97690000个,比2100万少一点。

  比特币产生的时间表:

Screen Shot 2014-07-29 at 3.29.41 PM

  下面挑几个重点分析一下这张表。

  【2】50.00000000

  格林威治时间2009年1月3日18:15:05,创世区块诞生。创世区块的编号是0。从创世区块开始的”阶段1”,每个区块产生50个新的比特币或者说50亿聪。

  创世区块: https://blockchain.info/block-height/0

  【3】目标高度210000

  格林威治时间2012年11月28日15:24:38,编号第210000个区块产生。从这个区块起的”阶段2”,每个区块包含的新比特币数量减半为25个,这是历史上第一次减半。今后每产生210000个区块,比特币数量都会依次减半。直到第33次减半时,每个块产生0.0021个新比特币直接减为0个。

  210000块: https://blockchain.info/block-height/210000

  【4】4年1次的约定

  每4年减半是不太严格的说法。实际情况:比特币大约每10分钟产生一个区块,而210000个10分钟接近4年(4年等于210384个10分钟。这应该是中本聪特意选取的数字)。

  【5】2016前,2016后

  2016年将发生第二次减半,但现在讨论这个有点早。我要说的是2016个块的问题。

  比特币系统调节挖矿难度的原理是:根据前2016个块产生的总时间,调整后2016个块的挖矿难度,让挖出这2016个块的时间为14天。因为,每小时6个10分钟乘以24小时再乘以14天=2016。所以,所谓10分钟只是平均值目标。由于目前算力上涨很快,实际上挖出2016个块的速度往往少于14天。

  难度调整的话题涉及到挖矿,以后再一并分析。

  选2100万的真正原因

  网络上有很多种猜测,有些很靠谱,有些不靠谱但很欢乐。

  【答案1】

  It’s the first half of the answer: 42.

  翻译:因为21是终极答案42的一半。

  (说明:英语里,2100万表示为:21 million。所以,老外一般直接问:为啥是21。)

  当然,他是开玩笑的。不过,我个人最喜欢这个猜测,这也是reddit里顶的人最多的。

  这个梗来自电影《银河系漫游指南》里终极答案的桥段。

  直接看视频吧(找了一圈,只有youtube上有剪辑,所以俺加了字幕搞过来):

  【答案2】

  Because we’re living in the 21st century!

  翻译:因为我们生活在21世纪!

  太天真,不忍吐槽。

  【答案3】

  He chose a reward scheme and 10 minute blocks. When he did the math, it came to 21 million. He didn’t choose the 21 million, he just accepted the consequence of the parameters he chose.

  翻译:中本聪订好10分钟、50币、4年减半的原则,结果自然出来了。他没有选,而是接受了这个自然的结果。

  这个答案也是有可能的。中本聪在比特币中的很多选择确实是撞大运的,但都是“基于经验的撞大运”。

  【答案4】

  All gold mined in human history can be fit into a cube roughly 21 meters on each side.

  Satoshi created bitcoin with the idea of being sort of a digital analog of gold (finite supply, mining, etc), as well as the fact that it built upon Nick Szabo’s “Bit Gold” proposal, so I think that 21 million was sort of a clever nod to that.

  翻译:全世界所有黄金熔在一起,是一个边长大约为21米的正方体。中本聪用这个概念,隐喻比特币是一种虚拟黄金。

  原来阴谋论不止中国有…

  【答案5】

  I was going to say: Satoshi likes to play Vegas blackjack.

  翻译:我觉得中本聪喜欢玩21点。

  上帝玩骰子么

  【答案6】

  计算机双精度浮点数最多存储2^53精度的数。而比特币按最小单位算的总精度是2^51,刚好够用。(英文太长不贴了)

  这个答案,出现在一篇很不错的文章里《中本聪的天才:比特币以意想不到的方式躲开了一些密码学子弹》

  详细

  比特币有争议的属性之一就是它的固定的供应量。当前每10分钟又25个新的比特币被生产出来,并且这一数字每4年减半。总的来讲,不会有超过2100万个比特币的存在>。另一方面,每个比特币可以被划分成1亿份(每份叫做1“聪”),如果一美分都足够买辆车的话,用美元来交易就麻烦重重了,但比特币就算升值到和上面假设的美元的>状况,也不会遇到那样的问题。因此,总之,将永远存在的货币单位的总数字是2,100,000,000,000,000,也就是2100万亿,或者说250.899。在选择这个数值的方>面,中本聪比大多数人意识到的要幸运的多或者说聪明的多。首先,这个数字远小于264-1,这是一台计算机里面可以以标准整数形式存放的最大整数,超过那个值的话,>数值将像里程表那样归零。

  其次,然而,还有一个总“聪”数要设法低于的更小的阈值:可以用浮点的格式表示的可能的最大整数。整数不是计算机可以存储的唯一一种数字;为了处理小数,计算机>使用一种做浮点表示法的格式。浮点表示法本质上就是一个科学记数法的二进制版本。举个例子,下面是一个在你学习物理学的时候会遇到的值:

  地球的质量: 5.972 1024 kg

  太阳的质量: 1.989 1030 kg

  光速: 2.998 108 m/s

  一光年: 9.460 1015 m

  质子的质量: 1.672 10-27 kg

  普朗克长度: 1.616 10-35 m

  我们可以注意到,科学记数法是如何使得你可以在合理的精度下表示所有的这些数值,尽管它们的大小相差极大。浮点表示法本质上就是二进制的科学记数法;当你存储数>字9.625的时候,你的计算机存放的是“1.001101 * 1011”(或者说,它存放的是01000000 00100011 01000000 00000000 00000000 00000000 >00000000 00000000,这是高精度序列形式的同样一回事)。在这个高精度形式中,系数(也就是不是指数的那部分)有52位(52bits)。这意味着高精度(更加精>确的说法是“双精度”)浮点数足以存贮高达253的数字,但不能再高了,如果超过了,你就得开始砍掉末尾的数字。比特币的250.9这一以指数形式表现的总“聪”数,刚>好低于这个最大值。

  如果我们有了整数,我们为什么还要关心浮点值呢 因为更多的高阶编程语言(比如说Javascript)并不开放低阶的“浮点”和“整数表示法”,而只给程序员提供“数”的>概念 – 当然以浮点的形式提供。如果中本聪当时选择了2亿1千万而不是2100万这个值的话,用很多语言里比特币编程就会比现在要麻烦得多了。

  注意,Stefan Thomas不幸的在他写BitcoinJS的时候没有及时留意到这个,以至于那个库使用了一个专门的‘大数big number’对象,而不是一个普通数来存储教程输出值;我自己分叉的的BitcoinJS(同时还加入了其他的改进)使用了普通数。

  【答案7】

  That explanation is close but not entirely compelling. IEEE double-precision floating-point format has 53 bits of significand precision, meaning it can address up to 253 − 1 satoshis without any rounding error. Well, that’s 9,007,199,254,740,991 satoshis, which is not anywhere close to 2,100,000,000,000,000 satoshis (or even 2,099,999,997,690,000 satoshis, which is the actual asymptotic limit).

  I think a much more compelling explanation is that a signed 32-bit integer can store values up to 231 − 1, which is 2,147,483,647. If you assume a fixed-point format with two decimal digits of fractional precision (which is typical for money), then a signed 32-bit integer can address up to 21,474,836.47 bitcoins, which we might as well round off to 21 million. My guess is that Satoshi derived the 21-million limit from here early in development and then later realized that this wouldn’t be enough currency units and so extended the number of decimal places from 2 to 8 and changed the variables from 32-bit to 64-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位存储。

  这是我觉得最靠谱的答案,因为从中本聪的过往言论可以看出,他不是一个完美主义者,而是一个实用主义者。

  后记

  研究比特币技术原理,是深入了解比特币的最佳途径,也是推动比特币行业发展的基石。希望国内有更多专业的开发、技术专家进入这个领域。还有,炒币虽爽,盯盘伤身,切记切记!

知识: 比特币总量 2100万