LND v0.18.3-beta: Route Blinding with BOLT11 & Bugfixes
The Lightning Network Daemon (LND) is a complete implementation of a Lightning Network node developed by Lightning Labs.
- This release complements some of the features launched with v0.18.0 and also addresses bugs which were encountered and reported after the launch.
- Some of the highlights (as per rc announcement) a include:
- Ability to receive and pay via blinded path with Bolt11 invoices;
- UTXO selection support for
sendcoinsrpc enabling simple coin selection; BuildRouterpc now supports inbound fee.

- Notable bug fixes include:
- Invoices generated within the SQLite database have an incorrect expiry date. The existing invoices will be migrated to an updated 24-hour expiration (this will be a db migration);
BumpForceCloseFeerpc has been fixed to enable fee bumping of non-htlc outputs;- Fee limit for payments is now compatible with the inbound fee.
What's new
- LND will now temporarily ban peers that send too many invalid
ChannelAnnouncement. This is only done for LND nodes that validateChannelAnnouncementmessages. - RPC additions:
- The SendPaymentRequest message receives a new flag
cancelablewhich indicates if the payment loop is cancelable. The cancellation can either occur manually by cancelling the send payment stream context, or automatically at the end of the timeout period if the user providedtimeout_seconds. - The SendCoinsRequest now takes an optional param
Outpoints, which is a list of*lnrpc.OutPointthat specifies the coins from the wallet to be spent in this RPC call.
- The SendPaymentRequest message receives a new flag
- The
EstimateFeecall on thewalletrpcsub-server now also returns the currentmin_relay_fee. - lncli additions:
- Added the
cltv_expiryargument toaddinvoiceandaddholdinvoice, allowing users to set themin_final_cltv_expiry_delta. - The
lncli wallet estimatefeeratecommand returns the fee rate estimate for on-chain transactions in sat/kw and sat/vb to achieve a given confirmation target. sendcoinsnow takes an optional utxo flag. This allows users to specify the coins that they want to use as inputs for the transaction.
- Added the
- BOLT Spec updates:
- Start assuming that all hops used during path-finding and route construction support the TLV onion format.
- Allow channel fundee to send a minimum confirmation depth of 0 for a non-zero-conf channel. We will still wait for the channel to have at least one confirmation and so the main change here is that we don't error out for such a case.
- Groundwork in preparation for implementing route blinding receives.
- Generate and send to an invoice with blinded paths. With this, the
--blindflag can be used with thelncli addinvoicecommand to instruct LND to include blinded paths in the invoice. - Add the ability to send to use multiple blinded payment paths in an MP payment.
- Improve route blinding invoice generation UX by making various params configurable on a per-RPC basis.
Improvements
- A new field,
min_relay_feerate, is now expected in the response from querying the external fee estimation URL. - Commitment fees are now taken into account when calculating the fee exposure threshold.
- Allow multiple etcd hosts to be specified in db.etcd.host.
- RPC updates:
xImportMissionControlnow accepts0failure amounts.ChanInfoRequestadds support for channel points.- BuildRoute now supports inbound fees.
- lncli updates:
importmcnow accepts0failure amounts.getchaninfonow accepts a channel outpoint besides a channel id.- Fixed how we parse the
--ampflag when sending a payment specifying the payment request.
- Added a new failure reason
FailureReasonCanceledto the list of payment failure reasons. It indicates that a payment was manually cancelled by the user. - Update the version of falafel used to generate JSON/wasm stubs. This latest version of falafel also supports proto3 optional fields.
- Mission Control Store improved performance during DB flushing stage.
- Move graph building and maintaining duties from the
routing.ChannelRouterto the newgraph.Buildersub-system and also remove thechanneldb.ChannelGraphpointer from theChannelRouter. - Database:
- Migrate incorrectly stored invoice expiry values. This migration only affects users of native SQL invoice database. Invoices with incorrect expiry values will be updated to 24-hour expiry, which is the default behavior in LND.
- Fixed pagination issues in SQL invoicedb queries.
- Check leader status with our health checker to correctly shut down LND if network partitioning occurs towards the etcd cluster.
- Fix some inconsistencies to make the native SQL invoice DB compatible with the KV implementation. Furthermore fix a native SQL invoice issue where AMP subinvoice HTLCs are sometimes updated incorrectly on settlement.
Bug fixes
closedchannelsnow successfully reports settled balances even if the delivery address is set to an address that LND does not control.- SendPaymentV2 now cancels the background payment loop if the user cancels the stream context.
- Fixed a bug that caused LND to read the config only partially and continued with the startup.
- Avoids duplicate wallet addresses being created when multiple RPC calls are made concurrently.
- Fixed a bug that caused LND to use a default fee rate for the batch channel opening flow.
- Fixed a case where LND would not shut down properly when interrupted via e.g. SIGTERM. Moreover, LND now shutsdown correctly in case one subsystem fails to startup.
- The fee limit for payments was made compatible with inbound fees.
- Fixed a case where bumping an anchor channel closing was not possible when no HTLCs were on the commitment when the channel was force closed.
- Fixed old payments that are stuck inflight. Though the root cause is unknown, it's possible the network result for a given HTLC attempt was not saved, which is now fixed. Check here for the details about the analysis, and here for a summary of the issue.
- We'll now always send channel updates to our remote peer for open channels.
- Fix a bug that would cause UpdateAddHTLC message with blinding point fields to not be re-forwarded correctly on restart.
- A bug has been fixed that could cause invalid channel announcements to be generated if the inbound fee discount is used.
- Fixed a timestamp issue in the
ReplyChannelRangemsg and introduced a check that ChanUpdates with a timestamp too far into the future will be discarded. - Fixed a bug where we would create a blinded route with a minHTLC greater than the actual payment amount. Moreover remove strict correlation between min_cltv_delta and the blinded path expiry.
Docs
lntest.HarnessTestno longer exposesMinerinstance. Instead, it's changed into a privateminerinstance and all mining related assertions are now only accessible via the harness.
Full release notes for the update can be found here.