From b656f85344ea798e7160b0526079dff54635ecfa Mon Sep 17 00:00:00 2001 From: AlexCato Date: Tue, 20 Aug 2019 22:32:59 +0200 Subject: [PATCH] Sendpayment/Tumbler: fix division by 0 error on sweeps --- scripts/sendpayment.py | 29 ++++++++++++++++++----------- scripts/tumbler.py | 2 ++ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/scripts/sendpayment.py b/scripts/sendpayment.py index e6db766..6ce3189 100644 --- a/scripts/sendpayment.py +++ b/scripts/sendpayment.py @@ -115,17 +115,6 @@ def main(): options.txfee)) assert (options.txfee >= 0) - # From the estimated tx fees, check if the expected amount is a - # significant value compared the the cj amount - exp_tx_fees_ratio = ((1 + options.makercount) * options.txfee) / amount - if exp_tx_fees_ratio > 0.05: - jmprint('WARNING: Expected bitcoin network miner fees for this coinjoin' - ' amount are roughly {:.1%}'.format(exp_tx_fees_ratio), "warning") - else: - log.info("Estimated miner/tx fees for this coinjoin amount: {:.1%}" - .format(exp_tx_fees_ratio)) - - maxcjfee = (1, float('inf')) if not options.p2ep and not options.pickorders and options.makercount != 0: maxcjfee = get_max_cj_fee_values(jm_single().config, options) @@ -146,6 +135,24 @@ def main(): #wallet sync will now only occur on reactor start if we're joining. while not jm_single().bc_interface.wallet_synced: sync_wallet(wallet, fast=options.fastsync) + + # From the estimated tx fees, check if the expected amount is a + # significant value compared the the cj amount + if amount == 0: + amount = wallet.get_balance_by_mixdepth()[options.mixdepth] + if amount == 0: + raise ValueError("No confirmed coins in the selected mixdepth. Quitting") + exp_tx_fees_ratio = ((1 + options.makercount) * options.txfee) / amount + if exp_tx_fees_ratio > 0.05: + jmprint('WARNING: Expected bitcoin network miner fees for this coinjoin' + ' amount are roughly {:.1%}'.format(exp_tx_fees_ratio), "warning") + if input('You might want to modify your tx_fee' + ' settings in joinmarket.cfg. Still continue? (y/n):')[0] != 'y': + sys.exit('Aborted by user.') + else: + log.info("Estimated miner/tx fees for this coinjoin amount: {:.1%}" + .format(exp_tx_fees_ratio)) + if options.makercount == 0 and not options.p2ep: direct_send(wallet, amount, mixdepth, destaddr, options.answeryes) return diff --git a/scripts/tumbler.py b/scripts/tumbler.py index 212ae54..a35da2f 100644 --- a/scripts/tumbler.py +++ b/scripts/tumbler.py @@ -124,6 +124,8 @@ def main(): max_mix_depth) for i in range(options['mixdepthsrc'], max_mix_to_tumble): total_tumble_amount += wallet.get_balance_by_mixdepth()[i] + if total_tumble_amount == 0: + raise ValueError("No confirmed coins in the selected mixdepth(s). Quitting") exp_tx_fees_ratio = (involved_parties * options['txfee']) \ / total_tumble_amount if exp_tx_fees_ratio > 0.05: