翻譯輸入(和輸出)以找到交易中涉及的地址?
我有辦法翻譯比特幣交易中的輸入和輸出腳本嗎?
我正在建構一個應用程序,它可以讓你從比特幣網路查詢不同的統計數據,我希望它也能夠“跟踪地址”。
我試圖閱讀 Script 以及事務是如何工作的,但我有點困惑。
由於 bitcoin-cli 中的內置函式(以及大多數區塊瀏覽器)能夠找到地址,我確信我應該能夠解析和翻譯腳本……或者?
是的,您可以從交易的輸入或輸出中獲取比特幣地址。
為此,您必須從輸入或輸出中提取公鑰(現在主要從輸入中提取,取決於交易類型)。之後,您可以輕鬆計算所涉及的比特幣地址(例如,按照這些步驟https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses#How_to_create_Bitcoin_Address)。
然而,提取公鑰是一項相當艱鉅的任務,要自己實現,並且會花費大量時間,除非您找到現成的實現(如果找到,請告訴我)。
祝你好運,0x309。
如果我錯了,請隨時要求澄清或糾正我。
地址只是對輸出腳本進行編碼的標準化方式。它們不是比特幣協議的一部分,只有少數標準腳本有關聯的地址。截至目前,這些是 P2PKH、P2SH、P2WPKH、P2WSH 和 P2TR。
我不會詳細介紹如何將這些腳本中的每一個轉換為地址,但我會提供有用的連結。
P2PKH(支付給公鑰雜湊)
P2PKH 輸出腳本如下所示:
OP_DUP OP_HASH160 OP_PUSHBYTES_20 <key_hash> OP_EQUALVERIFY OP_CHECKSIG
該
<key_hash>
部分是公鑰的 160 位散列(SHA-256 然後 RIPEMD-160)。地址總是以 開頭1
。更多細節在這裡。P2SH(支付腳本雜湊)
P2SH 輸出腳本如下所示:
OP_HASH160 OP_PUSHBYTES_20 <script_hash> OP_EQUAL
該
<script_hash>
部分是兌換腳本的 160 位雜湊。該地址的構造與 P2PKH 類似,並且始終以3
. BIP-16中的更多詳細資訊。P2WPKH(付費見證公鑰雜湊)
P2WPKH 輸出腳本如下所示:
OP_0 OP_PUSHBYTES_20 <key_hash>
與 P2PKH 中一樣,
<key_hash>
是公鑰的 160 位散列。地址總是以 開頭bc1q
。BIP-173中的更多詳細資訊。P2WSH(支付給見證腳本雜湊)
P2WSH 輸出腳本如下所示:
OP_0 OP_PUSHBYTES_32 <script_hash>
該
<script_hash>
部分是兌換腳本的 256 位雜湊(雙 SHA-256)。與 P2WPKH 一樣,地址始終以 BIP-173 開頭bc1q
並且也在BIP-173中指定。P2TR(支付給 Taproot)
P2TR 輸出腳本如下所示:
OP_PUSHNUM_1 OP_PUSHBYTES_32 <key>