commit 5a508f7b8d07835d54aec8b9c22a9b2c25609357
parent 4703d93b0f04a472ba9388da2f1e5eec5f3dc112
Author: SomberNight <somber.night@protonmail.com>
Date: Tue, 3 Apr 2018 01:50:37 +0200
fix #4218
Diffstat:
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/lib/keystore.py b/lib/keystore.py
@@ -76,6 +76,8 @@ class KeyStore(PrintError):
return False
return bool(self.get_tx_derivations(tx))
+ def ready_to_sign(self):
+ return not self.is_watching_only()
class Software_KeyStore(KeyStore):
@@ -536,6 +538,17 @@ class Hardware_KeyStore(KeyStore, Xpub):
password = self.get_pubkey_from_xpub(xpub, ())
return password
+ def has_usable_connection_with_device(self):
+ if not hasattr(self, 'plugin'):
+ return False
+ client = self.plugin.get_client(self, force_pair=False)
+ if client is None:
+ return False
+ return client.has_usable_connection_with_device()
+
+ def ready_to_sign(self):
+ return super().ready_to_sign() and self.has_usable_connection_with_device()
+
def bip39_normalize_passphrase(passphrase):
return normalize('NFKD', passphrase or '')
diff --git a/lib/wallet.py b/lib/wallet.py
@@ -1458,8 +1458,8 @@ class Abstract_Wallet(PrintError):
# hardware wallets require extra info
if any([(isinstance(k, Hardware_KeyStore) and k.can_sign(tx)) for k in self.get_keystores()]):
self.add_hw_info(tx)
- # sign
- for k in self.get_keystores():
+ # sign. start with ready keystores.
+ for k in sorted(self.get_keystores(), key=lambda ks: ks.ready_to_sign(), reverse=True):
try:
if k.can_sign(tx):
k.sign_transaction(tx, password)