<oembed><type>rich</type><version>1.0</version><author_name>npub1e46n428mcyfwznl7nlsf6d3s7rhlwm9x3cmkuqzt3emmdpadmkaqqjxmcu</author_name><author_url>https://nostr.ae/npub1e46n428mcyfwznl7nlsf6d3s7rhlwm9x3cmkuqzt3emmdpadmkaqqjxmcu</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2021-08-15&#xA;📝 Original message:&#xA;On 8/15/21 22:02, Anthony Towns wrote:&#xA;&gt;&gt; In&#xA;&gt;&gt; one particular class of applicable routing algorithms you could use for&#xA;&gt;&gt; lightning routing having a base fee makes the algorithm intractably slow,&#xA;&gt; &#xA;&gt; I don&#39;t think of that as the problem, but rather as the base fee having&#xA;&gt; a multiplicative effect as you split payments.&#xA;&#xA;Yes, matching the real-world costs of forwarding an HTLC.&#xA;&#xA;&gt; If every channel has the same (base,proportional) fee pair, and send a&#xA;&gt; payment along a single path, you&#39;re paying n*(base+k*proportional). If&#xA;&gt; you split the payment, and send half of it one way, and half the other&#xA;&gt; way, you&#39;re paying n*(2*base+k*proportional). If you split the payment&#xA;&gt; four ways, you&#39;re paying n*(4*base+k*proportional). Where&#39;s the value&#xA;&gt; to the network in penalising payment splitting?&#xA;&#xA;Yes. You have to pay the cost of a node. If we&#39;re really worried about this, we should be talking about upfront fees &#xA;and/or refunds on HTLC fulfillment, not removing the fees entirely.&#xA;&#xA;&gt; Being denominated in sats, the base fee also changes in value as the&#xA;&gt; bitcoin price changes -- c-lightning dropped the base fee to 1sat (from&#xA;&gt; 546 sat!) in Jan 2018, but the value of 1sat has increased about 4x&#xA;&gt; since then, and it seems unlikely the fixed costs of a successful HTLC&#xA;&gt; payment have likewise increased 4x.  Proportional fees deal with this&#xA;&gt; factor automatically, of course.&#xA;&#xA;This isn&#39;t a protocol issue, implementations can automate this without issue.&#xA;&#xA;&gt;&gt; There&#39;s real cost to distorting the fee structures on the network away from&#xA;&gt;&gt; the costs of node operators,&#xA;&gt; &#xA;&gt; That&#39;s precisely what the base fee is already doing. Yes, we need some&#xA;&gt; other way of charging fees to prevent using up too many slots or having&#xA;&gt; transactions not fail in a timely manner, but the base fee does not&#xA;&gt; do that.&#xA;&#xA;Huh? For values much smaller than a node&#39;s liquidity, the cost for nodes is (mostly) a function of HTLCs, not the value. &#xA;The cost to nodes is largely (a) the forever-storage that exists, roughly, per HTLC ever on a channel, (b) the HTLC &#xA;slots which are highly limited for technical reasons per channel, (c) the disk/cpu/network/etc operations per HTLC on an &#xA;channel, (d) the liquidity required per node. I&#39;d argue (c) is basically zero in any realistic context, (a) is pretty &#xA;low, but could be non-zero in some cases, so you really just have (b) and (d). For many HTLCs forwarded today, the &#xA;liquidity on a channel isn&#39;t much, so I&#39;d argue for many HTLCs forwarded today per-payment costs mirror the cost to a &#xA;node much, much, much, much better than some proportional fees?&#xA;&#xA;I&#39;m really not sure where you&#39;re coming from here.&#xA;&#xA;&gt;&gt; Imagine we find some great way to address HTLC slot flooding/DoS attacks (or&#xA;&gt;&gt; just chose to do it in a not-great way) by charging for HTLC slot usage, now&#xA;&gt;&gt; we can&#39;t fix a critical DoS issue because the routing algorithms we deployed&#xA;&gt;&gt; can&#39;t handle the new costing.&#xA;&gt; &#xA;&gt; I don&#39;t think that&#39;s true. The two things we don&#39;t charge for that can&#xA;&gt; be abused by probing spam are HTLC slot usage and channel balance usage;&#xA;&gt; both are problems only in proportion to the amount of time they&#39;re held&#xA;&gt; open, and the latter is also only a problem proportional to the value&#xA;&gt; being reserved. [0]&#xA;&gt; &#xA;&gt; Additionally, I don&#39;t think HTLC slot usage needs to be kept as a&#xA;&gt; limitation after we switch to eltoo;&#xA;&#xA;The HTLC slot limit is to keep transactions broadcastable. I don&#39;t see why this would change, you still get an output &#xA;for each HTLC on the latest commitment in eltoo, AFAIU.&#xA;&#xA;&gt; and in the meantime, I think it can&#xA;&gt; be better managed via adjusting the min_htlc_amount -- at least for the&#xA;&gt; scenario where problems are being caused by legitimate payment attempts,&#xA;&gt; which is also the only place base fee can help.&#xA;&#xA;Sure, we could also shift towards upfront fees or similar solutions, though, and that was my point - if we start &#xA;dropping absolute fee amounts now in order to make some given routing algorithm work, we box ourselves in here, and &#xA;quite needlessly given no one has (yet) done the legwork to show that we even *need* to box ourselves in.&#xA;&#xA;&gt; [0] (Well, ln-penalty&#39;s requirement to permanently store HTLC information&#xA;&gt;       in order to apply the penalty is in some sense a constant&#xA;&gt;       cost, however the impact is also proportional to value, and for&#xA;&gt;       sufficiently low value HTLCs can be ignored entirely if the HTLC&#xA;&gt;       isn&#39;t included in the channel commitment)&#xA;&gt; &#xA;&gt;&gt; Instead, we should investigate how we can&#xA;&gt;&gt; apply the ideas here with the more complicated fee structures we have.&#xA;&gt; &#xA;&gt; Fee structures should be *simple* not complicated.&#xA;&gt; &#xA;&gt; I mean, it&#39;s kind of great that we started off complicated -- if it&#xA;&gt; turns out base fee isn&#39;t necessary, it&#39;s easy to just set it to zero;&#xA;&gt; if we didn&#39;t have it, but needed it, it would be much more annoying to&#xA;&gt; add it in later.&#xA;&#xA;Fee structures should also match reality, and allow node operators sufficient flexibility to capture their costs. I &#xA;think we have a design that does so quite well - its pretty simple, there&#39;s only two knobs, but the two knobs capture &#xA;exactly the two broad categories of costs a node operator has.&#xA;&#xA;&gt;&gt; Color me an optimist, but I&#39;m quite confident with sufficient elbow grease&#xA;&gt;&gt; and heuristics we can get 95% of the way there. We can and should revisit&#xA;&gt;&gt; these conversations if such exploration is done and we find that its not&#xA;&gt;&gt; possible, but until then this all feels incredibly premature.&#xA;&gt; &#xA;&gt; Depends; I don&#39;t think it makes sense to try to ban nodes that don&#39;t have&#xA;&gt; a base fee of zero or anything, but random people on twitter advocating&#xA;&gt; that node operators should set it to zero and just worry about optimising&#xA;&gt; via the proportional fee and the min htlc amount seems fine.&#xA;&#xA;Sure, the great thing about today is because the protocol exposes decent knobs operators can tune their fee structures &#xA;any way they want, providing competition and multiple paths to nodes with potentially very divergent fees depending on &#xA;the type of payment. Absent liquidity limits, this should provide better service for all types of payments - routing &#xA;them to nodes that will support those types of payments!&#xA;&#xA;&gt; For an experimental plugin that aggressively splits payments up, I think&#xA;&gt; either ignoring channels with &gt;0 base fee entirely, or deciding that&#xA;&gt; you&#39;re happy to spend a total of X sats on base fees, and then ignoring&#xA;&gt; channels whose base fee is greater than X/paths/path-length sats is fine.&#xA;&#xA;Sure, experimental plugins can do whatever they want!&#xA;&#xA;&gt; But long term, I also think that the base fee is an entirely unhelpful&#xA;&gt; complication that will eventually just be hardcoded to zero by everyone,&#xA;&gt; and eventually channels that propose non-zero base fees won&#39;t even be&#xA;&gt; gossiped. I don&#39;t expect that to happen any time soon though.&#xA;&#xA;I very strongly disagree, as discussed, and am left highly dubious that it is a practical complication in any case.</html></oembed>