lnd/docs/release-notes/release-notes-0.22.0.md
2026-08-03 19:18:05 -03:00

6.3 KiB

Release Notes

Bug Fixes

  • Bitcoind outbound peer health checks now use getnetworkinfo.connections_out instead of getpeerinfo. The same PR also clarifies the ZMQ port-mismatch warnings so they no longer suggest that the connection failed.

  • Fixed a bug that could be encountered during co-op closes whereby ChanStatusCoopBroadcasted was set before a close transaction actually existed. As a side effect, channels in shutdown negotiation now remain in ListChannels (as inactive) until the close transaction is actually broadcast, and WaitingCloseChannel.ClosingTx is never empty.

  • Fixed a bug where ListChannels reported 100% uptime for channels whose peer was offline. The channel fitness store assumed a peer was online when it first started tracking it, but channels are loaded on startup regardless of peer connectivity. Uptime is now seeded from the peer's actual connection state.

  • Fixed a bug in the sweeper whereby inputs that receive an extra budget from an aux sweeper (such as custom channel outputs, whose value is mostly carried off-chain) were filtered against their own budget alone. This could permanently exclude such inputs from sweeping even though their input set could comfortably pay its fees.

  • Fixed a bug in GetNetworkInfo where encountering an already-seen channel skipped the rest of that node's channels instead of just that channel, undercounting the reported network statistics such as total network capacity, channel count and max out degree.

New Features

Functional Enhancements

RPC Additions

lncli Additions

Improvements

Functional Updates

RPC Updates

lncli Updates

Breaking Changes

Performance Improvements

Deprecations

Technical and Architectural Updates

BOLT Spec Updates

  • The fundee now enforces the BOLT-02 bound on push_msat, rejecting incoming open_channel messages where push_msat exceeds 1000 * funding_satoshis. Oversized pushes were previously caught later in the reservation flow as a funder-balance-dust error; they now surface a clearer, spec-aligned error string up front.

BOLT 12 (Offers)

  • Initial BOLT 12 Offer codec: add a new bolt12/ package with the BOLT 12 offer TLV codec and full reader/writer validation, plus a typed lnwire.BlindedPath introduction-node codec shared by HTLC routing and onion messaging.

  • BOLT 12 invoice request codec: add the invoice_request TLV message to the bolt12/ package with structural reader/writer validation. This includes an observable RPC behavior change in SubscribeOnionMessages, ensuring a nil reply path remains nil in the RPC response rather than being emitted as an empty struct.

  • BOLT 12 invoice codec: add the invoice TLV message to the bolt12/ package with structural reader/writer validation. Schnorr signature verification is not yet performed; callers must verify the signature independently until the Merkle and signing primitives land.

  • BOLT 12 invoice_error codec: add the invoice_error TLV message to bolt12/ for onion-message replies.

Testing

Database

Code Health

Tooling and Documentation

  • dev.Dockerfile now uses cache mounts to cache the GOMODCACHE and GOCACHE directories so that dependencies don't need to be re-downloaded and re-built every time the image is re-created. As a result of this change, dev.Dockerfile now requires BuildKit to build. When using docker build, this can be enabled by setting the environmental variable DOCKER_BUILDKIT=1. BuildKit also does not unnecessarily rebuild images when the build context is a remote git repository because COPY layers are more smartly compared to cache.

Contributors (Alphabetical Order)

  • bitromortac
  • Boris Nagaev
  • Erick Cestari
  • Jared Tobin