Transaction-Verification
SegWit 如何成為軟分叉?
閱讀BIP144 的這一部分,我注意到以下聲明:
支持此 BIP 的解析器將能夠區分舊的序列化格式(沒有見證)和這個。標記字節設置為零,因此此結構永遠不會在不支持此 BIP 的解析器中解析為有效事務。如果解析成功,這樣的事務將不包含輸入和單個輸出。
事實上,Bitcoin Core 中的這一行
CheckBlock
證實了這一點,該行在呼叫期間為塊中發現的每筆交易執行。據我了解,這應該意味著看到包含 SegWit 交易的區塊的老客戶會認為該交易無效並因此丟棄整個區塊。那是對的嗎?我錯過了什麼?
您混淆了事務(抽像對象)及其序列化(P2P 協議中的線路或磁碟上的字節)。
當然,SegWit 引入了對 P2P 協議 (BIP144) 的擴展,該協議將見證人與交易一起中繼,而老客戶將無法理解此類消息。
但老客戶看不到他們。僅當請求者要求時才包括證人,而老客戶不會這樣做。對他們來說,新客戶會在中繼之前刪除見證人。正是因為交易的見證人對其 txid 沒有貢獻,實際上可以在中繼之前將其刪除,而不會使其無效。這就是使它成為軟分叉的原因。