v0.0.103
API Updates
- This release is almost entirely focused on a new API in the
lightning-invoicecrate - theInvoicePayer.InvoicePayeris a
struct which takes a reference to aChannelManagerand 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
receiveEvents directly from theChannelManager, wrapping a
user-providedEventHandlerwhich it provides all unhandled events to
(#1059). get_routehas been renamedfind_route(#1059) and now takes a
RouteParametersstruct in replacement of a number of its long list of
arguments (#1134). ThePayeein theRouteParametersis stored in the
Routeobject returned and provided in theRouteParameterscontained in
Event::PaymentPathFailed(#1059).ChannelMonitors must now be persisted after calls that provide new block
data, prior toMonitorEvents being passed back toChannelManagerfor
processing. If you are using aChainMonitorthis is handled for you.
ThePersistAPI has been updated toOptionally take the
ChannelMonitorUpdateas persistence events that result from chain data no
longer have a corresponding update (#1108).routing::Scorenow has apayment_path_failedmethod which it can use to
learn which channels often fail payments. It is automatically called by
InvoicePayerfor failed payment paths (#1144).- The default
Scorerimplementation is now a type alias to a type generic
across different clocks and supports serialization to persist scoring data
across restarts (#1146). Event::PaymentSentnow includes the full fee which was spent across all
payment paths which were fulfilled or pending when the payment was fulfilled
(#1142).Event::PaymentSentandEvent::PaymentPathFailednow include the
PaymentIdwhich matches thePaymentIdreturned from
ChannelManager::send_paymentorInvoicePayer::pay_invoice(#1059).NetGraphMsgHandlernow takes aDerefto theNetworkGraph, allowing for
shared references to the graph data to make serialization and references to
the graph data in theInvoicePayer'sRoutersimpler (#1149).routing::Score::channel_penalty_msathas been updated to provide the
NodeIdof 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 theChannelMonitorwas persisted on disk), but the
ChannelManagerwas not persisted prior to shutdown/crash, no
Event::PaymentPathFailedevent 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
Routewas 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