Hash

在具體的 P2SH 交易中計算腳本雜湊

  • July 4, 2022

我無法理解如何在 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

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