Private-Key
如何從 sha256 私鑰生成比特幣 P2SH WIF 密鑰和地址對?
假設我有 sha256 私鑰十六進制格式
0000000000000000000000000000000000000000000000000000000000000001
如何獲取
P2SH
地址及其對應的 WIF 私鑰?我的
P2SH
意思是P2SH-P2WPKH
地址以3
. 這些被稱為 1-of-1 多重簽名地址嗎?
私鑰提供公鑰,它可以提供以 1 開頭的比特幣地址。但 P2SH 地址(以 3 開頭)只是腳本的雜湊,並且該腳本幾乎可以是任何東西,它通常不與單個公鑰/私鑰。也許你的意思是 P2SH-P2WPKH?在這種情況下,您可以閱讀如下內容:https ://bitcoincore.org/en/segwit_wallet_dev/(特別是名為“創建 P2SH-P2WPKH 地址”的部分)。否則可能類似於 1-of-1 多重簽名地址或簡單的 P2SH 編碼普通 P2PK/P2PKH 兌換腳本?如果您明確說明您的意思,我將更新此答案:)
它是一樣的
b58check(HASH160)
,但你正在散列一個腳本。1 對 1 多重簽名 P2SH 地址的腳本是
OP_0 hash160(pubkey)
.所以你的地址是
b58check(hash160('\x00\x14' + hash160(pubkey)))
。長話短說:
1) WIF to pubkey: secret = b58check_decode(WIF) pubkey = ECKey(secret).pubkey 2) pubkey to P2PKH (legacy address): addrtype = 0 addr = b58check(addrtype, hash160(pubkey)) 3) pubkey to P2SH (1-to-1 multisig address): addrtype = 5 addr = b58check(addrtype, hash160('\x00\x14' + hash160(pubkey))) where hash160(x) = ripemd160(sha256(x))
基本上就是這樣。另請參閱<https://github.com/joric/pywallet/issues/1>
關於 WIF 轉換的 32 字節秘密 - 比特幣核心無法區分不同的 WIF,它只是 b58check(secret) 類型 0x80。Importprivkey 命令從同一個密鑰生成 3 個不同的地址 - P2PKH、P2SH 和 BECH32,您可以隨時重新導出-重新導入該密鑰。