Bitcoin-Core-Development

為什麼需要限制輸出的取值範圍?

  • March 22, 2021

協議規則的“tx 消息”部分中,我們有

  1. 每個產值以及總產值必須在法定貨幣範圍內
  1. 對於每個輸入,如果引用的輸出不存在(例如從未存在或已經花費),則拒絕此交易

如果我的理解是正確的,規則 4 將確認 0 <= 輸出,輸出總和 <= 21,000,000,並且規則 12 將檢查每個輸入是否在 UTXO 集中。我很難理解為什麼第 4 條是必要的,似乎其他規則(例如第 12 條)已經使不在法律範圍內的交易無效。沒有人可以擁有超過 21,000,000 的比特幣,因此永遠不會有超過 21,000,000 的 utxos。

另外,我在哪裡可以找到原始碼中這些檢查的程式碼

如果輸出值僅受限於它們的總和小於輸入的總和,您可以例如將一個輸出設置為負值並在第二個輸出中創造新的貨幣。

您還可以做更多創造性的事情:我認為該規則可能是作為對2010 年 8 月 15 日值溢出事件的響應而引入的。高度為 74638 的(現在無效)塊中的交易創建的輸出非常大,以至於它們的總和溢出到允許的範圍內。這筆交易創造了 2×922 億比特幣。

價值溢出事件的原始程式碼修復可以在這裡找到:https ://github.com/bitcoin/bitcoin/commit/d4c6b90ca3f9b47adb1b2724a0c3514f80635c84#diff-118fcbaaba162ba17933c7893247df3aR1013

此規則的程式碼可在此處的 src/consensus/tx_check.cpp 中找到。該CheckTransaction()函式檢查不需要任何目前鏈狀態知識的共識規則。

引用自:https://bitcoin.stackexchange.com/questions/103748