Bitcoin-Core-Development
為什麼 IsCoinBase() 檢查是否只有一個輸入?
在 Bitcoin Core 原始碼中,有一個函式可以檢查給定的交易是否是 coinbase:
bool IsCoinBase() const { return (vin.size() == 1 && vin[0].prevout.IsNull()); }
它真的需要檢查是否
vin.size()
等於1嗎?交易不是vin[0].prevout.IsNull()
coinbase的充分條件嗎?是否存在後一種情況為真但我們有多個輸入的情況?我能猜到的唯一原因是在為空時避免執行時錯誤
vin
(所以沒有vin[0]
)。
coinbase 交易不允許有任何其他輸入,因此進行此檢查。此外,因為這個檢查是共識程式碼的一部分,它是 coinbase 交易的定義,所以這最終有點循環 - 該函式說 coinbase 交易必須只有一個輸入,它會檢查它。
coinbase 交易使用輸入來儲存元數據。某些類型的元數據是塊高度和額外的隨機數。看: