區分輸出腳本 (scriptPubKey) 類型
我正在編寫一個小腳本來分解 coinbase 交易中的數據。這在很大程度上是為了提高我對遺留交易和 SegWit 交易的理解(鑑於 coinbase 交易的數據比 multisig TX 少,我更容易處理)。
關於這些事務,我注意到的一件事是輸出腳本的差異。比特幣 RPC API在解碼它們方面工作得很好,儘管我想知道如何在沒有外部工具的情況下做到這一點。我知道有不同的類型,例如 P2PKH、P2SH 和 P2PK。但是,我不知道如何僅在原始十六進製表示的情況下區分它們。
例如,這個交易有兩個輸出腳本:
76A91494155788E7233D7BEA9AA29FEB2ED37BC878C40B88AC
和
6A24AA21A9ED7387872912D999B657F4146043675D84B9BBCF66AD5DEC8BCC14117E4FB6999E
RPC API 告訴我第一個具有
pubkeyhash
P2SH 值的類型3EstC3Hhe8zvNGP73oX9oDvo36sNCygjJi
第二個輸出腳本似乎是無法解碼的隨機數據。(我還看到許多 coinbase 交易有一個可讀輸出和一個或多個無法解碼的輸出)。
另一個例子,由 RPC API 解碼的創世區塊coinbase 交易
pubkey
具有以下腳本的類型:4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac
問題:如何在沒有外部 API 的情況下獲取此輸出腳本並確定事務類型及其程序集(OP 腳本程式碼)?
謝謝!
感謝連結我 2016 年的一張舊照片 :-) 同時情況發生了變化,尤其是多重簽名不夠清晰。我在這裡附上一個更新的版本。雖然我沒有時間將最新的 SegWit 相關內容放入圖片中……仍然很高興看到其他意見……
比特幣核心剛剛推出了描述符錢包實現(PR here)。描述符被建模為函式。他們輸入一個公鑰,並返回相應的 scriptPubKey,以工程師可讀的格式描述其支出情況。例如,
sh(wpkh(03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556))
描述具有指定公鑰的 P2SH-P2WPKH 輸出。