Skip to content

Releases: lightningdevkit/rust-lightning

v0.0.114

04 Mar 01:57
af76fac
Compare
Choose a tag to compare

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 (#1812, #1916, #1929, #2007, etc).
  • Sign/BaseSign has been renamed ChannelSigner, with EcdsaChannelSigner
    split out in anticipation of future schnorr/taproot support (#1967).
  • The catch-all KeysInterface was split into EntropySource, NodeSigner,
    and SignerProvider. KeysManager implements all three (#1910, #1930).
  • KeysInterface::get_node_secret is now KeysManager::get_node_secret_key
    and is no longer required for external signers (#1951, #2070).
  • A lightning-transaction-sync crate has been added which implements keeping
    LDK in sync with the chain via an esplora server (#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 (#1996).
  • ChainAccess::get_utxo (now UtxoAccess) can now be resolved async (#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 (#1927, #1908, #1926).
  • A lightning-custom-message crate has been added to make combining multiple
    custom messages into one enum/handler easier (#1832).
  • Event::PaymentPathFailure is now generated for failure to send an HTLC
    over the first hop on our local channel (#2014, #2043).
  • lightning-net-tokio no longer requires an Arc on PeerManager (#1968).
  • ChannelManager::list_recent_payments was added (#1873).
  • lightning-background-processor std is now optional in async mode (#1962).
  • create_phantom_invoice can now be used in no-std (#1985).
  • The required final CLTV delta on inbound payments is now configurable (#1878)
  • bitcoind RPC error code and message are now surfaced in block-sync (#2057).
  • Get historical_estimated_channel_liquidity_probabilities was added (#1961).
  • ChannelManager::fail_htlc_backwards_with_reason was added (#1948).
  • Macros which implement serialization using TLVs or straight writing of struct
    fields are now public (#1823, #1976, #1977).

Backwards Compatibility

  • Any inbound payments with a custom final CLTV delta will be rejected by LDK
    if you downgrade prior to receipt (#1878).
  • Event::PaymentPathFailed::network_update will always be None if an
    0.0.114-generated event is read by a prior version of LDK (#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 (#2043).

Performance Improvements

  • Channel data is now stored per-peer and channel updates across multiple
    peers can be operated on simultaneously (#1507).
  • Routefinding is roughly 1.5x faster (#1799).
  • Deserializing a NetworkGraph is roughly 6x faster (#2016).
  • Memory usage for a NetworkGraph has been reduced substantially (#2040).
  • KeysInterface::get_secure_random_bytes is roughly 200x faster (#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 (#2048).
  • Fixed spurious rejections of rapid gossip sync data when the graph has been
    updated by other means between gossip syncs (#2046).
  • Fixed a panic in KeysManager when the high bit of starting_time_nanos
    is set (#1935).
  • Resolved an issue where the ChannelManager::get_persistable_update_future
    future would fail to wake until a second notification occurs (#2064).
  • Resolved a memory leak when using ChannelManager::send_probe (#2037).
  • Fixed a deadlock on some platforms at least when using async ChannelMonitor
    updating (#2006).
  • Removed debug-only assertions which were reachable in threaded code (#1964).
  • In some cases when payment sending fails on our local channel retries no
    longer take the same path and thus never succeed (#2014).
  • Retries for spontaneous payments have been fixed (#2002).
  • Return an Err if lightning-persister fails to read the directory listing
    rather than panicing (#1943).
  • peer_disconnected will now never be called without peer_connected (#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 (#1988).
  • A second channel_ready message received immediately after the first could
    lead to a spurious panic (#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 (#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

v0.0.113

16 Dec 17:00
f6a9382
Compare
Choose a tag to compare

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 (#1761, #1826).
  • HTLCs bound for SCIDs from ChannelManager::get_intercept_scid are now
    intercepted and can be forwarded manually over any channel (#1835, #1893).
  • Confirm::get_relevant_txids now returns a BlockHash, expanding the set
    of cases where transaction_unconfirmed must be called, see docs (#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 (#1761).
  • ChannelManager::abandon_payment docs were updated to note that the payment
    may return to pending after a restart if no persistence occurs (#1907).
  • Event::PaymentReceived has been renamed Event::PaymentClaimable (#1891).
  • Event handling is now optionally async for Rust users (#1787).
  • user_channel_id is now a u128 and random for inbound channels (#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 (#1743).
  • NetworkGraph now prunes channels where either node is offline for 2 weeks
    and refuses to accept re-announcements of pruned channels (#1735).
  • Onion messages are now read in CustomOnionMessageHandler rather than via
    MaybeReadableArgs (#1809).
  • Added a new util to generate an invoice with a custom hash (#1894) -
    create_invoice_from_channelmanager_and_duration_since_epoch_with_payment_hash
  • Signers are now by default re-derived using KeysInterface's new
    derive_channel_signer rather than read_chan_signer (#1867).
  • Confirm::transactions_confirmed is now idempotent (#1861).
  • ChannelManager::compute_inflight_htlcs has been added to fetch in-flight
    HTLCs for scoring. Note that InvoicePayer does this for you (#1830).
  • Added PaymentClaimable::via_channel_id (#1856).
  • Added the node_id (phantom or regular) to payment events (#1766).
  • Added the funding transaction confirmations to ChannelDetails (#1856).
  • BlindedRoute has been renamed BlindedPath (#1918).
  • Support for the BOLT 4 "legacy" onion format has been removed, in line with
    its removal in the spec and vanishingly rare use (#1413).
  • ChainMonitor::list_pending_monitor_updates was added (#1834).
  • Signing for non-zero-fee anchor commitments is supported again (#1828).
  • Several helpers for transaction matching and generation are now pub (#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 (#1857).
  • Avoid incorrectly assigning a lower-bound on channel liquidity when routing
    fails due to a closed channel earlier in the path (#1817).
  • If a counterparty increases the channel fee, but not enough per our own fee
    estimator, we no longer force-close the channel (#1852).
  • Several bugs in the lightning-background-processor future feature were
    fixed, including requirements doc corrections (#1843, #1845, #1851).
  • Some failure messages sent back when failing an HTLC were corrected (#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 (#1833).
  • Sending onion messages to a blinded path in which we're the introduction
    node no longer fails (#1791).

Backwards Compatibility

  • No ChannelReady events will be generated for previously existing channels,
    including those which become ready after upgrading to 0.0.113 (#1743).
  • Once UserConfig::accept_intercept_htlcs is set, downgrades to LDK versions
    prior to 0.0.113 are not supported (#1835).
  • Existing payments may see a PaymentClaimable::user_channel_id of 0 (#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 (#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

v0.0.112

25 Oct 21:41
3b2f694
Compare
Choose a tag to compare

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 (#1106).
  • ChannelMonitor persistence failure no longer automatically broadcasts the
    latest commitment transaction. See the
    ChannelMonitorUpdateStatus::PermanentFailure docs for more info (#1106).
  • *Features::known has been replaced with individual
    *MessageHandler::provided_*_features methods (#1707).
  • OnionMessenger now takes a CustomOnionMessageHandler implementation,
    allowing you to send and receive custom onion messages (#1748).
  • ProbabilisticScorer now tracks the historical distribution of liquidity
    estimates for channels. See new historical_* parameters in
    ProbabilisticScoringParameters for more details (#1625).
  • lightning-block-sync's BlockSource trait now supports BIP 157/158
    filtering clients by returning only header data for some blocks (#1706).
  • lightning-invoice's Router trait now accepts an InFlightHtlcs to
    ensure we do not over-use a remote channel's funds during routing (#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 (#1649).
  • The lightning-rapid-gossip-sync crate now supports no-std (#1708).
  • The default ProbabilisticScoringParameters::liquidity_offset_half_life has
    been increased to six hours from one (#1754).
  • All commitment transaction building logic for anchor outputs now assumes the
    no-HTLC-tx-fee variant (#1685).
  • A number of missing Eq implementations were added (#1763).

Bug Fixes

  • lightning-background-processor now builds without error with the futures
    feature (#1744).
  • ChannelManager::get_persistable_update_future's returned Future has been
    corrected to not fail to be awoken in some cases (#1758).
  • Asynchronously performing the initial ChannelMonitor persistence is now
    safe (#1678).
  • Redundantly applying rapid gossip sync updates no longer Errs (#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 (#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

v0.0.111

13 Sep 00:34
4ae65e8
Compare
Choose a tag to compare

"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
    (#1503, #1650, #1652, #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 (#1604. #1660, #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 (#1657).
  • ChannelManager::get_persistable_update_future has been added to block on
    a ChannelManager needing re-persistence in a Rust async environment (#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 (#1663).
  • ChannelHandshakeConfig::their_channel_reserve_proportional_millionths has
    been added to allow configuring counterparty reserve values (#1619).
  • KeysInterface::ecdh has been added as an ECDH oracle (#1503, #1658).
  • The rust-bitcoin dependency has been updated 0.29 (#1658).
  • The bitcoin_hashes dependency has been updated 0.11 (#1677).
  • ChannelManager::broadcast_node_announcement has been moved to
    PeerManager (#1699).
  • channel_ and node_announcements are now rebroadcast automatically to all
    new peers which connect (#1699).
  • {Init,Node}Features sent to peers/broadcasted are now fetched via the
    various *MessageHandler traits, rather than hard-coded (#1701, #1688).
  • Event::PaymentPathFailed::rejected_by_dest has been renamed
    payment_failed_permanently (#1702).
  • Invoice now derives the std Hash trait (#1575).
  • {Signed,}RawInvoice::hash have been renamed signable_hash (#1714).
  • chain::AccessError now derives the std Debug trait (#1709).
  • ReadOnlyNetworkGraph::list_{channels,nodes} have been added largely for
    users of downstream bindings (#1651).
  • ChannelMonitor::get_counterparty_node_id is now available (#1635).

Bug Fixes

  • The script compared with that returned from chain::Access was incorrect
    ~half of the time, causing spurious gossip rejection (#1666).
  • Pending in-flight HTLCs are now considered when calculating new routes,
    ensuring, e.g. MPP retries do not take known-saturated paths (#1643).
  • Counterparty-revoked outputs are now included in get_claimable_balance
    output via a new Balance::CounterpartyRevokedOutputClaimable (#1495).
  • Inbound HTLCs for which we do not (yet) have a preimage are now included in
    get_claimable_balance via a Balance::MaybePreimageClaimableHTLC (#1673).
  • Probes that fail prior to being sent over their first hop are correctly
    failed with a Event::ProbeFailed rather than a PaymentPathFailed (#1704).
  • Pending Event::HTLCHandlingFaileds are no longer lost on restart (#1700).
  • HTLCs that fail prior to being sent over their first hop are now marked as
    retryable via !PaymentPathFailed::payment_failed_permanently (#1702).
  • Dust HTLCs are now considered failed in the payment tracking logic after the
    commitment transaction confirms, allowing retry on restart (#1691).
  • On machines with buggy "monotonic" clocks, LDK will no longer panic if time
    goes backwards (#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 (#1699).
  • Balance::CounterpartyRevokedOutputClaimable will never be generated for
    channels that were observed to go on-chain with LDK versions prior to
    0.0.111 (#1495).
  • ChannelMonitor::get_counterparty_node_id will return None for all
    channels opened on a version of LDK prior to 0.0.110 (#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 (#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 (#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

v0.0.110

26 Jul 23:43
36bffb5
Compare
Choose a tag to compare

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 (#1567).
  • ProbabilisticScoringParameters::banned_nodes has been renamed
    manual_node_penalties and changed to take msat penalties (#1592).
  • Per-payment tracking of failed paths was added to enable configuration of
    ProbabilisticScoringParameters::considered_impossible_penalty_msat (#1600)
  • ProbabilisticScoringParameters::base_penalty_amount_multiplier_msat was
    added to allow a penalty that is only amount-dependent (#1617).
  • ProbabilisticScoringParameters::amount_penalty_multiplier_msat was renamed
    liquidity_penalty_amount_multiplier_msat (#1617).
  • A new Event::HTLCHandlingFailed has been added which provides visibility
    into failures to forward/claim accepted HTLCs (#1403).
  • Support has been added for DNS hostnames in the NetAddress type, see
    BOLT PR #911 (#1553).
  • GossipSync now has rapid, p2p, and none constructors (#1618).
  • lightning-net-tokio no longer requires types to be in Arcs (#1623).
  • The htlc_maximum_msat field is now required in ChannelUpdate gossip
    messages. In tests this rejects < 1% of channels (#1519).
  • ReadOnlyNetworkGraph::{channel,node} have been added to query for
    individual channel/node data, primarily for bindings users (#1543).
  • FeeEstimator implementations are now wrapped internally to ensure values
    below 253 sats/kW are never used (#1552).
  • Route selection no longer attempts to randomize path selection. This is
    unlikely to lead to a material change in the paths selected (#1610).

Bug Fixes

  • Fixed a panic when deserializing ChannelDetails objects (#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 (#1605).
  • Fixed a panic which occurred in ProbabilisticScorer when wallclock time
    goes backwards across a restart (#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 (#1519).
  • Similarly, node information written in the NetworkGraph which contains an
    invalid hostname may be dropped on deserialization (#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

01 Jul 17:40
f3d5b94
Compare
Choose a tag to compare

API Updates

  • ChannelManager::update_channel_config has been added to allow the fields
    in ChannelConfig to be changed in a given channel after open (#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 (#1564).
  • A NodeAlias struct has been added which handles string sanitization for
    node aliases via the Display trait (#1544).
  • ProbabilisticScoringParameters now has a banned_nodes set which we will
    never route through during path finding (#1550).
  • ProbabilisticScoringParameters now offers an anti_probing_penalty_msat
    option to prefer channels which afford better privacy when routing (#1555).
  • ProbabilisticScorer now provides access to its estimated liquidity range
    for a given channel via estimated_channel_liquidity_range (#1549).
  • ChannelManager::force_close_channel has been renamed
    force_close_broadcasting_latest_txn and
    force_close_without_broadcasting_txn has been added (#1564).
  • Options which cannot be changed at runtime have been moved from
    ChannelConfig to ChannelHandshakeConfig (#1529).
  • find_route takes &NetworkGraph instead of `ReadOnlyNetworkGraph (#1583).
  • ChannelDetails now contains a copy of the current ChannelConfig (#1527).
  • The lightning-invoice crate now optionally depends on serde, with
    Invoice implementing serde::{Deserialize,Serialize} if enabled (#1548).
  • Several fields in UserConfig have been renamed for clarity (#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 (#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 (#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 (#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

10 Jun 16:49
716539e
Compare
Choose a tag to compare

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

v0.0.107

08 Jun 23:56
5c788a0
Compare
Choose a tag to compare

0.0.107

API Updates

  • Channels larger than 16777215 sats (Wumbo!) are now supported and can be
    enabled for inbound channels using
    ChannelHandshakeLimits::max_funding_satoshis (#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 (#1401, #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
    (#1434).
  • lightning-rapid-gossip-sync is a new crate for syncing gossip data from a
    server, primarily aimed at mobile devices (#1155).
  • RapidGossipSync can be passed to BackgroundProcessor in order to persist
    the NetworkGraph and handle NetworkUpdates during event handling (#1433,
    #1517).
  • NetGraphMsgHandler has been renamed to P2PGossipSync, the network_graph
    module has been renamed to gossip, and NetworkUpdate::ChannelClosed has
    been renamed NetworkUpdate::ChannelFailure (#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 (#1453).
  • The lightning-block-sync crate's BlockSource trait methods now take
    &self instead of &mut self (#1307).
  • inbound_payment module is now public to allow for creating invoices without
    a ChannelManager (#1384).
  • lightning-block-sync's init and poll modules support &dyn BlockSource
    which can be determined at runtime (#1423).
  • lightning-invoice crate's utils now accept an expiration time (#1422,
    #1474).
  • Event::PaymentForwarded includes prev_channel_id and next_channel_id
    (#1419, #1475).
  • chain::Watch::release_pending_monitor_events' return type now associates
    MonitorEvents with funding OutPoints (#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
    (#1417).
  • ChannelDetails and ChannelCounterparty include fields for HTLC minimum
    and maximum values (#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 (#1444).
  • ProbabilisticScorer is parameterized by a Logger, which it uses to log
    channel liquidity updates or lack thereof (#1405).
  • ChannelDetails has an outbound_htlc_limit_msat field, which should be
    used in routing instead of outbound_capacity_msat (#1435).
  • ProbabilisticScorer's channel liquidities can be logged via
    debug_log_liquidity_stats (#1460).
  • BackgroundProcessor now takes an optional WriteableScore which it will
    persist using the Persister trait's new persist_scorer method (#1416).
  • Upgraded to bitcoin crate version 0.28.1 (#1389).
  • ShutdownScript::new_witness_program now takes a WitnessVersion instead of
    a NonZeroU8 (#1389).
  • Channels will no longer be automatically force closed when the counterparty
    is disconnected due to incompatibility (#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 (#1479, #1485).
  • InvoicePayer::new now takes a Retry enum (replacing the RetryAttempts
    struct), which supports both attempt- and timeout-based retrying (#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 (#1456).
  • build_route_from_hops is a new function useful for constructing a Route
    given a specific list of public keys (#1491).
  • FundingLocked message has been renamed ChannelReady, and related
    identifiers have been renamed accordingly (#1506).
  • core2::io or std::io (depending on feature flags no-std or std) is
    exported as a lightning::io module (#1504).
  • The deprecated Scorer has been removed in favor or ProbabilisticScorer
    (#1512).

Performance Improvements

  • lightning-persister crate's FilesystemPersister is faster by 15x (#1404).
  • Log gossip query messages at GOSSIP instead of TRACE to avoid
    overwhelming default logging (#1421).
  • PeerManager supports processing messages from different peers in parallel,
    and this is taken advantage of in gossip processing (#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 (#1472).

Spec Compliance

  • find_route now assumes variable-length onions by default for nodes where
    support for the feature is unknown (#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 (#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
    (#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 (#1434).
  • BackgroundProcessor has been fixed to improve serialization reliability on
    slow systems which can avoid force-closes (#1436).
  • gossip_timestamp_filter filters are now honored when sending gossip to
    peers (#1452).
  • During a reorg, only force-close a channel if its funding transaction is
    unconfirmed rather than as it loses confirmations (#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
    (#1449).
  • find_route will no longer return routes that would cause onion construction
    to fail in some cases (#1476).
  • ProbabilisticScorer uses more precision when approximating log10 (#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 (#1401).
  • Channels with option_zeroconf feature enabled (not required for 0-conf
    channel use) will be unreadable by versions prior to 0.0.107 (#1401, #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

03 Apr 16:35
0a0f87c
Compare
Choose a tag to compare

API Updates

  • Minimum supported rust version (MSRV) is now 1.41.1 (#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 (#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 (#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 (#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
    (#1286). The seed is also used to randomize candidate paths during route
    selection (#1359).
  • The lightning-block-sync crate's init::synchronize_listeners method
    interface has been relaxed to support multithreaded environments (#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 (#1341).
  • Features mutator methods now take self by reference instead of by value
    (#1331).
  • The CLTV of the last hop in a path is now included when comparing against
    RouteParameters::max_total_cltv_expiry_delta (#1358).
  • Invoice creation functions in lightning-invoice crate's utils module
    include versions that accept a description hash instead of only a description
    (#1361).
  • RoutingMessageHandler::sync_routing_table has been renamed peer_connected
    (#1368).
  • MessageSendEvent::SendGossipTimestampFilter has been added to indicate that
    a gossip_timestamp_filter should be sent (#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 (#1326).
  • ChannelManager::accept_inbound_channel now takes a user_channel_id, which
    is used in a similar manner as in outbound channels. (#1381).
  • BackgroundProcessor now persists NetworkGraph on a timer and upon
    shutdown as part of a new Persister trait, which also includes
    ChannelManager persistence (#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
    (#1375).
  • ProbabilisticScoringParameters::liquidity_penalty_multiplier_msat's default
    value is now 40,000 msats instead of 10,000 msats (#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 (#1388).
  • ProbabilisticScoringParameters now has a amount_penalty_multiplier_msat
    option, which is used to further penalize large amounts (#1399).
  • PhantomRouteHints, FixedPenaltyScorer, and ScoringParameters now
    implement Clone (#1346).

Bug Fixes

  • Fixed a compilation error in ProbabilisticScorer under --feature=no-std
    (#1347).
  • Invoice creation functions in lightning-invoice crate's utils module
    filter invoice hints in order to limit the invoice size (#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 (#1363).
  • Fixed a bug in NetGraphMsgHandler where it didn't continue to receive
    gossip messages from peers after initial connection (#1368, #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(#1353).
  • Fixed an issue with find_route causing it to be overly aggressive in using
    MPP over channels to the same first hop (#1370).
  • Reduced time spent processing channel_update messages by checking
    signatures after checking if no newer messages have already been processed
    (#1380).
  • Fixed a few issues in find_route which caused preferring paths with a
    higher cost (#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 (#1399).

Serialization Compatibility

  • Channels open with option_scid_alias negotiated will be incompatible with
    prior releases (#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

v0.0.105

01 Mar 04:15
6259e7a
Compare
Choose a tag to compare

API Updates

  • Phantom node payments are now supported, allowing receipt of a payment on
    any one of multiple nodes without any coordination across the nodes being
    required. See the new PhantomKeysManager's docs for more, as well as
    requirements on KeysInterface::get_inbound_payment_key_material and
    lightning_invoice::utils::create_phantom_invoice (#1199).
  • In order to support phantom node payments, several KeysInterface methods
    now accept a Recipient parameter to select between the local node_id and
    a phantom-specific one.
  • ProbabilisticScorer, a Score based on learning the current balances of
    channels in the network, was added. It attempts to better capture payment
    success probability than the existing Scorer, though may underperform on
    nodes with low payment volume. We welcome feedback on performance (#1227).
  • Score::channel_penalty_msat now always takes the channel value, instead of
    an Option (#1227).
  • UserConfig::manually_accept_inbound_channels was added which, when set,
    generates a new Event::OpenChannelRequest, which allows manual acceptance
    or rejection of incoming channels on a per-channel basis (#1281).
  • Payee has been renamed to PaymentParameters (#1271).
  • PaymentParameters now has a max_total_cltv_expiry_delta field. This
    defaults to 1008 and limits the maximum amount of time an HTLC can be pending
    before it will either fail or be claimed (#1234).
  • The lightning-invoice crate now supports no-std environments. This required
    numerous API changes around timestamp handling and std+no-std versions of
    several methods that previously assumed knowledge of the time (#1223, #1230).
  • lightning-invoice now supports parsing invoices with expiry times of more
    than one year. This required changing the semantics of ExpiryTime (#1273).
  • The CounterpartyCommitmentSecrets is now public, allowing external uses of
    the BOLT 3 secret storage scheme (#1299).
  • Several Sign methods now receive HTLC preimages as proof of state
    transition, see new documentation for more (#1251).
  • KeysInterface::sign_invoice now provides the HRP and other invoice data
    separately to make it simpler for external signers to parse (#1272).
  • Sign::sign_channel_announcement now returns both the node's signature and
    the per-channel signature. InMemorySigner now requires the node's secret
    key in order to implement this (#1179).
  • ChannelManager deserialization will now fail if the KeysInterface used
    has a different node_id than the ChannelManager expects (#1250).
  • A new ErrorAction variant was added to send warning messages (#1013).
  • Several references to chain::Listen objects in lightning-block-sync no
    longer require a mutable reference (#1304).

Bug Fixes

  • Fixed a regression introduced in 0.0.104 where ChannelManager's internal
    locks could have an order violation leading to a deadlock (#1238).
  • Fixed cases where slow code (including user I/O) could cause us to
    disconnect peers with ping timeouts in BackgroundProcessor (#1269).
  • Now persist the ChannelManager prior to BackgroundProcessor stopping,
    preventing race conditions where channels are closed on startup even with a
    clean shutdown. This requires that users stop network processing and
    disconnect peers prior to BackgroundProcessor shutdown (#1253).
  • Fields in ChannelHandshakeLimits provided via the override_config to
    create_channel are now applied instead of the default config (#1292).
  • Fixed the generation of documentation on docs.rs to include API surfaces
    which are hidden behind feature flags (#1303).
  • Added the channel_type field to accept_channel messages we send, which
    may avoid some future compatibility issues with other nodes (#1314).
  • Fixed a bug where, if a previous LDK run using lightning-persister crashed
    while persisting updated data, we may have failed to initialize (#1332).
  • Fixed a rare bug where having both pending inbound and outbound HTLCs on a
    just-opened inbound channel could cause ChannelDetails::balance_msat to
    underflow and be reported as large, or cause panics in debug mode (#1268).
  • Moved more instances of verbose gossip logging from the Trace level to the
    Gossip level (#1220).
  • Delayed announcement_signatures until the channel has six confirmations,
    slightly improving propagation of channel announcements (#1179).
  • Several fixes in script and transaction weight calculations when anchor
    outputs are enabled (#1229).

Serialization Compatibility

  • Using ChannelManager data written by versions prior to 0.0.105 will result
    in preimages for HTLCs that were pending at startup to be missing in calls
    to KeysInterface methods (#1251).
  • Any phantom invoice payments received on a node that is not upgraded to
    0.0.105 will fail with an "unknown channel" error. Further, downgrading to
    0.0.104 or before and then upgrading again will invalidate existing phantom
    SCIDs which may be included in invoices (#1199).

Security

0.0.105 fixes two denial-of-service vulnerabilities which may be reachable from
untrusted input in certain application designs.

  • Route calculation spuriously panics when a routing decision is made for a
    path where the second-to-last hop is a private channel, included due to a
    multi-hop route hint in an invoice.
  • ChannelMonitor::get_claimable_balances spuriously panics in some scenarios
    when the LDK application's local commitment transaction is confirmed while
    HTLCs are still pending resolution.

In total, this release features 109 files changed, 7270 insertions, 2131
deletions in 108 commits from 15 authors, in alphabetical order:

  • Conor Okus
  • Devrandom
  • Elias Rohrer
  • Jeffrey Czyz
  • Jurvis Tan
  • Ken Sedgwick
  • Matt Corallo
  • Naveen
  • Tibo-lg
  • Valentine Wallace
  • Viktor Tigerström
  • dependabot[bot]
  • hackerrdave
  • naveen
  • vss96