比特幣核心的開發者詹姆森·洛普(Jameson Lopp) 講述了比特幣協議如何確保可預測的BTC 發行時間表。
如果你花了幾分鐘時間研究比特幣,你可能已經意識到BTC 的供應量是可預測的,上限為2100 萬個。嚴格來說,限制是2.099.999.997.690.000 satoshi:在協議級別,一切都以最小單位計算。
但是這個限制究竟是如何確定的,是什麼防止它被違反呢?
可以假設這個基本限制應該寫入比特幣白皮書……但它不存在,就像協議的許多其他重要方面一樣。原始Nakamoto 白皮書的純粹主義者應該記住,它沒有描述,特別是:
多重簽名; 礦池; 2100萬比特幣的排放限制; GPU和ASIC挖礦; 塊之間間隔10 分鐘; 高清地址生成; 最佳鏈由總PoW 決定,而不是由長度決定; 還有許多其他人……
但無論如何,閱讀白皮書當然很重要。該鏈接提供世界上所有主要語言的翻譯,甚至更多。
也許你們中的一些人甚至試圖在比特幣核心的實現中找到一個明確的限制定義?在github 倉庫中搜索“21000000”,可以找到MAX_MONEY 常量的定義,但這也不一樣。
那麼,這個排放限值在哪裡規定?它的實現並不像人們想像的那麼簡單。
隱式限制
一個常見的誤解是比特幣必須定期檢查貨幣供應量是否低於2100 萬。
事實上,Bitcoin Core 中有0 個這樣的明確供應檢查。為什麼?不斷總結75+ 百萬個UTXO 是很繁重的。 21MM 上限是隱式而不是顯式的。
—詹姆森·洛普(@lopp),2021 年10 月12 日
@lopp:比特幣應該定期檢查其總供應量是否低於2100 萬枚,這是一個普遍的誤解。
事實上,比特幣核心代碼正好包含0 個這樣的明確的BTC 供應檢查。為什麼?總和超過7500 萬個UTXO 將非常耗費資源。因此,隱式實施了2100 萬比特幣的限制。
與其檢查“在某個時間點”發行的比特幣數量,不如將此限制視為設置滑動上限的幾何級數。畢竟,我們並不太關心到底有多少比特幣。重要的是它們小於某個數字。設置所需上限的進程可以用以下等式描述:
來源:https://twitter.com/anilsaidso
這就像在說:
50*210000
+ 25 * 210000
+12.5*210000
…
+ 0.00000002 * 210000
+ 0.00000001 * 210000
= 20999999.9769
比特幣實施通過確保每個區塊不會產生比每個區塊允許的補貼更多的比特幣來控制新供應量。這行代碼總結了coinbase 交易輸出的總價值(區塊中的第一個交易,唯一允許創建新幣的交易)。
你可能會注意到,除了每個區塊允許的補貼外,這裡還添加了區塊中的交易費用金額。為什麼?因為這些費用不是新的比特幣:它們已經存在並由交易的發送者支付給礦工。檢查一個coinbase 交易的收益減去一個區塊中的交易費用是否小於或等於每個區塊允許的補貼也是同樣正確的。
比特幣協議中的排放曲線是如何確定的?只有五行代碼,其中兩行旨在覆蓋邊緣情況,並且僅在塊高度為13,440,000 或更高時才有效,即從2265 年左右開始。第1157 行檢查背後的邏輯可以在BIP-042 中找到。
對於任何給定的塊高度,可以輕鬆地計算該塊在發射曲線上的位置/指數。你只需要知道發生了多少減半(第1155 行),然後將原始補貼金額(50 BTC)除以適當次數的一半,這是在第1162 行的位移操作中完成的。
除了區塊補貼之外,還需要防止在coinbase 以外的交易中出現無意的供應膨脹。
提供此類驗證的第一種方法是確保每筆交易的輸入確實存在並且可以使用。在Bitcoin Core 中,可以在CheckTxInputs 函數中找到相應的檢查。
當然,這是比特幣協議中最基本的檢查之一,即防止雙重支出。如果相同的記賬單位可以花兩次,這也可以用來任意增加貨幣供應量。
我們還檢查輸入的非負值和溢出。這些案例中的任何一個都將導致新貨幣的產生; 順便說一句,在比特幣的早期,有一個溢出事件導致了這種情況
除了coinbase 之外,對每筆交易的另一項重要檢查是確保輸出的總和小於或等於輸入的總和,因為更高的輸出值將意味著從字面上創建新的記賬單位沒有什麼。此檢查由此處的相同功能執行。
這些是防止BTC 供應任意增加的關鍵檢查。還有一些額外的機制(難度調整)可以根據人類時間來控制排放率。有興趣的可以參考作者的相關文章:Bitcoin’s Timestamp Security 和Bitcoin’s Block Time Variance。
顯式檢查
正如我上面所說,每次我們想確保遵守與發行相關的協議規則時,總結比特幣的總供應量將是一個相當耗費資源的解決方案。但是,可以執行更明確的檢查:簡單地將所有未使用的交易輸出(UTXO)的值相加就足夠了。
Bitcoin Core 為審計總貨幣供應量提供了便捷的服務功能。它被稱為gettxoutsetinfo。
截至7 月9 日,大約有8380 萬個UTXO,因此此操作可能需要一兩分鐘才能完成,具體取決於你的節點運行的硬件。
我向statoshi.info 提供數據的節點在它處理每個新塊後運行此函數。然後將函數返回的硬幣數量存儲在數據庫中並用於構建此圖。
事實上,僅此而已。比特幣的貨幣供應量既可以輕鬆預測,也可以輕鬆驗證。而你剛剛閱讀的一千個單詞只描述了十幾行代碼。
常問問題
關於比特幣貨幣供應,還有一些其他非常常見的問題。
2100萬比特幣的排放上限可以改嗎?
從技術上講是的,但實際上更多的是網絡管理和對其成員的激勵。任何人都可以在自己的節點設置中更改限制並開始應用新規則。困難的部分是說服網絡的其他部分也這樣做。對於有興趣的人,我推薦以下文章:
什麼是比特幣核心?誰控制比特幣核心?了解比特幣開發的焦點是如何運作的比特幣2100 萬的硬頂可以改變嗎? | River Learn – 比特幣基礎知識
為什麼是2100 萬而不是______?
問:為什麼中本聰選擇了21,000,000 BTC 的上限?
答:限制因素是64 位整數(18,446,744,073,709,551,615) 的最大值,21,000,000 BTC 表示為2,100,000,000,000,000 satoshis。 https://t.co/lUo4fRn0yS pic.twitter.com/KbxSyesiNK
—詹姆森·洛普(@lopp),2021 年1 月23 日
問:為什麼中本聰將門檻設置為21,000,000 BTC?
答:限制因素是64 位整數(18.446.744.073.709.551.615)的最大值,21.000.000 BTC 代表2.100.000.000.000.000 Satoshi。
當所有2100 萬比特幣都被“開採”出來時會發生什麼?
礦工不僅會收到新的比特幣,還會收到交易費。區塊補貼之所以得名是有原因的:發行新幣只是為了在交易量較低的情況下幫助系統啟動和運行。比特幣採用和採用的增加意味著對區塊空間的需求增加,隨之而來的是交易費用。另請閱讀:
開採完2100 萬枚比特幣後,比特幣會發生什麼? — 解密
實際存在多少比特幣,丟失了多少?
所有現有UTXO 的總和很容易計算,但仔細觀察會發現其中一些永遠不會被創建,一些可以證明是未支出的,而有些可能(但不確定)是非支出的。 CoinMetrics 有一篇很棒的文章分析了所謂的BTC 流通供應量(儘管從2019 年開始)。
資料來源:https://coinmetrics.substack.com/p/coin-metrics-state-of-the-network-d2e
資源
資訊來源:由0x資訊編譯自BITNOVOSTI。版權歸作者vargoz所有,未經許可,不得轉載