Commit graph

2096 commits

Author SHA1 Message Date
ziggie
0c0e970b1c docs: add interceptor auto-fail height release note
(cherry picked from commit 4ccb2aa94a)
2026-08-07 02:54:19 +00:00
ziggie
0cdbe350e3 docs: update 0.21.2 release notes
(cherry picked from commit 5b4c5067db)
2026-08-06 11:24:15 +00:00
Yong
9be6159da6
Merge pull request #11020 from lightningnetwork/backport-10900-to-v0.21.x-branch
[v0.21.x-branch] Backport #10900: lnwallet+walletrpc: add WalletKit.SubmitPackage for v3 CPFP package relay
2026-08-06 10:59:07 +08:00
Olaoluwa Osuntokun
c0b2d83621 docs: add release notes entry for the coop close fixes
(cherry picked from commit 4944bb0794)
2026-08-06 01:28:17 +00:00
Elle Mouton
0f45c5c83c docs: add release note for WalletKit.SubmitPackage
Document the new WalletKit.SubmitPackage RPC and the lncli wallet
submitpackage command in the 0.22.0 release notes.

(cherry picked from commit 68c47407d7)
2026-08-05 17:58:31 -07:00
ziggie
94a7851109 docs: update 0.21.2 release notes
(cherry picked from commit 758bbb8e52)
2026-08-05 18:15:15 +00:00
Olaoluwa Osuntokun
2bcb7572de
discovery: bound channel range reply buffering
In this commit, we cap each QueryChannelRange response at 100,000 SCIDs
across all streamed replies. The existing reply-count limit did not track
the aggregate decoded working set, so memory use varied with the encoding
and composition of the reply stream.

We count raw SCIDs before timestamp filtering, charge replies using the
received encoding type, and release all accumulated range state on any
error. This bounds both memory and CPU work while still leaving headroom
above the current graph.

(cherry picked from commit ceff94fadd)
2026-08-03 18:57:23 -03:00
bitromortac
843665312b
docs: update release notes
(cherry picked from commit f42b429899)
2026-07-30 11:47:14 -03:00
Elle Mouton
71b6194eac channeldb: recover missing db version
Use strict metadata reads during migration selection so a metadata bucket with a
missing metadata/dbp key is not interpreted as the latest DB version.

Recover this state from mandatory DB version 33, the last mandatory version
before the v0.20.x releases that could initialize a DB without writing the DB
version key. This runs migration 35 without replaying migrations 0 through 33
against a DB that was already created by a modern schema/code path.

After the selected migrations complete, syncVersions writes the latest DB
version as usual.

(cherry picked from commit 68264c70d9)
2026-07-22 20:46:55 +00:00
ziggie
ea6b8a40ce docs: add payment migration release note
Document the handling of historical total-only blinded route data and the
new SendToRouteV2 validation that prevents creating such records.

(cherry picked from commit 17ee638e37)
2026-07-22 16:56:26 +00:00
Jared Tobin
d128959709
docs: add release notes for v0.21.2
(cherry picked from commit 0501731c66)
2026-07-14 20:52:09 -03:00
bitromortac
d9e8744a05 docs: update release notes
(cherry picked from commit 68bc76912f)
2026-07-09 11:37:01 +00:00
ziggie
795ef20a24 docs: add v0.21.1 release note
(cherry picked from commit 9c5f32a2ec)
2026-06-26 17:18:30 +00:00
ziggie
90b7022a48 docs: update release notes
(cherry picked from commit bffae65a60)
2026-06-26 10:09:46 +00:00
Erick Cestari
edd8e51f91
docs: add release note for DNS fallback SRV lookup panic fix
modified: to update the release notes at 0.21.1
2026-06-25 08:15:09 -03:00
ziggie
c5493b76e2 docs: add 0.21.1 release notes
(cherry picked from commit 9b21d0a492)
2026-06-18 19:02:36 +00:00
ziggieXXX
653e173b03
Merge pull request #10853 from lightningnetwork/backport-10848-to-v0.21.x-branch
[v0.21.x-branch] Backport #10848: docs: update db migration guide subsystem readiness for v0.21
2026-05-27 16:23:12 -03:00
saubyk
2f35af9fd1 docs: update db migration guide subsystem readiness for v0.21
Mark the payments relational backend as available in v0.21 and refresh
the related guidance that previously told payment-heavy operators to wait
for the v0.21 release. Add btcwallet and channel state as in-progress
subsystems targeted for v0.22 (replacing the forwarding history entry),
and update the migration flow diagram and future improvements list to
match.

