比特幣總供給是怎麼算出來的?

比特幣總供給是怎麼算出來的?的文章封面插畫

公開查詢網站常會顯示「目前已發行多少 BTC」,數字還會隨時間緩慢增加。有的網站剛讀到最新一個區塊,有的更新稍慢,小數位與統計名稱也不完全相同。既然比特幣沒有中央銀行發布供給報表,這些數字究竟從哪裡來?

不過,把畫面上的總數當成某個權威機構公告,會錯過比特幣最關鍵的設計。網路沒有一個所有人必須相信的「總供給欄位」;每一份新幣收入、普通交易與當前帳本狀態,都能從公開資料重新核對。網站提供方便的檢視結果,不能替代底層驗算。

因此,一台從頭同步的全節點會依序檢查歷史資料,確認每個區塊允許新增多少幣、普通交易有沒有憑空增加輸出,以及哪一批輸出目前仍未被花掉。供給數字的可信度,來自許多驗證者能用相容的共識規則重做同一套計算。

新幣只從每個區塊的第一筆交易進入

普通交易必須引用既有的 UTXO 作為輸入,再建立新的輸出。每個區塊開頭的 Coinbase 交易則是特殊入口:它不引用一般輸入,負責讓成功產出區塊的礦工領取當期補貼與該區塊內的手續費。

全節點不會照單全收 Coinbase 交易宣稱的金額。它會根據區塊所在位置計算當期補貼上限,再加總普通交易留下的費用,確認 Coinbase 輸出沒有超過兩者合計。礦工若多領一聰,整個候選區塊就不符合規則;即使工作量證明合格,其他節點仍可拒絕它。

礦工也可以少領。沒有被 Coinbase 交易領走的補貼或費用,不會存進一個日後可補領的公庫。這使「依發行時程最多允許多少」與「歷史上實際建立多少」可能出現細小差距,也說明常說的 2100 萬是供給規則的上限輪廓,並非每一種統計都必須精確顯示同一個整數。

普通交易只能重新分配既有價值

驗證普通交易時,全節點會從當前 UTXO 集合查找每個輸入,確認它仍可使用、花費條件已滿足,而且同一份資產沒有在有效歷史中重複支出。接著,節點比較輸入與輸出總額;輸出不能大於可用輸入,兩者差額就是交易提供的手續費。

交易通過後,已花掉的舊輸出會從 UTXO 集合移除,新建立且可供未來花費的輸出則加入集合。這個過程持續套用到每個有效區塊,節點便能得到目前的未花費狀態。它不需要先相信某個網站公布的總額,只需要持有同一段有效歷史並正確執行檢查。

也因為交易主要在重新組合既有輸出,付款金額再大都不會增加總供給。唯一能依規則加入新價值的入口是 Coinbase 補貼,而普通交易若讓輸出超過輸入,就會直接失敗。

四種供給數字回答不同問題

「比特幣有多少」至少可能指向四種數字。第一種是依減半時程推算的理論發行上限,用來描述未來最多允許新增多少。第二種是目前有效歷史中實際領取的新幣總額;少領的補貼不會算入。

第三種是當前 UTXO 集合的金額總和,也就是節點仍視為未花費的輸出。明確寫成不可花費條件的輸出不會長期留在這份集合裡,一些統計工具也會把這類金額、未領取獎勵及其他特殊情況另外列示。

第四種是經濟上實際可流通的數量。這一項最難精確。某筆輸出雖仍在 UTXO 集合中,控制它的私鑰可能早已遺失;可是,長年沒有移動也可能只是持有人選擇不花。公開資料能證明沉默,通常不能證明祕密已永久消失。

因此,兩個網站若分別顯示累計發行量、UTXO 總額或估計流通量,數字不同不必然表示其中一方算錯。先看統計定義、資料讀到哪個區塊,以及是否把可證明不可花費與推測遺失分開,才知道它們正在回答哪一個問題。

同一規則與同一段歷史會收斂到同一答案

兩台同步到相同鏈尖、執行相容規則的全節點,應能對區塊有效性與 UTXO 狀態得出一致結果。短暫分支出現時,它們可能先接受不同候選歷史;後續累積工作量使其中一段勝出後,節點會撤回落敗分支造成的狀態,再套用勝出分支的交易與補貼。

這種重算可能讓最近幾個區塊的統計短暫變動,卻沒有開放繞過供給檢查。候選歷史仍須逐塊符合補貼上限、交易守恆與其他規則。若軟體實作有缺陷,或參與者改用不相容規則,網路也可能產生嚴重分歧;可重複驗證降低了依賴,沒有讓程式自動免於錯誤。

所以,比特幣總供給並非靠一個可信網站宣告。每個全節點都能從有效歷史核對新幣入口,再由未花費輸出整理當前狀態。較準確的問題還要多問一步:眼前數字描述的是理論上限、實際發行、UTXO 總額,還是對可流通資產的估計?把定義分開,才能看懂固定供給如何被執行,也能理解看似相近的數字為何不一定完全一致。