Browse Source

CoinChooser: avoid NotEnoughFunds if zero buckets are sufficient

closes #5752

Adapted from @JeremyRand's fix
ln-negative-red
SomberNight 5 years ago
parent
commit
5549f3adbe
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 5
      electrum/coinchooser.py
  2. 20
      electrum/tests/test_coinchooser.py

5
electrum/coinchooser.py

@ -349,7 +349,10 @@ class CoinChooserRandom(CoinChooserBase):
def bucket_candidates_any(self, buckets: List[Bucket], sufficient_funds) -> List[List[Bucket]]: def bucket_candidates_any(self, buckets: List[Bucket], sufficient_funds) -> List[List[Bucket]]:
'''Returns a list of bucket sets.''' '''Returns a list of bucket sets.'''
if not buckets: if not buckets:
raise NotEnoughFunds() if sufficient_funds([], bucket_value_sum=0):
return [[]]
else:
raise NotEnoughFunds()
candidates = set() candidates = set()

20
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)
Loading…
Cancel
Save