LND v0.21.0-beta Release Candidate #10766
Pinned
saubyk
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Hey Everyone,
The first release candidate for the upcoming LND v0.21.0 has been published. This release ships basic onion messaging support, finalizes production simple taproot channels, and continues our journey of migrating LND's data stores to native SQL — this time with the payments store moving over. We do expect a few rounds of RCs to iron out potential issues found during testing. Please test this release on your testing nodes.
The release can be found here:
https://github.com/lightningnetwork/lnd/releases/tag/v0.21.0-beta.rc1
The detailed release notes are available at:
https://github.com/lightningnetwork/lnd/blob/master/docs/release-notes/release-notes-0.21.0.md
Below are some of the release highlights:
Onion Messaging Support
This version adds basic support for onion message forwarding, introducing a new
OnionMessagepeer-to-peer message type comprising a path key and an onion blob, along with the serialization and deserialization logic required for peer-to-peer communication.Incoming onion messages are protected by two byte-denominated token-bucket rate limiters at ingress — one per peer, one global — so that small messages consume proportionally less of the budget than spec-max ones. Defaults are
0.5 Mbpsper peer (256 KiB burst) and5 Mbpsglobally (1600 KiB burst), all tunable viaprotocol.onion-msg-peer-kbps,protocol.onion-msg-peer-burst-bytes,protocol.onion-msg-global-kbps, andprotocol.onion-msg-global-burst-bytes.As a Sybil-resistance layer, incoming onion messages from peers with no fully open channel are dropped at ingress; operators who want to accept onion messages from all peers regardless of channel state can set
protocol.onion-msg-relay-all=true(the rate limiters still apply). LND also now drops onion messages whose resolved next hop would cycle back to the sending peer, closing a trivial traffic-amplification vector. See onion_message_rate_limiting.md in the repo for the adversary model, defaults, and operator recipes.Production Simple Taproot Channels
LND now supports production (final) simple taproot channels using the finalized taproot channel scripts with feature bits 80/81. Production taproot channels use optimized scripts (
OP_CHECKSIGVERIFYin place ofOP_CHECKSIG+OP_DROP) and a map-based nonce encoding inchannel_reestablishandrevoke_and_ackkeyed by funding TXID, laying the groundwork for splice support. The nonce type is now auto-detected from the negotiated channel type rather than peer feature bits, ensuring correct behavior across all recovery and resynchronization paths.Taproot channels also now support the RBF cooperative close protocol (
--protocol.rbf-coop-close), including MuSig2 partial signature handling with the JIT nonce pattern and protection against nonce reuse across RBF iterations.Payment Store Migration to SQL
Continuing the journey started in v0.20 with the graph store, this release moves the payments database to the native SQL backend. The effort introduces a payment store interface, implements the SQL schema with query and insert methods, threads context through the payment DB layer, and adds the KV-to-SQL payments migration.
Importantly, the SQL payments migration has been promoted from behind the
test_native_sqlbuild tag to mainline production code in this release. Users onpostgresorsqlitebackends with--db.use-native-sqlset will have their payments migrated automatically on startup. As with the graph store migration in v0.20, nodes still onbboltcan use the [lndinit](https://github.com/lightninglabs/lndinit/blob/main/docs/data-migration.md) tool to migrate tosqliteorpostgresfirst.Other notable improvements
Functional improvements
upfront-shutdown-addressconfiguration option inlnd.conflets users specify a default address for cooperative channel closures, applicable to both funders and fundees, with per-channel overrides during opening or acceptance.chain_paramstable persists the active Bitcoin network on first startup and refuses to start on subsequent restarts if the configured network differs. This prevents silent data corruption from accidentally reusing a database across networks, on both PostgreSQL and SQLite native-SQL backends.Rpc additions and updates
DeleteForwardingHistoryRPC on the router sub-server, allowing operators to selectively purge old forwarding events. Deletion requires a cutoff timestamp at least 1 hour in the past to prevent accidental removal of recent data.PendingChannelsnow includesblocks_til_close_confirmedandclose_heightfields onWaitingCloseChannel, giving clients direct visibility into reorg-safe close progress.GetInfohas a newwallet_syncedfield reporting the wallet's internal sync state, independent of the compositesynced_to_chainfield.SubscribeChannelEventsnow emits channel update events so clients can subscribe to state changes.EstimateFeesupports explicit input selection via a newinputsfield inEstimateFeeRequest.MuSig2RegisterCombinedNonceandMuSig2GetCombinedNonce, support coordinator-based signing workflows where nonces are aggregated externally (MuSig2 v1.0.0rc2 only).Lncli enhancements
lncli wallet psbt signcommand corresponds towalletrpc.SignPsbtand can be used to sign a PSBT.lncli estimatefeesupports a new--utxosflag to specify explicit inputs for fee estimation.lncli getdebuginfoandlncli encryptdebugpackagegain an--include_logflag to include the daemon log file in responses and encrypted debug packages.Performance improvements
--db.sync-graph-cache-loadif the old behavior is preferred.WHERE id >= cursor) instead ofLIMIT+OFFSET, so every page is an efficient primary-key range scan regardless of depth.FilterInvoicesSQL query has been replaced with five focused, index-friendly queries, eliminating the full table scans the oldOR $param IS NULLpredicates forced.Breaking changes — please review before upgrading
MinCLTVDeltahas been raised from 18 to 24 to provide a larger safety margin aboveDefaultFinalCltvRejectDelta(19 blocks). Users creating invoices with customcltv_expiry_deltavalues between 18–23 will now need at least 24; the default of 80 blocks is unchanged and existing invoices continue to work.GetDebugInfono longer returns log file content by default. Clients relying on thelogfield must now setinclude_log=trueon the request; the same applies to the--include_logflag onlncli getdebuginfoandlncli encryptdebugpackage.Upcoming deprecations (removal in v0.22)
lnrpc.Hopfields (chan_capacity,amt_to_forward,fee) will be removed in v0.22. Clients should migrate toamt_to_forward_msatandfee_msat.--sat_per_bytefee rate option will be fully removed acrossCloseChannel,OpenChannel(Sync),SendCoins,SendMany, andwalletrpc.BumpFee. Migrate to--sat_per_vbyte, which correctly represents fee rates in vbytes.There are a lot of other bug fixes and minor updates which can be tracked via the release notes linked above. Reports of issues found during testing will be highly appreciated 🫂
Thanks
Beta Was this translation helpful? Give feedback.
All reactions