From b4ca42d30b21b7f8ae151bc7d8ff385f954fb5dd Mon Sep 17 00:00:00 2001 From: csH7KmCC9 Date: Mon, 19 Apr 2021 23:08:09 +0000 Subject: [PATCH 1/2] taker: Fix change validation logic --- jmclient/jmclient/taker.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/jmclient/jmclient/taker.py b/jmclient/jmclient/taker.py index b7c4a0f..6a3b0d7 100644 --- a/jmclient/jmclient/taker.py +++ b/jmclient/jmclient/taker.py @@ -485,16 +485,16 @@ class Taker(object): #we have tried to avoid this based on over-estimating the needed amount #in SendPayment.create_tx(), but it is still a possibility if one maker #uses a *lot* of inputs. - if self.my_change_addr and my_change_value <= 0: - raise ValueError("Calculated transaction fee of: " + - btc.amount_to_str(self.total_txfee) + - " is too large for our inputs; Please try again.") - elif self.my_change_addr and my_change_value <= jm_single( - ).BITCOIN_DUST_THRESHOLD: - jlog.info("Dynamically calculated change lower than dust: " + - btc.amount_to_str(my_change_value) + "; dropping.") - self.my_change_addr = None - my_change_value = 0 + if self.my_change_addr: + if my_change_value < 0: + raise ValueError("Calculated transaction fee of: " + + btc.amount_to_str(self.total_txfee) + + " is too large for our inputs; Please try again.") + if my_change_value <= jm_single().BITCOIN_DUST_THRESHOLD: + jlog.info("Dynamically calculated change lower than dust: " + + btc.amount_to_str(my_change_value) + "; dropping.") + self.my_change_addr = None + my_change_value = 0 jlog.info( 'fee breakdown for me totalin=%d my_txfee=%d makers_txfee=%d cjfee_total=%d => changevalue=%d' % (my_total_in, my_txfee, self.maker_txfee_contributions, From 43cc96042c2924bd00502cc342e0637d8de4e031 Mon Sep 17 00:00:00 2001 From: csH7KmCC9 Date: Sun, 9 May 2021 08:05:36 +0000 Subject: [PATCH 2/2] taker: Account for off-by-one errors caused by rounding There is some rounding thing that can cause `my_change_value` to be -1. This is not a big deal and should not cause an error. See https://github.com/JoinMarket-Org/joinmarket-clientserver/pull/860#discussion_r617450511 for more info. --- jmclient/jmclient/taker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jmclient/jmclient/taker.py b/jmclient/jmclient/taker.py index 6a3b0d7..e27fa04 100644 --- a/jmclient/jmclient/taker.py +++ b/jmclient/jmclient/taker.py @@ -486,7 +486,7 @@ class Taker(object): #in SendPayment.create_tx(), but it is still a possibility if one maker #uses a *lot* of inputs. if self.my_change_addr: - if my_change_value < 0: + if my_change_value < -1: raise ValueError("Calculated transaction fee of: " + btc.amount_to_str(self.total_txfee) + " is too large for our inputs; Please try again.")