Browse Source

bolt11: fix amount encoding for large values

patch-4
bitromortac 4 years ago
parent
commit
6716004b47
No known key found for this signature in database GPG Key ID: 1965063FC13BEBE2
  1. 4
      electrum/lnaddr.py
  2. 3
      electrum/tests/test_bolt11.py

4
electrum/lnaddr.py

@ -32,12 +32,14 @@ def shorten_amount(amount):
""" """
# Convert to pico initially # Convert to pico initially
amount = int(amount * 10**12) amount = int(amount * 10**12)
units = ['p', 'n', 'u', 'm', ''] units = ['p', 'n', 'u', 'm']
for unit in units: for unit in units:
if amount % 1000 == 0: if amount % 1000 == 0:
amount //= 1000 amount //= 1000
else: else:
break break
else:
unit = ''
return str(amount) + unit return str(amount) + unit
def unshorten_amount(amount) -> Decimal: def unshorten_amount(amount) -> Decimal:

3
electrum/tests/test_bolt11.py

@ -28,10 +28,11 @@ class TestBolt11(ElectrumTestCase):
Decimal(123)/10**6: '123u', Decimal(123)/10**6: '123u',
Decimal(123)/1000: '123m', Decimal(123)/1000: '123m',
Decimal(3): '3', Decimal(3): '3',
Decimal(1000): '1000',
} }
for i, o in tests.items(): for i, o in tests.items():
assert shorten_amount(i) == o self.assertEqual(shorten_amount(i), o)
assert unshorten_amount(shorten_amount(i)) == i assert unshorten_amount(shorten_amount(i)) == i
@staticmethod @staticmethod

Loading…
Cancel
Save