Bitcoin-Core

如何從十六進制腳本計算公鑰 P2SH?

  • September 23, 2019

接下來是我對劇本的研究。

我正在創建一個 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。

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