Releases: lightningdevkit/rust-lightning
v0.0.111
"Saturated with Messages"
API Updates
- Support for relaying onion messages has been added via a new
OnionMessengerstruct when passed as theOnionMessageHandlerto 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-processorhas
a newprocess_events_asyncmethod which takes the place of a
BackgroundProcessorfor those using Rust's async (#1657). ChannelManager::get_persistable_update_futurehas been added to block on
a ChannelManager needing re-persistence in a Rust async environment (#1657).- The
Filter::register_outputreturn 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
additionalchain::Confirm::transactions_confirmedcalls (#1663). ChannelHandshakeConfig::their_channel_reserve_proportional_millionthshas
been added to allow configuring counterparty reserve values (#1619).KeysInterface::ecdhhas been added as an ECDH oracle (#1503, #1658).- The
rust-bitcoindependency has been updated 0.29 (#1658). - The
bitcoin_hashesdependency has been updated 0.11 (#1677). ChannelManager::broadcast_node_announcementhas been moved to
PeerManager(#1699).channel_andnode_announcements are now rebroadcast automatically to all
new peers which connect (#1699).{Init,Node}Featuressent to peers/broadcasted are now fetched via the
various*MessageHandlertraits, rather than hard-coded (#1701, #1688).Event::PaymentPathFailed::rejected_by_desthas been renamed
payment_failed_permanently(#1702).Invoicenow derives the stdHashtrait (#1575).{Signed,}RawInvoice::hashhave been renamedsignable_hash(#1714).chain::AccessErrornow derives the stdDebugtrait (#1709).ReadOnlyNetworkGraph::list_{channels,nodes}have been added largely for
users of downstream bindings (#1651).ChannelMonitor::get_counterparty_node_idis now available (#1635).
Bug Fixes
- The script compared with that returned from
chain::Accesswas 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 newBalance::CounterpartyRevokedOutputClaimable(#1495). - Inbound HTLCs for which we do not (yet) have a preimage are now included in
get_claimable_balancevia aBalance::MaybePreimageClaimableHTLC(#1673). - Probes that fail prior to being sent over their first hop are correctly
failed with aEvent::ProbeFailedrather than aPaymentPathFailed(#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_timeargument toPeerManagerconstructors must be set to
a UNIX timestamp for upgraded nodes; new nodes may use a counter (#1699). Balance::CounterpartyRevokedOutputClaimablewill 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_idwill returnNonefor all
channels opened on a version of LDK prior to 0.0.110 (#1635).- Setting
their_channel_reserve_proportional_millionthsto any value other
than the default will cause LDK versions prior to 0.0.104 to be unable to
read the serializedChannelManager(#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
API Updates
ChannelManager::send_probeandScore::probe_{failed,successful}have
been added to make probing more explicit, as well as new
Event::Probe{Failed,Successful}events (#1567).ProbabilisticScoringParameters::banned_nodeshas been renamed
manual_node_penaltiesand 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_msatwas
added to allow a penalty that is only amount-dependent (#1617).ProbabilisticScoringParameters::amount_penalty_multiplier_msatwas renamed
liquidity_penalty_amount_multiplier_msat(#1617).- A new
Event::HTLCHandlingFailedhas been added which provides visibility
into failures to forward/claim accepted HTLCs (#1403). - Support has been added for DNS hostnames in the
NetAddresstype, see
BOLT PR #911 (#1553). GossipSyncnow hasrapid,p2p, andnoneconstructors (#1618).lightning-net-tokiono longer requires types to be inArcs (#1623).- The
htlc_maximum_msatfield is now required inChannelUpdategossip
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).FeeEstimatorimplementations 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
ChannelDetailsobjects (#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
ProbabilisticScorerwhen 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
NetworkGraphwhich is missing
htlc_maximum_msatmay be dropped on deserialization (#1519). - Similarly, node information written in the
NetworkGraphwhich 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
API Updates
ChannelManager::update_channel_confighas been added to allow the fields
inChannelConfigto 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
NodeAliasstruct has been added which handles string sanitization for
node aliases via theDisplaytrait (#1544). ProbabilisticScoringParametersnow has abanned_nodesset which we will
never route through during path finding (#1550).ProbabilisticScoringParametersnow offers ananti_probing_penalty_msat
option to prefer channels which afford better privacy when routing (#1555).ProbabilisticScorernow provides access to its estimated liquidity range
for a given channel viaestimated_channel_liquidity_range(#1549).ChannelManager::force_close_channelhas been renamed
force_close_broadcasting_latest_txnand
force_close_without_broadcasting_txnhas been added (#1564).- Options which cannot be changed at runtime have been moved from
ChannelConfigtoChannelHandshakeConfig(#1529). find_routetakes&NetworkGraphinstead of `ReadOnlyNetworkGraph (#1583).ChannelDetailsnow contains a copy of the currentChannelConfig(#1527).- The
lightning-invoicecrate now optionally depends onserde, with
Invoiceimplementingserde::{Deserialize,Serialize}if enabled (#1548). - Several fields in
UserConfighave been renamed for clarity (#1540).
Bug Fixes
find_routeno longer selects routes with more than
PaymentParameters::max_mpp_path_countpaths, and
ChannelManager::send_paymentno 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
serializingChannelConfigusing 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 correspondingChannelMonitor.
Such a channel is never usable as it cannot be funded with a funding
transaction which matches the required output script, allowing the
ChannelMonitorfor 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-processorbuild 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
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
usingChannelHandshakeLimits::trust_own_funding_0confwhereas
ChannelManager::accept_inbound_channel_from_trusted_peer_0confhas to be
used for accepting inbound channels (#1401, #1505). ChannelManager::claim_fundsno longer returns aboolto indicate success.
Instead, anEvent::PaymentClaimedis generated if the claim was successful.
Likewise,ChannelManager::fail_htlc_backwardsno longer has a return value
(#1434).lightning-rapid-gossip-syncis a new crate for syncing gossip data from a
server, primarily aimed at mobile devices (#1155).RapidGossipSynccan be passed toBackgroundProcessorin order to persist
theNetworkGraphand handleNetworkUpdates during event handling (#1433,
#1517).NetGraphMsgHandlerhas been renamed toP2PGossipSync, thenetwork_graph
module has been renamed togossip, andNetworkUpdate::ChannelClosedhas
been renamedNetworkUpdate::ChannelFailure(#1159).- Added a
filtered_block_connectedmethod tochain::Listenand a default
implementation ofblock_connectedfor those fetching filtered instead of
full blocks (#1453). - The
lightning-block-synccrate'sBlockSourcetrait methods now take
&selfinstead of&mut self(#1307). inbound_paymentmodule is now public to allow for creating invoices without
aChannelManager(#1384).lightning-block-sync'sinitandpollmodules support&dyn BlockSource
which can be determined at runtime (#1423).lightning-invoicecrate'sutilsnow accept an expiration time (#1422,
#1474).Event::PaymentForwardedincludesprev_channel_idandnext_channel_id
(#1419, #1475).chain::Watch::release_pending_monitor_events' return type now associates
MonitorEvents with fundingOutPoints(#1475).lightning-background-processorcrate'sPersistertrait has been moved to
lightningcrate'sutil::persistmodule, which now has a general
KVStorePersistertrait. Blanket implementations ofPersisterand
chainmonitor::Persistare given for types implementingKVStorePersister.
lightning-persister'sFilesystemPersisterimplementsKVStorePersister
(#1417).ChannelDetailsandChannelCounterpartyinclude fields for HTLC minimum
and maximum values (#1378).- Added a
max_inbound_htlc_value_in_flight_percent_of_channelfield to
ChannelHandshakeConfig, capping the total value of outstanding inbound
HTLCs for a channel (#1444). ProbabilisticScoreris parameterized by aLogger, which it uses to log
channel liquidity updates or lack thereof (#1405).ChannelDetailshas anoutbound_htlc_limit_msatfield, which should be
used in routing instead ofoutbound_capacity_msat(#1435).ProbabilisticScorer's channel liquidities can be logged via
debug_log_liquidity_stats(#1460).BackgroundProcessornow takes an optionalWriteableScorewhich it will
persist using thePersistertrait's newpersist_scorermethod (#1416).- Upgraded to
bitcoincrate version 0.28.1 (#1389). ShutdownScript::new_witness_programnow takes aWitnessVersioninstead of
aNonZeroU8(#1389).- Channels will no longer be automatically force closed when the counterparty
is disconnected due to incompatibility (#1429). ChannelManagermethods for funding, accepting, and closing channels now
take acounterparty_node_idparameter, which has also been added as a field
toEvent::FundingGenerationReady(#1479, #1485).InvoicePayer::newnow takes aRetryenum (replacing theRetryAttempts
struct), which supports both attempt- and timeout-based retrying (#1418).Score::channel_penalty_msattakes aChannelUsagestruct, which contains
the capacity as anEffectiveCapacityenum and any potential in-flight HTLC
value, rather than a singleu64. Used byProbabilisticScorerfor more
accurate penalties (#1456).build_route_from_hopsis a new function useful for constructing aRoute
given a specific list of public keys (#1491).FundingLockedmessage has been renamedChannelReady, and related
identifiers have been renamed accordingly (#1506).core2::ioorstd::io(depending on feature flagsno-stdorstd) is
exported as alightning::iomodule (#1504).- The deprecated
Scorerhas been removed in favor orProbabilisticScorer
(#1512).
Performance Improvements
lightning-persistercrate'sFilesystemPersisteris faster by 15x (#1404).- Log gossip query messages at
GOSSIPinstead ofTRACEto avoid
overwhelming default logging (#1421). PeerManagersupports 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
secp256k1crate to 0.22.1 andbitcoincrate to 0.28.1 - Reduced per-peer memory usage in
PeerManager(#1472).
Spec Compliance
find_routenow assumes variable-length onions by default for nodes where
support for the feature is unknown (#1414).- A
warnmessage is now sent when receiving achannel_reestablishwith an
old commitment transaction number rather than immediately force-closing the
channel (#1430). - When a
channel_updatemessage is included in an onion error'sfailuremsg,
its message type is now encoded. Reading such messages is also supported
(#1465).
Bug Fixes
- Fixed a bug where crashing while persisting a
ChannelMonitorUpdatefor a
part of a multi-path payment could cause loss of funds due to a partial
payment claim on restart (#1434). BackgroundProcessorhas been fixed to improve serialization reliability on
slow systems which can avoid force-closes (#1436).gossip_timestamp_filterfilters 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-tokiowhen fetching a peer's socket
address after the connection has been closed caused by a race condition
(#1449). find_routewill no longer return routes that would cause onion construction
to fail in some cases (#1476).ProbabilisticScoreruses more precision when approximatinglog10(#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. ChannelManagerserialization is no longer compatible with versions prior to
0.0.99 (#1401).- Channels with
option_zeroconffeature 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
API Updates
- Minimum supported rust version (MSRV) is now 1.41.1 (#1310).
- Lightning feature
option_scid_aliasis now supported and may be negotiated
when opening a channel with a peer. It can be configured via
ChannelHandshakeConfig::negotiate_scid_privacyand is off by default but
will be on by default in the future (#1351). OpenChannelRequestnow has achannel_typefield indicating the features
the channel will operate with and should be used to filter channels with
undesirable features (#1351). See the Serialization Compatibility section.ChannelManagersupports sending and receiving short channel id aliases in
thefunding_lockedmessage. These are used when forwarding payments and
constructing invoice route hints for improved privacy.ChannelDetailshas a
inbound_scid_aliasfield and aget_inbound_payment_scidmethod to support
the latter (#1311).DefaultRouterandfind_routetake 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-synccrate'sinit::synchronize_listenersmethod
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 oninvoice_expiry_delta_secs,
which is only applicable to the deprecatedcreate_inbound_payment_legacy
andcreate_inbound_payment_for_hash_legacymethods (#1341).Featuresmutator methods now takeselfby 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-invoicecrate'sutilsmodule
include versions that accept a description hash instead of only a description
(#1361). RoutingMessageHandler::sync_routing_tablehas been renamedpeer_connected
(#1368).MessageSendEvent::SendGossipTimestampFilterhas been added to indicate that
agossip_timestamp_filtershould be sent (#1368).PeerManagertakes an optionalNetAddressinnew_outbound_connectionand
new_inbound_connection, which is used to report back the remote address to
the connecting peer in theinitmessage (#1326).ChannelManager::accept_inbound_channelnow takes auser_channel_id, which
is used in a similar manner as in outbound channels. (#1381).BackgroundProcessornow persistsNetworkGraphon a timer and upon
shutdown as part of a newPersistertrait, which also includes
ChannelManagerpersistence (#1376).ProbabilisticScoringParametersnow has abase_penalty_msatoption, 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
lightningcrate has agrind_signaturesfeature used to produce
signatures with low r-values for more predictable transaction weight. This
feature is on by default (#1388). ProbabilisticScoringParametersnow has aamount_penalty_multiplier_msat
option, which is used to further penalize large amounts (#1399).PhantomRouteHints,FixedPenaltyScorer, andScoringParametersnow
implementClone(#1346).
Bug Fixes
- Fixed a compilation error in
ProbabilisticScorerunder--feature=no-std
(#1347). - Invoice creation functions in
lightning-invoicecrate'sutilsmodule
filter invoice hints in order to limit the invoice size (#1325). - Fixed a bug where a
funding_lockedmessage was delayed by a block if the
funding transaction was confirmed while offline, depending on the ordering
ofConfirm::transactions_confirmedcalls when brought back online (#1363). - Fixed a bug in
NetGraphMsgHandlerwhere it didn't continue to receive
gossip messages from peers after initial connection (#1368, #1382). ChannelManager::timer_tick_occurredwill 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_routecausing it to be overly aggressive in using
MPP over channels to the same first hop (#1370). - Reduced time spent processing
channel_updatemessages by checking
signatures after checking if no newer messages have already been processed
(#1380). - Fixed a few issues in
find_routewhich caused preferring paths with a
higher cost (#1398). - Fixed an issue in
ProbabilisticScorerwhere 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_aliasnegotiated will be incompatible with
prior releases (#1351). This may occur in the following cases:- Outbound channels when
ChannelHandshakeConfig::negotiate_scid_privacyis
enabled. - Inbound channels when automatically accepted from an
OpenChannelmessage
with achannel_typethat hasChannelTypeFeatures::supports_scid_privacy
return true. SeeUserConfig::accept_inbound_channels. - Inbound channels when manually accepted from an
OpenChannelRequestwith a
channel_typethat hasChannelTypeFeatures::supports_scid_privacyreturn
true. SeeUserConfig::manually_accept_inbound_channels.
- Outbound channels when
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
API Updates
Phantom nodepayments are now supported, allowing receipt of a payment on
any one of multiple nodes without any coordination across the nodes being
required. See the newPhantomKeysManager's docs for more, as well as
requirements onKeysInterface::get_inbound_payment_key_materialand
lightning_invoice::utils::create_phantom_invoice(#1199).- In order to support phantom node payments, several
KeysInterfacemethods
now accept aRecipientparameter to select between the localnode_idand
a phantom-specific one. ProbabilisticScorer, aScorebased on learning the current balances of
channels in the network, was added. It attempts to better capture payment
success probability than the existingScorer, though may underperform on
nodes with low payment volume. We welcome feedback on performance (#1227).Score::channel_penalty_msatnow always takes the channel value, instead of
anOption(#1227).UserConfig::manually_accept_inbound_channelswas added which, when set,
generates a newEvent::OpenChannelRequest, which allows manual acceptance
or rejection of incoming channels on a per-channel basis (#1281).Payeehas been renamed toPaymentParameters(#1271).PaymentParametersnow has amax_total_cltv_expiry_deltafield. 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-invoicecrate 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-invoicenow supports parsing invoices with expiry times of more
than one year. This required changing the semantics ofExpiryTime(#1273).- The
CounterpartyCommitmentSecretsis now public, allowing external uses of
theBOLT 3secret storage scheme (#1299). - Several
Signmethods now receive HTLC preimages as proof of state
transition, see new documentation for more (#1251). KeysInterface::sign_invoicenow provides the HRP and other invoice data
separately to make it simpler for external signers to parse (#1272).Sign::sign_channel_announcementnow returns both the node's signature and
the per-channel signature.InMemorySignernow requires the node's secret
key in order to implement this (#1179).ChannelManagerdeserialization will now fail if theKeysInterfaceused
has a differentnode_idthan theChannelManagerexpects (#1250).- A new
ErrorActionvariant was added to sendwarningmessages (#1013). - Several references to
chain::Listenobjects inlightning-block-syncno
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 inBackgroundProcessor(#1269). - Now persist the
ChannelManagerprior toBackgroundProcessorstopping,
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 toBackgroundProcessorshutdown (#1253). - Fields in
ChannelHandshakeLimitsprovided via theoverride_configto
create_channelare 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_typefield toaccept_channelmessages we send, which
may avoid some future compatibility issues with other nodes (#1314). - Fixed a bug where, if a previous LDK run using
lightning-persistercrashed
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 causeChannelDetails::balance_msatto
underflow and be reported as large, or cause panics in debug mode (#1268). - Moved more instances of verbose gossip logging from the
Tracelevel to the
Gossiplevel (#1220). - Delayed
announcement_signaturesuntil 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
ChannelManagerdata written by versions prior to 0.0.105 will result
in preimages for HTLCs that were pending at startup to be missing in calls
toKeysInterfacemethods (#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_balancesspuriously 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
0.0.104
API Updates
- A
PaymentFailedevent is now provided to indicate a payment has failed
fully. This event is generated either after
ChannelManager::abandon_paymentis 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
PaymentPathSuccessfulevent has been added to ease passing success info
to a scorer, along with aScore::payment_path_successfulmethod to accept
such info (#1178, #1197). Score::channel_penalty_msathas additional arguments describing the
channel's capacity and the HTLC amount being sent over the channel (#1166).- A new log level
Gossiphas been added, which is used for verbose
information generated during network graph sync. Enabling the
max_level_tracefeature or ignoringGossiplog entries reduces log
growth during initial start up from many GiB to several MiB (#1145). - The
allow_wallclock_usefeature has been removed in favor of only using
thestdandno-stdfeatures (#1212). NetworkGraphcan 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 aNetGraphMsgHandleris passed to
BackgroundProcessor::start(#1212).InvoicePayer::pay_pubkeywas added to enable sending "keysend" payments to
supported recipients, using theInvoicePayerto handle retires (#1160).user_payment_idhas been removed fromPaymentPurpose, and
ChannelManager::create_inbound_payment{,_for_hash}(#1180).- Updated documentation for several
ChannelManagerfunctions to remove stale
references to panics which no longer occur (#1201). - The
ScoreandLockableScoreobjects have moved into the
routing::scoringmodule instead of being in theroutingmodule (#1166). - The
Timeparameter toScorerWithTimeis no longer longer exposed,
instead being fixed based on thestd/no-stdfeature (#1184). ChannelDetails::balance_msatwas 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_channelsflag is now provided,
removing the need to setmin_funding_satoshisto > 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::OnionV2parsing 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
InvoicePayerwhere paths may be retried after
the retry count has been exceeded. In this case the
Event::PaymentPathFailed::all_paths_failedfield is not a reliable payment
failure indicator. There was no acceptable alternative indicator,
Event::PaymentFailedas 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_outputsno 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
FeeEstimatorthat 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}_legacyare provided for
backwards compatibility (#1177). PaymentPurpose::InvoicePayment::user_payment_idwill 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
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
v0.0.102
API Updates
get_routenow takes aScoreas an argument.Scoreis queried during
the route-finding process, returning the absolute amounts which you are
willing to pay to avoid routing over a given channel. As a default, a
Scoreris provided which returns a constant amount, with a suggested
default of 500 msat. This translates to a willingness to pay up to 500 msat
in additional fees per hop in order to avoid additional hops (#1124).Event::PaymentPathFailednow contains ashort_channel_idfield which may
be filled in with a channel that can be "blamed" for the payment failure.
Payment retries should likely avoid the given channel for some time (#1077).PublicKeys inNetworkGraphhave been replaced with aNodeIdstruct
which contains only a simple[u8; 33], substantially improving
NetworkGraphdeserialization performance (#1107).ChainMonitor'sHashMapofChannelMonitors is now private, exposed via
Chainmonitor::get_monitorandChainMonitor::list_monitorsinstead
(#1112).- When an outbound channel is closed prior to the broadcasting of its funding
transaction, but after you call
ChannelManager::funding_transaction_generated, a new event type,
Event::DiscardFunding, is generated, informing you the transaction was not
broadcasted and that you can spend the same inputs again elsewhere (#1098). ChannelManager::create_channelnow returns the temporary channel ID which
may later appear inEvent::ChannelClosedorChannelDetailsprior to the
channel being funded (#1121).Event::PaymentSentnow contains the payment hash as well as the payment
preimage (#1062).ReadOnlyNetworkGraph::get_addressesnow returns ownedNetAddressrather
than references. As a side-effect this method is now exposed in foreign
language bindings (#1115).- The
PersistandChannelMonitorUpdateErrtypes have moved to the
lightning::chain::chainmonitorandlightning::chainmodules,
respectively (#1112). ChannelManager::send_paymentnow returns aPaymentIdwhich identifies a
payment (whether MPP or not) and can be used to retry the full payment or
MPP parts throughretry_payment(#1096). Note that doing so is currently
not crash safe, and you may find yourself sending twice. It is recommended
that you not use theretry_paymentAPI until the next release.
Bug Fixes
- Due to an earlier fix for the Lightning dust inflation vulnerability tracked
in CVE-2021-41591/CVE-2021-41592/CVE-2021-41593 in 0.0.100, we required
counterparties to accept a dust limit slightly lower than the dust limit now
required by other implementations. This appeared as, at least, latest lnd
always refusing to accept channels opened by LDK clients (#1065). - If there are multiple channels available to the same counterparty,
get_routewould only consider the channel listed last as available for
sending (#1100). Persistimplementations returning
ChannelMonitorUpdateErr::TemporaryFailurefromwatch_channelpreviously
resulted in theChannelMonitornot being stored at all, resulting in a
panic after monitor updating is complete (#1112).- If payments are pending awaiting forwarding at startup, an
Event::PendingHTLCsForwardableevent will always be provided. This ensures
user code callsChannelManager::process_pending_htlc_fowardseven if it
shut down while awaiting the batching timer during the previous run (#1076). - If a call to
ChannelManager::send_paymentfailed due to lack of
availability of funds locally, LDK would store the payment as pending
forever, with no ability to retry or fail it, leaking memory (#1109).
Serialization Compatibility
- All above new Events/fields are ignored by prior clients. All above new
Events/fields, except forEvent::PaymentSent::payment_hashare not present
when reading objects serialized by prior versions of the library.
In total, this release features 32 files changed, 2248 insertions, and 1483
deletions in 51 commits from 7 authors, in alphabetical order:
- 1nF0rmed
- Duncan Dean
- Elias Rohrer
- Galder Zamarreño
- Jeffrey Czyz
- Matt Corallo
- Valentine Wallace