Skip to content

Remove support for the legacy splicing protocol used by Phoenix#3262

Draft
t-bast wants to merge 3 commits intomasterfrom
remove-legacy-splicing-protocol
Draft

Remove support for the legacy splicing protocol used by Phoenix#3262
t-bast wants to merge 3 commits intomasterfrom
remove-legacy-splicing-protocol

Conversation

@t-bast
Copy link
Copy Markdown
Member

@t-bast t-bast commented Mar 5, 2026

We remove support for the legacy splicing protocol used by older Phoenix wallets. Before merging this PR, we must:

Users that don't upgrade will not be able to reconnect once we deploy this change.

Builds on top of #2887

t-bast added 3 commits April 3, 2026 15:15
We replace our experimental version of `splice_init`, `splice_ack` and
`splice_locked` by their official version. If our peer is using the
experimental feature bit, we convert our outgoing messages to use the
experimental encoding and incoming messages to the official messages.

We also change the TLV fields added to `tx_add_input`, `tx_signatures`
and `splice_locked` to match the spec version. We always write both the
official and experimental TLV to updated nodes (because the experimental
one is odd and will be ignored) but we drop the official TLV if our
peer is using the experimental feature, because it won't understand the
even TLV field.

We do the same thing for the `commit_sig` TLV. For peers who support the
official splicing version, we insert the `start_batch` message before
the batch of `commit_sig` messages.

This guarantees backwards-compatibility with peers who only support the
experimental feature.
We introduce a `retransmit_flags` field to `my_current_funding_locked`
and `next_funding` to ask our peer to retransmit `commitment_signed` or
`announcement_signatures` if we're expecting them. With this change, we
don't need to retransmit `splice_locked` on reconnection anymore to
trigger the exchange of `announcement_signatures`. We don't need to
retransmit it to let our peer know that we've seen enough confirmations
for the splice either, since `my_current_funding_locked` implies that.

This allows us to completely remove retransmission of `splice_locked` on
reconnection, and also get rid of the `your_last_funding_locked` TLV,
which greatly simplifies the reconnection logic. We do keep them for
backwards-compatibility with existing Phoenix users though, but we'll
be able to clean it up once they have updated.

Note that this works with taproot channels since we will simply provide
nonces in `channel_reestablish` when we need our peer to send
announcement signatures (not supported yet since taproot channels are
never announced).

We rollback using the `next_commitment_number` to let our peer know that
we haven't received their `commit_sig` and instead use the retransmit
flags added to the `next_funding` TLV, unless our peer is using the
legacy splicing protocol.
We remove support for the legacy splicing protocol used by older
Phoenix wallets. Phoenix users can simply update their app to get
the latest version that supports the official splicing protocol.
@t-bast t-bast force-pushed the remove-legacy-splicing-protocol branch from 5feecfe to b671e2c Compare April 3, 2026 13:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant