Bitcoin-Core-Development

為什麼 IsCoinBase() 檢查是否只有一個輸入?

  • July 5, 2022

在 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 交易使用輸入來儲存元數據。某些類型的元數據是塊高度和額外的隨機數。看:

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