electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit b120dd8849a922df9e44d525a8447165d18f9e5f
parent e5aa543707ad9791058899646829118fd9b2e7b3
Author: Neil Booth <kyuupichan@gmail.com>
Date:   Mon, 11 Jan 2016 10:53:07 +0900

Fix root derivation changes for BIP44_Wallets

Wallet keys use root_name
Also typo xub -> xpub

Diffstat:
Mlib/wallet.py | 9++++++---
Mplugins/trezor/plugin.py | 2+-
2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/lib/wallet.py b/lib/wallet.py @@ -1727,9 +1727,10 @@ class BIP32_HD_Wallet(BIP32_RD_Wallet): derivation = self.account_derivation(account_id) root_name = self.root_derivation.split('/')[0] # NOT self.root_name! xpub, xprv = self.derive_xkeys(root_name, derivation, password) - self.add_master_public_key(derivation, xpub) + wallet_key = self.root_name + account_id + "'" + self.add_master_public_key(wallet_key, xpub) if xprv: - self.add_master_private_key(derivation, xprv, password) + self.add_master_private_key(wallet_key, xprv, password) account = BIP32_Account({'xpub':xpub}) self.add_account(account_id, account) if label: @@ -1774,6 +1775,8 @@ class BIP44_Wallet(BIP32_HD_Wallet): digestmodule = hashlib.sha512).read(64) def derive_xkeys(self, root, derivation, password): + root = self.root_name + derivation = derivation.replace(self.root_derivation, root) x = self.master_private_keys.get(root) if x: root_xprv = pw_decode(x, password) @@ -1781,7 +1784,7 @@ class BIP44_Wallet(BIP32_HD_Wallet): return xpub, xprv else: root_xpub = self.master_public_keys.get(root) - xpub = bip32_public_derivation(root_xub, root, derivation) + xpub = bip32_public_derivation(root_xpub, root, derivation) return xpub, None diff --git a/plugins/trezor/plugin.py b/plugins/trezor/plugin.py @@ -95,7 +95,7 @@ class TrezorCompatibleWallet(BIP44_Wallet): return (account.first_address()[0] if account else None, derivation) def derive_xkeys(self, root, derivation, password): - if self.master_public_keys.get(root): + if self.master_public_keys.get(self.root_name): return BIP44_wallet.derive_xkeys(self, root, derivation, password) # When creating a wallet we need to ask the device for the