Files
lnd/docs/release-notes/release-notes-0.20.0.md
Yong 9a6d34a028 Merge pull request #10218 from ellemouton/docs-fix-graph-links
docs: improve readability of graph SQL work
2025-09-16 15:16:48 +08:00

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 and node_announcement messages when replying to a gossip_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 and ConfirmationHeight field to the PendingChannelsResponse_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 and walletrpc.FundPsbt now allow conf_target=1. Previously they required conf_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 by incoming_chan_ids and outgoing_chan_ids. This allows to retrieve forwarding events for specific channels.

  • DescribeGraph, GetNodeInfo, GetChanInfo and the corresponding lncli commands now have flag include_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, and gossip.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 from gossip.msg-rate-bytes, as this new config controls the bandwidth per peer, while msg-rate-bytes controls the gossip as a whole. This new config prevents a single misbehaving peer from using up all the bandwidth.

lncli Additions

Improvements

Functional Updates

  • Graph Store SQL implementation and migration project:

RPC Updates

  • Previously the RoutingPolicy would return the inbound fee record in its CustomRecords field, which is duplicated info as it's already presented in fields InboundFeeBaseMsat and InboundFeeRateMilliMsat. This is now fixed, the affected RPCs are SubscribeChannelGraph, GetChanInfo, GetNodeInfo and DescribeGraph.

  • 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 for LookupInvoice 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 the lncli queryroutes or the QueryRoutes RPC. With this change, multiple outgoing_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 and btcwallet.

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 of OutgoingChanIds in the QueryRoutes 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

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 or sqlite 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