commit c81335fb44e78ae4a2c7ef963e65384b18ca18d6
parent 2fab6814442ee843ab1271d2c83a873c1ea4b6f4
Author: SomberNight <somber.night@protonmail.com>
Date: Mon, 2 Mar 2020 19:55:11 +0100
lnrouter: simplify max fee sanity checks
Diffstat:
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/electrum/lnrouter.py b/electrum/lnrouter.py
@@ -74,16 +74,11 @@ class RouteEdge(NamedTuple):
def is_sane_to_use(self, amount_msat: int) -> bool:
# TODO revise ad-hoc heuristics
# cltv cannot be more than 2 weeks
- if self.cltv_expiry_delta > 14 * 144: return False
+ if self.cltv_expiry_delta > 14 * 144:
+ return False
total_fee = self.fee_for_edge(amount_msat)
- # fees below 50 sat are fine
- if total_fee > 50_000:
- # fee cannot be higher than amt
- if total_fee > amount_msat: return False
- # fee cannot be higher than 5000 sat
- if total_fee > 5_000_000: return False
- # unless amt is tiny, fee cannot be more than 10%
- if amount_msat > 1_000_000 and total_fee > amount_msat/10: return False
+ if not is_fee_sane(total_fee, payment_amount_msat=amount_msat):
+ return False
return True
@@ -105,18 +100,23 @@ def is_route_sane_to_use(route: LNPaymentRoute, invoice_amount_msat: int, min_fi
total_fee = amt - invoice_amount_msat
# TODO revise ad-hoc heuristics
# cltv cannot be more than 2 months
- if cltv > 60 * 144: return False
- # fees below 50 sat are fine
- if total_fee > 50_000:
- # fee cannot be higher than amt
- if total_fee > invoice_amount_msat: return False
- # fee cannot be higher than 5000 sat
- if total_fee > 5_000_000: return False
- # unless amt is tiny, fee cannot be more than 10%
- if invoice_amount_msat > 1_000_000 and total_fee > invoice_amount_msat/10: return False
+ if cltv > 60 * 144:
+ return False
+ if not is_fee_sane(total_fee, payment_amount_msat=invoice_amount_msat):
+ return False
return True
+def is_fee_sane(fee_msat: int, *, payment_amount_msat: int) -> bool:
+ # fees <= 2 sat are fine
+ if fee_msat <= 2_000:
+ return True
+ # fees <= 1 % of payment are fine
+ if 100 * fee_msat <= payment_amount_msat:
+ return True
+ return False
+
+
class LNPathFinder(Logger):
def __init__(self, channel_db: ChannelDB):