(cherry picked from commit 9a260ee0a3)
2026-05-27 19:21:23 +00:00
Oli
4e57dff102 docs: update docs after block-dn fixes
The block-dn.org service now offers a */import/latest shortcut
for the block and filter header import, so a block height
doesn't need to be specified.

The issue on testnet3 was also fixed, so the warning in the
text is no longer required.

(cherry picked from commit ff07a44d9a)
2026-05-27 19:20:58 +00:00
ziggie
7efd92f7cb docs: mention release tag helper
Update the release branch management guide to use the release tag helper
instead of raw git tag commands.

This keeps the process aligned with the new script while leaving the final
push as an explicit maintainer step.

(cherry picked from commit 4fcde943aa)
2026-05-27 18:32:28 +00:00
ziggie
29e32fc918
build: bump Go version to 1.26.3 2026-05-27 10:46:19 -03:00
Erick Cestari
89d9d2633e docs: document tor v2 onion handling in 0.21 release notes
Add a 0.21 release-notes entry covering the `--tor.v2` removal, the
boundary rejection of v2 input on operator entry points, the
persisted-state filtering (self-node announcement, watchtower client,
autopilot, graph bootstrapper, SCB restore), the Tor controller's
v3-only ADD_ONION restriction, and the wire-faithful behavior that
preserves peer-signed v2 entries through `lnwire`, `graph/db`, and
the graph RPCs.

(cherry picked from commit fad749d02c)
2026-05-26 10:25:30 +00:00
Erick Cestari
626a0b5f61 multi: drop tor v2 onion production, keep wire codec faithful
Tor stopped serving v2 onion services in October 2021; lnd should not
produce v2 addresses anymore, but it must still verify signatures on
and re-broadcast peer NodeAnnouncement messages that carry v2 entries.

Stop accepting v2 as configuration input (lncfg), strip the legacy
`--tor.v2` flag from the sample config, and remove the
`tor.OnionHostToFakeIP` helper. Operator entry points (`--externalip`,
`--listen`, `lncli connect`, `lncli wtclient towers add`) fail fast on
a v2 `.onion` string, so upgrading nodes must remove any v2 entry from
`lnd.conf` before lnd will start.

Filter persisted v2 state before use without rewriting on-disk records:
the self-announcement builder strips any v2 entry inherited from the
stored self-node; the watchtower client drops v2 entries from each
persisted tower's address list (skipping the tower entirely if no
non-v2 address remains); the autopilot connector, graph bootstrapper,
and static-channel backup restore paths skip v2 entries before
attempting outbound dials. Restrict the Tor controller's ADD_ONION
path to v3 keys, including the encrypted on-disk legacy-key fallback.

For inbound announcements, keep the wire codec wire-faithful:
`lnwire.WriteOnionAddr`, `graph/db.encodeOnionAddr`, and the matching
decoders round-trip v2 bytes so `DataToSign` reproduces the bytes the
remote peer signed, signature validation succeeds, and the announcement
is persisted to the graph DB and re-broadcast across restarts byte-for-
byte. RPC surfaces continue to expose the full address set so external
tools can independently reproduce and verify the signed bytes.

Add a netann regression test that signs a [v3, v2, ipv4] announcement,
round-trips it through Encode/Decode, verifies the signature, and
confirms the resulting models.Node preserves the v2 entry. Add a
graph bootstrapper test asserting v2 entries are skipped while v3 and
plain TCP entries on the same node still surface as bootstrap
candidates.

(cherry picked from commit 2ae1db83b3)
2026-05-26 10:25:30 +00:00
Olaoluwa Osuntokun
0b41a1f2f6
docs: add neutrino headers import documentation
Document the neutrino fast sync feature that allows importing block and
filter headers from local files or HTTP URLs on startup. Cover
configuration for mainnet (block-dn.org), testnet3, testnet4, signet,
file format details, security considerations, and troubleshooting.

(cherry picked from commit 594024a312)
2026-05-22 09:37:13 -03:00
Olaoluwa Osuntokun
df04aafc2a
contractcourt+itest: tests for coop close insta-dispatch
In this commit, we add three focused unit tests in contractcourt
plus an itest that exercises the regression end-to-end.

The chain watcher harness gains an opt-in early-dispatch capture that
records every notifyEarlyCoopClose invocation so tests can assert how
many fired and what summaries they carried. On top of that:

