electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 8ae171777220603129ba599e2f6383e13b355020
parent 22d5d29b819bd7f2db221049144febe082d36882
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:
Mgui/qt/main_window.py | 13+++++++++----
Mlib/wallet.py | 3++-
Mplugins/trustedcoin/trustedcoin.py | 6+++---
3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py @@ -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 @@ -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 @@ -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) @@ -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) diff --git a/lib/wallet.py b/lib/wallet.py @@ -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): diff --git a/plugins/trustedcoin/trustedcoin.py b/plugins/trustedcoin/trustedcoin.py @@ -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)