比特币有争议的属性之一就是它的固定的供应量。为什么总数的上限是2100万个?
首先,我承认我的高数实在不行,叫我从算法的角度来阐述比特币为什么是2100万个,实在太难。我们不妨这么理解:
当前每10分钟会有25个新的比特币被生产出来,并且这一数字每4年减半。你可以简单的把这个描述用一个极限数列表示出来,那么,这个极限数列的总和是可以被计算的,大概就是2100万。所以,在比特币的世界里,你不需要担心通货膨胀,你需要担心的是通货紧缩。
总的来讲,不会有超过2100万个比特币的存在。另一方面,每个比特币可以被划分成1亿份(每份叫做1“聪”),那么总数就应该是2100万亿,对于世界整体经济来说,这个份额很可能在若干年后就不够用了,所以比特币并不可能成为唯一的货币,比特币之所以最近疯涨,其原因就是现实中某些国家主权货币的滥发,使一些资本买入比特币避险。
总的来讲,不会有超过2100万个比特币的存在。另一方面,每个比特币可以被划分成1亿份(每份叫做1“聪”),如果一美分都足够买辆车的话,用美元来交易就麻烦重重了,但比特币就算升值到和上面假设的美元的状况,也不会遇到那样的问题。因此,总之,将永远存在的货币单位的总数字是2,100,000,000,000,000,也就是2100万亿,或者说250.899。在选择这个数值的方面,中本聪比大多数人意识到的要幸运的多或者说聪明的多。首先,这个数字远小于264-1,这是一台计算机里面可以以标准整数形式存放的最大整数,超过那个值的话,数值将像里程表那样归零。
其次,然而,还有一个总“聪”数要设法低于的更小的阈值:可以用浮点的格式表示的可能的最大整数。整数不是计算机可以存储的唯一一种数字;为了处理小数,计算机使用一种做浮点表示法的格式。浮点表示法本质上就是一个科学记数法的二进制版本。举个例子,下面是一个在你学习物理学的时候会遇到的值:
地球的质量: 5.972 * 1024kg
太阳的质量: 1.989 * 1030kg
光速: 2.998 * 108m/s
一光年: 9.460 * 1015m
质子的质量: 1.672 * 10-27kg
普朗克长度: 1.616 * 10-35m
我们可以注意到,科学记数法是如何使得你可以在合理的精度下表示所有的这些数值,尽管它们的大小相差极大。浮点表示法本质上就是二进制的科学记数法;当你存储数字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(同时还加入了其他的改进)使用了普通数。