tledger: faster sign_transaction startup - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit ee63e84bcfbc8d5861521367ca0b44c3aa411871 DIR parent 6b8c447eb90a0a37f7271681e98f319c8178592a HTML Author: SomberNight <somber.night@protonmail.com> Date: Tue, 17 Dec 2019 21:19:57 +0100 ledger: faster sign_transaction startup Only call Ledger_KeyStore.get_client_electrum() once, as it runs DeviceMgr.scan_devices(), which is slow. Diffstat: M electrum/plugins/ledger/ledger.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) --- DIR diff --git a/electrum/plugins/ledger/ledger.py b/electrum/plugins/ledger/ledger.py t@@ -325,6 +325,8 @@ class Ledger_KeyStore(Hardware_KeyStore): segwitTransaction = False pin = "" self.get_client() # prompt for the PIN before displaying the dialog if necessary + client_electrum = self.get_client_electrum() + assert client_electrum # Fetch inputs of the transaction to sign for txin in tx.inputs(): t@@ -335,12 +337,12 @@ class Ledger_KeyStore(Hardware_KeyStore): p2shTransaction = True if txin.script_type in ['p2wpkh-p2sh', 'p2wsh-p2sh']: - if not self.get_client_electrum().supports_segwit(): + if not client_electrum.supports_segwit(): self.give_error(MSG_NEEDS_FW_UPDATE_SEGWIT) segwitTransaction = True if txin.script_type in ['p2wpkh', 'p2wsh']: - if not self.get_client_electrum().supports_native_segwit(): + if not client_electrum.supports_native_segwit(): self.give_error(MSG_NEEDS_FW_UPDATE_SEGWIT) segwitTransaction = True t@@ -381,14 +383,14 @@ class Ledger_KeyStore(Hardware_KeyStore): # - only one output and one change is authorized (for hw.1 and nano) # - at most one output can bypass confirmation (~change) (for all) if not p2shTransaction: - if not self.get_client_electrum().supports_multi_output(): + if not client_electrum.supports_multi_output(): if len(tx.outputs()) > 2: self.give_error("Transaction with more than 2 outputs not supported") has_change = False any_output_on_change_branch = is_any_tx_output_on_change_branch(tx) for txout in tx.outputs(): if not txout.address: - if self.get_client_electrum().is_hw1(): + if client_electrum.is_hw1(): self.give_error(_("Only address outputs are supported by {}").format(self.device)) # note: max_size based on https://github.com/LedgerHQ/ledger-app-btc/commit/3a78dee9c0484821df58975803e40d58fbfc2c38#diff-c61ccd96a6d8b54d48f54a3bc4dfa7e2R26 validate_op_return_output(txout, max_size=190)