From 5549f3adbea06f2401a2281abaca58baa5f1f573 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 11 Nov 2019 15:15:04 +0100 Subject: [PATCH] CoinChooser: avoid NotEnoughFunds if zero buckets are sufficient closes #5752 Adapted from @JeremyRand's fix --- electrum/coinchooser.py | 5 ++++- electrum/tests/test_coinchooser.py | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 electrum/tests/test_coinchooser.py diff --git a/electrum/coinchooser.py b/electrum/coinchooser.py index 9d9330dd8..d484bbd18 100644 --- a/electrum/coinchooser.py +++ b/electrum/coinchooser.py @@ -349,7 +349,10 @@ class CoinChooserRandom(CoinChooserBase): def bucket_candidates_any(self, buckets: List[Bucket], sufficient_funds) -> List[List[Bucket]]: '''Returns a list of bucket sets.''' if not buckets: - raise NotEnoughFunds() + if sufficient_funds([], bucket_value_sum=0): + return [[]] + else: + raise NotEnoughFunds() candidates = set() diff --git a/electrum/tests/test_coinchooser.py b/electrum/tests/test_coinchooser.py new file mode 100644 index 000000000..aaaf4af69 --- /dev/null +++ b/electrum/tests/test_coinchooser.py @@ -0,0 +1,20 @@ +from electrum.coinchooser import CoinChooserPrivacy +from electrum.util import NotEnoughFunds + +from . import ElectrumTestCase + + +class TestCoinChooser(ElectrumTestCase): + + def test_bucket_candidates_with_empty_buckets(self): + def sufficient_funds(buckets, *, bucket_value_sum): + return True + coin_chooser = CoinChooserPrivacy() + self.assertEqual([[]], coin_chooser.bucket_candidates_any([], sufficient_funds)) + self.assertEqual([[]], coin_chooser.bucket_candidates_prefer_confirmed([], sufficient_funds)) + def sufficient_funds(buckets, *, bucket_value_sum): + return False + with self.assertRaises(NotEnoughFunds): + coin_chooser.bucket_candidates_any([], sufficient_funds) + with self.assertRaises(NotEnoughFunds): + coin_chooser.bucket_candidates_prefer_confirmed([], sufficient_funds)