Files
lnd/docs/release-notes/release-notes-0.20.0.md
2025-08-04 15:44:34 +08:00

12 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 an issue where known TLV fields were incorrectly encoded into the ExtraData field of messages in the dynamic commitment set.

  • Fixed a deadlock that can cause contract resolvers to be stuck at marking the channel force close as being complete.

  • Fix a bug where child logger's derived via WithPrefix did not inherit change log level changes from their parent loggers.

  • Fixed a case that we may send unnecessary channel_announcement and node_announcement messages when replying to a gossip_timestamp_filter query.

New Features

Functional Enhancements

  • 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.

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.

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

Code Health

Tooling and Documentation

Contributors (Alphabetical Order)

  • Abdulkbk
  • Boris Nagaev
  • Elle Mouton
  • Erick Cestari
  • Funyug
  • Mohamed Awnallah
  • Pins
  • Torkel Rogstad
  • Yong Yu
  • Ziggie