Skip to content

Conversation

@TheBlueMatt
Copy link
Collaborator

Note that this is against main so will need to be backported.

@ldk-reviews-bot
Copy link

ldk-reviews-bot commented Oct 16, 2025

I've assigned @joostjager as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@TheBlueMatt TheBlueMatt added this to the 0.2 milestone Oct 16, 2025
@codecov
Copy link

codecov bot commented Oct 16, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 88.86%. Comparing base (05f2848) to head (a94f9f8).
⚠️ Report is 96 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #4163      +/-   ##
==========================================
+ Coverage   88.78%   88.86%   +0.07%     
==========================================
  Files         180      180              
  Lines      137004   137901     +897     
  Branches   137004   137901     +897     
==========================================
+ Hits       121642   122543     +901     
- Misses      12538    12545       +7     
+ Partials     2824     2813      -11     
Flag Coverage Δ
fuzzing 21.44% <100.00%> (+0.48%) ⬆️
tests 88.70% <100.00%> (+0.07%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Contributor

@joostjager joostjager left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was assigned by the bot, but as @TheBlueMatt mentioned in the meet, everyone should really check their contributions here.

NIce concise changelogs

/// initialized with
/// Indicates that an onion message supporting peer has come online and any messages previously
/// stored for them (from [`Event::OnionMessageIntercepted`]s) should be forwarded to them by
/// calling [`OnionMessenger::forward_onion_message`].
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good addition, wasn't clear indeed that forward_onion_message needs to be called.


## API Updates

* Splicing is now supported. The current implementation is expected to be
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Curious why it says "expected". Isn't interop confirmed?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have not had time to do interop testing, no. We will likely do some before the release but probably not a ton.

CHANGELOG.md Outdated
`UserConfig::reject_inbound_splices` can be set to block inbound ones (#4150)
* LDK now requires the `channel_type` feature in line with spec updates (#3896)

XXX release stats
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reminder to update. Maybe XXX is part of the process?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yea, will do it once we get the other PRs landed.

CHANGELOG.md Outdated
@@ -1,3 +1,154 @@
# 0.2 - XXX, 2025 - "Natively Asynchronous Splicing"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it be nice to add a bit of a sales pitch here? Example AI slop:

LDK 0.2 – “Natively Asynchronous Splicing” is here, delivering the future of Lightning development today. Splicing support has landed, letting you resize channels on the fly, with native async APIs across the stack for faster, cleaner, and more efficient operations. Async payments are now live too, enabling smoother BOLT 12 flows for often-offline users and LSPs. Zero-Fee-Commitment channels slash feerate headaches, while new LSPS and RGS features power next-gen liquidity and performance. With major speed boosts, deeper diagnostics, and smarter persistence, LDK 0.2 is your all-in-one upgrade for a faster, more flexible Lightning future.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We historically haven't, letting the API Updates section speak for itself (its roughly sorted in "importance" order so splicing and async and async payments are right at the top). We did for 0.1 just given we were starting to do backports and wanted to describe that. We do use this kinda pitch for the release announcement tho.

@TheBlueMatt
Copy link
Collaborator Author

TheBlueMatt commented Oct 29, 2025

Okay, went ahead and squashed with the following changes, I think we can go ahead and land this as draft release notes, backport it, and we'll be about ready for an 0.2-rc.

$ git diff-tree -U1 a5acf3c27 b2d9dacf81
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8614fc6948..b4839d6423 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,2 +1,2 @@
-# 0.2 - XXX, 2025 - "Natively Asynchronous Splicing"
+# 0.2 - TODO: Add release date, 2025 - "Natively Asynchronous Splicing"

@@ -39,5 +39,8 @@
    force-closure risk for feerate disagreements by using a fixed, zero fee on
-   presigned transactions, relying on anchor bumps instead. This only works with
-   LDK peers, and feature signaling may change in a future version of LDK,
-   breaking compatibility. This is negotiated automatically for
+   presigned transactions, relying on anchor bumps instead. They also utilize
+   the new TRUC + ephemeral dust policy in Bitcoin Core 29 to substantially
+   improve the lightning security model. This requires having a path of Bitcoin
+   Core 29+ nodes between you and a miner for transactions to be mined. This
+   only works with LDK peers, and feature signaling may change in a future
+   version of LDK, breaking compatibility. This is negotiated automatically for
    manually-accepted inbound channels and negotiated for outbound channels based
@@ -94,2 +97,7 @@
  * `lightning-liquidity` now supports persisting relevant state (#4059, #4118).
+ * `ChannelManager::funding_transaction_generated_manual_broadcast` was added to
+   open a channel without automatically broadcasting the funding transaction
+   (#3838). In it and `unsafe_manual_funding_transaction_generated`
+   force-closure logic has been updated to no longer automatically broadcast the
+   commitment tx unless the funding transaction has been seen on-chain (#4109).
  * Various instances of channel closure which provided a
@@ -134,2 +142,5 @@
    `ListProtocols` message (#3785).
+ * A rare race which might lead `PeerManager` (and `lightning-net-tokio`) to
+   stop reading from a peer until a new message is sent to that peer has been
+   fixed (#4168).
  * The fields in `SocketAddress::OnionV3` are now corectly parsed, and the
@@ -168,3 +179,3 @@

-XXX release stats
+TODO release stats

Copy link
Contributor

@tankyleo tankyleo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This just crossed my mind: should we mention the new max_tx_weight parameter on CoinSelectionSource::select_confirmed_utxos in API Updates ?

CoinSelectionSource::select_confirmed_utxos now has a max_tx_weight parameter that specifies the maximum allowed weight of the final transaction (#4129). This parameter is only expected to put a real constraint on UTXO selection in zero-fee commitment channels."

@TheBlueMatt
Copy link
Collaborator Author

This just crossed my mind: should we mention the new max_tx_weight parameter on CoinSelectionSource::select_confirmed_utxos in API Updates ?

We often (especially in this release cause the docs are so huge) skip documenting things that will result in a compilation error due to a changed API. I think its fine to do in this case.

@TheBlueMatt TheBlueMatt mentioned this pull request Oct 30, 2025
@TheBlueMatt
Copy link
Collaborator Author

Backporting to 0.2 in #4193

@TheBlueMatt
Copy link
Collaborator Author

Updated the blinded message path dummy hops note and moved it out of "bug fixes":

$ git diff-tree -U1 b2d9dacf81 19fd54f525
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b4839d6423..513a026f62 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -92,2 +92,4 @@
    `KVStore` to restore custom logic for specific storage objects (#3905).
+ * `BlindedMessagePath::new_with_dummy_hops` was added (but is not used by
+   default, #3726). You can use `NodeIdMessageRouter` to enable dummy hops.
  * `ProbabilisticScoringFeeParameters::probing_diversity_penalty` was added to
@@ -150,4 +152,2 @@
    marginally when forwarding gossip to a slow peer (#4093, #4096).
- * `BlindedMessagePath::new_with_dummy_hops` was added (but is not used by
-   default, #3726).
  * Blinded path serialization is now padded to better hide its contents (#3177).

Comment on lines 4684 to 4686
/// After initial signatures have been exchanged, if we contributed any inputs,
/// [`Event::FundingTransactionReadyForSigning`] will be generated and
/// [`ChannelManager::funding_transaction_signed`] should be called.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We will emit this if we contributed either any non-shared inputs or any outputs. @wpaulino I can't recall why we emit this event for splice-out. In that case, we wouldn't have any inputs to sign because the shared input signing is handled by LDK.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With splice-out, it's more so to let the user have one last chance to approve the splice based on the negotiated transaction.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So if the user is calling splice_channel to initiate we'll always emit it, right? Cause we'll always contribute some input or output.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct. Once we allow contributions on incoming splices, an event should also be there if the user contributes anything.

`ChannelManager::splice_channel` initiates a splice which
ultimately generates a series of events. The most important of
which, `FundingTransactionReadyForSigning` (which must always be
handled, unlike the others), was not documented.

Here we mention the event generation.
Users implementing the "onion message mailbox" feature and handling
`OnionMessageIntercepted` events need to also handle
`Event::OnionMessagePeerConnected` events.

Here we update the event docs for both to add additional references
and be more explicit about what implementors need to do.
@TheBlueMatt
Copy link
Collaborator Author

Addressed further feedback:

$ git diff-tree -U2 19fd54f52 f36560d96
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 513a026f62..517102954e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -169,7 +169,7 @@
    often offline peer to come online (#3918).
  * Blinded message paths generated by previous versions of LDK, except those
-   generated for inclusion in `Bolt12Offer`s will no longer be accepted. As most
-   blinded message paths are ephemeral, this should only invalidate issued
-   `Refund`s in practice (#3917).
+   generated for inclusion in BOLT 12 `Offer`s will no longer be accepted. As
+   most blinded message paths are ephemeral, this should only invalidate issued
+   BOLT 12 `Refund`s in practice (#3917).
  * Once a channel has been spliced, LDK can no longer be downgraded.
    `UserConfig::reject_inbound_splices` can be set to block inbound ones (#4150)
diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs
index 515d7dbd14..a77f086c53 100644
--- a/lightning/src/ln/channelmanager.rs
+++ b/lightning/src/ln/channelmanager.rs
@@ -4682,7 +4682,6 @@ where
 	/// [`Event::DiscardFunding`] is seen.
 	///
-	/// After initial signatures have been exchanged, if we contributed any inputs,
-	/// [`Event::FundingTransactionReadyForSigning`] will be generated and
-	/// [`ChannelManager::funding_transaction_signed`] should be called.
+	/// After initial signatures have been exchanged, [`Event::FundingTransactionReadyForSigning`]
+	/// will be generated and [`ChannelManager::funding_transaction_signed`] should be called.
 	///
 	/// If any failures occur while negotiating the funding transaction, an [`Event::SpliceFailed`]

tankyleo
tankyleo previously approved these changes Oct 30, 2025
Copy link
Contributor

@tankyleo tankyleo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two small typos, take them or leave them :)

@TheBlueMatt
Copy link
Collaborator Author

Ugh, yea, might as well fix typos:

$ git diff-tree -U1 f36560d96 a94f9f8a9
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 517102954e..0480191933 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -33,3 +33,3 @@
    LDK-based LSPs wishing to support often-offline senders and recipients should
-   set `UserConfig::enable_htlc_hold`, support the existing "onion mesage
+   set `UserConfig::enable_htlc_hold`, support the existing "onion message
    mailbox" feature (setting `intercept_messages_for_offline_peers` on
@@ -39,3 +39,3 @@
    force-closure risk for feerate disagreements by using a fixed, zero fee on
-   presigned transactions, relying on anchor bumps instead. They also utilize
+   pre-signed transactions, relying on anchor bumps instead. They also utilize
    the new TRUC + ephemeral dust policy in Bitcoin Core 29 to substantially
@@ -127,3 +127,3 @@
    full available buffer (#3640).
- * structs in `lightning-liquidity` were renamed to be globally unique (#3583).
+ * Structs in `lightning-liquidity` were renamed to be globally unique (#3583).
  * Renamed `SpendableOutputDescriptor::outpoint` to `spendable_outpoint` (#3634)
@@ -147,3 +147,3 @@
    fixed (#4168).
- * The fields in `SocketAddress::OnionV3` are now corectly parsed, and the
+ * The fields in `SocketAddress::OnionV3` are now correctly parsed, and the
    `Display` for such addresses is now lowercase (#4090).

@TheBlueMatt TheBlueMatt merged commit c1bca16 into lightningdevkit:main Oct 31, 2025
23 of 25 checks passed
@TheBlueMatt
Copy link
Collaborator Author

Backported in #4193

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.

9 participants