Anthony Towns [ARCHIVE] on Nostr: 📅 Original date posted:2021-08-16 📝 Original message: On Sun, Aug 15, 2021 at ...
📅 Original date posted:2021-08-16
📝 Original message:
On Sun, Aug 15, 2021 at 10:21:52PM -0400, Matt Corallo wrote:
> On 8/15/21 22:02, Anthony Towns wrote:
> > > In
> > > one particular class of applicable routing algorithms you could use for
> > > lightning routing having a base fee makes the algorithm intractably slow,
> > I don't think of that as the problem, but rather as the base fee having
> > a multiplicative effect as you split payments.
> Yes, matching the real-world costs of forwarding an HTLC.
Actually, no, not at all.
The base+proportional fees paid only on success roughly match the *value*
of forwarding an HTLC, they don't match the costs particularly well
at all.
Why not? Because the costs are incurred on failed HTLCs as well, and
also depend on the time a HTLC lasts, and also vary heavily depending
on how many other simultaneous HTLCs there are.
> Yes. You have to pay the cost of a node. If we're really worried about this,
> we should be talking about upfront fees and/or refunds on HTLC fulfillment,
> not removing the fees entirely.
(I don't believe either of those are the right approach, but based on
previous discussions, I don't think anyone's going to realise I'm right
until I implement it and prove it, so *shrug*)
> > Being denominated in sats, the base fee also changes in value as the
> > bitcoin price changes -- c-lightning dropped the base fee to 1sat (from
> > 546 sat!) in Jan 2018, but the value of 1sat has increased about 4x
> > since then, and it seems unlikely the fixed costs of a successful HTLC
> > payment have likewise increased 4x. Proportional fees deal with this
> > factor automatically, of course.
> This isn't a protocol issue, implementations can automate this without issue.
I don't think anyone's proposing the protocol be changed; just that node
operators set an option to a particular value?
Well, except that Lisa's maybe proposing that 0 not be allowed, and a
value >= 0.001 sat be required? I'm not quite sure.
> > > There's real cost to distorting the fee structures on the network away from
> > > the costs of node operators,
> > That's precisely what the base fee is already doing.
> Huh? For values much smaller than a node's liquidity, the cost for nodes is
> (mostly) a function of HTLCs, not the value.
Yes, the cost for nodes is a function of the requests that come in, not
how many succeed. The fees are proportional to how many succeed, which
is at best a distorted reflection of the number of requests that come in.
> The cost to nodes is largely [...]
The cost to nodes is almost entirely the opportunity cost of not being
able to accept other txs that would come in afterwards and would pay
higher fees.
And all those costs can be captured equally well (or badly) by just
setting a proportional fee and a minimum payment value. I don't know why
you keep ignoring that point.
> so I'd argue for many HTLCs forwarded
> today per-payment costs mirror the cost to a node much, much, much, much
> better than some proportional fees?
You're talking yourself into a *really* broken business model there.
> > Additionally, I don't think HTLC slot usage needs to be kept as a
> > limitation after we switch to eltoo;
> The HTLC slot limit is to keep transactions broadcastable. I don't see why
> this would change, you still get an output for each HTLC on the latest
> commitment in eltoo, AFAIU.
eltoo gives us the ability to have channel factories, where we divide
the overall factory balance amongst different channels, all updated
off-chain. It seems likely we'll want to do factories from day one,
so that we don't implicitly limit either the lifetime of the channel
or its update rate (>1 update/sec ~= <4 year lifetime otherwise if I
did the maths right). Once we're doing factories, if we have more than
however many htlcs for a channel, we can re-divide the factory balance
and add a new channel. If the limit is 500 HTLCs per tx, you'd have to
amortize 0.2% of the new tx across each HTLC, in addition to the cost
of the HTLC itself, but that seems trivial.
> > and in the meantime, I think it can
> > be better managed via adjusting the min_htlc_amount -- at least for the
> > scenario where problems are being caused by legitimate payment attempts,
> > which is also the only place base fee can help.
> Sure, we could also shift towards upfront fees or similar solutions,
Upfront fees seem extremely vulnerable to attacks, and are certainly a
(pretty large) protocol change.
> > > Instead, we should investigate how we can
> > > apply the ideas here with the more complicated fee structures we have.
> > Fee structures should be *simple* not complicated.
> > I mean, it's kind of great that we started off complicated -- if it
> > turns out base fee isn't necessary, it's easy to just set it to zero;
> > if we didn't have it, but needed it, it would be much more annoying to
> > add it in later.
> Fee structures should also match reality, and allow node operators
> sufficient flexibility to capture their costs. I think we have a design that
> does so quite well - its pretty simple, there's only two knobs, but the two
> knobs capture exactly the two broad categories of costs a node operator has.
I don't know how you can think these "exactly" capture node operators'
costs. They're missing the time factor, and don't capture any of the
costs due to failed payments.
> Sure, the great thing about today is because the protocol exposes decent
> knobs operators can tune
Knobs are great for experimenting; but they're also something to work
at reducing once the experiments have come up with some results. I
think #zerobasefee is more in the experiment stage: "hey, this seems
like a great idea, let's set this knob to zero and focus on these other
ones instead".
> > For an experimental plugin that aggressively splits payments up, I think
> > either ignoring channels with >0 base fee entirely, or deciding that
> > you're happy to spend a total of X sats on base fees, and then ignoring
> > channels whose base fee is greater than X/paths/path-length sats is fine.
> Sure, experimental plugins can do whatever they want!
Is there any reason to think any of this would be something other than
node configuration options and experimental plugins any time soon?
(By "any time soon" I mean, I could see software defaults changing if
over 50% of the network deliberately switched to zero base fees and found
it worked fine; and I could see deprecating non-zero fees if that ended
up with 90% of the network on zero base fees, no good reasons for node
operators wanting to stick with running non-zero base fees, and the
experimental algos that relied on zero base fees being significantly
easier to maintain or faster/better)
> > But long term, I also think that the base fee is an entirely unhelpful
> > complication that will eventually just be hardcoded to zero by everyone,
> > and eventually channels that propose non-zero base fees won't even be
> > gossiped. I don't expect that to happen any time soon though.
> I very strongly disagree, as discussed, and am left highly dubious
> that it is a practical complication in any case.
That's okay! Long term predictions would be pretty boring if everyone
agreed with them.
Cheers,
aj
Published at
2023-06-09 13:03:27Event JSON
{
"id": "aaf5870c5124ead5217f1722efe19f04129fd3566a74861a53053664510c5c9e",
"pubkey": "f0feda6ad58ea9f486e469f87b3b9996494363a26982b864667c5d8acb0542ab",
"created_at": 1686315807,
"kind": 1,
"tags": [
[
"e",
"9c2d9ebc7daf40e6a14ddb62eed3add34417e7bccd1a15aa0b16d2df92878dde",
"",
"root"
],
[
"e",
"9d9b98fdff3d9b81a5bbc75739162fa966aad95df530862affcd7b9197db65ff",
"",
"reply"
],
[
"p",
"cd753aa8fbc112e14ffe9fe09d3630f0eff76ca68e376e004b8e77b687adddba"
]
],
"content": "📅 Original date posted:2021-08-16\n📝 Original message:\nOn Sun, Aug 15, 2021 at 10:21:52PM -0400, Matt Corallo wrote:\n\u003e On 8/15/21 22:02, Anthony Towns wrote:\n\u003e \u003e \u003e In\n\u003e \u003e \u003e one particular class of applicable routing algorithms you could use for\n\u003e \u003e \u003e lightning routing having a base fee makes the algorithm intractably slow,\n\u003e \u003e I don't think of that as the problem, but rather as the base fee having\n\u003e \u003e a multiplicative effect as you split payments.\n\u003e Yes, matching the real-world costs of forwarding an HTLC.\n\nActually, no, not at all. \n\nThe base+proportional fees paid only on success roughly match the *value*\nof forwarding an HTLC, they don't match the costs particularly well\nat all.\n\nWhy not? Because the costs are incurred on failed HTLCs as well, and\nalso depend on the time a HTLC lasts, and also vary heavily depending\non how many other simultaneous HTLCs there are.\n\n\u003e Yes. You have to pay the cost of a node. If we're really worried about this,\n\u003e we should be talking about upfront fees and/or refunds on HTLC fulfillment,\n\u003e not removing the fees entirely.\n\n(I don't believe either of those are the right approach, but based on\nprevious discussions, I don't think anyone's going to realise I'm right\nuntil I implement it and prove it, so *shrug*)\n\n\u003e \u003e Being denominated in sats, the base fee also changes in value as the\n\u003e \u003e bitcoin price changes -- c-lightning dropped the base fee to 1sat (from\n\u003e \u003e 546 sat!) in Jan 2018, but the value of 1sat has increased about 4x\n\u003e \u003e since then, and it seems unlikely the fixed costs of a successful HTLC\n\u003e \u003e payment have likewise increased 4x. Proportional fees deal with this\n\u003e \u003e factor automatically, of course.\n\u003e This isn't a protocol issue, implementations can automate this without issue.\n\nI don't think anyone's proposing the protocol be changed; just that node\noperators set an option to a particular value?\n\nWell, except that Lisa's maybe proposing that 0 not be allowed, and a\nvalue \u003e= 0.001 sat be required? I'm not quite sure.\n\n\u003e \u003e \u003e There's real cost to distorting the fee structures on the network away from\n\u003e \u003e \u003e the costs of node operators,\n\u003e \u003e That's precisely what the base fee is already doing.\n\u003e Huh? For values much smaller than a node's liquidity, the cost for nodes is\n\u003e (mostly) a function of HTLCs, not the value. \n\nYes, the cost for nodes is a function of the requests that come in, not\nhow many succeed. The fees are proportional to how many succeed, which\nis at best a distorted reflection of the number of requests that come in.\n\n\u003e The cost to nodes is largely [...]\n\nThe cost to nodes is almost entirely the opportunity cost of not being\nable to accept other txs that would come in afterwards and would pay\nhigher fees.\n\nAnd all those costs can be captured equally well (or badly) by just\nsetting a proportional fee and a minimum payment value. I don't know why\nyou keep ignoring that point.\n\n\u003e so I'd argue for many HTLCs forwarded\n\u003e today per-payment costs mirror the cost to a node much, much, much, much\n\u003e better than some proportional fees?\n\nYou're talking yourself into a *really* broken business model there.\n\n\u003e \u003e Additionally, I don't think HTLC slot usage needs to be kept as a\n\u003e \u003e limitation after we switch to eltoo;\n\u003e The HTLC slot limit is to keep transactions broadcastable. I don't see why\n\u003e this would change, you still get an output for each HTLC on the latest\n\u003e commitment in eltoo, AFAIU.\n\neltoo gives us the ability to have channel factories, where we divide\nthe overall factory balance amongst different channels, all updated\noff-chain. It seems likely we'll want to do factories from day one,\nso that we don't implicitly limit either the lifetime of the channel\nor its update rate (\u003e1 update/sec ~= \u003c4 year lifetime otherwise if I\ndid the maths right). Once we're doing factories, if we have more than\nhowever many htlcs for a channel, we can re-divide the factory balance\nand add a new channel. If the limit is 500 HTLCs per tx, you'd have to\namortize 0.2% of the new tx across each HTLC, in addition to the cost\nof the HTLC itself, but that seems trivial.\n\n\u003e \u003e and in the meantime, I think it can\n\u003e \u003e be better managed via adjusting the min_htlc_amount -- at least for the\n\u003e \u003e scenario where problems are being caused by legitimate payment attempts,\n\u003e \u003e which is also the only place base fee can help.\n\u003e Sure, we could also shift towards upfront fees or similar solutions,\n\nUpfront fees seem extremely vulnerable to attacks, and are certainly a\n(pretty large) protocol change.\n\n\u003e \u003e \u003e Instead, we should investigate how we can\n\u003e \u003e \u003e apply the ideas here with the more complicated fee structures we have.\n\u003e \u003e Fee structures should be *simple* not complicated.\n\u003e \u003e I mean, it's kind of great that we started off complicated -- if it\n\u003e \u003e turns out base fee isn't necessary, it's easy to just set it to zero;\n\u003e \u003e if we didn't have it, but needed it, it would be much more annoying to\n\u003e \u003e add it in later.\n\u003e Fee structures should also match reality, and allow node operators\n\u003e sufficient flexibility to capture their costs. I think we have a design that\n\u003e does so quite well - its pretty simple, there's only two knobs, but the two\n\u003e knobs capture exactly the two broad categories of costs a node operator has.\n\nI don't know how you can think these \"exactly\" capture node operators'\ncosts. They're missing the time factor, and don't capture any of the\ncosts due to failed payments.\n\n\u003e Sure, the great thing about today is because the protocol exposes decent\n\u003e knobs operators can tune\n\nKnobs are great for experimenting; but they're also something to work\nat reducing once the experiments have come up with some results. I\nthink #zerobasefee is more in the experiment stage: \"hey, this seems\nlike a great idea, let's set this knob to zero and focus on these other\nones instead\".\n\n\u003e \u003e For an experimental plugin that aggressively splits payments up, I think\n\u003e \u003e either ignoring channels with \u003e0 base fee entirely, or deciding that\n\u003e \u003e you're happy to spend a total of X sats on base fees, and then ignoring\n\u003e \u003e channels whose base fee is greater than X/paths/path-length sats is fine.\n\u003e Sure, experimental plugins can do whatever they want!\n\nIs there any reason to think any of this would be something other than\nnode configuration options and experimental plugins any time soon?\n\n(By \"any time soon\" I mean, I could see software defaults changing if\nover 50% of the network deliberately switched to zero base fees and found\nit worked fine; and I could see deprecating non-zero fees if that ended\nup with 90% of the network on zero base fees, no good reasons for node\noperators wanting to stick with running non-zero base fees, and the\nexperimental algos that relied on zero base fees being significantly\neasier to maintain or faster/better)\n\n\u003e \u003e But long term, I also think that the base fee is an entirely unhelpful\n\u003e \u003e complication that will eventually just be hardcoded to zero by everyone,\n\u003e \u003e and eventually channels that propose non-zero base fees won't even be\n\u003e \u003e gossiped. I don't expect that to happen any time soon though.\n\u003e I very strongly disagree, as discussed, and am left highly dubious\n\u003e that it is a practical complication in any case.\n\nThat's okay! Long term predictions would be pretty boring if everyone\nagreed with them.\n\nCheers,\naj",
"sig": "10bb556b7399698916f01f61f05a073f5bb0d04c9389e6b883ad5d79156bd88f41de41e20dc48bf583e7a82015c7bd5e2dbfd388d01d8ab05a2e8a9b42df0ba9"
}