URI: 
       thardware: store derivation instead of account_id - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 428bc539b30d167e9eec77944a695b02319fc814
   DIR parent 664077397ead66ed63abfca6bb4614fc19020485
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Sat, 20 Aug 2016 21:08:30 +0200
       
       hardware: store derivation instead of account_id
       
       Diffstat:
         M lib/base_wizard.py                  |       5 +++--
         M lib/keystore.py                     |       2 ++
         M lib/storage.py                      |       5 +++--
         M plugins/trezor/plugin.py            |       4 ++--
         M plugins/trezor/qt_generic.py        |       2 +-
       
       5 files changed, 11 insertions(+), 7 deletions(-)
       ---
   DIR diff --git a/lib/base_wizard.py b/lib/base_wizard.py
       t@@ -176,8 +176,9 @@ class BaseWizard(object):
                self.account_id_dialog(run_next=f)
        
            def on_hardware_account_id(self, account_id):
       -        from keystore import load_keystore
       -        self.storage.put('account_id', int(account_id))
       +        from keystore import load_keystore, bip44_derivation
       +        derivation = bip44_derivation(int(account_id))
       +        self.storage.put('derivation', derivation)
                name = self.storage.get('hardware_type')
                plugin = self.plugins.get_plugin(name)
                plugin.on_create_wallet(self.storage, self)
   DIR diff --git a/lib/keystore.py b/lib/keystore.py
       t@@ -644,6 +644,8 @@ is_any_key = lambda x: is_old_mpk(x) or is_xprv(x) or is_xpub(x) or is_address_l
        is_private_key = lambda x: is_xprv(x) or is_private_key_list(x)
        is_bip32_key = lambda x: is_xprv(x) or is_xpub(x)
        
       +def bip44_derivation(account_id):
       +    return "m/44'/0'/%d'"% int(account_id)
        
        def from_seed(seed, password):
            if is_old_seed(seed):
   DIR diff --git a/lib/storage.py b/lib/storage.py
       t@@ -36,6 +36,7 @@ import stat
        from i18n import _
        from util import NotEnoughFunds, PrintError, profiler
        from plugins import run_hook, plugin_loaders
       +from keystore import bip44_derivation
        
        class WalletStorage(PrintError):
        
       t@@ -188,7 +189,7 @@ class WalletStorage(PrintError):
                        storage2.put('accounts', {'0': x})
                        # need to save derivation and xpub too
                        storage2.put('master_public_keys', {'x/': xpub})
       -                storage2.put('account_id', k)
       +                storage2.put('derivation', bip44_derivation(k))
                        storage2.write()
                        result.append(new_path)
                else:
       t@@ -218,7 +219,7 @@ class WalletStorage(PrintError):
                self.put('hardware_type', wallet_type)
                xpub = self.get('master_public_keys')["x/0'"]
                self.put('master_public_keys', {'x/': xpub})
       -        self.put('account_id', 0)
       +        self.put('derivation', bip44_derivation(0))
        
            def convert_imported(self, test):
                # '/x' is the internal ID for imported accounts
   DIR diff --git a/plugins/trezor/plugin.py b/plugins/trezor/plugin.py
       t@@ -23,10 +23,10 @@ class TrezorCompatibleKeyStore(Hardware_KeyStore):
        
            def load(self, storage, name):
                self.xpub = storage.get('master_public_keys', {}).get(name)
       -        self.account_id = int(storage.get('account_id'))
       +        self.derivation = storage.get('derivation')
        
            def get_derivation(self):
       -        return "m/44'/0'/%d'"%self.account_id
       +        return self.derivation
        
            def get_client(self, force_pair=True):
                return self.plugin.get_client(self, force_pair)
   DIR diff --git a/plugins/trezor/qt_generic.py b/plugins/trezor/qt_generic.py
       t@@ -291,7 +291,7 @@ def qt_plugin_class(base_plugin_class):
                # Setup device and create accounts in separate thread; wait until done
                loop = QEventLoop()
                exc_info = []
       -        derivation = "m/44'/0'/%d'"%storage.get('account_id')
       +        derivation = storage.get('derivation')
                self.setup_device(derivation, thread, handler, on_done=loop.quit,
                                  on_error=lambda info: exc_info.extend(info))
                loop.exec_()