Coinbase-Transaction
如何驗證新創建的比特幣?
我試圖了解比特幣是如何運作的,但有一個概念我無法理解。
我了解通過檢查每個輸入的簽名是否有效來驗證交易。但是,如果新的比特幣或通過挖礦進入系統的獎勵不包含任何輸入,你如何驗證它們呢?
例如,如果您正在檢查交易輸入是否最終有效,您將到達最初探勘輸入的點,那麼您如何知道這些輸入是合法創建的?
根據比特幣協議,每個區塊的第一筆交易都是特殊的,人們給它起了一個特殊的名字:生成交易(因為它可以生成新的比特幣)或coinbase 交易(因為它是唯一包含一個名為“coinbase”的欄位的交易[Coinbase 公司以該領域命名,但在其他方面無關])。
世代轉換具有以下規則(其中包括與您的問題無關的規則):
- 每個區塊中必須存在一個,並且恰好是一個生成事務。(如果你聽說過“空塊”,那隻是指一個除了生成交易之外什麼都沒有的塊。)
- 他們只能有一個輸入。
- 該輸入“花費”全零的輸出(輸出點)。這不對應於任何實際的交易輸出。
- 該全零點被認為包含該區塊新生成的比特幣(補貼)以及在該區塊中支付的交易費用(費用),統稱為區塊獎勵。
- 特殊輸入有一個稱為coinbase 欄位的欄位,簽名腳本 (scriptSig) 將在其中進入正常交易。在此欄位中輸入的任何內容都會像在正常交易中一樣進行驗證,但在原始比特幣協議中,礦工根本不需要在此欄位中輸入任何內容——他們不需要提供簽名,因為唯一可以’已經創建了這個交易,因為區塊中的第一個是礦工自己。從他們開始,BIP34和BIP141對規則有所改變,但與您的問題無關。也不是特別相關,coinbase 欄位的長度限制為 100 個字節。
實際驗證是這樣工作的:
- 當一個節點收到一個新塊時,它首先查看除生成事務之外的所有事務。它計算他們都支付了多少交易費用。
- 然後節點計算礦工有資格申請的新比特幣(補貼)數量,例如前 210,000 個區塊的 50 BTC 或撰寫本文時的 12.5 BTC(區塊 420,000-629,999)。
- 節點將這兩個數字相加。這是礦工可以要求的最大塊獎勵。
- 現在節點查看生成交易,確保它遵循所有其他規則,並驗證其輸出的總花費小於或等於上面計算的塊獎勵。
有趣的歷史記錄是,超過 1,000 個區塊的生成交易並沒有獲得他們有資格獲得的所有區塊獎勵。這似乎主要發生在早期。 那些比特幣怎麼了?這些區塊的礦工在事後無法認領它們,並且沒有其他人可以認領它們,因此它們永遠失去了。