Segregated-Witness
解析剝離見證塊
我已經閱讀了所有相關的 BIP,但仍然感到困惑。
啟用 segwit 的塊在傳播到非 segwit 對等方時是否會剝離見證數據以及標記和標誌字節?還是它們只是以忽略這些字節的方式序列化?
據我了解,包含 segwit 交易的區塊中可能有見證、標誌和版本字節,也可能沒有——這取決於該區塊的傳播位置。如果它來自非隔離見證節點,則交易將被剝離。但是,當剝離見證塊到達啟用 Segwit 的節點時會發生什麼?它如何知道這些交易實際上是 segwit 並且只是缺少相關數據?他們是否將 txid 與記憶體中的 txid 進行比較並填寫數據?
跟進問題:單個交易消息的流程/流程是什麼?它們的內容是否還取決於請求它們的節點類型?
在將區塊轉發給非隔離見證節點時,啟用隔離見證的節點會在傳輸之前從區塊中剝離見證數據,包括
marker
和flag
。請注意,剝離的塊仍然使非隔離見證對等方能夠到達相同的 UTXO 集,因為剝離的交易指定了哪些輸入被花費以及哪些新輸出被創建。如果啟用 segwit 的節點要接收一個剝離的塊,它會認為該塊無效,因為缺少與 segwit 輸入的交易有關的見證數據(以及存在見證承諾)。因此,啟用隔離見證的節點不會向非隔離見證節點請求區塊,因為它們無論如何都無法提供完整的區塊(除非該區塊沒有隔離見證交易且沒有見證人承諾)。
隔離見證輸入的設計使非隔離見證節點認為隔離見證交易有效但非標準。非標準交易不會被記憶體池接受,因此不會被中繼。這意味著非隔離見證節點不會中繼(剝離)隔離見證交易,除非是在新區塊的上下文中。反過來,這使得隔離見證節點可以安全地請求非隔離見證節點提供的交易清單,因為非隔離見證節點只會提供非隔離見證交易。