API Updates
- A
PaymentFailed
event is now provided to indicate a payment has failed
fully. This event is generated either after
ChannelManager::abandon_payment
is called for a given payment, or the
payment times out, and there are no further pending HTLCs for the payment.
This event should be used to detect payment failure instead of
PaymentPathFailed::all_paths_failed
, unless no payment retries occur via
ChannelManager::retry_payment
(#1202). - Payment secrets are now generated deterministically using material from
the newKeysInterface::get_inbound_payment_key_material
(#1177). - A
PaymentPathSuccessful
event has been added to ease passing success info
to a scorer, along with aScore::payment_path_successful
method to accept
such info (#1178, #1197). Score::channel_penalty_msat
has additional arguments describing the
channel's capacity and the HTLC amount being sent over the channel (#1166).- A new log level
Gossip
has been added, which is used for verbose
information generated during network graph sync. Enabling the
max_level_trace
feature or ignoringGossip
log entries reduces log
growth during initial start up from many GiB to several MiB (#1145). - The
allow_wallclock_use
feature has been removed in favor of only using
thestd
andno-std
features (#1212). NetworkGraph
can now remove channels that we haven't heard updates for in
two weeks withNetworkGraph::remove_stale_channels{,with_time}
. The first
is called automatically if aNetGraphMsgHandler
is passed to
BackgroundProcessor::start
(#1212).InvoicePayer::pay_pubkey
was added to enable sending "keysend" payments to
supported recipients, using theInvoicePayer
to handle retires (#1160).user_payment_id
has been removed fromPaymentPurpose
, and
ChannelManager::create_inbound_payment{,_for_hash}
(#1180).- Updated documentation for several
ChannelManager
functions to remove stale
references to panics which no longer occur (#1201). - The
Score
andLockableScore
objects have moved into the
routing::scoring
module instead of being in therouting
module (#1166). - The
Time
parameter toScorerWithTime
is no longer longer exposed,
instead being fixed based on thestd
/no-std
feature (#1184). ChannelDetails::balance_msat
was added to fetch a channel's balance
without subtracting the reserve values, lining up with on-chain claim amounts
less on-chain fees (#1203).- An explicit
UserConfig::accept_inbound_channels
flag is now provided,
removing the need to setmin_funding_satoshis
to > 21 million BTC (#1173). - Inbound channels that fail to see the funding transaction confirm within
2016 blocks are automatically force-closed with
ClosureReason::FundingTimedOut
(#1083). - We now accept a channel_reserve value of 0 from counterparties, as it is
insecure for our counterparty but not us (#1163). NetAddress::OnionV2
parsing was removed as version 2 onion services are no
longer supported in modern Tor (#1204).- Generation and signing of anchor outputs is now supported in the
KeysInterface
, though no support for them exists in the channel itself (#1176)
Bug Fixes
- Fixed a race condition in
InvoicePayer
where paths may be retried after
the retry count has been exceeded. In this case the
Event::PaymentPathFailed::all_paths_failed
field is not a reliable payment
failure indicator. There was no acceptable alternative indicator,
Event::PaymentFailed
as been added to provide one (#1202). - Reduced the blocks-before-timeout we expect of outgoing HTLCs before
refusing to forward. This check was overly strict and resulted in refusing
to forward som HTLCs to a next hop that had a lower security threshold than
us (#1119). - LDK no longer attempt to update the channel fee for outbound channels when
we cannot afford the new fee. This could have caused force-closure by our
channel counterparty (#1054). - Fixed several bugs which may have prevented the reliable broadcast of our
own channel announcements and updates (#1169). - Fixed a rare bug which may have resulted in spurious route finding failures
when using last-hop hints and MPP with large value payments (#1168). KeysManager::spend_spendable_outputs
no longer adds a change output that
is below the dust threshold for non-standard change scripts (#1131).- Fixed a minor memory leak when attempting to send a payment that fails due
to an error when updating theChannelMonitor
(#1143). - Fixed a bug where a
FeeEstimator
that returns values rounded to the next
sat/vbyte may result in force-closures (#1208). - Handle MPP timeout HTLC error codes, instead of considering the recipient to
have sent an invalid error, removing them from the network graph (#1148)
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. - Payment secrets are now generated deterministically. This reduces the memory
footprint for inbound payments, however, newly-generated inbound payments
usingChannelManager::create_inbound_payment{,_for_hash}
will not be
receivable using versions prior to 0.0.104.
ChannelManager::create_inbound_payment{,_for_hash}_legacy
are provided for
backwards compatibility (#1177). PaymentPurpose::InvoicePayment::user_payment_id
will be 0 when reading
objects written with 0.0.104 when read by 0.0.103 and previous (#1180).
In total, this release features 51 files changed, 5356 insertions, 2238
deletions in 107 commits from 9 authors, in alphabetical order:
- Antoine Riard
- Conor Okus
- Devrandom
- Duncan Dean
- Elias Rohrer
- Jeffrey Czyz
- Ken Sedgwick
- Matt Corallo
- Valentine Wallace