Transactions

如何確定輸入或輸出是否為隔離見證?- 重訪

  • November 25, 2022

這是一個已經在這裡進行過的討論,但請耐心等待。

我們要談論 txfaae7e55db14a32e083cbf6a91db8a5ab6a3b05e050d9cefdec80b47f966848e

  • 我得到的只是編碼交易
  • 它已被標記為 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 是否有效的規則;與交易是否有見證人無關。

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