15 KiB
Release Notes
Bug Fixes
-
Fixed potential update inconsistencies in node announcements by creating a shallow copy before modifications. This ensures the original announcement remains unchanged until the new one is fully signed and validated.
-
Fixed shutdown deadlock when we fail starting up LND before we startup the chanbackup sub-server.
-
Fixed BOLT-11 invoice parsing behavior: now errors are returned when receiving empty route hints or a non-UTF-8-encoded description.
-
Fixed an issue where known TLV fields were incorrectly encoded into the
ExtraData
field of messages in the dynamic commitment set. -
Fixed a case that we may send unnecessary
channel_announcement
andnode_announcement
messages when replying to agossip_timestamp_filter
query.
New Features
- Use persisted nodeannouncement settings across restart. Before this change we always go back to the default settings when the node restarts.
-
Added NoOp HTLCs. This allows sending HTLCs to the remote party without shifting the balances of the channel. This is currently only possible to use with custom channels, and only when the appropriate TLV flag is set. This allows for HTLCs carrying metadata to reflect their state on the channel commitment without having to send or receive a certain amount of msats.
-
Added support for P2TR Fallback Addresses in BOLT-11 invoices.
Functional Enhancements
-
Add
ConfirmationsUntilActive
andConfirmationHeight
field to thePendingChannelsResponse_PendingChannel
message, providing users with the number of confirmations remaining before a pending channel becomes active and the block height at which the funding transaction was first confirmed. This change also persists the channel's confirmation height in the database once its funding transaction receives one confirmation, allowing tracking of confirmation progress before the channel becomes active. -
RPCs
walletrpc.EstimateFee
andwalletrpc.FundPsbt
now allowconf_target=1
. Previously they requiredconf_target >= 2
.
RPC Additions
-
When querying
ForwardingEvents
logs, the response now include the incoming and outgoing htlc indices of the payment circuit. The indices are only available for forwarding events saved after v0.20. -
The
lncli addinvoice --blind
command now has the option to include a chained channels 1 2 incoming list--blinded_path_incoming_channel_list
which gives users the control of specifying the channels they prefer to receive the payment on. With the option to specify multiple channels this control can be extended to multiple hops leading to the node. -
The
lnrpc.ForwardingHistory
RPC method now supports filtering byincoming_chan_ids
andoutgoing_chan_ids
. This allows to retrieve forwarding events for specific channels. -
DescribeGraph
,GetNodeInfo
,GetChanInfo
and the corresponding lncli commands now have flaginclude_auth_proof
. With the flag, these APIs add AuthProof (signatures from the channel announcement) to the returned ChannelEdge. -
A new config value
--htlcswitch.quiescencetimeout
is added to allow specifying the max duration the channel can be quiescent. A minimal value of 30s is enforced, and a default value of 60s is used. This value is used to limit the dependent protocols like dynamic commitments by restricting that the operation must finish under this timeout value. Consider using a larger timeout value if you have a slow network. -
The default value for
gossip.msg-rate-bytes
has been increased from 100KB to 1MB, andgossip.msg-burst-bytes
has been increased from 200KB to 2MB. -
Added
deletecanceledinvoices
RPC to allow the removal of a canceled invoice. Supports deleting a canceled invoice by providing its payment hash. -
A new config
gossip.ban-threshold
is added to allow users to configure the ban score threshold for peers. When a peer's ban score exceeds this value, they will be disconnected and banned. Setting the value to 0 effectively disables banning by setting the threshold to the maximum possible value. -
A new config value
gossip.peer-msg-rate-bytes=102400
is introduced to allow limiting the outgoing bandwidth used by each peer when processing gossip-related messages. Note this is different fromgossip.msg-rate-bytes
, as this new config controls the bandwidth per peer, whilemsg-rate-bytes
controls the gossip as a whole. This new config prevents a single misbehaving peer from using up all the bandwidth.
lncli Additions
-
lncli sendpayment
andlncli queryroutes
now support the--route_hints
flag to support routing through private channels. -
The
lncli fwdinghistory
command now supports two new flags:--incoming_chan_ids
and--outgoing_chan_ids
. These filters allows to query forwarding events for specific channels.
Improvements
Functional Updates
- Graph Store SQL implementation and migration project:
- Introduce an abstract graph store interface.
- Start validating that byte blobs at the end of gossip messages are valid TLV streams.
- Various preparations of the graph code before the SQL implementation is added.
- Only fetch required fields during graph cache population.
- Add graph schemas, queries and CRUD: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
- Add graph SQL migration logic: [1, 2, 3]
RPC Updates
-
Previously the
RoutingPolicy
would return the inbound fee record in itsCustomRecords
field, which is duplicated info as it's already presented in fieldsInboundFeeBaseMsat
andInboundFeeRateMilliMsat
. This is now fixed, the affected RPCs areSubscribeChannelGraph
,GetChanInfo
,GetNodeInfo
andDescribeGraph
. -
Fix a bug where the
GetChanInfo
was not returning the correct gRPC status code in the cases where the channel is unknown to the node. The same is done forLookupInvoice
for the case where the DB is kvdb backed and no invoices have yet been added to the database.
lncli Updates
- Previously, users could only specify one
outgoing_chan_id
when calling thelncli queryroutes
or the QueryRoutes RPC. With this change, multipleoutgoing_chan_id
can be passed during the call.
Code Health
-
Increase itest coverage for payments. Now the payment address is mandatory for the writer and reader of a payment request.
-
Refactored
channelLink
to improve readability and maintainability of the code. -
Introduced a wallet interface to decouple the relationship between
lnd
andbtcwallet
.
Breaking Changes
Performance Improvements
Deprecations
⚠️ Warning: The following RPCs will be removed in release version 0.21:
Deprecated RPC Method | REST Equivalent | HTTP Method | Path | Replaced By |
---|---|---|---|---|
lnrpc.SendToRoute routerrpc.SendToRoute |
❌ (No direct REST equivalent) | — | — | routerrpc.SendToRouteV2 |
lnrpc.SendPayment routerrpc.SendPayment |
✅ | POST |
/v1/channels/transaction-stream |
routerrpc.SendPaymentV2 |
lnrpc.SendToRouteSync |
✅ | POST |
/v1/channels/transactions/route |
routerrpc.SendToRouteV2 |
lnrpc.SendPaymentSync |
✅ | POST |
/v1/channels/transactions |
routerrpc.SendPaymentV2 |
router.TrackPayment |
❌ (No direct REST equivalent) | — | — | routerrpc.TrackPaymentV2 |
🚨 Users are strongly encouraged to transition to the new V2 methods before release 0.21 to ensure compatibility:
New RPC Method | REST Equivalent | HTTP Method | Path |
---|---|---|---|
routerrpc.SendToRouteV2 |
✅ | POST |
/v2/router/route/send |
routerrpc.SendPaymentV2 |
✅ | POST |
/v2/router/send |
routerrpc.TrackPaymentV2 |
✅ | GET |
/v2/router/track/{payment_hash} |
- We are deprecating
OutgoingChanId
in favour ofOutgoingChanIds
in theQueryRoutes
RPC. This transition allows us to specify more than one outgoing channel the pathfinder should use when finding a route.
Technical and Architectural Updates
BOLT Spec Updates
-
Explicitly define the inbound fee TLV record on the
channel_update
message and handle it explicitly throughout the code base instead of extracting it from the TLV stream at various call-sites. -
Don't error out if an invoice's feature vector contain both the required and optional versions of a feature bit. In those cases, just treat the feature as mandatory.
-
Require invoices to include a payment address or blinded paths to comply with updated BOLT 11 specifications before sending payments.
-
LND can now recgonize DNS address type in node announcement msg. This allows users to forward node announcement with valid DNS address types. The validity aligns with Bolt 07 DNS constraints.
Testing
- Previously, automatic peer bootstrapping was disabled for simnet, signet and
regtest networks even if the
--nobootstrap
flag was not set. This automatic disabling has now been removed meaning that any test network scripts that rely on bootstrapping being disabled will need to explicitly define the--nobootstrap
flag. Bootstrapping will now also be deterministic on local test networks so that bootstrapping behaviour can be tested for.
Database
-
Add missing sql index for settled invoices to increase query speed.
-
Migrate the KV graph store to native SQL. For this migration to take place, the db backend must already be either
postgres
orsqlite
and the--use-native-sql
flag must be set.
Code Health
Tooling and Documentation
Contributors (Alphabetical Order)
- Abdulkbk
- Boris Nagaev
- Elle Mouton
- Erick Cestari
- Funyug
- Mohamed Awnallah
- Pins
- Torkel Rogstad
- Yong Yu
- Ziggie