TestEarlyDispatchCoopClose verifies the headline behavior. An
async-path coop close fires exactly one early dispatch with
IsPending=true and the post-N-conf flow still produces the regular
CooperativeCloseInfo downstream.

TestEarlyDispatchForceCloseNotInvoked guards the carve-out: force
closes never fire the early dispatch since their CLOSED_CHANNEL
event timing is intentionally unchanged.

TestEarlyDispatchReorgRefiresOnReReplacement nails down the reorg
path. Once a deep reorg removes the close, the early-dispatch flag
is cleared and the next coop close re-fires the early event with its
own summary, so a subscriber observes each distinct close attempt.

testZeroConfCoopCloseSubscribeEvents brings up a zero-conf channel
between Alice and Bob with --dev.force-channel-close-confs=3 so the
chain watcher takes the async multi-confirmation path. Alice
subscribes to channel events, initiates a cooperative close, and the
test asserts that CLOSED_CHANNEL fires after only one confirmation
of the close tx (not after the full three) and that
FULLY_RESOLVED_CHANNEL arrives once the close has reached three
confirmations. A quiet-window assertion at the end verifies that
exactly one CLOSED_CHANNEL event is delivered. If the suppression in
MarkChannelClosed broke and let it re-fire NotifyClosedChannel at N
confs, this assertion would catch the duplicate.

(cherry picked from commit eaa2d6824e)
2026-05-21 22:43:40 -03:00
Olaoluwa Osuntokun
ebfe7feae8
multi: rename "taproot" channel type to mean production variant
In this commit, we shuffle the CLI and RPC names so the bare "taproot"
identifier refers to the production taproot channel type (final
scripts, feature bits 80/81), i.e. the variant new integrations should
actually be using. Before this commit, "taproot" on the CLI mapped to
the staging bits, and anyone who wanted a real production taproot
channel had to spell out "taproot-final" on `lncli openchannel` or
`SIMPLE_TAPROOT_FINAL` over RPC. The recommended choice was hidden
behind the longer name.

On the CLI (`lncli openchannel --channel_type=...`):

  - "taproot" now selects the production variant (it used to mean
    staging).
  - "taproot-staging" is added for the legacy development bits, for
    peers that haven't moved over yet.
  - "taproot-final" stays as a deprecated alias for "taproot" so
    existing scripts don't break.

On the RPC (`CommitmentType`):

  - `TAPROOT = 7` is added as the canonical name for the production
    type. `SIMPLE_TAPROOT_FINAL = 7` is kept as a deprecated alias via
    `option allow_alias = true`, so existing clients keep compiling
    against the same Go constant and the wire value doesn't change.
  - `SIMPLE_TAPROOT = 5` (staging) is unchanged.
  - `SIMPLE_TAPROOT_OVERLAY = 6` is unchanged. The taproot-assets
    daemon hard-codes this distinct enum value, so it's unaffected.

Wire compat is preserved end-to-end: only the comments, enum entry
order, and the CLI string-to-enum mapping change. The numeric values
and the existing generated Go identifiers stay stable.

(cherry picked from commit 0aa1d8bdd6)
2026-05-21 19:12:35 +08:00
yyforyongyu
82d36222c1
docs: clarify taproot channel open defaults
(cherry picked from commit 654b680a2c)
2026-05-21 19:12:30 +08:00
Olaoluwa Osuntokun
0113f6c9df docs: release-note zero-value WitnessUtxo remote-sign fix
Add the bug-fix entry under 0.21.0 with a link to the PR.

(cherry picked from commit 44f2ef7ef0)
2026-05-20 01:23:19 +00:00
Erick Cestari
c7a94f692c docs: document deprecated RPC and field removals in 0.21 release notes
Add entries to the Breaking Changes section covering the payment and
tracking RPCs and the `outgoing_chan_id` field removed in this branch,
all of which were announced for removal in 0.21 via the 0.20 release
notes.

(cherry picked from commit 05bdb6633c)
2026-05-19 16:01:20 +00:00
Erick Cestari
2e728d3bb6 proto: remove deprecated SendPayment, SendToRoute, TrackPayment RPCs
Remove the following deprecated RPC definitions that were announced for
removal in 0.21 via the 0.20 release notes:

lnrpc:
  - SendPayment (bidirectional streaming)
  - SendPaymentSync
  - SendToRoute (bidirectional streaming)
  - SendToRouteSync

