Bitcoin-Core

區分輸出腳本 (scriptPubKey) 類型

  • August 19, 2020

我正在編寫一個小腳本來分解 coinbase 交易中的數據。這在很大程度上是為了提高我對遺留交易和 SegWit 交易的理解(鑑於 coinbase 交易的數據比 multisig TX 少,我更容易處理)。

關於這些事務,我注意到的一件事是輸出腳本的差異。比特幣 RPC API在解碼它們方面工作得很好,儘管我想知道如何在沒有外部工具的情況下做到這一點。我知道有不同的類型,例如 P2PKH、P2SH 和 P2PK。但是,我不知道如何僅在原始十六進製表示的情況下區分它們。

例如,這個交易有兩個輸出腳本:

76A91494155788E7233D7BEA9AA29FEB2ED37BC878C40B88AC

6A24AA21A9ED7387872912D999B657F4146043675D84B9BBCF66AD5DEC8BCC14117E4FB6999E

RPC API 告訴我第一個具有pubkeyhashP2SH 值的類型3EstC3Hhe8zvNGP73oX9oDvo36sNCygjJi

第二個輸出腳本似乎是無法解碼的隨機數據。(我還看到許多 coinbase 交易有一個可讀輸出和一個或多個無法解碼的輸出)。

另一個例子,由 RPC API 解碼的創世區塊coinbase 交易pubkey具有以下腳本的類型:

4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac

問題:如何在沒有外部 API 的情況下獲取此輸出腳本並確定事務類型及其程序集(OP 腳本程式碼)?

謝謝!

感謝連結我 2016 年的一張舊照片 :-) 同時情況發生了變化,尤其是多重簽名不夠清晰。我在這裡附上一個更新的版本。雖然我沒有時間將最新的 SegWit 相關內容放入圖片中……仍然很高興看到其他意見……

輸出腳本

比特幣核心剛剛推出了描述符錢包實現(PR here)。描述符被建模為函式。他們輸入一個公鑰,並返回相應的 scriptPubKey,以工程師可讀的格式描述其支出情況。例如,sh(wpkh(03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556))描述具有指定公鑰的 P2SH-P2WPKH 輸出。

您可以參考此文件了解更多詳細資訊。achow101 也做了一場精彩的演講(15 分鐘)來詳細解釋這個想法。

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