Bitcoin-Core
區分幣基交易的唯一因素
在比特幣原始碼中,這裡有一個函式來檢查給定的交易是否是基於硬幣的:
bool IsCoinBase() const { return (vin.size() == 1 && vin[0].prevout.IsNull()); }
我的問題是它真的需要檢查是否
vin.size()
等於1嗎?交易不是vin[0].prevoud.IsNull()
以幣為基礎的充分條件嗎?是否存在後一種情況為真但我們有多個輸入的情況?我能猜到的唯一原因是在為空時避免執行時錯誤
vin
(所以沒有vin[0]
)。
coinbase 交易不允許有任何其他輸入,因此進行此檢查。此外,因為這個檢查是共識程式碼的一部分,它是 coinbase 交易的定義,所以這最終有點循環 - 該函式說 coinbase 交易必須只有一個輸入,它會檢查它。