Releases: lightningdevkit/rust-lightning
v0.0.114
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 simplifiedRouter
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 renamedChannelSigner
, withEcdsaChannelSigner
split out in anticipation of future schnorr/taproot support (#1967).- The catch-all
KeysInterface
was split intoEntropySource
,NodeSigner
,
andSignerProvider
.KeysManager
implements all three (#1910, #1930). KeysInterface::get_node_secret
is nowKeysManager::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 inBackgroundProcessor
instead of viaRouter
(#1996).ChainAccess::get_utxo
(nowUtxoAccess
) can now be resolved async (#1980).- BOLT12
Offer
,InvoiceRequest
,Invoice
andRefund
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 anArc
onPeerManager
(#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 inno-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 beNone
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 toEvent::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 aChannelMonitor
update, when occurring immediately
prior to a crash, may result in thePaymentSent
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 ofstarting_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
iflightning-persister
fails to read the directory listing
rather than panicing (#1943). peer_disconnected
will now never be called withoutpeer_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
0.0.113 - Dec 16, 2022 - "Big Movement Intercepted"
API Updates
ChannelManager::send_payment
now takes an explicitPaymentId
which is a
loose idempotency token. Seesend_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 aBlockHash
, expanding the set
of cases wheretransaction_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 renamedEvent::PaymentClaimable
(#1891).Event
handling is now optionally async for Rust users (#1787).user_channel_id
is now au128
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 thechannel_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
Sign
ers are now by default re-derived usingKeysInterface
's new
derive_channel_signer
rather thanread_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 thatInvoicePayer
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
toChannelDetails
(#1856). BlindedRoute
has been renamedBlindedPath
(#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 samePaymentId
(#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
0.0.112 - Oct 25, 2022 - "History Matters"
API Updates
Result<(), ChannelMonitorUpdateErr>
return values have been replaced with
aChannelMonitorUpdateStatus
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 aCustomOnionMessageHandler
implementation,
allowing you to send and receive custom onion messages (#1748).ProbabilisticScorer
now tracks the historical distribution of liquidity
estimates for channels. See newhistorical_*
parameters in
ProbabilisticScoringParameters
for more details (#1625).lightning-block-sync
'sBlockSource
trait now supports BIP 157/158
filtering clients by returning only header data for some blocks (#1706).lightning-invoice
'sRouter
trait now accepts anInFlightHtlcs
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
asNetworkGraph
now
refuses to re-add nodes and channels that were recently removed (#1649).- The
lightning-rapid-gossip-sync
crate now supportsno-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 thefutures
feature (#1744).ChannelManager::get_persistable_update_future
's returnedFuture
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
Err
s (#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
"Saturated with Messages"
API Updates
- Support for relaying onion messages has been added via a new
OnionMessenger
struct when passed as theOnionMessageHandler
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 newprocess_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
additionalchain::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_
andnode_announcement
s 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 stdHash
trait (#1575).{Signed,}RawInvoice::hash
have been renamedsignable_hash
(#1714).chain::AccessError
now derives the stdDebug
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 newBalance::CounterpartyRevokedOutputClaimable
(#1495). - Inbound HTLCs for which we do not (yet) have a preimage are now included in
get_claimable_balance
via aBalance::MaybePreimageClaimableHTLC
(#1673). - Probes that fail prior to being sent over their first hop are correctly
failed with aEvent::ProbeFailed
rather than aPaymentPathFailed
(#1704). - Pending
Event::HTLCHandlingFailed
s 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 toPeerManager
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 returnNone
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 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_probe
andScore::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 hasrapid
,p2p
, andnone
constructors (#1618).lightning-net-tokio
no longer requires types to be inArc
s (#1623).- The
htlc_maximum_msat
field is now required inChannelUpdate
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
API Updates
ChannelManager::update_channel_config
has been added to allow the fields
inChannelConfig
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 theDisplay
trait (#1544). ProbabilisticScoringParameters
now has abanned_nodes
set which we will
never route through during path finding (#1550).ProbabilisticScoringParameters
now offers ananti_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 viaestimated_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
toChannelHandshakeConfig
(#1529). find_route
takes&NetworkGraph
instead of `ReadOnlyNetworkGraph (#1583).ChannelDetails
now contains a copy of the currentChannelConfig
(#1527).- The
lightning-invoice
crate now optionally depends onserde
, with
Invoice
implementingserde::{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
serializingChannelConfig
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 correspondingChannelMonitor
.
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
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
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_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 abool
to indicate success.
Instead, anEvent::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 toBackgroundProcessor
in order to persist
theNetworkGraph
and handleNetworkUpdate
s during event handling (#1433,
#1517).NetGraphMsgHandler
has been renamed toP2PGossipSync
, thenetwork_graph
module has been renamed togossip
, andNetworkUpdate::ChannelClosed
has
been renamedNetworkUpdate::ChannelFailure
(#1159).- Added a
filtered_block_connected
method tochain::Listen
and a default
implementation ofblock_connected
for those fetching filtered instead of
full blocks (#1453). - The
lightning-block-sync
crate'sBlockSource
trait methods now take
&self
instead of&mut self
(#1307). inbound_payment
module is now public to allow for creating invoices without
aChannelManager
(#1384).lightning-block-sync
'sinit
andpoll
modules support&dyn BlockSource
which can be determined at runtime (#1423).lightning-invoice
crate'sutils
now accept an expiration time (#1422,
#1474).Event::PaymentForwarded
includesprev_channel_id
andnext_channel_id
(#1419, #1475).chain::Watch::release_pending_monitor_events
' return type now associates
MonitorEvent
s with fundingOutPoints
(#1475).lightning-background-processor
crate'sPersister
trait has been moved to
lightning
crate'sutil::persist
module, which now has a general
KVStorePersister
trait. Blanket implementations ofPersister
and
chainmonitor::Persist
are given for types implementingKVStorePersister
.
lightning-persister
'sFilesystemPersister
implementsKVStorePersister
(#1417).ChannelDetails
andChannelCounterparty
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 aLogger
, which it uses to log
channel liquidity updates or lack thereof (#1405).ChannelDetails
has anoutbound_htlc_limit_msat
field, which should be
used in routing instead ofoutbound_capacity_msat
(#1435).ProbabilisticScorer
's channel liquidities can be logged via
debug_log_liquidity_stats
(#1460).BackgroundProcessor
now takes an optionalWriteableScore
which it will
persist using thePersister
trait's newpersist_scorer
method (#1416).- Upgraded to
bitcoin
crate version 0.28.1 (#1389). ShutdownScript::new_witness_program
now takes aWitnessVersion
instead of
aNonZeroU8
(#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 acounterparty_node_id
parameter, which has also been added as a field
toEvent::FundingGenerationReady
(#1479, #1485).InvoicePayer::new
now takes aRetry
enum (replacing theRetryAttempts
struct), which supports both attempt- and timeout-based retrying (#1418).Score::channel_penalty_msat
takes aChannelUsage
struct, which contains
the capacity as anEffectiveCapacity
enum and any potential in-flight HTLC
value, rather than a singleu64
. Used byProbabilisticScorer
for more
accurate penalties (#1456).build_route_from_hops
is a new function useful for constructing aRoute
given a specific list of public keys (#1491).FundingLocked
message has been renamedChannelReady
, and related
identifiers have been renamed accordingly (#1506).core2::io
orstd::io
(depending on feature flagsno-std
orstd
) is
exported as alightning::io
module (#1504).- The deprecated
Scorer
has been removed in favor orProbabilisticScorer
(#1512).
Performance Improvements
lightning-persister
crate'sFilesystemPersister
is faster by 15x (#1404).- Log gossip query messages at
GOSSIP
instead ofTRACE
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 andbitcoin
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 achannel_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'sfailuremsg
,
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 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. 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
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 achannel_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
thefunding_locked
message. These are used when forwarding payments and
constructing invoice route hints for improved privacy.ChannelDetails
has a
inbound_scid_alias
field and aget_inbound_payment_scid
method to support
the latter (#1311).DefaultRouter
andfind_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'sinit::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 oninvoice_expiry_delta_secs
,
which is only applicable to the deprecatedcreate_inbound_payment_legacy
andcreate_inbound_payment_for_hash_legacy
methods (#1341).Features
mutator methods now takeself
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'sutils
module
include versions that accept a description hash instead of only a description
(#1361). RoutingMessageHandler::sync_routing_table
has been renamedpeer_connected
(#1368).MessageSendEvent::SendGossipTimestampFilter
has been added to indicate that
agossip_timestamp_filter
should be sent (#1368).PeerManager
takes an optionalNetAddress
innew_outbound_connection
and
new_inbound_connection
, which is used to report back the remote address to
the connecting peer in theinit
message (#1326).ChannelManager::accept_inbound_channel
now takes auser_channel_id
, which
is used in a similar manner as in outbound channels. (#1381).BackgroundProcessor
now persistsNetworkGraph
on a timer and upon
shutdown as part of a newPersister
trait, which also includes
ChannelManager
persistence (#1376).ProbabilisticScoringParameters
now has abase_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 agrind_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 aamount_penalty_multiplier_msat
option, which is used to further penalize large amounts (#1399).PhantomRouteHints
,FixedPenaltyScorer
, andScoringParameters
now
implementClone
(#1346).
Bug Fixes
- Fixed a compilation error in
ProbabilisticScorer
under--feature=no-std
(#1347). - Invoice creation functions in
lightning-invoice
crate'sutils
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
ofConfirm::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 achannel_type
that hasChannelTypeFeatures::supports_scid_privacy
return true. SeeUserConfig::accept_inbound_channels
. - Inbound channels when manually accepted from an
OpenChannelRequest
with a
channel_type
that hasChannelTypeFeatures::supports_scid_privacy
return
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 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 newPhantomKeysManager
's docs for more, as well as
requirements onKeysInterface::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 aRecipient
parameter to select between the localnode_id
and
a phantom-specific one. ProbabilisticScorer
, aScore
based 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_msat
now always takes the channel value, instead of
anOption
(#1227).UserConfig::manually_accept_inbound_channels
was added which, when set,
generates a newEvent::OpenChannelRequest
, which allows manual acceptance
or rejection of incoming channels on a per-channel basis (#1281).Payee
has been renamed toPaymentParameters
(#1271).PaymentParameters
now has amax_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 ofExpiryTime
(#1273).- The
CounterpartyCommitmentSecrets
is now public, allowing external uses of
theBOLT 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 theKeysInterface
used
has a differentnode_id
than theChannelManager
expects (#1250).- A new
ErrorAction
variant was added to sendwarning
messages (#1013). - Several references to
chain::Listen
objects inlightning-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 inBackgroundProcessor
(#1269). - Now persist the
ChannelManager
prior toBackgroundProcessor
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 toBackgroundProcessor
shutdown (#1253). - Fields in
ChannelHandshakeLimits
provided via theoverride_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 toaccept_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 causeChannelDetails::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
toKeysInterface
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