為什么BTC最多只會有2100萬枚?

2024-05-17 08:05:09

BTC乃加密行業之根。總量2100萬之上限,乃BTC之本。一切都從這個神奇的數字展开。可是它,為何是這樣一個數字呢?

我們都聽說過比特幣的數量從2009年啓動時從0开始增長(代表着新的比特幣被發行出來),最終到大約2140年就會停止增長,並且最終不會超過2100萬。對於每一個初次接觸比特幣的人而言,有關於數量有限這一點是最難以理解的、不可思議的“事實”。

比特幣用一套完全开放的代碼來表達人們之間達成的一個約定,這個約定就是關於比特幣發行方法的規則。任何人都可以隨時隨地下載到這套代碼,運行,並參與到對這一發行規則的驗證當中去。

比特幣採用基於“區塊鏈”技術的發行方法。平均大概每10分鐘“挖”到一個“區塊”,裏面包含一定數量的比特幣,給到那臺挖到該區塊的計算機。這裏的“挖”是一個形象的比喻說法,實際上是計算機費電費時算一個非常難的、但是又非常公平的計算題,全世界大家一起算,誰先算出答案就表示誰挖到了。

在最开始,每次挖出的比特幣數量中會包含50個新鑄造的比特幣。大約4年左右時間,挖完21萬個區塊之後,就會減半成25個新比特幣。再挖完21萬個區塊,又過了大約4年時間,就再減半為12.5個新比特幣。以此類推一直減半64次之後就再也不會挖出新比特幣了。比特幣的總量也就再也不會增加了。此時大概是2140年前後。

簡而言之是這樣的:

1. 每區塊產量 50 BTC

2. 每21萬個區塊,產量減半

使用等比數列求和可以輕松算出,最終BTC的總產量為:(50 + 25 + 12.5 + 6.25 + 3.125 + ...) x 21萬 = 2100萬枚。

進一步的,調節“挖礦”難度使得大約每10分鐘產生一個新區塊,即每小時6個新區塊,21萬個區塊就大概是人間4年。

這也就是比特幣4年產量減半周期的來歷。

但是,如此只是對既定事實的一個鋪敘而已。一是缺乏一些細節的考察;二是並未真正揭示比特幣發明人中本聰為何要選擇和設計這樣一個數字的原因。

先說細節。

首先,2100萬並非2100萬,而是2,099,999,997,690,000。對,後面這個數字比2100萬要大1億倍,即大約是2100萬億。在比特幣系統內部,都是這個萬億級的整數。

當我們把BTC“展示”為這個整數點上8位小數位,也就變成了2 0,99 9,99 9.97 690 000。這裏我用空格提示了上面作為整數時的千分位分割點。我們一眼就會看到,中本聰選擇8位小數位其實有些奇怪的,因為這樣會導致8位小數的BTC整數部分的逗號分割點,和系統內真正的整數的逗號分割點不一致。

8位小數位,也就是1億分之一,這個就不太西方。衆所周知,英文裏對數字採用千分位分割,所以計數法的單位是千(thousand)、百萬(million)、十億(billion)、萬億(trillion)。英文裏並沒有“億”這個單位。而中國的計數法略有不同,是以4位數字也就是萬分位為分割的,乃有萬、億、萬億。

2100萬億用萬分位分割就是這樣的:2099 9999 9769 0000;2100萬帶8位小數則是這樣的:2099 9999.9769 0000。都是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.0000 0001之後,再減半就歸零了。因此,這是一個截斷了的有窮數列,其加和就要小於無窮數列求和的結果100。所以,乘以21萬之後,最終結果也要略小於2100萬。

第三,注意第一點的敘述,8位小數位和小數點僅僅是一個“展示”層面的設計。在系統內部只有那個萬億級的整數。

既然僅僅是“展示”,那么其實小數點是可以任意挪動的。現在點在8位小數的位置,以後也可以點在5位或者4位小數的位置。

比如,20,999,999,976.90000(5位小數),或者2099 9999 9769.0000(4位小數)。

那么,8位小數時的1枚比特幣,當移位到5位小數時,就顯示為1000,移位到4位小數時,就顯示為10000。相應的,原來的0.001或者0.0001 BTC現在就會顯示為1。

這移位的想法並非王哥杜撰的,而是中本聰真實的想法。在2009年4月12日中本聰給Mike Hearn的回信[1]中,他這樣寫道:

"My choice for the number of coins and distribution schedule was an educated guess. It was a difficult choice, because once the network is going it's locked in and we're stuck with it. I wanted to pick something that would make prices similar to existing currencies, but without knowing the future, that's very hard. I ended up picking something in the middle. If Bitcoin remains a small niche, it'll be worth less per unit than existing currencies. If you imagine it being used for some fraction of world commerce, then there's only going to be 21 million coins for the whole world, so it would be worth much more per unit. Values are 64-bit integers with 8 decimal places, so 1 coin is represented internally as 100000000. There's plenty of granularity if typical prices become small. For example, if 0.001 is worth 1 Euro, then it might be easier to change where the decimal point is displayed, so if you had 1 Bitcoin it's now displayed as 1000, and 0.001 is displayed as 1."

