Bitcoin-Core
如何從十六進制腳本計算公鑰 P2SH?
接下來是我對劇本的研究。
我正在創建一個 ScriptPubKey 反編譯器,現在我的 P2SH 有問題,
那麼如何計算密鑰 p2sh 呢?
我使用此程式碼,但我認為不正確
string scriptHash = hex.substr(4, hex.length() - 6); Bytes bytes = hexBytes(scriptHash.c_str()); char address[36]; Base58Check::pubkeyHashToBase58Check(bytes.data(), 0x00, address); string stringAddr(address); cout << "P2SH addresss is " << address;
我在比特幣核心的 DestinationEncoder 類中查看了這段程式碼
std::string operator()(const CKeyID& id) const { std::vector<unsigned char> data = m_params.Base58Prefix(CChainParams::PUBKEY_ADDRESS); data.insert(data.end(), id.begin(), id.end()); return EncodeBase58Check(data); }
並且使用此程式碼,資訊似乎已排入隊列,您能澄清我的想法嗎?
這在 BIP 13 中指定:https ://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki
您計算 P2SH 版本字節的 Base58Check 編碼(主網為 5,測試網為 196),然後是腳本的 20 字節 Hash160。
您引用的程式碼適用於 P2PKH 地址,而不是 P2SH。