Tags: alandotcom/rust-lightning
Tags
0.0.114 - Mar 3, 2023 - "Faster Async BOLT12 Retries" API Updates =========== * `InvoicePayer` has been removed and its features moved directly into `ChannelManager`. As such it now requires a simplified `Router` and supports `send_payment_with_retry` (and friends). `ChannelManager::retry_payment` was removed in favor of the automated retries. Invoice payment utilities in `lightning-invoice` now call the new code (lightningdevkit#1812, lightningdevkit#1916, lightningdevkit#1929, lightningdevkit#2007, etc). * `Sign`/`BaseSign` has been renamed `ChannelSigner`, with `EcdsaChannelSigner` split out in anticipation of future schnorr/taproot support (lightningdevkit#1967). * The catch-all `KeysInterface` was split into `EntropySource`, `NodeSigner`, and `SignerProvider`. `KeysManager` implements all three (lightningdevkit#1910, lightningdevkit#1930). * `KeysInterface::get_node_secret` is now `KeysManager::get_node_secret_key` and is no longer required for external signers (lightningdevkit#1951, lightningdevkit#2070). * A `lightning-transaction-sync` crate has been added which implements keeping LDK in sync with the chain via an esplora server (lightningdevkit#1870). Note that it can only be used on nodes that *never* ran a previous version of LDK. * `Score` is updated in `BackgroundProcessor` instead of via `Router` (lightningdevkit#1996). * `ChainAccess::get_utxo` (now `UtxoAccess`) can now be resolved async (lightningdevkit#1980). * BOLT12 `Offer`, `InvoiceRequest`, `Invoice` and `Refund` structs as well as associated builders have been added. Such invoices cannot yet be paid due to missing support for blinded path payments (lightningdevkit#1927, lightningdevkit#1908, lightningdevkit#1926). * A `lightning-custom-message` crate has been added to make combining multiple custom messages into one enum/handler easier (lightningdevkit#1832). * `Event::PaymentPathFailure` is now generated for failure to send an HTLC over the first hop on our local channel (lightningdevkit#2014, lightningdevkit#2043). * `lightning-net-tokio` no longer requires an `Arc` on `PeerManager` (lightningdevkit#1968). * `ChannelManager::list_recent_payments` was added (lightningdevkit#1873). * `lightning-background-processor` `std` is now optional in async mode (lightningdevkit#1962). * `create_phantom_invoice` can now be used in `no-std` (lightningdevkit#1985). * The required final CLTV delta on inbound payments is now configurable (lightningdevkit#1878) * bitcoind RPC error code and message are now surfaced in `block-sync` (lightningdevkit#2057). * Get `historical_estimated_channel_liquidity_probabilities` was added (lightningdevkit#1961). * `ChannelManager::fail_htlc_backwards_with_reason` was added (lightningdevkit#1948). * Macros which implement serialization using TLVs or straight writing of struct fields are now public (lightningdevkit#1823, lightningdevkit#1976, lightningdevkit#1977). Backwards Compatibility ======================= * Any inbound payments with a custom final CLTV delta will be rejected by LDK if you downgrade prior to receipt (lightningdevkit#1878). * `Event::PaymentPathFailed::network_update` will always be `None` if an 0.0.114-generated event is read by a prior version of LDK (lightningdevkit#2043). * `Event::PaymentPathFailed::all_paths_removed` will always be false if an 0.0.114-generated event is read by a prior version of LDK. Users who rely on it to determine payment retries should migrate to `Event::PaymentFailed`, in a separate release prior to upgrading to LDK 0.0.114 if downgrading is supported (lightningdevkit#2043). Performance Improvements ======================== * Channel data is now stored per-peer and channel updates across multiple peers can be operated on simultaneously (lightningdevkit#1507). * Routefinding is roughly 1.5x faster (lightningdevkit#1799). * Deserializing a `NetworkGraph` is roughly 6x faster (lightningdevkit#2016). * Memory usage for a `NetworkGraph` has been reduced substantially (lightningdevkit#2040). * `KeysInterface::get_secure_random_bytes` is roughly 200x faster (lightningdevkit#1974). Bug Fixes ========= * Fixed a bug where a delay in processing a `PaymentSent` event longer than the time taken to persist a `ChannelMonitor` update, when occurring immediately prior to a crash, may result in the `PaymentSent` event being lost (lightningdevkit#2048). * Fixed spurious rejections of rapid gossip sync data when the graph has been updated by other means between gossip syncs (lightningdevkit#2046). * Fixed a panic in `KeysManager` when the high bit of `starting_time_nanos` is set (lightningdevkit#1935). * Resolved an issue where the `ChannelManager::get_persistable_update_future` future would fail to wake until a second notification occurs (lightningdevkit#2064). * Resolved a memory leak when using `ChannelManager::send_probe` (lightningdevkit#2037). * Fixed a deadlock on some platforms at least when using async `ChannelMonitor` updating (lightningdevkit#2006). * Removed debug-only assertions which were reachable in threaded code (lightningdevkit#1964). * In some cases when payment sending fails on our local channel retries no longer take the same path and thus never succeed (lightningdevkit#2014). * Retries for spontaneous payments have been fixed (lightningdevkit#2002). * Return an `Err` if `lightning-persister` fails to read the directory listing rather than panicing (lightningdevkit#1943). * `peer_disconnected` will now never be called without `peer_connected` (lightningdevkit#2035) Security ======== 0.0.114 fixes several denial-of-service vulnerabilities which are reachable from untrusted input from channel counterparties or in deployments accepting inbound connections or channels. It also fixes a denial-of-service vulnerability in rare cases in the route finding logic. * The number of pending un-funded channels as well as peers without funded channels is now limited to avoid denial of service (lightningdevkit#1988). * A second `channel_ready` message received immediately after the first could lead to a spurious panic (lightningdevkit#2071). This issue was introduced with 0conf support in LDK 0.0.107. * A division-by-zero issue was fixed in the `ProbabilisticScorer` if the amount being sent (including previous-hop fees) is equal to a channel's capacity while walking the graph (lightningdevkit#2072). The division-by-zero was introduced with historical data tracking in LDK 0.0.112. In total, this release features 130 files changed, 21457 insertions, 10113 deletions in 343 commits from 18 authors, in alphabetical order: * Alec Chen * Allan Douglas R. de Oliveira * Andrei * Arik Sosman * Daniel Granhão * Duncan Dean * Elias Rohrer * Jeffrey Czyz * John Cantrell * Kurtsley * Matt Corallo * Max Fang * Omer Yacine * Valentine Wallace * Viktor Tigerström * Wilmer Paulino * benthecarman * jurvis
0.0.114-beta - Feb 28, 2023 - "Faster Async BOLT12 Retries" Release notes forthcoming for the full release.
0.0.113 - Dec 16, 2022 - "Big Movement Intercepted" API Updates =========== * `ChannelManager::send_payment` now takes an explicit `PaymentId` which is a loose idempotency token. See `send_payment` docs for more (lightningdevkit#1761, lightningdevkit#1826). * HTLCs bound for SCIDs from `ChannelManager::get_intercept_scid` are now intercepted and can be forwarded manually over any channel (lightningdevkit#1835, lightningdevkit#1893). * `Confirm::get_relevant_txids` now returns a `BlockHash`, expanding the set of cases where `transaction_unconfirmed` must be called, see docs (lightningdevkit#1796). * Pending outbound payments are no longer automatically timed-out a few blocks after failure. Thus, in order to avoid leaking memory, you MUST call `ChannelManager::abandon_payment` when you no longer wish to retry (lightningdevkit#1761). * `ChannelManager::abandon_payment` docs were updated to note that the payment may return to pending after a restart if no persistence occurs (lightningdevkit#1907). * `Event::PaymentReceived` has been renamed `Event::PaymentClaimable` (lightningdevkit#1891). * `Event` handling is now optionally async for Rust users (lightningdevkit#1787). * `user_channel_id` is now a `u128` and random for inbound channels (lightningdevkit#1790). * A new `ChannelReady` event is generated whenever a channel becomes ready to be used, i.e., after both sides sent the `channel_ready` message (lightningdevkit#1743). * `NetworkGraph` now prunes channels where either node is offline for 2 weeks and refuses to accept re-announcements of pruned channels (lightningdevkit#1735). * Onion messages are now read in `CustomOnionMessageHandler` rather than via `MaybeReadableArgs` (lightningdevkit#1809). * Added a new util to generate an invoice with a custom hash (lightningdevkit#1894) - `create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash` * `Sign`ers are now by default re-derived using `KeysInterface`'s new `derive_channel_signer` rather than `read_chan_signer` (lightningdevkit#1867). * `Confirm::transactions_confirmed` is now idempotent (lightningdevkit#1861). * `ChannelManager::compute_inflight_htlcs` has been added to fetch in-flight HTLCs for scoring. Note that `InvoicePayer` does this for you (lightningdevkit#1830). * Added `PaymentClaimable::via_channel_id` (lightningdevkit#1856). * Added the `node_id` (phantom or regular) to payment events (lightningdevkit#1766). * Added the funding transaction `confirmations` to `ChannelDetails` (lightningdevkit#1856). * `BlindedRoute` has been renamed `BlindedPath` (lightningdevkit#1918). * Support for the BOLT 4 "legacy" onion format has been removed, in line with its removal in the spec and vanishingly rare use (lightningdevkit#1413). * `ChainMonitor::list_pending_monitor_updates` was added (lightningdevkit#1834). * Signing for non-zero-fee anchor commitments is supported again (lightningdevkit#1828). * Several helpers for transaction matching and generation are now pub (lightningdevkit#1839). Bug Fixes ========= * Fixed a rare race where a crash may result in a pending HTLC not being failed backwards, leading to a force-closure by our counterparty (lightningdevkit#1857). * Avoid incorrectly assigning a lower-bound on channel liquidity when routing fails due to a closed channel earlier in the path (lightningdevkit#1817). * If a counterparty increases the channel fee, but not enough per our own fee estimator, we no longer force-close the channel (lightningdevkit#1852). * Several bugs in the `lightning-background-processor` `future` feature were fixed, including requirements doc corrections (lightningdevkit#1843, lightningdevkit#1845, lightningdevkit#1851). * Some failure messages sent back when failing an HTLC were corrected (lightningdevkit#1895). * `rapid-gossip-sync` no longer errors if an update is applied duplicatively or in rare cases when the graph is updated from payment failures (lightningdevkit#1833). * Sending onion messages to a blinded path in which we're the introduction node no longer fails (lightningdevkit#1791). Backwards Compatibility ======================= * No `ChannelReady` events will be generated for previously existing channels, including those which become ready after upgrading to 0.0.113 (lightningdevkit#1743). * Once `UserConfig::accept_intercept_htlcs` is set, downgrades to LDK versions prior to 0.0.113 are not supported (lightningdevkit#1835). * Existing payments may see a `PaymentClaimable::user_channel_id` of 0 (lightningdevkit#1856) * When downgrading to a version of LDK prior to 0.0.113 when there are resolved payments waiting for a small timeout, the payments may not be removed, preventing payments with the same `PaymentId` (lightningdevkit#1761). In total, this release features 76 files changed, 11639 insertions, 6067 deletions in 210 commits from 18 authors, in alphabetical order: * Antoine Riard * Arik Sosman * Devrandom * Duncan Dean * Elias Rohrer * Gleb Naumenko * Jeffrey Czyz * John Cantrell * Matt Corallo * Tee8z * Tobin C. Harding * Tristan F * Valentine Wallace * Viktor Tigerström * Wilmer Paulino * benthecarman * jurvis * ssbright
0.0.112 - Oct 25, 2022 - "History Matters" API Updates =========== * `Result<(), ChannelMonitorUpdateErr>` return values have been replaced with a `ChannelMonitorUpdateStatus` trinary enum. This better denotes that `ChannelMonitorUpdateStatus::InProgress` is not an error, but asynchronous persistence of a monitor update. Note that asynchronous persistence still has some edge cases and is not yet recommended for production (lightningdevkit#1106). * `ChannelMonitor` persistence failure no longer automatically broadcasts the latest commitment transaction. See the `ChannelMonitorUpdateStatus::PermanentFailure` docs for more info (lightningdevkit#1106). * `*Features::known` has been replaced with individual `*MessageHandler::provided_*_features` methods (lightningdevkit#1707). * `OnionMessenger` now takes a `CustomOnionMessageHandler` implementation, allowing you to send and receive custom onion messages (lightningdevkit#1748). * `ProbabilisticScorer` now tracks the historical distribution of liquidity estimates for channels. See new `historical_*` parameters in `ProbabilisticScoringParameters` for more details (lightningdevkit#1625). * `lightning-block-sync`'s `BlockSource` trait now supports BIP 157/158 filtering clients by returning only header data for some blocks (lightningdevkit#1706). * `lightning-invoice`'s `Router` trait now accepts an `InFlightHtlcs` to ensure we do not over-use a remote channel's funds during routing (lightningdevkit#1694). Note that this was previously backported to 0.0.111 for bindings users. * `NetworkGraph::remove_stale_channels` has been renamed `NetworkGraph::remove_stale_channels_and_tracking` as `NetworkGraph` now refuses to re-add nodes and channels that were recently removed (lightningdevkit#1649). * The `lightning-rapid-gossip-sync` crate now supports `no-std` (lightningdevkit#1708). * The default `ProbabilisticScoringParameters::liquidity_offset_half_life` has been increased to six hours from one (lightningdevkit#1754). * All commitment transaction building logic for anchor outputs now assumes the no-HTLC-tx-fee variant (lightningdevkit#1685). * A number of missing `Eq` implementations were added (lightningdevkit#1763). Bug Fixes ========= * `lightning-background-processor` now builds without error with the `futures` feature (lightningdevkit#1744). * `ChannelManager::get_persistable_update_future`'s returned `Future` has been corrected to not fail to be awoken in some cases (lightningdevkit#1758). * Asynchronously performing the initial `ChannelMonitor` persistence is now safe (lightningdevkit#1678). * Redundantly applying rapid gossip sync updates no longer `Err`s (lightningdevkit#1764). * Nodes which inform us via payment failures that they should no longer be used are now removed from the network graph. Some LND nodes spuriously generate this error and may remove themselves from our graph (lightningdevkit#1649). In total, this release features 134 files changed, 6598 insertions, 4370 deletions in 109 commits from 13 authors, in alphabetical order: * Duncan Dean * Elias Rohrer * Gabriel Comte * Gursharan Singh * Jeffrey Czyz * Jurvis Tan * Matt Corallo * Max Fang * Paul Miller * Valentine Wallace * Viktor Tigerström * Wilmer Paulino * acid-bit
0.0.111 - Sep 12, 2022 - "Saturated with Messages" API Updates =========== * Support for relaying onion messages has been added via a new `OnionMessenger` struct when passed as the `OnionMessageHandler` to a `PeerManager`. Pre-encoded onion messages can also be sent and received (lightningdevkit#1503, lightningdevkit#1650, lightningdevkit#1652, lightningdevkit#1688). * Rate-limiting of outbound gossip syncs has been rewritten to utilize less buffering inside LDK. The new rate-limiting is also used for onion messages to avoid delaying other messages (lightningdevkit#1604. lightningdevkit#1660, lightningdevkit#1683). * Rather than spawning a full OS thread, `lightning-background-processor` has a new `process_events_async` method which takes the place of a `BackgroundProcessor` for those using Rust's async (lightningdevkit#1657). * `ChannelManager::get_persistable_update_future` has been added to block on a ChannelManager needing re-persistence in a Rust async environment (lightningdevkit#1657). * The `Filter::register_output` return value has been removed, as it was very difficult to correctly implement (i.e., without blocking). Users previously using it should instead pass dependent transactions in via additional `chain::Confirm::transactions_confirmed` calls (lightningdevkit#1663). * `ChannelHandshakeConfig::their_channel_reserve_proportional_millionths` has been added to allow configuring counterparty reserve values (lightningdevkit#1619). * `KeysInterface::ecdh` has been added as an ECDH oracle (lightningdevkit#1503, lightningdevkit#1658). * The `rust-bitcoin` dependency has been updated 0.29 (lightningdevkit#1658). * The `bitcoin_hashes` dependency has been updated 0.11 (lightningdevkit#1677). * `ChannelManager::broadcast_node_announcement` has been moved to `PeerManager` (lightningdevkit#1699). * `channel_` and `node_announcement`s are now rebroadcast automatically to all new peers which connect (lightningdevkit#1699). * `{Init,Node}Features` sent to peers/broadcasted are now fetched via the various `*MessageHandler` traits, rather than hard-coded (lightningdevkit#1701, lightningdevkit#1688). * `Event::PaymentPathFailed::rejected_by_dest` has been renamed `payment_failed_permanently` (lightningdevkit#1702). * `Invoice` now derives the std `Hash` trait (lightningdevkit#1575). * `{Signed,}RawInvoice::hash` have been renamed `signable_hash` (lightningdevkit#1714). * `chain::AccessError` now derives the std `Debug` trait (lightningdevkit#1709). * `ReadOnlyNetworkGraph::list_{channels,nodes}` have been added largely for users of downstream bindings (lightningdevkit#1651). * `ChannelMonitor::get_counterparty_node_id` is now available (lightningdevkit#1635). Bug Fixes ========= * The script compared with that returned from `chain::Access` was incorrect ~half of the time, causing spurious gossip rejection (lightningdevkit#1666). * Pending in-flight HTLCs are now considered when calculating new routes, ensuring, e.g. MPP retries do not take known-saturated paths (lightningdevkit#1643). * Counterparty-revoked outputs are now included in `get_claimable_balance` output via a new `Balance::CounterpartyRevokedOutputClaimable` (lightningdevkit#1495). * Inbound HTLCs for which we do not (yet) have a preimage are now included in `get_claimable_balance` via a `Balance::MaybePreimageClaimableHTLC` (lightningdevkit#1673). * Probes that fail prior to being sent over their first hop are correctly failed with a `Event::ProbeFailed` rather than a `PaymentPathFailed` (lightningdevkit#1704). * Pending `Event::HTLCHandlingFailed`s are no longer lost on restart (lightningdevkit#1700). * HTLCs that fail prior to being sent over their first hop are now marked as retryable via `!PaymentPathFailed::payment_failed_permanently` (lightningdevkit#1702). * Dust HTLCs are now considered failed in the payment tracking logic after the commitment transaction confirms, allowing retry on restart (lightningdevkit#1691). * On machines with buggy "monotonic" clocks, LDK will no longer panic if time goes backwards (lightningdevkit#1692). Backwards Compatibility ======================= * The new `current_time` argument to `PeerManager` constructors must be set to a UNIX timestamp for upgraded nodes; new nodes may use a counter (lightningdevkit#1699). * `Balance::CounterpartyRevokedOutputClaimable` will never be generated for channels that were observed to go on-chain with LDK versions prior to 0.0.111 (lightningdevkit#1495). * `ChannelMonitor::get_counterparty_node_id` will return `None` for all channels opened on a version of LDK prior to 0.0.110 (lightningdevkit#1635). * Setting `their_channel_reserve_proportional_millionths` to any value other than the default will cause LDK versions prior to 0.0.104 to be unable to read the serialized `ChannelManager` (lightningdevkit#1619). Security ======== 0.0.111 fixes a denial-of-service vulnerability which is reachable from untrusted input in deployments accepting 0conf channels, or via a race-condition in deployments creating outbound 0conf channels. * LDK versions prior to 0.0.111 may spuriously panic when receiving a block if they are awaiting the construction of a funding transaction for a 0-conf channel (lightningdevkit#1711). 0-conf support was added in LDK version 0.0.107. In total, this release features 84 files changed, 6306 insertions, 1960 deletions in 121 commits from 11 authors, in alphabetical order: * Arik Sosman * Devrandom * Duncan Dean * Elias Rohrer * Gursharan Singh * Matt Corallo * NicolaLS * Valentine Wallace * Viktor Tigerström * jurvis * ok300
0.0.110 - 2022-07-26 API Updates =========== * `ChannelManager::send_probe` and `Score::probe_{failed,successful}` have been added to make probing more explicit, as well as new `Event::Probe{Failed,Successful}` events (lightningdevkit#1567). * `ProbabilisticScoringParameters::banned_nodes` has been renamed `manual_node_penalties` and changed to take msat penalties (lightningdevkit#1592). * Per-payment tracking of failed paths was added to enable configuration of `ProbabilisticScoringParameters::considered_impossible_penalty_msat` (lightningdevkit#1600) * `ProbabilisticScoringParameters::base_penalty_amount_multiplier_msat` was added to allow a penalty that is only amount-dependent (lightningdevkit#1617). * `ProbabilisticScoringParameters::amount_penalty_multiplier_msat` was renamed `liquidity_penalty_amount_multiplier_msat` (lightningdevkit#1617). * A new `Event::HTLCHandlingFailed` has been added which provides visibility into failures to forward/claim accepted HTLCs (lightningdevkit#1403). * Support has been added for DNS hostnames in the `NetAddress` type, see [BOLT PR lightningdevkit#911](lightning/bolts#911) (lightningdevkit#1553). * `GossipSync` now has `rapid`, `p2p`, and `none` constructors (lightningdevkit#1618). * `lightning-net-tokio` no longer requires types to be in `Arc`s (lightningdevkit#1623). * The `htlc_maximum_msat` field is now required in `ChannelUpdate` gossip messages. In tests this rejects < 1% of channels (lightningdevkit#1519). * `ReadOnlyNetworkGraph::{channel,node}` have been added to query for individual channel/node data, primarily for bindings users (lightningdevkit#1543). * `FeeEstimator` implementations are now wrapped internally to ensure values below 253 sats/kW are never used (lightningdevkit#1552). * Route selection no longer attempts to randomize path selection. This is unlikely to lead to a material change in the paths selected (lightningdevkit#1610). Bug Fixes ========= * Fixed a panic when deserializing `ChannelDetails` objects (lightningdevkit#1588). * When routing, channels are no longer fully saturated before MPP splits are generated, instead a configuration knob was added as `PaymentParameters::max_channel_saturation_power_of_half` (lightningdevkit#1605). * Fixed a panic which occurred in `ProbabilisticScorer` when wallclock time goes backwards across a restart (lightningdevkit#1603). Serialization Compatibility =========================== * All new fields are ignored by prior versions of LDK. All new fields are not present when reading objects serialized by prior versions of LDK. * Channel information written in the `NetworkGraph` which is missing `htlc_maximum_msat` may be dropped on deserialization (lightningdevkit#1519). * Similarly, node information written in the `NetworkGraph` which contains an invalid hostname may be dropped on deserialization (lightningdevkit#1519). In total, this release features 79 files changed, 2935 insertions, 1363 deletions in 52 commits from 9 authors, in alphabetical order: * Duncan Dean * Elias Rohrer * Jeffrey Czyz * Matt Corallo * Max Fang * Viktor Tigerström * Willem Van Lint * Wilmer Paulino * jurvis
0.0.109 - 2022-07-01 API Updates =========== * `ChannelManager::update_channel_config` has been added to allow the fields in `ChannelConfig` to be changed in a given channel after open (lightningdevkit#1527). * If we reconnect to a peer which proves we have a stale channel state, rather than force-closing we will instead panic to provide an opportunity to switch to the latest state and continue operating without channel loss (lightningdevkit#1564). * A `NodeAlias` struct has been added which handles string sanitization for node aliases via the `Display` trait (lightningdevkit#1544). * `ProbabilisticScoringParameters` now has a `banned_nodes` set which we will never route through during path finding (lightningdevkit#1550). * `ProbabilisticScoringParameters` now offers an `anti_probing_penalty_msat` option to prefer channels which afford better privacy when routing (lightningdevkit#1555). * `ProbabilisticScorer` now provides access to its estimated liquidity range for a given channel via `estimated_channel_liquidity_range` (lightningdevkit#1549). * Options which cannot be changed at runtime have been moved from `ChannelConfig` to `ChannelHandshakeConfig` (lightningdevkit#1529). * `find_route` takes `&NetworkGraph` instead of `ReadOnlyNetworkGraph (lightningdevkit#1583). * `ChannelDetails` now contains a copy of the current `ChannelConfig` (lightningdevkit#1527). * The `lightning-invoice` crate now optionally depends on `serde`, with `Invoice` implementing `serde::{Deserialize,Serialize}` if enabled (lightningdevkit#1548). * Several fields in `UserConfig` have been renamed for clarity (lightningdevkit#1540). Bug Fixes ========= * `find_route` no longer selects routes with more than `PaymentParameters::max_mpp_path_count` paths, and `ChannelManager::send_payment` no longer refuses to send along routes with more than ten paths (lightningdevkit#1526). * Fixed two cases where HTLCs pending at the time a counterparty broadcasts a revoked commitment transaction are considered resolved prior to their actual resolution on-chain, possibly passing the update to another channel (lightningdevkit#1486). * HTLCs which are relayed through LDK may now have a total expiry time two weeks in the future, up from one, reducing forwarding failures (lightningdevkit#1532). Serialization Compatibility =========================== * All new fields are ignored by prior versions of LDK. All new fields are not present when reading objects serialized by prior versions of LDK. * `ChannelConfig`'s serialization format has changed and is not compatible with any previous version of LDK. Attempts to read values written by a previous version of LDK will fail and attempts to read newly written objects using a previous version of LDK will fail. It is not expected that users are serializing `ChannelConfig` using the LDK serialization API, however, if a backward compatibility wrapper is required, please open an issue. Security ======== 0.0.109 fixes a denial-of-service vulnerability which is reachable from untrusted input in some application deployments. * Third parties which are allowed to open channels with an LDK-based node may fund a channel with a bogus and maliciously-crafted transaction which, when spent, can cause a panic in the channel's corresponding `ChannelMonitor`. Such a channel is never usable as it cannot be funded with a funding transaction which matches the required output script, allowing the `ChannelMonitor` for such channels to be safely purged as a workaround on previous versions of LDK. Thanks to Eugene Siegel for reporting this issue. In total, this release features 32 files changed, 1948 insertions, 532 deletions in 33 commits from 9 authors, in alphabetical order: * Antoine Riard * Daniel Granhão * Elias Rohrer * Jeffrey Czyz * Matt Corallo * Matt Faltyn * NicolaLS * Valentine Wallace * Wilmer Paulino
v0.0.108 Bug Fixes ========= * Fixed `lightning-background-processor` build in release mode. In total, this release features 9 files changed, 120 insertions, 74 deletions in 5 commits from 4 authors, in alphabetical order: * Elias Rohrer * Matt Corallo * Max Fang * Viktor Tigerström
0.0.107 - 2022-06-08 API Updates =========== * Channels larger than 16777215 sats (Wumbo!) are now supported and can be enabled for inbound channels using `ChannelHandshakeLimits::max_funding_satoshis` (lightningdevkit#1425). * Support for feature `option_zeroconf`, allowing immediate forwarding of payments after channel opening. This is configured for outbound channels using `ChannelHandshakeLimits::trust_own_funding_0conf` whereas `ChannelManager::accept_inbound_channel_from_trusted_peer_0conf` has to be used for accepting inbound channels (lightningdevkit#1401, lightningdevkit#1505). * `ChannelManager::claim_funds` no longer returns a `bool` to indicate success. Instead, an `Event::PaymentClaimed` is generated if the claim was successful. Likewise, `ChannelManager::fail_htlc_backwards` no longer has a return value (lightningdevkit#1434). * `lightning-rapid-gossip-sync` is a new crate for syncing gossip data from a server, primarily aimed at mobile devices (lightningdevkit#1155). * `RapidGossipSync` can be passed to `BackgroundProcessor` in order to persist the `NetworkGraph` and handle `NetworkUpdate`s during event handling (lightningdevkit#1433, lightningdevkit#1517). * `NetGraphMsgHandler` has been renamed to `P2PGossipSync`, the `network_graph` module has been renamed to `gossip`, and `NetworkUpdate::ChannelClosed` has been renamed `NetworkUpdate::ChannelFailure` (lightningdevkit#1159). * Added a `filtered_block_connected` method to `chain::Listen` and a default implementation of `block_connected` for those fetching filtered instead of full blocks (lightningdevkit#1453). * The `lightning-block-sync` crate's `BlockSource` trait methods now take `&self` instead of `&mut self` (lightningdevkit#1307). * `inbound_payment` module is now public to allow for creating invoices without a `ChannelManager` (lightningdevkit#1384). * `lightning-block-sync`'s `init` and `poll` modules support `&dyn BlockSource` which can be determined at runtime (lightningdevkit#1423). * `lightning-invoice` crate's `utils` now accept an expiration time (lightningdevkit#1422, lightningdevkit#1474). * `Event::PaymentForwarded` includes `prev_channel_id` and `next_channel_id` (lightningdevkit#1419, lightningdevkit#1475). * `chain::Watch::release_pending_monitor_events`' return type now associates `MonitorEvent`s with funding `OutPoints` (lightningdevkit#1475). * `lightning-background-processor` crate's `Persister` trait has been moved to `lightning` crate's `util::persist` module, which now has a general `KVStorePersister` trait. Blanket implementations of `Persister` and `chainmonitor::Persist` are given for types implementing `KVStorePersister`. ` lightning-persister`'s `FilesystemPersister` implements `KVStorePersister` (lightningdevkit#1417). * `ChannelDetails` and `ChannelCounterparty` include fields for HTLC minimum and maximum values (lightningdevkit#1378). * Added a `max_inbound_htlc_value_in_flight_percent_of_channel` field to `ChannelHandshakeConfig`, capping the total value of outstanding inbound HTLCs for a channel (lightningdevkit#1444). * `ProbabilisticScorer` is parameterized by a `Logger`, which it uses to log channel liquidity updates or lack thereof (lightningdevkit#1405). * `ChannelDetails` has an `outbound_htlc_limit_msat` field, which should be used in routing instead of `outbound_capacity_msat` (lightningdevkit#1435). * `ProbabilisticScorer`'s channel liquidities can be logged via `debug_log_liquidity_stats` (lightningdevkit#1460). * `BackgroundProcessor` now takes an optional `WriteableScore` which it will persist using the `Persister` trait's new `persist_scorer` method (lightningdevkit#1416). * Upgraded to `bitcoin` crate version 0.28.1 (lightningdevkit#1389). * `ShutdownScript::new_witness_program` now takes a `WitnessVersion` instead of a `NonZeroU8` (lightningdevkit#1389). * Channels will no longer be automatically force closed when the counterparty is disconnected due to incompatibility (lightningdevkit#1429). * `ChannelManager` methods for funding, accepting, and closing channels now take a `counterparty_node_id` parameter, which has also been added as a field to `Event::FundingGenerationReady` (lightningdevkit#1479, lightningdevkit#1485). * `InvoicePayer::new` now takes a `Retry` enum (replacing the `RetryAttempts` struct), which supports both attempt- and timeout-based retrying (lightningdevkit#1418). * `Score::channel_penalty_msat` takes a `ChannelUsage` struct, which contains the capacity as an `EffectiveCapacity` enum and any potential in-flight HTLC value, rather than a single `u64`. Used by `ProbabilisticScorer` for more accurate penalties (lightningdevkit#1456). * `build_route_from_hops` is a new function useful for constructing a `Route` given a specific list of public keys (lightningdevkit#1491). * `FundingLocked` message has been renamed `ChannelReady`, and related identifiers have been renamed accordingly (lightningdevkit#1506). * `core2::io` or `std::io` (depending on feature flags `no-std` or `std`) is exported as a `lightning::io` module (lightningdevkit#1504). * The deprecated `Scorer` has been removed in favor or `ProbabilisticScorer` (lightningdevkit#1512). Performance Improvements ======================== * `lightning-persister` crate's `FilesystemPersister` is faster by 15x (lightningdevkit#1404). * Log gossip query messages at `GOSSIP` instead of `TRACE` to avoid overwhelming default logging (lightningdevkit#1421). * `PeerManager` supports processing messages from different peers in parallel, and this is taken advantage of in gossip processing (lightningdevkit#1023). * Greatly reduced per-channel and per-node memory usage due to upgrade of `secp256k1` crate to 0.22.1 and `bitcoin` crate to 0.28.1 * Reduced per-peer memory usage in `PeerManager` (lightningdevkit#1472). Spec Compliance =============== * `find_route` now assumes variable-length onions by default for nodes where support for the feature is unknown (lightningdevkit#1414). * A `warn` message is now sent when receiving a `channel_reestablish` with an old commitment transaction number rather than immediately force-closing the channel (lightningdevkit#1430). * When a `channel_update` message is included in an onion error's `failuremsg`, its message type is now encoded. Reading such messages is also supported (lightningdevkit#1465). Bug Fixes ========= * Fixed a bug where crashing while persisting a `ChannelMonitorUpdate` for a part of a multi-path payment could cause loss of funds due to a partial payment claim on restart (lightningdevkit#1434). * `BackgroundProcessor` has been fixed to improve serialization reliability on slow systems which can avoid force-closes (lightningdevkit#1436). * `gossip_timestamp_filter` filters are now honored when sending gossip to peers (lightningdevkit#1452). * During a reorg, only force-close a channel if its funding transaction is unconfirmed rather than as it loses confirmations (lightningdevkit#1461). * Fixed a rare panic in `lightning-net-tokio` when fetching a peer's socket address after the connection has been closed caused by a race condition (lightningdevkit#1449). * `find_route` will no longer return routes that would cause onion construction to fail in some cases (lightningdevkit#1476). * `ProbabilisticScorer` uses more precision when approximating `log10` (lightningdevkit#1406). Serialization Compatibility =========================== * All above new events/fields are ignored by prior clients. All above new events/fields are not present when reading objects serialized by prior versions of the library. * `ChannelManager` serialization is no longer compatible with versions prior to 0.0.99 (lightningdevkit#1401). * Channels with `option_zeroconf` feature enabled (not required for 0-conf channel use) will be unreadable by versions prior to 0.0.107 (lightningdevkit#1401, lightningdevkit#1505). In total, this release features 96 files changed, 9304 insertions, 4503 deletions in 153 commits from 18 authors, in alphabetical order: * Arik Sosman * Devrandom * Duncan Dean * Elias Rohrer * Jeffrey Czyz * John Cantrell * John Corser * Jurvis Tan * Justin Moon * KaFai Choi * Mateusz Faltyn * Matt Corallo * Valentine Wallace * Viktor Tigerström * Vincenzo Palazzo * atalw * dependabot[bot] * shamardy
v0.0.106 API Updates =========== * Minimum supported rust version (MSRV) is now 1.41.1 (lightningdevkit#1310). * Lightning feature `option_scid_alias` is now supported and may be negotiated when opening a channel with a peer. It can be configured via `ChannelHandshakeConfig::negotiate_scid_privacy` and is off by default but will be on by default in the future (lightningdevkit#1351). * `OpenChannelRequest` now has a `channel_type` field indicating the features the channel will operate with and should be used to filter channels with undesirable features (lightningdevkit#1351). See the Serialization Compatibility section. * `ChannelManager` supports sending and receiving short channel id aliases in the `funding_locked` message. These are used when forwarding payments and constructing invoice route hints for improved privacy. `ChannelDetails` has a `inbound_scid_alias` field and a `get_inbound_payment_scid` method to support the latter (lightningdevkit#1311). * `DefaultRouter` and `find_route` take an additional random seed to improve privacy by adding a random CLTV expiry offset to each path's final hop. This helps obscure the intended recipient from adversarial intermediate hops (lightningdevkit#1286). The seed is also used to randomize candidate paths during route selection (lightningdevkit#1359). * The `lightning-block-sync` crate's `init::synchronize_listeners` method interface has been relaxed to support multithreaded environments (lightningdevkit#1349). * `ChannelManager::create_inbound_payment_for_hash`'s documentation has been corrected to remove the one-year restriction on `invoice_expiry_delta_secs`, which is only applicable to the deprecated `create_inbound_payment_legacy` and `create_inbound_payment_for_hash_legacy` methods (lightningdevkit#1341). * `Features` mutator methods now take `self` by reference instead of by value (lightningdevkit#1331). * The CLTV of the last hop in a path is now included when comparing against `RouteParameters::max_total_cltv_expiry_delta` (lightningdevkit#1358). * Invoice creation functions in `lightning-invoice` crate's `utils` module include versions that accept a description hash instead of only a description (lightningdevkit#1361). * `RoutingMessageHandler::sync_routing_table` has been renamed `peer_connected` (lightningdevkit#1368). * `MessageSendEvent::SendGossipTimestampFilter` has been added to indicate that a `gossip_timestamp_filter` should be sent (lightningdevkit#1368). * `PeerManager` takes an optional `NetAddress` in `new_outbound_connection` and `new_inbound_connection`, which is used to report back the remote address to the connecting peer in the `init` message (lightningdevkit#1326). * `ChannelManager::accept_inbound_channel` now takes a `user_channel_id`, which is used in a similar manner as in outbound channels. (lightningdevkit#1381). * `BackgroundProcessor` now persists `NetworkGraph` on a timer and upon shutdown as part of a new `Persister` trait, which also includes `ChannelManager` persistence (lightningdevkit#1376). * `ProbabilisticScoringParameters` now has a `base_penalty_msat` option, which default to 500 msats. It is applied at each hop to help avoid longer paths (lightningdevkit#1375). * `ProbabilisticScoringParameters::liquidity_penalty_multiplier_msat`'s default value is now 40,000 msats instead of 10,000 msats (lightningdevkit#1375). * The `lightning` crate has a `grind_signatures` feature used to produce signatures with low r-values for more predictable transaction weight. This feature is on by default (lightningdevkit#1388). * `ProbabilisticScoringParameters` now has a `amount_penalty_multiplier_msat` option, which is used to further penalize large amounts (lightningdevkit#1399). * `PhantomRouteHints`, `FixedPenaltyScorer`, and `ScoringParameters` now implement `Clone` (lightningdevkit#1346). Bug Fixes ========= * Fixed a compilation error in `ProbabilisticScorer` under `--feature=no-std` (lightningdevkit#1347). * Invoice creation functions in `lightning-invoice` crate's `utils` module filter invoice hints in order to limit the invoice size (lightningdevkit#1325). * Fixed a bug where a `funding_locked` message was delayed by a block if the funding transaction was confirmed while offline, depending on the ordering of `Confirm::transactions_confirmed` calls when brought back online (lightningdevkit#1363). * Fixed a bug in `NetGraphMsgHandler` where it didn't continue to receive gossip messages from peers after initial connection (lightningdevkit#1368, lightningdevkit#1382). * `ChannelManager::timer_tick_occurred` will now timeout a received multi-path payment (MPP) after three ticks if not received in full instead of waiting until near the HTLC timeout block(lightningdevkit#1353). * Fixed an issue with `find_route` causing it to be overly aggressive in using MPP over channels to the same first hop (lightningdevkit#1370). * Reduced time spent processing `channel_update` messages by checking signatures after checking if no newer messages have already been processed (lightningdevkit#1380). * Fixed a few issues in `find_route` which caused preferring paths with a higher cost (lightningdevkit#1398). * Fixed an issue in `ProbabilisticScorer` where a channel with not enough liquidity could still be used when retrying a failed payment if it was on a path with an overall lower cost (lightningdevkit#1399). Serialization Compatibility =========================== * Channels open with `option_scid_alias` negotiated will be incompatible with prior releases (lightningdevkit#1351). This may occur in the following cases: * Outbound channels when `ChannelHandshakeConfig::negotiate_scid_privacy` is enabled. * Inbound channels when automatically accepted from an `OpenChannel` message with a `channel_type` that has `ChannelTypeFeatures::supports_scid_privacy` return true. See `UserConfig::accept_inbound_channels`. * Inbound channels when manually accepted from an `OpenChannelRequest` with a `channel_type` that has `ChannelTypeFeatures::supports_scid_privacy` return true. See `UserConfig::manually_accept_inbound_channels`. In total, this release features 43 files changed, 4052 insertions, 1274 deletions in 75 commits from 11 authors, in alphabetical order: * Devrandom * Duncan Dean * Elias Rohrer * Jeffrey Czyz * Jurvis Tan * Luiz Parreira * Matt Corallo * Omar Shamardy * Viktor Tigerström * dependabot[bot] * psycho-pirate
PreviousNext