API Updates
- This release is almost entirely focused on a new API in the
lightning-invoice
crate - theInvoicePayer
.InvoicePayer
is a
struct which takes a reference to aChannelManager
and aRouter
and retries payments as paths fail. It limits retries to a configurable
number, but is not serialized to disk and may retry additional times across
a serialization/load. In order to learn about failed payments, it must
receiveEvent
s directly from theChannelManager
, wrapping a
user-providedEventHandler
which it provides all unhandled events to
(#1059). get_route
has been renamedfind_route
(#1059) and now takes a
RouteParameters
struct in replacement of a number of its long list of
arguments (#1134). ThePayee
in theRouteParameters
is stored in the
Route
object returned and provided in theRouteParameters
contained in
Event::PaymentPathFailed
(#1059).ChannelMonitor
s must now be persisted after calls that provide new block
data, prior toMonitorEvent
s being passed back toChannelManager
for
processing. If you are using aChainMonitor
this is handled for you.
ThePersist
API has been updated toOption
ally take the
ChannelMonitorUpdate
as persistence events that result from chain data no
longer have a corresponding update (#1108).routing::Score
now has apayment_path_failed
method which it can use to
learn which channels often fail payments. It is automatically called by
InvoicePayer
for failed payment paths (#1144).- The default
Scorer
implementation is now a type alias to a type generic
across different clocks and supports serialization to persist scoring data
across restarts (#1146). Event::PaymentSent
now includes the full fee which was spent across all
payment paths which were fulfilled or pending when the payment was fulfilled
(#1142).Event::PaymentSent
andEvent::PaymentPathFailed
now include the
PaymentId
which matches thePaymentId
returned from
ChannelManager::send_payment
orInvoicePayer::pay_invoice
(#1059).NetGraphMsgHandler
now takes aDeref
to theNetworkGraph
, allowing for
shared references to the graph data to make serialization and references to
the graph data in theInvoicePayer
'sRouter
simpler (#1149).routing::Score::channel_penalty_msat
has been updated to provide the
NodeId
of both the source and destination nodes of a channel (#1133).
Bug Fixes
- Previous versions would often disconnect peers during initial graph sync due
to ping timeouts while processing large numbers of gossip messages. We now
delay disconnecting peers if we receive messages from them even if it takes
a while to receive a pong from them. Further, we avoid sending too many
gossip messages between pings to ensure we should always receive pongs in a
timely manner (#1137). - If a payment was sent, creating an outbound HTLC and sending it to our
counterparty (implying theChannelMonitor
was persisted on disk), but the
ChannelManager
was not persisted prior to shutdown/crash, no
Event::PaymentPathFailed
event was generated if the HTLC was eventually
failed on chain. Events are now consistent irrespective ofChannelManager
persistence or non-persistence (#1104).
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. - Payments for which a
Route
was generated using a previous version or for
which the payment was originally sent by a previous version of the library
will not be retried by anInvoicePayer
.
This release was singularly focused and some contributions by third parties
were delayed.
In total, this release features 38 files changed, 4414 insertions, and 969
deletions in 71 commits from 2 authors, in alphabetical order:
- Jeffrey Czyz
- Matt Corallo