不同的“vout”格式
使用 bitcoind rpc,我一直在查看一些(coinbase)交易的“vout”記錄的內容,但不明白它們之間的區別。
查看區塊 710000,coinbase 交易有 4 個輸出。第一個的“類型”為“pubkeyhash”,其餘的類型為“空數據”
查看區塊 176001,coinbase 交易有 1 個輸出,“類型”為“pubkey”。
你能指出我列出並區分可能的輸出類型的參考嗎?
’nulldata’ 是因為 OP_RETURN 嗎?所以說這裡的任何非零“價值”都會被燒毀,這是真的嗎?
我應該如何解釋與“pubkey”相關的數據?似乎實際地址不在記錄中。但是,如果我查看基於 Web 的區塊鏈瀏覽器,它會辨識地址。這是怎麼做到的?
’nulldata’ 是因為 OP_RETURN 嗎?
是的,我猜“nulldata”只是您使用的特定軟體賦予 OP_RETURN 腳本的名稱。
所以說這裡的任何非零“價值”都會被燒毀,這是真的嗎?
是的。
似乎實際地址不在記錄中。
地址只是比特幣腳本的一個方便人類可讀的摘要,通常基於公鑰的雜湊值(在歷史上最常見的交易輸出類型的情況下)。正如您所注意到的,該腳本存在於網路消息中,但地址僅通過軟體將其呈現給人們從中派生。
你能指出我列出並區分可能的輸出類型的參考嗎?
比特幣核心軟體(從 22.0 版開始(來源))將在“類型”下為每個輸出報告以下名稱之一:
pubkey
: 直接支付給公鑰的腳本 (P2PK,<pubkey> OP_CHECKSIG
); 它沒有對應的地址。pubkeyhash
: 支付給公鑰雜湊值 (P2PKH,OP_DUP OP_HASH160 <pubkeyhash> OP_EQUALVERIFY OP_CHECKSIG
) 的腳本,對應一個1...
地址。scripthash
: 支付給BIP16 (P2SH, )定義的腳本雜湊的腳本OP_HASH160 <scripthash> OP_EQUAL
,對應於3...
地址(在BIP13中定義)multisig
: 一個(裸)k-of-n 多重簽名腳本,形式為<k> <pubkey1> <pubkey2> <pubkey3> ... <pubkey_n> <n> OP_CHECKMULTISIG
; 它沒有對應的地址,現在非常少見。witness_v0_keyhash
:在 BIP141 (OP_0 <pubkeyhash>
) 中定義的原生 P2WPKH 輸出,對應於 42 個字元的bc1p...
地址(在BIP173中定義)。witness_v0_scripthash
:在 BIP141 ( ) 中定義的本地 P2WSH 輸出,OP_0 <scripthash>
對應於 62 個字元的bc1p...
地址(在BIP173中定義)。witness_v1_taproot
:在BIP341 ( )中定義的 P2TR 輸出,OP_1 <tweaked pubkey>
對應於 62 個字元的bc1q...
地址(在BIP350中定義)。witness_unknown
: 不是 P2WPKH、P2WSH 或 P2TR 的本機 segwit 輸出(OP_<n> <payload>
對於 n=1..17 和 2 到 40 個字元之間的有效負載),對應於任何其他BIP350地址。nulldata
: 一個 OP_RETURN 輸出,燒幣。nonstandard
: 上面列表中沒有的任何東西’nulldata’ 是因為 OP_RETURN 嗎?所以說這裡的任何非零“價值”都會被燒毀,這是真的嗎?
確實。
我應該如何解釋與“pubkey”相關的數據?似乎實際地址不在記錄中。但是,如果我查看基於 Web 的區塊鏈瀏覽器,它會辨識地址。這是怎麼做到的?
簡短的回答:區塊鏈瀏覽器是錯誤的;此輸出沒有地址。
更長的答案:“地址”一詞隨著時間的推移而改變了含義。從歷史上看(2012 年之前),地址是“公鑰標識符”的同義詞。地址的更現代含義是“唯一對應於特定輸出腳本的人類可讀字元串”。在典型的錢包軟體中,無法建構對“pubkey”(P2PK)腳本的支付,因此沒有地址。但是,可以在這樣的腳本中獲取公鑰,計算其公鑰散列,然後報告與該公鑰散列對應的 P2PKH 地址——從而產生理論上可以由與該地址相同的一方使用的 P2PKH。這就是您正在查看的資源管理器正在做的事情,以及許多軟體在歷史上曾經做過的事情。現在充其量被認為是誤導,因為發送到該地址不會產生具有相同腳本的輸出,並且使用了從一種輸出類型“轉換”為通常不可能的另一種輸出類型的做法(例如,對於多重簽名地址沒有明顯的方法來做同樣的事情) . 此外,這是危險的,因為接收者可能無法為使用意外腳本的輸出簽名(例如,如果他們使用具有良好控制的簽名邏輯的 HSM,出於安全原因無法更新)。