From 2368433b22947a56470031acf27731e95f4e7672 Mon Sep 17 00:00:00 2001 From: hackrush Date: Wed, 14 Feb 2018 23:31:57 +0530 Subject: [PATCH] Check for max usable balance before updating --- lbrynet/core/Wallet.py | 9 +++++++++ lbrynet/daemon/Daemon.py | 6 ++++++ lbrynet/tests/unit/core/test_Wallet.py | 2 ++ 3 files changed, 17 insertions(+) diff --git a/lbrynet/core/Wallet.py b/lbrynet/core/Wallet.py index fa512907d..d24ef9200 100644 --- a/lbrynet/core/Wallet.py +++ b/lbrynet/core/Wallet.py @@ -537,6 +537,10 @@ class Wallet(object): decoded = ClaimDict.load_dict(metadata) serialized = decoded.serialized + amt = yield self.get_max_usable_balance_for_claim(name) + if bid > amt: + raise InsufficientFundsError() + claim = yield self._send_name_claim(name, serialized.encode('hex'), bid, certificate_id, claim_address, change_address) @@ -972,6 +976,11 @@ class LBRYumWallet(Wallet): lambda result: Decimal(result['confirmed']) + Decimal(result.get('unconfirmed', 0.0))) return d + @defer.inlineCallbacks + def get_max_usable_balance_for_claim(self, claim_name): + amt = yield self._run_cmd_as_defer_to_thread('get_max_spendable_amt_for_claim', claim_name) + defer.returnValue(amt) + # Always create and return a brand new address def get_new_address(self, for_change=False, account=None): return defer.succeed(self.wallet.create_new_address(account=account, diff --git a/lbrynet/daemon/Daemon.py b/lbrynet/daemon/Daemon.py index b32f958cb..4169bdf0b 100644 --- a/lbrynet/daemon/Daemon.py +++ b/lbrynet/daemon/Daemon.py @@ -2005,6 +2005,12 @@ class Daemon(AuthJSONRPCServer): if bid <= 0.0: raise ValueError("Bid value must be greater than 0.0") + amt = yield self.session.wallet.get_max_usable_balance_for_claim(name) + if bid > amt: + raise InsufficientFundsError( + "Please lower the bid value, the max amount you can specify for this claim is {}" + .format(amt)) + metadata = metadata or {} if fee is not None: metadata['fee'] = fee diff --git a/lbrynet/tests/unit/core/test_Wallet.py b/lbrynet/tests/unit/core/test_Wallet.py index 946472d2e..c2d19e61d 100644 --- a/lbrynet/tests/unit/core/test_Wallet.py +++ b/lbrynet/tests/unit/core/test_Wallet.py @@ -73,6 +73,8 @@ class MocLbryumWallet(LBRYumWallet): def _save_name_metadata(self, name, claim_outpoint, sd_hash): return defer.succeed(True) + def get_max_usable_balance_for_claim(self, name): + return defer.succeed(3) class WalletTest(unittest.TestCase): @defer.inlineCallbacks