fix #4218
This commit is contained in:
@@ -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 '')
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user