我對硬幣數量和發行時間表的選擇是經過深思熟慮的。這是一個艱難的選擇,因為一旦網絡开始運行,它就會被鎖定,我們就會被它困住。我想選擇一種能讓價格與現有貨幣相近的(數字),但在不知道未來的情況下,這很難做到。最後,我選擇了中間值。如果比特幣仍然是一種小衆貨幣,那么它的單位價值就會低於現有貨幣。如果你想象比特幣被用於世界商業的某個部分,那么全世界只有 2100 萬個比特幣,所以它的單位價值會更高。幣值是小數點後 8 位的 64 位整數,因此 1 枚硬幣在內部表示為 100000000。如果典型(應用場景的)價格變小,則有足夠的粒度。例如,如果 0.001 價值 1 歐元,那么改變小數點的顯示位置可能會更容易(查看和使用),所以如果你有 1 個比特幣,現在顯示為 1000,而 0.001 顯示為 1。

有人說,對於普遍的64位計算機而言,如果我們使用64位二進制數同時表示整數和小數(又稱浮點數),那么最安全的做法是把整數限制在浮點數的整數部分可表達的上限內。

稍微了解計算機原理的朋友都知道,計算機內部並沒有什么小數,都是0和1的數位。所謂64位整數,就是指64個0或者1所組成的二進制整數。對應10進制就是2^64 = 18446744073709551616。這個數字要遠大於2100萬億。但是,如果要讓計算機能夠處理浮點數,那么就要把64位中拆出一部分用來表達小數部分,還要留出1位來表示正負號。這就成了IEEE 754浮點數編碼標准。其中標准定義,雙精度浮點數用64位二進制是這樣編碼的:

這樣一來,整數部分就只能使用53位,也就是最大不超過2^53 = 9007199254740992。而如果希望容易測試結果是否為整數,則最好不要超過2^51 = 2251799813685248。如此,可以選擇22(百萬億),但是22不是一個“三角數”(triangular number),所以中本聰選擇了21(百萬億)。

據此許多人認為中本聰選擇2100萬億,大大地方便了各種編程語言處理比特幣數量相關的計算。

不過,王哥看了中本聰的郵件後,覺得中本聰也許並沒有這么復雜的想法。或者他的確思忖過,但是並沒有講透他的全盤考慮。他只是講,也曾經考慮過其他數字,比如4200萬億,但是感覺太大了,於是就折中成了2100萬億。在2011年1月10日中本聰回復Mike Hearn的郵件[2]中,他是這樣寫的:

"It works out to an even 10 minutes per block:21000000 / (50 BTC  24hrs  365days  4years  2) = 5.99 blocks/hour"I fudged it to 364.58333 days/year. The halving of 50 BTC to 25 BTC is after 210000 blocks or around 3.9954 years, which is approximate anyway based on the retargeting mechanism's best effort."I thought about 100 BTC and 42 million, but 42 million seemed high."I wanted typical amounts to be in a familiar range. If you're tossing around 100000 units, it doesn't feel scarce. The brain is better able to work with numbers from 0.01 to 1000."If it gets really big, the decimal can move two places and cents become the new coins."

這樣算來,每個區塊的平均時間為 10 分鐘:21000000 / (50 BTC  24 小時  365 天  4 年  2) = 5.99 區塊/小時“我把它修訂成 364.58333 天/年。將 50 BTC 減半為 25 BTC 是在 210000 個區塊之後,即大約 3.9954 年。“我想過 100 BTC 和 4200 萬,但 4200 萬似乎太高了。“我希望典型的數額在大家熟悉的範圍內。如果你在 10 萬個單位左右折騰,就不會覺得稀缺。大腦能更好地處理 0.01 到 1000 之間的數字。“如果數字真的很大,小數點就會移動兩位,‘分’就會成為新的硬幣。

看起來,中本聰是先定了時間諸參數,而後調整區塊產量和總量,並思考多大的數字較為適合。

依中本聰的意思,大多數人手裏的BTC數量最好在0.01到1000之間,不要動輒就搞個6、7位數的幣,那樣會缺乏稀缺感。

以上就是關於2100萬枚總量數字的來龍去脈。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

Layer2 格局劇變:Base 生態有哪些關鍵亮點?

在激烈競爭的 L2 賽道中,原本穩坐釣魚臺的 Arbitrum 和 Optimism 似乎面臨着前...

加密泡泡啊
71 1個月前

XRP 漲至 7.5 美元?分析師告訴 XRP 大軍為純粹的煙火做好准備!

加密貨幣分析師 EGRAG 表示,XRP 即將迎來關鍵時刻,價格可能大幅上漲,這取決於能否突破關鍵...

加密泡泡啊
73 1個月前

以太坊ETF通過後 將推動山寨幣和整個加密生態大爆發

比特幣ETF通過後市場動蕩,以太坊ETF交易前景分析 比特幣ETF通過後,市場出現了先跌後漲的走勢...

加密泡泡啊
78 1個月前

ZRO為啥這么能漲?

ZRO概述 ZRO代幣,全稱為LayerZero,是LayerZero協議的本地代幣,旨在作為治理...

加密泡泡啊
66 1個月前

今晚ETH迎來暴漲時代 op、arb、metis等以太坊二層項目能否跑出百倍幣?

北京時間7月23日晚上美股开盤後 ETH 的ETF开始交易。ETH的裏程碑啊,新的時代开啓。突破前...

BNBCCC
75 1個月前

Mt Gox 轉移 28 億美元比特幣 加密貨幣下跌 ETH ETF 提前發行

2014 年倒閉的臭名昭著的比特幣交易所 Mt Gox 已向債權人轉移了大量比特幣 (BTC),作...

加密圈探長
71 1個月前