Transactions
如何確定輸入或輸出是否為隔離見證?- 重訪
這是一個已經在這裡進行過的討論,但請耐心等待。
我們要談論 tx
faae7e55db14a32e083cbf6a91db8a5ab6a3b05e050d9cefdec80b47f966848e
- 我得到的只是編碼交易
- 它已被標記為 segwit(標記 + 標誌)
- tx 有 3 個輸入,只有最後一個是 segwit
- segwit 輸入有一個腳本 sig:
1600140c6259927541c4f8e88fc1398691e2661d15591a
- 必須正確解碼證人部分,暗示有
only one
在之前的討論中,他們提到隔離見證輸入很容易被發現,因為它有一個空的腳本簽名。
我們這裡的隔離見證輸入
has a script sig
……我知道這是隔離見證,因為我查看了區塊鏈瀏覽器。我的軟體如何通過查看交易數據以程式方式判斷它是隔離見證?
BIP141 segwit 規則考慮交易的方式很簡單,即每個交易輸入(甚至是非 segwit 的)都有一個見證堆棧。然而,非隔離見證輸入需要有一個空的見證堆棧。
如果每個交易輸入都有一個空的見證堆棧,則舊的預隔離見證交易序列化用於交易。如果至少有一個 inout 具有非空見證堆棧,則使用 BIP144 交易序列化格式(包括標記和標誌)。非 segwit 輸入然後只有一個空 witness。
現在,有一條共識規則規定,除非交易輸入是隔離見證支出,否則其見證堆棧必須為空。如果輸入花費的 UTXO 是見證程序(OP_n + 推送 2-40 字節),或者如果它是 P2SH UTXO,其 redeemScript 就是這樣的見證程序,則輸入是隔離見證花費。如果輸入是隔離見證支出,則 scriptSig必須完全為空或完全為 P2SH redeemScript,除此之外別無其他。如果輸入不是隔離見證花費,則見證堆棧必須為空。但所有這些都是管理交易對其見證人和 scriptSigs 是否有效的規則;與交易是否有見證人無關。