6.6 KiB
Release Notes
- Bug Fixes
- New Features
- Improvements
- Technical and Architectural Updates
- Contributors (Alphabetical Order)
Bug Fixes
-
Fix bug where channels with both policies disabled at startup could never be used for routing
-
Fix a case where resolving the to_local/to_remote output might take too long.
-
Fix a bug where repeated network addresses were added to the node announcement and
getinfooutput. -
Fix source node race condition which could prevent a node from starting up if two goroutines attempt to update the node's announcement at the same time.
-
Fix timestamp comparison in source node updates that could still cause "sql: no rows in result set" startup errors. The previous fix (#10371) addressed concurrent updates with equal timestamps, but the seconds-only comparison could still fail when restarting with different minute/hour values.
-
Fix a startup issue in LND when encountering a deserialization issue in the mission control store. Now we skip over potential errors and also delete them from the store.
-
Fixed an issue where the TLS manager would fail to start if only one of the TLS pair files (certificate or key) existed. The manager now correctly regenerates both files when either is missing, preventing "file not found" errors on startup.
-
Fixed race conditions in the channel graph database. The
Node.PubKey()andChannelEdgeInfo.NodeKey1/NodeKey2()methods had check-then-act races when caching parsed public keys. Additionally,DisconnectBlockAtHeightwas accessing the reject and channel caches without proper locking. The caching has been removed from the public key parsing methods, and proper mutex protection has been added to the cache access inDisconnectBlockAtHeight. -
Fix potential sql tx exhaustion issue in LND which might happen when running postgres with a limited number of connections configured.
-
Add missing payment address/secret when probing an invoice. This makes sure the EstimateRouteFee API can probe Eclair and LDK nodes which enforce the payment address/secret.
-
Fix a bug where missing edges for own channels could not be added to the graph DB due to validation checks in the graph Builder that were resurfaced after the graph refactor work.
-
Fix backwards compatibility for channel edge feature deserialization. Nodes upgrading from pre-v0.20 versions could fail to read channel edges from their graph database due to a format change in how channel features are serialized. The fix adds automatic format detection to handle both legacy (raw feature bits) and new (length-prefixed) formats.
-
Fixed a shutdown deadlock in the gossiper. Certain gossip messages could cause multiple error messages to be sent on a channel that was only expected to be used for a single message. The erring goroutine would block on the second send, leading to a deadlock at shutdown.
New Features
Functional Enhancements
RPC Additions
lncli Additions
Improvements
Functional Updates
- Added panic recovery to the gossiper's message processing goroutines. This increases the robustness of the gossiper subsystem by allowing it to continue operating even if a logic error causes a panic during message processing. The recovery mechanism ensures dependencies are properly freed and logs the panic trace for debugging.
RPC Updates
- The
EstimateRouteFeeRPC now implements an LSP detection heuristic that probes up to 3 unique Lightning Service Providers when route hints indicate an LSP setup. The implementation returns worst-case (most expensive) fee estimates for conservative budgeting and includes griefing protection by limiting the number of probed LSPs. It enhances the previous LSP design by being more generic and more flexible.
lncli Updates
Breaking Changes
Performance Improvements
-
Added new Postgres configuration options
db.postgres.channeldb-with-global-lockanddb.postgres.walletdb-with-global-lockto allow fine-grained control over database concurrency. The channeldb global lock defaults tofalseto enable concurrent access, while the wallet global lock defaults totrueto maintain safe single-writer behavior until the wallet subsystem is fully concurrent-safe. -
Modified the query for
IsPublicV1Nodeto useUNION ALLinstead ofORconditions in theWHEREclause, improving performance when checking for public nodes especially in large graphs when usingSQLbackends.
Deprecations
Technical and Architectural Updates
BOLT Spec Updates
- Enforce non-zero timestamps
for
channel_update(as required by BOLT 7) andnode_announcementmessages. Gossip messages with zero timestamps are now rejected. Forchannel_updatemessages, remote peers sending such invalid messages will have their ban score incremented.
Testing
Database
Code Health
Tooling and Documentation
Contributors (Alphabetical Order)
- Abdulkbk
- bitromortac
- Matt Morehouse
- Olaoluwa Osuntokun
- Ziggie