OP_HASH160:在具體的 P2SH 交易中計算腳本雜湊
我無法理解如何在 P2SH 事務中計算腳本雜湊。
來自 BIP-16 文件(https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki):
scriptSig: [signature] {[pubkey] OP_CHECKSIG} scriptPubKey: OP_HASH160 [20-byte-hash of {[pubkey] OP_CHECKSIG} ] OP_EQUAL
來自比特幣維基(https://en.bitcoin.it/wiki/Script#Crypto):
OP_HASH160 ... The input is hashed twice: first with SHA-256 and then with RIPEMD-160.
因此,我嘗試從真實交易中計算腳本雜湊。我隨機選擇了這個:https ://blockstream.info/tx/00e07f279dd05b9b68c40f21b43c57847e75c35cd3bbc2d80921eb037ef0c9a8?expand 。
接下來,我將討論輸入 0。我相信我應該得到的雜湊是
4bf411df4b0004e00006f88a4f83d127195b88c7
我應該散列的是
5221036c3735b2bf370501c3b872498de54b39ab5afa83d8ce7f6aec43f63a812265b421032b03a42faf387dd5c604435cd48d26b8827fa28a5d4d0f9a18b48e5cefe443bbfe40e
,因為這是兌換腳本的十六進制。
但是當我計算 HASH160 時,我得到
94b1c88916b7c784b896be91b6924f15c2d4a344
,這不是我所期望的..
SHA256(5221036c3735b2bf370501c3b872498de54b39ab5afa83d8ce7f6aec43f63a812265b421032b03a42faf387dd5c604435cd48d26b8827fa28a5d4d0f9a18b5cefe443bb4102102ebbd4ecea67dd980fc4854cc13b1f10cefafdafe8b1eb8e5ce73939b59a0477c53ae) = a77da07651b8445cc38ff5bb96e1e38977c4efdcc21b767ca3e25b8919514e03
RIPEMD160(a77da07651b8445cc38ff5bb96e1e38977c4efdcc21b767ca3e25b8919514e03) = 94b1c88916b7c784b896be91b6924f15c2d4a344
請向我解釋,錯誤在哪裡,我應該怎麼做。我是否誤認為應該散列什麼以及結果應該是什麼,或者我只是計算 SHA256 和 RIPEMD160 錯誤?
祝你好運,0x309。
PS:要計算我執行
echo"..." | openssl sha256
的雜湊,然後我複制雜湊(這樣就沒有“(stdin)=”)並執行echo "..." | openssl rmd160
。
我一直在計算雜湊錯誤。正確的做法:
echo "hex-encoded script" | xxd -r -p | openssl sha256 | sed "s/[^ ]* //" | xxd -r -p | openssl rmd160
或者以更優雅的方式:
echo "hex-encoded script" | xxd -r -p | openssl sha256 --binary | openssl rmd160
看看問題的評論部分,如果你有興趣為什麼會這樣。
祝你好運,0x309。
PS:您可能需要使用
openssl rmd160 -provider legacy