|
| 1 | +# 0.2 - TODO: Add release date, 2025 - "Natively Asynchronous Splicing" |
| 2 | + |
| 3 | +## API Updates |
| 4 | + |
| 5 | + * Splicing is now supported. The current implementation is expected to be |
| 6 | + compatible with Eclair and future versions of CLN, but may change feature |
| 7 | + signaling in a future version as testing completes, breaking compatibility. |
| 8 | + Support for accepting splices is gated on |
| 9 | + `UserConfig::reject_inbound_splices`. Outbound splices can be initiated with |
| 10 | + `ChannelManager::splice_channel`. |
| 11 | + * Various APIs have been updated to offer a native Rust async API. All |
| 12 | + newly-async traits and structs have a `*Sync` variant which offers the |
| 13 | + same API but with sync methods: |
| 14 | + * `KVStore` has been made async. Note that `KVStore` methods are not |
| 15 | + `async fn`, but rather write ordering is fixed when the methods return, |
| 16 | + though write completion is async. |
| 17 | + * `BumpTransactionEventHandler` is now backed by an async `WalletSource` (and |
| 18 | + `Wallet`) or an async `CoinSelectionSource` and is now async. Sync versions |
| 19 | + are in the new `events::bump_transaction::sync` submodule (#3752). |
| 20 | + * `OutputSweeper` is now backed by an async `KVStore` and |
| 21 | + `ChangeDestinationSource` and is now async (#3819, #3734, #4131). |
| 22 | + * `MonitorUpdatingPersisterAsync` and `ChainMonitor::new_async_beta` were |
| 23 | + added for async `ChannelMonitor` persistence. Note that this feature is |
| 24 | + still considered beta (#4063). |
| 25 | + * An initial version of async payments is now supported. The current |
| 26 | + implementation is specific to LDK and only LDK supports paying static |
| 27 | + invoices. However, because BOLT 12 invoice requests will gracefully "upgrade" |
| 28 | + to a non-static invoice when the recipient comes online, offers backed by |
| 29 | + static invoices are expected to be payable by any BOLT 12 payer. |
| 30 | + With an LDK-based LSP, often-offline clients should set |
| 31 | + `UserConfig::hold_outbound_htlcs_at_next_hop` and call |
| 32 | + `ChannelManager::set_paths_to_static_invoice_server`. |
| 33 | + LDK-based LSPs wishing to support often-offline senders and recipients should |
| 34 | + set `UserConfig::enable_htlc_hold`, support the existing "onion message |
| 35 | + mailbox" feature (setting `intercept_messages_for_offline_peers` on |
| 36 | + `OnionMessenger` and handling `Event::OnionMessageIntercepted`s), and handle |
| 37 | + `Event::PersistStaticInvoice`s and `Event::StaticInvoiceRequested`s. |
| 38 | + * Zero-Fee-Commitment channels are now supported in LDK. These channels remove |
| 39 | + force-closure risk for feerate disagreements by using a fixed, zero fee on |
| 40 | + pre-signed transactions, relying on anchor bumps instead. They also utilize |
| 41 | + the new TRUC + ephemeral dust policy in Bitcoin Core 29 to substantially |
| 42 | + improve the lightning security model. This requires having a path of Bitcoin |
| 43 | + Core 29+ nodes between you and a miner for transactions to be mined. This |
| 44 | + only works with LDK peers, and feature signaling may change in a future |
| 45 | + version of LDK, breaking compatibility. This is negotiated automatically for |
| 46 | + manually-accepted inbound channels and negotiated for outbound channels based |
| 47 | + on `ChannelHandshakeConfig::negotiate_anchor_zero_fee_commitments`. |
| 48 | + * `Event::BumpTransaction` is now always generated even if the transaction has |
| 49 | + sufficient fee. This allows you to manage transaction broadcasting more |
| 50 | + granularly for anchor channels (#4001). |
| 51 | + * The local key which receives non-HTLC-encumbered funds when the counterparty |
| 52 | + force-closes a channel is now one of a static list of 1000 keys when using |
| 53 | + `KeysManager` if `v2_remote_key_derivation` is set or after splicing (#4117). |
| 54 | + * LSPS5 support was added, providing a push notification API for LSPS clients. |
| 55 | + * Client-trusts-LSP is now supported on LSPS2 service (#3838). |
| 56 | + * `LSPS2ClientEvent` now has events for failure events (#3804). |
| 57 | + * `LSPS2ServiceHandler::channel_open_abandoned` was added (#3712). |
| 58 | + * `Event::PendingHTLCsForwardable` has been replaced with regular calls to |
| 59 | + `process_pending_htlc_forwards` in the background processor while |
| 60 | + `ChannelManager::needs_pending_htlc_processing` is true. The delay between |
| 61 | + calls (and, thus, HTLC forwarding delay) is random between zero and 200ms, |
| 62 | + averaging 50ms, faster than the previous recommendation (#3891, #3955). |
| 63 | + * `Event::HTLCHandlingFailed`s now include a`LocalHTLCFailureReason`, providing |
| 64 | + much more granular reasons for HTLCs having been failed (#3744, etc). |
| 65 | + * `Event::HTLCHandlingFailed` is now generated any time forwarding an HTLC |
| 66 | + fails, i.e. including cases where the HTLC onion is invalid (#2933). |
| 67 | + * `Event::HTLCHandlingFailed::failure_type` of `UnknownNextHop` has been |
| 68 | + deprecated and is no longer generated (#3700). |
| 69 | + * `OffersMessageFlow` was introduced to make it easier to implement most of the |
| 70 | + BOLT 12 flows without using a `ChannelManager` (#3639). |
| 71 | + * `ChannelManager::pay_for_bolt11_invoice` was added (#3617). |
| 72 | + * `ChannelManager::pay_for_offer_from_human_readable_name` has been deprecated |
| 73 | + in favor of the `bitcoin-payment-instructions` and |
| 74 | + `ChannelManager::pay_for_offer_from_hrn`. Language bindings users may still |
| 75 | + wish to use the original (#3903, #4083). |
| 76 | + * `lightning::util::anchor_channel_reserves` was added to assist in estimating |
| 77 | + on-chain fund requirements for anchor channel closures (#3487). |
| 78 | + * Using both asynchronous and synchronous `ChannelMonitor[Update]` persistence |
| 79 | + on the same `ChannelManager` will now panic. This never functioned correctly |
| 80 | + and is now detected to prevent issues (#3737). |
| 81 | + * LDK can now validate if HTLC errors have been tampered with (once nodes |
| 82 | + upgrade). It also reports and logs the amount of time an HTLC was held so |
| 83 | + that (as nodes upgrade) slow nodes can be found (#2256, #3801, other fixes). |
| 84 | + * Repeated `Listen::block_disconnected` calls for each disconnected block in a |
| 85 | + reorg have been replaced with a single `blocks_disconnected` call with the |
| 86 | + fork point block (i.e. the highest block on both sides of the reorg, #3876). |
| 87 | + * `lightning::routing::scoring::CombinedScorer` was added to combine scoring |
| 88 | + data between remote scoring info and local payment results (#3562). |
| 89 | + * LDK will now store up to 1KiB of "peer storage" data in `ChannelManager` per |
| 90 | + peer with which we have a funded channel (#3575). |
| 91 | + * The `Persister` trait was removed. You can match on namespace constants in |
| 92 | + `KVStore` to restore custom logic for specific storage objects (#3905). |
| 93 | + * `BlindedMessagePath::new_with_dummy_hops` was added (but is not used by |
| 94 | + default, #3726). You can use `NodeIdMessageRouter` to enable dummy hops. |
| 95 | + * `ProbabilisticScoringFeeParameters::probing_diversity_penalty` was added to |
| 96 | + allow for better information gathering while probing (#3422, #3713). |
| 97 | + * `Persist` now takes a `MonitorName` rather than a `funding_txo` `OutPoint` to |
| 98 | + ensure the storage key is consistent across splices (#3569). |
| 99 | + * `lightning-liquidity` now supports persisting relevant state (#4059, #4118). |
| 100 | + * `ChannelManager::funding_transaction_generated_manual_broadcast` was added to |
| 101 | + open a channel without automatically broadcasting the funding transaction |
| 102 | + (#3838). In it and `unsafe_manual_funding_transaction_generated` |
| 103 | + force-closure logic has been updated to no longer automatically broadcast the |
| 104 | + commitment tx unless the funding transaction has been seen on-chain (#4109). |
| 105 | + * Various instances of channel closure which provided a |
| 106 | + `ClosureReason::HolderForceClosed` now provide more accurate |
| 107 | + `ClosureReason`s, especially `ClosureReason::ProcessingError` (#3881). |
| 108 | + * A new `ClosureReason::LocallyCoopClosedUnfundedChannel` was added (#3881). |
| 109 | + * Some arguments to `ChannelManager::pay_for_offer[_from_human_readable_name]` |
| 110 | + have moved behind `optional_params` (#3808, #3903). |
| 111 | + * `Event::PaymentSent::bolt12_invoice` was added for proof-of-payment (#3593). |
| 112 | + * Channel values are now synchronized via RGS, improving scoring (#3924). |
| 113 | + * `SendOnlyMessageHandler` was added, implemented for `ChainMonitor`, and |
| 114 | + an instance added to `MessageHandler`. Note that `ChainMonitor` does not yet |
| 115 | + send any messages, though will in the future (#3922). |
| 116 | + * `lightning_background_processor::NO_{ONION_MESSENGER,LIQUIDITY_MANAGER}` were |
| 117 | + added to simplify background processor init without some args (#4100, #4132). |
| 118 | + * `ChannelManager::set_current_config` was added (#4038). |
| 119 | + * Onion messages received to a blinded path we generated are now authenticated |
| 120 | + implicitly rather than explicitly in blinded path `Context`s (#3917, #4144). |
| 121 | + * `OMNameResolver::expire_pending_resolution` has been added for those who |
| 122 | + cannot or do not wish to call `new_best_block` regularly (#3900). |
| 123 | + * `lightning-liquidity`'s LSPS1 client now supports BOLT 12 payments (#3649). |
| 124 | + * `LengthReadable::read` has been renamed `read_from_fixed_length_buffer` and |
| 125 | + is implemented for all `Readable` (#3579). |
| 126 | + * `LengthReadable` is now required to read various objects which consume the |
| 127 | + full available buffer (#3640). |
| 128 | + * Structs in `lightning-liquidity` were renamed to be globally unique (#3583). |
| 129 | + * Renamed `SpendableOutputDescriptor::outpoint` to `spendable_outpoint` (#3634) |
| 130 | + |
| 131 | +## Performance Improvements |
| 132 | + * `ChainMonitor::load_existing_monitor` was added and should be used on startup |
| 133 | + to load existing `ChannelMonitor`s rather than via `Persist`, avoiding |
| 134 | + re-persisting each `ChannelMonitor` during startup (#3996). |
| 135 | + * RGS data application was further sped up (#3581). |
| 136 | + |
| 137 | +## Bug Fixes |
| 138 | + * `FilesystemStore::list` is now more robust against race conditions with |
| 139 | + simultaneous `write`/`archive` operations (#3799). |
| 140 | + * Pending async persistence of `ChannelMonitorUpdate`s required to forward an |
| 141 | + HTLC can no longer result in the HTLC being forgotten if the channel is |
| 142 | + force-closed (#3989). |
| 143 | + * `lightning-liquidity`'s service support now properly responds to the |
| 144 | + `ListProtocols` message (#3785). |
| 145 | + * A rare race which might lead `PeerManager` (and `lightning-net-tokio`) to |
| 146 | + stop reading from a peer until a new message is sent to that peer has been |
| 147 | + fixed (#4168). |
| 148 | + * The fields in `SocketAddress::OnionV3` are now correctly parsed, and the |
| 149 | + `Display` for such addresses is now lowercase (#4090). |
| 150 | + * `PeerManager` is now more conservative about disconnecting peers which aren't |
| 151 | + responding to pings in a timely manner. This may reduce disconnections |
| 152 | + marginally when forwarding gossip to a slow peer (#4093, #4096). |
| 153 | + * Blinded path serialization is now padded to better hide its contents (#3177). |
| 154 | + * In cases of incredibly long async monitor update or async signing operations, |
| 155 | + LDK may have previously spuriously disconnected peers (#3721). |
| 156 | + * Total dust exposure on a commitment now rounds correctly (#3572). |
| 157 | + |
| 158 | +## Backwards Compatibility |
| 159 | + * `ChannelMonitor`s which were created prior to LDK 0.0.110 and which saw no |
| 160 | + updates since LDK 0.0.116 may now fail to deserialize (#3638, #4146). |
| 161 | + * Setting `v2_remote_key_derivation` on `KeysManager` to true, or splicing a |
| 162 | + channel results in using keys which prior versions of LDK do not know how to |
| 163 | + derive. This may result in missing funds or panics trying to sweep closed |
| 164 | + channels after downgrading (#4117). |
| 165 | + * After upgrading to 0.2, downgrading to versions of LDK prior to 0.0.123 is no |
| 166 | + longer supported (#2933). |
| 167 | + * Upgrading from versions prior to 0.0.116 is not supported (#3604, #3678). |
| 168 | + * Upgrading to v0.2.0 will time out any pending async payment waiting for the |
| 169 | + often offline peer to come online (#3918). |
| 170 | + * Blinded message paths generated by previous versions of LDK, except those |
| 171 | + generated for inclusion in BOLT 12 `Offer`s will no longer be accepted. As |
| 172 | + most blinded message paths are ephemeral, this should only invalidate issued |
| 173 | + BOLT 12 `Refund`s in practice (#3917). |
| 174 | + * Once a channel has been spliced, LDK can no longer be downgraded. |
| 175 | + `UserConfig::reject_inbound_splices` can be set to block inbound ones (#4150) |
| 176 | + * Downgrading after setting `UserConfig::enable_htlc_hold` is not supported |
| 177 | + (#4045, #4046). |
| 178 | + * LDK now requires the `channel_type` feature in line with spec updates (#3896) |
| 179 | + |
| 180 | +TODO release stats |
| 181 | + |
| 182 | + |
1 | 183 | # 0.1.7 - Oct 21, 2025 - "Unstable Release CI" |
2 | 184 |
|
3 | 185 | ## Bug Fixes |
|
0 commit comments