Python
XPub 到 YPub 轉換器 (python) - 最後一位數字錯誤
下面的程式碼從 XPub 生成一個 YPub,最後 6 位數字錯誤。
如何驗證正在發生的事情並修復此錯誤?
例如:應該是 ypub6X7aFbqxwbJHJQqUhfTEZDWxVT8qbu4qjN8fCz9ADRuAwaZQ243YiB1w5yTE2qRJzRJ3Kza9DbefU8pnqjk3GEmn6g9usvkZZrP94 VcBVdz
但它返回 ypub6X7aFbqxwbJHJQqUhfTEZDWxVT8qbu4qjN8fCz9ADRuAwaZQ243YiB1w5yTE2qRJzRJ3Kza9DbefU8pnqjk3GEmn6g9usvkZZrP94 YkSjSS
程式碼改編自JS中的這個函式,效果很好。
import hashlib import base58 prefixesPub = { 'xpub': '0488b21e', 'ypub': '049d7cb2', 'Ypub': '0295b43f', 'zpub': '04b24746', 'Zpub': '02aa7ed3', 'tpub': '043587cf', 'upub': '044a5262', 'Upub': '024289ef', 'vpub': '045f1cf6', 'Vpub': '02575483' } def convert_pub_key(_xpub, target_prefix): decoded_extended_publicKey = base58.b58decode(_xpub.strip()) extended_public_key_no_prefix = decoded_extended_publicKey[4:] extended_public_key_new_prefix = bytes.fromhex(prefixesPub[target_prefix]) + extended_public_key_no_prefix print(base58.b58encode(extended_public_key_new_prefix)) pub_key = "xpub6CHJwwB3nukoT7eMsJfcM8RTKUzPfH5LpFcSRbFGqRXHtUkAmPsz67Mo4mVe2vmPanBEaWyakwJ7arDE83L2U16BELTVJ1w5J8KVfyMqtzE" prefix = "ypub" convert_pub_key(pub_key, prefix)
和函式
base58.b58decode
僅執行Base 58 解碼/編碼。但是 xpubs 使用 Base 58 Check編碼進行編碼。不同之處在於 Base 58 Check 編碼計算有效負載的校驗和,並將其前 4 個字節附加到 base 58 編碼之前的有效負載。base58.b58encode
您需要使用
base58.b58decode_check
並且base58.b58encode_check
將刪除解碼的校驗和,並添加編碼的校驗和。