commit d98f123f92f0c5485693a51453f2f53189c2c10a
parent 21038843ea9ab846b1afaf796b3b33b03da6d191
Author: Neil Booth <kyuupichan@gmail.com>
Date: Tue, 5 Jan 2016 19:35:44 +0900
Fix make_unsigned_transaction for trustedcoin
Fixes #1600
Diffstat:
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/plugins/trustedcoin/trustedcoin.py b/plugins/trustedcoin/trustedcoin.py
@@ -33,7 +33,7 @@ from electrum import version
from electrum.wallet import Multisig_Wallet, BIP32_Wallet
from electrum.i18n import _
from electrum.plugins import BasePlugin, run_hook, hook
-
+from electrum.util import NotEnoughFunds
from decimal import Decimal
@@ -206,7 +206,7 @@ class Wallet_2fa(Multisig_Wallet):
def can_sign_without_server(self):
return self.master_private_keys.get('x2/') is not None
- def extra_fee(self, tx):
+ def extra_fee(self, tx=None):
if self.can_sign_without_server():
return 0
if self.billing_info.get('tx_remaining'):
@@ -216,7 +216,7 @@ class Wallet_2fa(Multisig_Wallet):
# trustedcoin won't charge if the total inputs is lower than their fee
price = int(self.price_per_tx.get(1))
assert price <= 100000
- if tx.input_value() < price:
+ if tx and tx.input_value() < price:
self.print_error("not charging for this tx")
return 0
return price
@@ -226,17 +226,23 @@ class Wallet_2fa(Multisig_Wallet):
fee += self.extra_fee(tx)
return fee
- def get_tx_fee(self, tx):
- fee = Multisig_Wallet.get_tx_fee(self, tx)
- fee += self.extra_fee(tx)
- return fee
-
- def make_unsigned_transaction(self, *args):
- tx = BIP32_Wallet.make_unsigned_transaction(self, *args)
- fee = self.extra_fee(tx)
+ def make_unsigned_transaction(self, coins, outputs, config,
+ fixed_fee=None, change_addr=None):
+ tx = BIP32_Wallet.make_unsigned_transaction(
+ self, coins, outputs, config, fixed_fee, change_addr)
+ # Plain TX was good. Now add trustedcoin fee.
+ fee = self.extra_fee()
if fee:
address = self.billing_info['billing_address']
- tx.outputs.append(('address', address, fee))
+ outputs = outputs + [('address', address, fee)]
+ try:
+ return BIP32_Wallet.make_unsigned_transaction(
+ self, coins, outputs, config, fixed_fee, change_addr)
+ except NotEnoughFunds:
+ # trustedcoin won't charge if the total inputs is
+ # lower than their fee
+ if tx.input_value() >= tcoin_fee:
+ raise
return tx
def sign_transaction(self, tx, password):