routerrpc:
  - SendPayment (streaming)
  - SendToRoute
  - TrackPayment (streaming)

Also remove the now-unused PaymentState enum and PaymentStatus message
that were only used by the deprecated TrackPayment response stream, plus
the corresponding REST annotations from the yaml files.

Drop the now-orphan routerrpc.SendToRouteResponse message that was only
referenced by the deleted routerrpc.SendToRoute RPC.

Also remove the deprecated outgoing_chan_id field from
lnrpc.QueryRoutesRequest (tag 14) and routerrpc.SendPaymentRequest
(tag 8); their tag numbers are now reserved. Callers must use the
multi-channel outgoing_chan_ids field introduced in 0.20.

Drop the compat fallback in router_backend.go that previously consumed
the field, and regenerate all protobuf, gRPC, REST gateway, JSON, and
swagger files.

(cherry picked from commit d0768f0f78)
2026-05-19 16:01:20 +00:00
George Tsagkarelis
0e41fa7f4c docs: add release note for SIMPLE_TAPROOT_FINAL follow-ups
See https://github.com/lightningnetwork/lnd/pull/10763.

(cherry picked from commit 33f623c855)
2026-05-05 15:18:30 +00:00
ziggie
e631b63c08
docs: release note for closed-channel tombstones on KV-SQL backends
Document the tombstone close path that #10780 wires onto sqlite/postgres,
the operator-visible iteration-cost growth that comes from leaving closed
chanBuckets on disk, and the NumForwardingPackages divergence that the
preserved forwarding-package bucket produces in PendingChannels.

(cherry picked from commit 1a52e85b94)
2026-05-04 12:22:11 -03:00
ziggie
6e0c537b26 docs: fix Contributors TOC anchor in v0.21.0 release notes
The TOC link for the Contributors section pointed to `#contributors`,
but GitHub generates the anchor for `# Contributors (Alphabetical
Order)` as `#contributors-alphabetical-order`, leaving the link
broken when the rendered file is viewed on GitHub. Update the TOC
to use the working anchor (matching the form already used in
release-notes-0.18.0.md).

(cherry picked from commit c0b417c79c)
2026-04-28 22:23:10 +00:00
Gijs van Dam
323760fd7b docs: add release note for same-peer onion message cycle drop
Record the onion-message same-peer cycle drop from #10754 under a new
Robustness subsection in the 0.21.0 release notes.

