pyln-client: to_whole_satoshi returns the rounded up satoshi value

A fractional satoshi value isn't really useful; rounding up loses
precision but that's why you called "whole satoshi", wasn't it?

Changelog-Changed: pyln-client: Millisatoshi has new method, `to_whole_satoshi`; *rounds value up* to the nearest whole satoshi
This commit is contained in:
niftynei
2020-12-15 14:08:10 -06:00
committed by Christian Decker
parent cce0020568
commit e3a1d1a7f3
2 changed files with 9 additions and 2 deletions

View File

@@ -92,6 +92,13 @@ class Millisatoshi:
""" """
return Decimal(self.millisatoshis) / 1000 return Decimal(self.millisatoshis) / 1000
def to_whole_satoshi(self) -> int:
"""
Return an int respresenting the number of satoshis;
rounded up to the nearest satoshi
"""
return (self.millisatoshis + 999) // 1000
def to_btc(self) -> Decimal: def to_btc(self) -> Decimal:
""" """
Return a Decimal representing the number of bitcoin. Return a Decimal representing the number of bitcoin.

View File

@@ -84,12 +84,12 @@ def on_openchannel(openchannel2, plugin, **kwargs):
psbt_obj = psbt_from_base64(funding['psbt']) psbt_obj = psbt_from_base64(funding['psbt'])
excess = Millisatoshi(funding['excess_msat']) excess = Millisatoshi(funding['excess_msat'])
change_cost = Millisatoshi(124 * feerate // 1000 * 1000) change_cost = Millisatoshi(124 * feerate)
dust_limit = Millisatoshi(253 * 1000) dust_limit = Millisatoshi(253 * 1000)
if excess > (dust_limit + change_cost): if excess > (dust_limit + change_cost):
addr = plugin.rpc.newaddr()['bech32'] addr = plugin.rpc.newaddr()['bech32']
change = excess - change_cost change = excess - change_cost
output = tx_output_init(int(change.to_satoshi()), get_script(addr)) output = tx_output_init(change.to_whole_satoshi(), get_script(addr))
psbt_add_output_at(psbt_obj, 0, 0, output) psbt_add_output_at(psbt_obj, 0, 0, output)
return {'result': 'continue', 'psbt': psbt_to_base64(psbt_obj, 0), return {'result': 'continue', 'psbt': psbt_to_base64(psbt_obj, 0),