Clean up: remove two unused features, assume four more#1092
Clean up: remove two unused features, assume four more#1092niftynei merged 7 commits intolightning:masterfrom
Conversation
| | 6/7 | `gossip_queries` | ASSUMED | | | | | ||
| | 8/9 | `var_onion_optin` | ASSUMED | | | | | ||
| | 10/11 | `gossip_queries_ex` | Gossip queries can include additional information | IN | | [BOLT #7][bolt07-query] | | ||
| | 12/13 | `option_static_remotekey` | ASSUMED | | | | |
There was a problem hiding this comment.
I don't think we should make this one ASSUMED, as it removes the option to cleanly deprecate it. If I'm a node that only wants to support anchor_outputs (which we'll want soon), I want to be able to explicitly disable the option_static_remotekey feature bit from my node_announcement and init, to let other nodes know that they shouldn't connect to me if they want option_static_remotekey channels.
It is a good idea however to remove the dependency between anchor_outputs and option_static_remotekey (to allow setting only the anchor_outputs feature bit without the option_static_remotekey feature bit), and it would be useful to update all implementations to accept that.
There was a problem hiding this comment.
This PR essentially reduces the basic channel types to anchors and no anchors. So if we want to require anchor channels, then for now we can set bit 22 (require option_anchors_zero_fee_htlc_tx).
But if there's a new channel type in the future that doesn't depend on anchors, and we want to support both anchors and the new type, we won't have a way to signal that.
There was a problem hiding this comment.
But if there's a new channel type in the future that doesn't depend on anchors, and we want to support both anchors and the new type, we won't have a way to signal that.
Exactly, that's my concern (and why I've previously said that making option_static_remotekey an explicit feature dependency of anchor_outputs was a mistake, which I think we should correct now).
I'm thinking in particular of the next channel type (that I hope can be implemented in ~1/2 years) which would be 0-fee commit txs with ephemeral anchor (once the policy change for bitcoin is deployed). When that ships, I believe updated nodes will want to first support anchor_outputs and ephemeral_anchor_outputs, but deprecate support for plain option_static_remotekey. This will be possible if we break that dependency now (this way we can be confident most nodes will be updated in ~1 year).
There was a problem hiding this comment.
that I hope can be implemented in ~1/2 years
Someone's feeling very optimistic 😉
My lofty estimate is something more like 4x that, so ~2 years given the rollout that still needs to happen on the Bitcoin p2p network.
I think everyone just setting it to be required achieves the same goal in practice? Those that don't support it will fail the feature bit connection check. IIRC in the past when we did this, we had some issues with peers that had old channels, but hadn't yet updated their feature bits: new and old were unable to reconnect as they bit check failed even though there was an existing channel open.
There was a problem hiding this comment.
I think everyone just setting it to be required achieves the same goal in practice?
I'm not sure I follow, my goal here is to be able to easily deprecate option_static_remotekey. Setting it to required definitely does not allow that?
Maybe what you mean here is that making option_static_remotekey assumed instead of explicitly set lets us deprecate it cleanly? Which somewhat means we should break the feature link between anchor_outputs and option_static_remotekey?
There was a problem hiding this comment.
This PR essentially reduces the basic channel types to anchors and no anchors. So if we want to require anchor channels, then for now we can set bit 22 (require
option_anchors_zero_fee_htlc_tx).But if there's a new channel type in the future that doesn't depend on anchors, and we want to support both anchors and the new type, we won't have a way to signal that.
You would offer both the new bit and the anchor bit if you allow both, surely?
There was a problem hiding this comment.
I think everyone just setting it to be required achieves the same goal in practice?
I'm not sure I follow, my goal here is to be able to easily deprecate
option_static_remotekey. Setting it to required definitely does not allow that?
It actually does. You set it required, and ignore the bit in the peer. We should fix the definition of negotiated, however, to make this clear. If you set it required, and they keep talking to you, you assume it's negotiated (this is how CLN works, for example).
There was a problem hiding this comment.
It is a bit convoluted though...deprecating option_static_remotekey by not setting the corresponding feature bit anymore would be way more explicit, wouldn't it? But maybe that ship has sailed since we initially created that dependency, and we just need to make sure we don't recreate the same kind of trap for future channel types.
| timely inclusion in a block. | ||
| - MAY combine it with other transactions. | ||
| 2. if `option_anchors_zero_fee_htlc_tx` applies: | ||
| 1. if `option_anchors` applies: |
There was a problem hiding this comment.
nit:
| 1. if `option_anchors` applies: | |
| - if `option_anchors` applies: |
| @@ -631,8 +631,6 @@ also subtract two times the fixed anchor size of 330 sats from the funder | |||
| Each commitment transaction uses a unique `localpubkey`, and a `remotepubkey`. | |||
There was a problem hiding this comment.
This isn't true anymore if we assume option_static_remotekey?
| We decide on | ||
| `option_anchors` at this point when we first have to generate |
There was a problem hiding this comment.
nit:
| We decide on | |
| `option_anchors` at this point when we first have to generate | |
| We decide on `option_static_remotekey` or `option_anchors` | |
| at this point when we first have to generate |
| | 6/7 | `gossip_queries` | ASSUMED | | | | | ||
| | 8/9 | `var_onion_optin` | ASSUMED | | | | | ||
| | 10/11 | `gossip_queries_ex` | Gossip queries can include additional information | IN | | [BOLT #7][bolt07-query] | | ||
| | 12/13 | `option_static_remotekey` | ASSUMED | | | | |
There was a problem hiding this comment.
This PR essentially reduces the basic channel types to anchors and no anchors. So if we want to require anchor channels, then for now we can set bit 22 (require option_anchors_zero_fee_htlc_tx).
But if there's a new channel type in the future that doesn't depend on anchors, and we want to support both anchors and the new type, we won't have a way to signal that.
| affect the channel operation). | ||
|
|
||
| The currently defined basic types are: | ||
| - no features (no bits set) |
There was a problem hiding this comment.
nit/commit message: advertised by all by (/but) 11 nodes
09-features.md
Outdated
| ## Definitions | ||
|
|
||
| We define `option_anchors` as `option_anchor_outputs || option_anchors_zero_fee_htlc_tx`. | ||
| We define `option_anchors` as `option_anchors_zero_fee_htlc_tx`. |
There was a problem hiding this comment.
Do we still need Ah, removed in next commit.option_anchors here - couldn't we just use option_anchors_zero_fee_htlc_tx everywhere now?
| - the `channel_type` is `option_static_remotekey` (bit 12) | ||
| - otherwise: | ||
| - the `channel_type` is empty | ||
| - the `channel_type` is `option_static_remotekey` (bit 12) |
There was a problem hiding this comment.
Is this actually a functional change? IIUC, in the case there were no channel_type bits set, it would fall back to the existing "implicit" negotiation that selected based on feature bits (which maybe is actually under-defined?).
|
|
||
| And, here are the test vectors themselves: | ||
|
|
||
| name: simple commitment tx with no HTLCs |
| | 6/7 | `gossip_queries` | ASSUMED | | | | | ||
| | 8/9 | `var_onion_optin` | ASSUMED | | | | | ||
| | 10/11 | `gossip_queries_ex` | Gossip queries can include additional information | IN | | [BOLT #7][bolt07-query] | | ||
| | 12/13 | `option_static_remotekey` | ASSUMED | | | | |
There was a problem hiding this comment.
that I hope can be implemented in ~1/2 years
Someone's feeling very optimistic 😉
My lofty estimate is something more like 4x that, so ~2 years given the rollout that still needs to happen on the Bitcoin p2p network.
I think everyone just setting it to be required achieves the same goal in practice? Those that don't support it will fail the feature bit connection check. IIRC in the past when we did this, we had some issues with peers that had old channels, but hadn't yet updated their feature bits: new and old were unable to reconnect as they bit check failed even though there was an existing channel open.
| | 14/15 | `payment_secret` | Node supports `payment_secret` field | IN9 | `var_onion_optin` | [Routing Onion Specification][bolt04] | | ||
| | 16/17 | `basic_mpp` | Node can receive basic multi-part payments | IN9 | `payment_secret` | [BOLT #4][bolt04-mpp] | | ||
| | 18/19 | `option_support_large_channel` | Can create large channels | IN | | [BOLT #2](02-peer-protocol.md#the-open_channel-message) | | ||
| | 20/21 | `option_anchor_outputs` | Anchor outputs | IN | `option_static_remotekey` | [BOLT #3](03-transactions.md) | |
There was a problem hiding this comment.
What's the expected behavior if we peer sends bits 20/21 for a channel type open? Do we assume that it's actually option_anchors_zero_fee_htlc_tx, or fail as we've all removed the feature bits from our codebases so that shows up as an undefined combination?
There was a problem hiding this comment.
I think we should fail in that case, because that is likely an old node that supports the non-zero-fee variant so this won't work. A node that wants option_anchors_zero_fee_htlc_tx will just set the correct set of bits for it, right?
There was a problem hiding this comment.
If you still support it, you'd accept it? But pretty soon, nobody will...
|
|
||
| The fee for an HTLC-success transaction: | ||
| - If `option_anchors_zero_fee_htlc_tx` applies: | ||
| - If `option_anchors` applies: |
There was a problem hiding this comment.
Looks like left over from the last commit? Doesn't match the commit title of:
BOLT 9: assume var_onion_optin.
| | 4/5 | `option_upfront_shutdown_script` | Commits to a shutdown scriptpubkey when opening channel | IN | | [BOLT #2][bolt02-open] | | ||
| | 6/7 | `gossip_queries` | More sophisticated gossip control | IN | | [BOLT #7][bolt07-query] | | ||
| | 8/9 | `var_onion_optin` | Requires/supports variable-length routing onion payloads | IN9 | | [Routing Onion Specification][bolt04] | | ||
| | 8/9 | `var_onion_optin` | ASSUMED | | | | |
There was a problem hiding this comment.
Similar comment here re also advising this is set to required.
If a peer receives a legacy onion, should they fail back or proceed? Or are we assuming ppl have ripped out all the logic, so they'd just fail to even parse it in the first place (malformed onion)?
| to send this, otherwise `gossip_queries` negotiation means no gossip | ||
| messages would be received. | ||
| a specific range. A node which wants any gossip messages has | ||
| to send this, otherwise no gossip messages would be received. |
There was a problem hiding this comment.
Should we also codify the behavior we talked about re "all or nothing" re the timestamp range? So that implementations only ever use this to signal that they want to receive updates, or don't want to receive any updates at all (so no legacy announcement back fill).
There was a problem hiding this comment.
Seems reasonable to me, but I think it would fit better in a separate PR.
There was a problem hiding this comment.
This is unrelated to this PR, I agree it should be a separate one.
lightning/bolts#1092 makes some features compulsory and lets us assume that other nodes have support for them.
lightning/bolts#1092 makes some features compulsory and lets us assume that other nodes have support for them.
lightning/bolts#1092 makes some features compulsory and lets us assume that other nodes have support for them.
As suggested in lightning/bolts#1092. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Changed: Protocol: `option_data_loss_protect` is now required (advertized by all but 11 nodes)
As suggested in lightning/bolts#1092. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Changed: Protocol: `option_gossip_queries` is now required (advertized by all but 11 nodes)
As suggested in lightning/bolts#1092. We still support channels opened without it, but you can no longer open new ones without it. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Changed: Protocol: `option_gossip_queries` is now required (advertized by all but 16 nodes)
As suggested in lightning/bolts#1092. We still support channels opened without it, but you can no longer open new ones without it. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Changed: Protocol: `option_gossip_queries` is now required (advertized by all but 16 nodes)
As suggested in lightning/bolts#1092. We still support channels opened without it, but you can no longer open new ones without it. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Changed: Protocol: `option_gossip_queries` is now required (advertized by all but 16 nodes)
As suggested in lightning/bolts#1092. We still support channels opened without it, but you can no longer open new ones without it. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Changed: Protocol: `option_gossip_queries` is now required (advertized by all but 16 nodes)
As suggested in lightning/bolts#1092. We still support channels opened without it, but you can no longer open new ones without it. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Changed: Protocol: `option_gossip_queries` is now required (advertized by all but 16 nodes)
Static remote key is mandatory for the ACINQ peer.i See lightning/bolts#1092
This fixes an issue where legacy phoenix could not connect following lightning/bolts#1092
As suggested in lightning/bolts#1092. We still support channels opened without it, but you can no longer open new ones without it. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Changed: Protocol: `option_gossip_queries` is now required (advertized by all but 16 nodes)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
…now assumed. These still have names and numbers, since they appear in `channel_type`. They are somewhat tangled with each other, so let's tie them together as assumed. option_data_loss_protect is advertized by all by 11 nodes(*), and option_static_remotekey all but 16 nodes. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> [* there are 449 three-year old LND nodes which advertize `2200` as their features, which have already been trimmed from most gossip for not having htlc_maximum_msat in their channel_updates]
…_fee_htlc_tx. It's supported only by pre-23.05 core-lightning nodes built with EXPERIMENTAL_FEATURES. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
lightning/bolts#1092 initially made the `gossip_queries` feature mandatory and assumed: however it generally doesn't make sense for mobile wallets. It was thus relaxed in the last commits of this BOLTs PR, so we revert our change to `mandatory` to make this optional and avoid sending gossip queries to nodes who don't activate the feature.
Advertized as supported by all but 6 nodes (and those can no longer route payments since people only send the modern onion these days) Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Supported by all but 11 nodes*. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> [* there are 449 three-year old LND nodes which advertize `2200` as their features, which have already been trimmed from most gossip for not having htlc_maximum_msat in their channel_updates]
This only had an effect when `gossip_queries` was not negotiated, which is now assumed. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
e0ee59f to
b5ce609
Compare
lightning/bolts#1092 initially made the `gossip_queries` feature mandatory and assumed: however it generally doesn't make sense for mobile wallets. It was thus relaxed in the last commits of this BOLTs PR, so we revert our change to `mandatory` to make this optional and avoid sending gossip queries to nodes who don't activate the feature.
t-bast
left a comment
There was a problem hiding this comment.
I think we should merge that PR, shouldn't we? I have fixed my initial comments and added a bit more clean-up in t-bast@fdaf7d6, you should be able to just grab this commit and I believe we should be ready to go @rustyrussell
|
It looks like this was merged without including the changes from #1092 (review) (which I believe are necessary otherwise this is incomplete). I'll open a PR for this commit. |
This is a follow-up to lightning#1092 that fixes the following issues: - fix a few typos - remove non-zero-fee anchors test cases - remove `remote_pubkey` rotation
Removed:
I looked at all node_announcements on my node. There are 449 nodes apparently running a 4-year-old LND version (features hex
2200), which have 3+ year old channels. @Roasbeef points out that they already will have their channel_updates ignored due to lack of htlc_maximum_msat which is now required by LND and CLN, at least).Features you can now assume (you should probably still set it for now, but you can stop checking it).
gossip_queriesis now slightly repurposed: if you don't offer this, it means you won't give useful gossip (so you should not query such nodes, nor consider them when trying to figure out if you've got all the gossip).