使用bip-utils恢复BRD旧钱包P2PKH地址遇阻求助
无法从BRD(现Coinbase Wallet)助记词恢复P2PKH地址的排查方案
以下是可能遗漏的关键点及对应的解决建议:
1. 未遍历内部链(CHANGE=1)
BRD早期可能会将部分收款地址分配到内部链(对应派生路径末尾的/1),而你的代码仅遍历了外部链(/0)。修改代码同时遍历内外链:
from bip_utils import Bip39SeedGenerator, Bip44, Bip44Coins, Bip44Changes def explore_addresses(mnemonic, account=0, num_addresses=20): seed = Bip39SeedGenerator(mnemonic).Generate() bip44_mst = Bip44.FromSeed(seed, Bip44Coins.BITCOIN) bip44_acc = bip44_mst.Purpose().Coin().Account(account) addresses = [] # 同时遍历外部链(0)和内部链(1) for change in [Bip44Changes.CHAIN_EXT, Bip44Changes.CHAIN_INT]: bip44_chain = bip44_acc.Change(change) for i in range(num_addresses): address = bip44_chain.AddressIndex(i).PublicKey().ToAddress() addresses.append((account, change, i, address)) return addresses mnemonic = '<my recovery phrase from coinbasewallet>' for account in range(100): # 先缩小范围测试,再逐步扩大 addresses = explore_addresses(mnemonic, account, num_addresses=1000) for acc, change, idx, addr in addresses: if addr.startswith('12vHA'): print(f"Account {acc}, Change {change}, Index {idx}: {addr}")
2. BRD早期使用非标准BIP44 Purpose路径
部分早期BRD版本未严格遵循BIP44的m/44'/0'/x'/y/z路径,而是使用更简单的m/0'/0'/x这类非标准路径。可以尝试直接用BIP32派生这类路径:
from bip_utils import Bip39SeedGenerator, Bip32, Bip32Coins def explore_non_standard_paths(mnemonic, num_accounts=10, num_addresses=1000): seed = Bip39SeedGenerator(mnemonic).Generate() bip32_mst = Bip32.FromSeed(seed, Bip32Coins.BITCOIN_MAIN_NET) addresses = [] # 尝试路径 m/0'/account/index for acc in range(num_accounts): acc_node = bip32_mst.DerivePath(f"m/0'/{acc}'") for idx in range(num_addresses): addr_node = acc_node.DerivePath(f"/{idx}") address = addr_node.PublicKey().ToAddress() addresses.append((acc, idx, address)) return addresses mnemonic = '<my recovery phrase from coinbasewallet>' results = explore_non_standard_paths(mnemonic) for acc, idx, addr in results: if addr.startswith('12vHA'): print(f"Non-standard path m/0'/{acc}'/{idx}: {addr}")
3. 助记词存在未记录的Passphrase
BRD早期支持为助记词设置额外的密码(Passphrase),如果当时设置过,生成Seed时必须传入该密码才能得到正确的密钥。修改Seed生成代码:
# 替换为你可能设置过的密码,空字符串表示无密码 passphrase = "your_old_brd_passphrase" seed = Bip39SeedGenerator(mnemonic).Generate(passphrase)
4. 混淆了BIP44与BIP84路径
你当前能生成Bech32地址(bc1开头)是因为Coinbase Wallet现在默认使用BIP84(m/84'/0'/x'/y/z),但早期BRD的P2PKH地址对应BIP44路径。确保你在查找P2PKH时使用的是Bip44Coins.BITCOIN而非BIP84配置。
内容的提问来源于stack exchange,提问作者AndreyS
相关产品推荐
相关产品推荐

