URI: 
       tMerge pull request #3500 from SomberNight/fix_sweep_2fa - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 8ae171777220603129ba599e2f6383e13b355020
   DIR parent 22d5d29b819bd7f2db221049144febe082d36882
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Tue, 12 Dec 2017 05:31:07 +0100
       
       Merge pull request #3500 from SomberNight/fix_sweep_2fa
       
       fix sweeping for 2fa wallets
       Diffstat:
         M gui/qt/main_window.py               |      13 +++++++++----
         M lib/wallet.py                       |       3 ++-
         M plugins/trustedcoin/trustedcoin.py  |       6 +++---
       
       3 files changed, 14 insertions(+), 8 deletions(-)
       ---
   DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -1191,7 +1191,9 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
                        _type, addr = self.get_payto_or_dummy()
                        outputs = [(_type, addr, amount)]
                    try:
       -                tx = self.wallet.make_unsigned_transaction(self.get_coins(), outputs, self.config, fee)
       +                is_sweep = bool(self.tx_external_keypairs)
       +                tx = self.wallet.make_unsigned_transaction(
       +                    self.get_coins(), outputs, self.config, fee, is_sweep=is_sweep)
                        self.not_enough_funds = False
                    except NotEnoughFunds:
                        self.not_enough_funds = True
       t@@ -1340,7 +1342,9 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
                    return
                outputs, fee, tx_desc, coins = r
                try:
       -            tx = self.wallet.make_unsigned_transaction(coins, outputs, self.config, fee)
       +            is_sweep = bool(self.tx_external_keypairs)
       +            tx = self.wallet.make_unsigned_transaction(
       +                coins, outputs, self.config, fee, is_sweep=is_sweep)
                except NotEnoughFunds:
                    self.show_message(_("Insufficient funds"))
                    return
       t@@ -1408,8 +1412,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
                '''Sign the transaction in a separate thread.  When done, calls
                the callback with a success code of True or False.
                '''
       -        # call hook to see if plugin needs gui interaction
       -        run_hook('sign_tx', self, tx)
        
                def on_signed(result):
                    callback(True)
       t@@ -1418,8 +1420,11 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
                    callback(False)
        
                if self.tx_external_keypairs:
       +            # can sign directly
                    task = partial(Transaction.sign, tx, self.tx_external_keypairs)
                else:
       +            # call hook to see if plugin needs gui interaction
       +            run_hook('sign_tx', self, tx)
                    task = partial(self.wallet.sign_transaction, tx, password)
                WaitingDialog(self, _('Signing transaction...'), task,
                              on_signed, on_failed)
   DIR diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -860,7 +860,8 @@ class Abstract_Wallet(PrintError):
            def dust_threshold(self):
                return dust_threshold(self.network)
        
       -    def make_unsigned_transaction(self, inputs, outputs, config, fixed_fee=None, change_addr=None):
       +    def make_unsigned_transaction(self, inputs, outputs, config, fixed_fee=None,
       +                                  change_addr=None, is_sweep=False):
                # check outputs
                i_max = None
                for i, o in enumerate(outputs):
   DIR diff --git a/plugins/trustedcoin/trustedcoin.py b/plugins/trustedcoin/trustedcoin.py
       t@@ -248,11 +248,11 @@ class Wallet_2fa(Multisig_Wallet):
                assert price <= 100000 * n
                return price
        
       -    def make_unsigned_transaction(self, coins, outputs, config,
       -                                  fixed_fee=None, change_addr=None):
       +    def make_unsigned_transaction(self, coins, outputs, config, fixed_fee=None,
       +                                  change_addr=None, is_sweep=False):
                mk_tx = lambda o: Multisig_Wallet.make_unsigned_transaction(
                    self, coins, o, config, fixed_fee, change_addr)
       -        fee = self.extra_fee(config)
       +        fee = self.extra_fee(config) if not is_sweep else 0
                if fee:
                    address = self.billing_info['billing_address']
                    fee_output = (TYPE_ADDRESS, address, fee)