(cherry picked from commit 84ec3cb233)
2026-04-17 17:10:22 +00:00
Olaoluwa Osuntokun
8e91bcc463 docs: add release note for onion message rate limiting (#10713)
Add a single consolidated release note describing the onion-message
rate-limiting feature introduced earlier in this branch: the per-peer
and global byte-denominated token-bucket limiters, their defaults and
the four tunable flags, the 0/0 disable rule and the startup-time
rejection of invalid combinations, the channel-presence gate that
drops ingress from peers with no fully open channel, and the
protocol.onion-msg-relay-all opt-out for operators who want to accept
traffic from channel-less peers. Trimmed to the operator-facing
essentials; longer-form prose about the adversary model, the layers,
default sizing, and operator recipes lives in
docs/onion_message_rate_limiting.md, which the note links to.
2026-04-15 13:23:50 -07:00
Olaoluwa Osuntokun
fc1ac5c638 docs: add onion message rate limiting explainer
Introduce docs/onion_message_rate_limiting.md, a prose explainer for
operators and contributors that covers the two-layer defense on the
onion message ingress path: the channel-presence gate that turns peer
identity into a capital cost, and the byte-denominated per-peer and
global token-bucket rate limiters that run behind it. The doc walks
through the adversary first so that each layer has a concrete thing
to defend against, then covers the knobs, the startup-time validation
rules, the default sizing, and the protocol.onion-msg-relay-all
escape hatch with its explicit tradeoff against Sybil resistance. A
short operator recipes section collects the common "I want to ..."
configurations so readers do not have to reconstruct them from the
principles.

No code change; documentation only.
2026-04-15 13:23:50 -07:00
Olaoluwa Osuntokun
91e35c4d5a docs/release-notes: add release note for production taproot channels 2026-04-13 12:21:42 -07:00
Olaoluwa Osuntokun
ac71ea7559 discovery+funding+peer+server: migrate gossip result to actor.Future[error]
In this commit, we eliminate the three buffered chan error patterns in
the discovery package and replace them with actor.Promise[error]/
actor.Future[error]. The old pattern is error-prone: if a channel is
completed more than once (e.g. when a deferred message copy is
re-enqueued and processed again), the second write to a capacity-1
channel blocks forever. actor.Promise.Complete() is idempotent via
sync.Once, so the second call is always a safe no-op regardless of
whether anyone holds a reference to the Future.

Additionally, PropagateChanPolicyUpdate previously blocked on <-errChan
after enqueuing a policy update with no quit-channel check, creating a
latent deadlock if the gossiper shut down between enqueue and send. It
now uses AwaitGossipResult with a ContextFromQuit-derived context, so
shutdown is always respected.

This is an atomic migration that updates all callers in the same
commit so each commit builds standalone. The three main pieces are:

discovery

networkMsg.err chan error becomes errPromise actor.Promise[error].
chanPolicyUpdateRequest.errChan chan error becomes errPromise.
syncTransitionReq.errChan chan error becomes errPromise. All ~65 sites
that previously wrote to the error channel now call
completeGossipResult(nMsg.errPromise, err) instead.

ProcessRemoteAnnouncement and ProcessLocalAnnouncement now return
actor.Future[error] instead of chan error. The capacity-2 buffer
comment on ProcessRemoteAnnouncement, which was itself a workaround
for the old pattern, is removed along with the TODO referencing the
actor model redesign. ProcessSyncTransition in syncer.go follows the
same pattern: the errChan select is replaced with AwaitGossipResult
using a ContextFromQuit-derived context.

funding

The SendAnnouncement function type in funding.Config changes from
returning chan error to returning actor.Future[error]. The call sites
in addToGraph and announceChannel are updated to await the future with
AwaitGossipResult, passing a context derived from f.quit via
ContextFromQuit. Shutdown signals (context.Canceled and
discovery.ErrGossiperShuttingDown) are both mapped to
ErrFundingManagerShuttingDown via the new mapGossipError helper, which
also factors out the duplicated graph-rejected / unknown-error
handling. The three mock SendAnnouncement implementations in
manager_test.go are updated accordingly.

peer+server

In peer/brontide.go, the ProcessRemoteAnnouncement call in the gossip
stream handler intentionally discards the result since remote gossip
messages are fire-and-forget from the peer's perspective. The old
comment explaining why the chan error was unsafe to use is replaced
with a note that an unawaited Future[error] carries no overhead.

In server.go (applyChannelUpdate), the previous select on errChan and
the quit channel is replaced with ContextFromQuit + AwaitGossipResult.
2026-04-10 19:16:49 -07:00
ziggie
a10cd1699f
docs: add release note for network separation safeguard
This is in particular important when running with a postgres
backend.

This only works if you run LND with the native sql flag but
people should run it with this flag from 21 on anyways.
2026-04-10 12:04:04 +02:00
Elle
27e50765b6
Merge pull request #10717 from ellemouton/g175-filter-known-chan-ids-v2
graph/db: make FilterKnownChanIDs version-aware
2026-04-09 17:05:51 +05:45
ziggieXXX
6dd4094c24
Merge pull request #10719 from ziggie1984/hodlqueue-stop-order-fix
htlcswitch: fix hodlQueue deadlock by stopping htlcManager first
2026-04-09 12:23:24 +02:00
ajaysehwal
bb1b56f3fe docs: add release notes for Android 16KB page size 2026-04-09 14:09:51 +05:30
ziggie
15135222ea
docs: add release-notes for 21 2026-04-09 10:20:29 +02:00
Elle Mouton
4d85877a05
docs: add release note for FilterKnownChanIDs versioning 2026-04-09 10:45:49 +05:45
Matthew Zipkin
39639056ad
docs: update release notes 2026-04-08 10:41:58 -04:00
ziggie
85c8e95514
docs: add release note for cursor-based invoice pagination 2026-04-01 10:55:43 +02:00
Elle Mouton
f3d9b1f2a4
docs: add release note for v1 node horizon query optimization 2026-03-31 12:05:45 +02:00
Elle Mouton
f38daf81dd
docs: add release note for versioned graph horizon queries 2026-03-31 09:14:50 +02:00
ziggieXXX
137e5b1a16
Merge pull request #10666 from ziggie1984/fwd-history-purge
multi: add DeleteForwardingHistory to selectively purge old forwarding history
2026-03-30 18:45:03 +02:00
ziggie
a5fcc8191a
docs: add release-notes for LND 21 2026-03-30 17:39:46 +02:00