bolt11: fix amount encoding for large values
This commit is contained in:
@@ -32,12 +32,14 @@ def shorten_amount(amount):
|
||||
"""
|
||||
# Convert to pico initially
|
||||
amount = int(amount * 10**12)
|
||||
units = ['p', 'n', 'u', 'm', '']
|
||||
units = ['p', 'n', 'u', 'm']
|
||||
for unit in units:
|
||||
if amount % 1000 == 0:
|
||||
amount //= 1000
|
||||
else:
|
||||
break
|
||||
else:
|
||||
unit = ''
|
||||
return str(amount) + unit
|
||||
|
||||
def unshorten_amount(amount) -> Decimal:
|
||||
|
||||
@@ -28,10 +28,11 @@ class TestBolt11(ElectrumTestCase):
|
||||
Decimal(123)/10**6: '123u',
|
||||
Decimal(123)/1000: '123m',
|
||||
Decimal(3): '3',
|
||||
Decimal(1000): '1000',
|
||||
}
|
||||
|
||||
for i, o in tests.items():
|
||||
assert shorten_amount(i) == o
|
||||
self.assertEqual(shorten_amount(i), o)
|
||||
assert unshorten_amount(shorten_amount(i)) == i
|
||||
|
||||
@staticmethod
|
||||
|
||||
Reference in New Issue
Block a user