commit f52072e1693107b07e29e4d3a68ee944f1020381
parent 12d771737afe87f520ffefb7648fd3878076b923
Author: SomberNight <somber.night@protonmail.com>
Date: Sat, 18 Apr 2020 18:51:20 +0200
follow-up prev
we can't just test with a 1 msat htlc as that might be below htlc_minimum_msat
Diffstat:
2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/electrum/lnchannel.py b/electrum/lnchannel.py
@@ -688,7 +688,8 @@ class Channel(AbstractChannel):
self.storage['frozen_for_receiving'] = bool(b)
util.trigger_callback('channel', self)
- def _assert_can_add_htlc(self, *, htlc_proposer: HTLCOwner, amount_msat: int) -> None:
+ def _assert_can_add_htlc(self, *, htlc_proposer: HTLCOwner, amount_msat: int,
+ ignore_min_htlc_value: bool = False) -> None:
"""Raises PaymentFailure if the htlc_proposer cannot add this new HTLC.
(this is relevant both for forwarding and endpoint)
"""
@@ -712,10 +713,11 @@ class Channel(AbstractChannel):
strict = (htlc_proposer == LOCAL)
# check htlc raw value
- if amount_msat <= 0:
- raise PaymentFailure("HTLC value must be positive")
- if amount_msat < chan_config.htlc_minimum_msat:
- raise PaymentFailure(f'HTLC value too small: {amount_msat} msat')
+ if not ignore_min_htlc_value:
+ if amount_msat <= 0:
+ raise PaymentFailure("HTLC value must be positive")
+ if amount_msat < chan_config.htlc_minimum_msat:
+ raise PaymentFailure(f'HTLC value too small: {amount_msat} msat')
if amount_msat > LN_MAX_HTLC_VALUE_MSAT and not self._ignore_max_htlc_value:
raise PaymentFailure(f"HTLC value over protocol maximum: {amount_msat} > {LN_MAX_HTLC_VALUE_MSAT} msat")
@@ -752,12 +754,15 @@ class Channel(AbstractChannel):
return False
return True
- def can_receive(self, amount_msat: int, *, check_frozen=False) -> bool:
+ def can_receive(self, amount_msat: int, *, check_frozen=False,
+ ignore_min_htlc_value: bool = False) -> bool:
"""Returns whether the remote can add an HTLC of given value."""
if check_frozen and self.is_frozen_for_receiving():
return False
try:
- self._assert_can_add_htlc(htlc_proposer=REMOTE, amount_msat=amount_msat)
+ self._assert_can_add_htlc(htlc_proposer=REMOTE,
+ amount_msat=amount_msat,
+ ignore_min_htlc_value=ignore_min_htlc_value)
except PaymentFailure:
return False
return True
diff --git a/electrum/lnworker.py b/electrum/lnworker.py
@@ -1197,13 +1197,17 @@ class LNWallet(LNWorker):
channels = list(self.channels.values())
scid_to_my_channels = {chan.short_channel_id: chan for chan in channels
if chan.short_channel_id is not None}
+ ignore_min_htlc_value = False
if amount_sat:
amount_msat = 1000 * amount_sat
- else: # for no amt invoices, check if channel can receive at least 1 sat:
+ else:
+ # for no amt invoices, check if channel can receive at least 1 msat
amount_msat = 1
+ ignore_min_htlc_value = True
# note: currently we add *all* our channels; but this might be a privacy leak?
for chan in channels:
- if not chan.can_receive(amount_msat=amount_msat, check_frozen=True):
+ if not chan.can_receive(amount_msat=amount_msat, check_frozen=True,
+ ignore_min_htlc_value=ignore_min_htlc_value):
continue
chan_id = chan.short_channel_id
assert isinstance(chan_id, bytes), chan_id