LL
← All projectsLightning Labs

LND

Go implementation of a complete Lightning Network node.

BitcoinLightning NetworkNormal
Repository coverage

1399 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

142security candidates195second-pass queue1287AI analyses
86commits · 30 days
186commits · 60 days
609commits · 180 days
1247commits · 365 days
Backfill bands
Aug 5 → Feb 6405 seen5 candidatesComplete
Feb 6 → Jun 6665 seen28 candidatesComplete
Jun 6 → Jul 689 seen4 candidatesComplete
Jul 6 → Aug 569 seen0 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

67/100 average clarity
322Strong · 80–100
655Adequate · 60–79
391Thin · 40–59
31Opaque · 0–39
1security candidate with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Olaoluwa Osuntokun20942204474
Elle Mouton26832268167
ziggie44416413165
Yong28513171
LNBiG111173
Jared Tobin909171
bitromortac661153071
yyforyongyu83861068
Erick Cestari26726070
Andras Banki-Horvath11311072
Gijs van Dam33230073
ziggieXXX2026070
Analysis record

Published AI watches

Last scanned 39 minutes ago

Moderate 62 AI analysisMessage 58 · Thin
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11212 from ziggie1984/disable-legacy-channels

This change stops LND from opening new Lightning channels using the old 'legacy' commitment format. The legacy format makes it harder to recover funds if something goes wrong, because the money owed to you is tied to a secret key that chan…

Prevents opening new channels with the legacy commitment type, whose tweaked to_remote output complicates data-loss recoveryCloses a negotiation path where an empty channel_type TLV bypassed feature checks and forced a legacy channelAdds explicit RPC and wire rejection with a dedicated error code
112cb5f3by ziggieXXX+265−4716 files
Vendor flagged security relevance
Moderate 56 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11223 from gijswijs/legacy-dust-retribution-fix

This update fixes a bug in how LND handles old-style punishment transactions when a channel partner tries to cheat. Previously, tiny (dust) HTLCs were left as blank placeholder entries in the punishment data, which could cause the node to …

nil-pointer dereference risk in breach retribution pathlegacy revocation log handling inconsistency with modern formatdefensive hardening added for trimmed/dust HTLCs
500ca51fby ziggieXXX+168−146 files
No security note in commit
Moderate 62 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11190 from Roasbeef/zpay32-reject-duplicate-payment-hashes

This change tightens how LND reads Lightning invoices (BOLT 11). Previously, if an invoice contained more than one payment hash field, LND would silently keep the first one and ignore the rest. Now it rejects the invoice entirely. The rele…

Behavior change from 'use first duplicate field' to 'reject duplicate fields'New error type ErrDuplicatePaymentHash returned on duplicate payment hash fieldsMalformed/unsupported-length duplicate payment hash now treated as duplicate and rejected
86306f89by Yong+147−106 files
No security note in commit
Moderate 62 AI analysisMessage 98 · Strong
LL Lightning LabsLND BitcoinLightning Network

zpay32: reject duplicate payment hash fields

This change tightens how LND reads Lightning invoices. Previously, if an invoice contained more than one payment hash field, LND would silently keep the first valid one and ignore the rest. Now it rejects such invoices outright. This preve…

Behavioral change from silent first-field acceptance to explicit rejection of duplicate payment hash fieldsPrevents invoice parsing from depending on field ordering when multiple payment hashes are presentCovers malformed first field + valid second field, closing a potential bypass
e2f27063by Olaoluwa Osuntokun+147−106 files
Vendor flagged security relevance
Moderate 53 AI analysisMessage 58 · Thin
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11132 from yyforyongyu/task-11129-pong

This change fixes how LND answers network 'ping' messages from other Lightning nodes. Previously, LND would sometimes silently ignore valid pings to limit reply traffic, which violates the Lightning protocol (BOLT 1) and could make a peer …

Protocol compliance fix: BOLT 1 requires a Pong for every valid PingRemoved silent suppression of Pong replies that could cause peer timeout/misbehaviorUnified rate limiting now accounts for amplification bandwidth, not just ping count
d3d1f1d0by Olaoluwa Osuntokun+274−1715 files
Vendor flagged security relevance
Low 33 AI analysisMessage 90 · Strong
LL Lightning LabsLND BitcoinLightning Network

itest: stop creating legacy channels

This commit updates LND's integration tests to stop using an obsolete 'legacy' channel type and adds a test confirming that LND now rejects that legacy type. The commit message says the real fix is elsewhere in the same pull request: previ…

Deprecated commitment format (legacy) is now rejected by RPCTest added to verify legacy channel type is refusedUnused legacy node configuration flag removed
03d8b09dby ziggie+24−85 files
No security note in commit
Moderate 60 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11198 from gijswijs/amp-setlocal-reconstruction-fix

This change fixes a bug in LND's handling of AMP (Atomic Multi-Path) payments. Previously, if one partial payment set failed to reconstruct its secret preimage, the entire invoice was canceled, including unrelated partial payment sets from…

Denial-of-service against reusable static AMP invoices by causing unrelated accepted HTLC sets to be canceledIncorrect invoice state transition from set-local failure to global invoice cancellationAvailability impact on multi-payer AMP invoice scenarios
88959aecby Olaoluwa Osuntokun+155−44 files
Vendor flagged security relevance
Low 29 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11200 from ziggie1984/build-go-1.27.1

This commit updates the Go programming language version used to build LND from 1.25.13/1.26.6 to 1.26.8 (language version) and 1.27.1 (toolchain). It also regenerates many automatically generated RPC files and adjusts linter settings. The …

Go version bump may indirectly address unlisted runtime/standard-library security fixesLarge regenerated protobuf files suggest dependency/toolchain refresh rather than logic changeLinter configuration expanded to suppress new checks, consistent with a toolchain upgrade
ef4820e5by Olaoluwa Osuntokun+4932−412670 files
No security note in commit
Informational 15 AI analysisMessage 92 · Strong
LL Lightning LabsLND BitcoinLightning Network

build: adopt focused golangci-lint v2.13 checks

This commit is a routine build-maintenance change. It updates the project's Go linter configuration to a newer version and fixes the resulting style warnings: a WebSocket header spelling and several documentation comments that didn't start…

bada7ea3by ziggie+27−1911 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
LL Lightning LabsLND BitcoinLightning Network

lnrpc: regenerate protos with Go 1.27

This commit is a housekeeping change that regenerates automatically generated RPC binding files using a newer Go compiler version. The only differences are in code comments (doc-comment formatting), not in actual program logic or API behav…

dd523108by ziggie+4501−369826 files
No security note in commit
Informational 20 AI analysisMessage 100 · Strong
LL Lightning LabsLND BitcoinLightning Network

build: fix Go 1.27 compatibility

This commit is a routine build-and-test maintenance patch to make the LND codebase compile and pass tests with the upcoming Go 1.27 release. It upgrades the project's custom linter tool, refreshes many indirect tool dependencies, adjusts o…

No production code changesNo vulnerability fix or CVE reference presentDependency-only refresh in tools module (development tooling)
6b54a387by ziggie+365−3706 files
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
LL Lightning LabsLND BitcoinLightning Network

build: bump Go language and toolchain versions

This commit is a routine maintenance update that changes which version of the Go programming language is used to build the lnd project. It does not change any application logic, fix a bug, or address a security vulnerability. The project i…

b1f9ca66by ziggie+39−3930 files
No security note in commit
Moderate 60 AI analysisMessage 83 · Strong
LL Lightning LabsLND BitcoinLightning Network

invoices: cancel only the failing AMP set on reconstruction failure

This commit fixes a bug in LND's invoice handling for reusable AMP (Atomic Multi-Path) invoices. Previously, if one payment set failed to reconstruct its preimage, the entire invoice was canceled, even though other valid payment sets on th…

Denial-of-service-like availability impact: a malicious or buggy payer could cause a whole reusable AMP invoice to be canceled, blocking legitimate concurrent payersSet-local failure incorrectly escalated to invoice-global cancellationRegression test added for concurrent-set survival after reconstruction failure
d74ab6faby Gijs van Dam+141−42 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
LL Lightning LabsLND BitcoinLightning Network

bolt12: describe the lnwire dependency

This is a documentation-only change. A package comment was updated to accurately describe that the bolt12 codec library does depend on LND's lnwire package for low-level message types, while clarifying it still does not interact with the r…

5f53171dby bitromortac+3−21 file
No security note in commit
Moderate 60 AI analysisMessage 91 · Strong
LL Lightning LabsLND BitcoinLightning Network

bolt12: cover the amount overflow guard

This commit adds a test to ensure that when a BOLT 12 invoice is validated against a request, the multiplication of the offer amount by the requested quantity cannot overflow and wrap around to zero. Without this guard, a malicious or malf…

Integer overflow / wraparound in amount calculationMissing test coverage for security-critical branchBOLT 12 invoice amount validation
3c8e2bcbby bitromortac+47−01 file
Vendor flagged security relevance
Low 34 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11061 from bitromortac/2604-bolt12-1f

This commit adds the missing cryptographic signature layer for BOLT 12 offers in LND. It builds a Merkle tree from the message fields, signs that tree with a BIP-340 Schnorr signature, and now rejects invoice requests and invoices whose si…

Adds BIP-340 Schnorr signature verification for BOLT 12 invoice_request and invoice messagesMerkle tree commits to canonical re-encoded TLV records; non-minimal feature/amount encodings now rejected to preserve byte-exactnessSignature TLV type 240 and reserved range 240-1000 excluded from the signed Merkle root
1049d301by Yong+2076−7815 files
Vendor flagged security relevance
Low 35 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #11125 from bhandras/codex/reorg-aware-output-lock-20260825

This commit adds a new optional wallet feature to LND that lets users lock UTXOs until the transaction spending them reaches a chosen confirmation depth, instead of relying on a wall-clock timeout. It is a feature addition with safety chec…

New RPC fields release_after_spend_confs and confirmed_spend_height added to LeaseOutput and FundPsbtCustom lock ID enforced as required for confirmation-controlled FundPsbt leases; all-zero and reserved internal IDs rejectedCapability check (ResolveOutputLeaser) prevents silent downgrade to time-only lease when confirmation control is requested
80dde144by Yong+1293−10021 files
No security note in commit
Informational 19 AI analysisMessage 58 · Thin
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #10812 from ziggie1984/chanstate-kv-store-move

This commit is a large internal code reorganization for the LND Lightning node. It moves channel state storage logic from the `channeldb` package into a new `chanstate` package, while keeping the same database keys, serialization formats, …

Large refactoring with no change to cryptographic or consensus-critical logicCodec serialization moved verbatim to new package; wire format unchangedDatabase bucket keys and TLV record types preserved
62b0a073by Olaoluwa Osuntokun+3923−310924 files
No security note in commit
Low 25 AI analysisMessage 73 · Adequate
LL Lightning LabsLND BitcoinLightning Network

Merge pull request #10804 from GeorgeTsagk/close-immediately-itest-lnd-7c38

This change fixes a data-handling bug in LND's channel-opening code. When opening a Lightning channel using an optional 'auxiliary funding controller' (used for custom channel types such as Taproot Assets), the funding manager was previous…

Data-correctness fix in funding handshake: negotiated channel configs now exposed to auxiliary funding controllerAuxiliary funding controller receives incomplete channel state before patch, complete state after patchNo explicit security claim, CVE, or advisory referenced in commit or supplied materials
1e127653by Olaoluwa Osuntokun+291−254 files
No security note in commit
Moderate 60 AI analysisMessage 88 · Strong
LL Lightning LabsLND BitcoinLightning Network

bolt12: verify invoice_request and invoice signatures on read

This change makes LND's BOLT 12 invoice and invoice-request reader actually check that the digital signature is valid, instead of only checking that a signature field exists. Before, an attacker could craft or modify a BOLT 12 message and …

Missing cryptographic verification on parsed BOLT 12 messages replaced with BIP-340 Schnorr signature verificationReader accepted any 64-byte placeholder signature before the patchNew negative tests verify rejection of wrong-signer and tampered Merkle-root fields
aa8bd19fby bitromortac+272−723 files
Vendor flagged security relevance
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Lower-prioritydocs: add 0.21 release note for bitcoind miner testsby Andras Banki-Horvath · ad62f5fa · Mar 23, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Andras Banki-Horvath

docs: add 0.21 release note for bitcoind miner tests

72/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only adds a release note describing new test infrastructure. It documents that the project's integration-test framework gained the ability to use a bitcoind-backed miner backend, and that continuous integration now tests that combination. There is no code change, no bug fix, and no security-relevant behavior change in the software itself.

Lower-prioritymulti: Allow selecting miner backend in itestby Andras Banki-Horvath · df284348 · Mar 23, 2026 · 3 filesMessage 80 · StrongInformational 15Details
Commit message · Andras Banki-Horvath

multi: Allow selecting miner backend in itest

Add an itest flag to choose the miner backend (btcd vs bitcoind) and
provide a build-tag default so that `-tags=bitcoind` naturally uses a
bitcoind miner.

Wire the flag through `make testing_flags.mk` so callers can set
`minerbackend=bitcoind` independently of the chain backend.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This commit is a testing-only change. It adds a command-line flag so integration tests can choose which Bitcoin mining software (btcd or bitcoind) is used behind the scenes. It also tweaks one test to calculate transaction size locally instead of asking the miner for it. There is no change to production LND code or user funds.

Lower-prioritymulti: Run itests with bitcoind miner in CIby Andras Banki-Horvath · ccb3ec38 · Mar 23, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Andras Banki-Horvath

multi: Run itests with bitcoind miner in CI

Add a basic itest matrix entry that sets minerbackend=bitcoind alongside
backend=bitcoind, ensuring CI covers the bitcoind miner path.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only adds a new automated test configuration to the project's GitHub Actions CI workflow. It makes the test suite also run with a specific Bitcoin mining backend option (bitcoind). There are no code changes to the actual LND software, no bug fixes, and no security-related changes.

Lower-prioritymulti: Add bitcoind miner backend to lntestby Andras Banki-Horvath · 307e12ae · Mar 23, 2026 · 13 filesMessage 80 · StrongInformational 15Details
Commit message · Andras Banki-Horvath

multi: Add bitcoind miner backend to lntest

Introduce a miner backend interface and implement both btcd and
bitcoind-backed miners for lntest. This lets the harness drive mining
and mempool assertions using bitcoind in addition to btcd.

Also update harness helpers to avoid btcd-only assumptions (network
params, raw tx submission, funding shim output index lookup) and make
bitcoind miner disconnects more reliable.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This commit is purely a testing-infrastructure change. It adds a new option to run LND's integration tests against a bitcoind miner backend in addition to the existing btcd miner backend. It does not change any production LND node code, wallet logic, or consensus rules, so it cannot directly affect real users or funds.

Lower-prioritygraph/db: add startup context cancellationby Elle Mouton · ee4bc4dd · Mar 23, 2026 · 2 filesMessage 80 · StrongInformational 21Details
Commit message · Elle Mouton

graph/db: add startup context cancellation

Create a cancellable context in Start() and store its cancel function
on the struct. Stop() invokes it so that long-running DB iterations
(e.g. cache population) can be interrupted promptly during shutdown.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 21/100

This change improves how a background database service shuts down cleanly. It creates a cancel signal during startup and checks it inside long database loops, so shutdown isn't delayed by cache-loading work. There is no attacker-controlled path or security vulnerability shown in the diff; it is a robustness/clean-shutdown improvement.

Lower-prioritygraph/db: move graph disabled check to inside populateCacheby Elle Mouton · 24d6e9d6 · Mar 23, 2026 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · Elle Mouton

graph/db: move graph disabled check to inside populateCache

Refactor so that we don't have two layers of indentation later on when
we want to spin populateCache off into a goroutine.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This commit is a simple internal code cleanup. It moves a nil-check for an optional in-memory graph cache from the caller into the function that fills the cache. Behavior is unchanged: if the cache is disabled, the function returns immediately. There is no user-visible or security-relevant change.

Lower-prioritygraph/db: misc graphCache test updatesby Elle Mouton · 7f7b85ee · Mar 23, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Elle Mouton

graph/db: misc graphCache test updates

Clean up TestGraphCacheTraversal so that we are explicitly enabling the
graphCache. This removes the need to explicitly make calls to the cache.

Also remove a duplicate check from assertNodeNotInCache.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
AI analysis · Informational 15/100

This is a minor test-only cleanup in the LND codebase. It adjusts how a graph cache is enabled in one test and removes a redundant assertion in a helper function. There is no change to production code, no security fix, and no vulnerability.

Lower-prioritygraph/db: add cacheLoaded atomic boolby Elle Mouton · 19216ee3 · Mar 23, 2026 · 1 fileMessage 68 · AdequateLow 31Details
Commit message · Elle Mouton

graph/db: add cacheLoaded atomic bool

Use this to block reading from the cache unless cacheLoaded returns
true. This will start being useful once cache population is done
asynchronously.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 31/100

This commit adds a safety flag so that LND's in-memory channel graph cache is not read until it has been fully populated. It is a defensive correctness change that prevents callers from seeing incomplete or inconsistent graph data while the cache is still being built, especially once cache loading becomes asynchronous in the future. There is no direct evidence in the commit of an exploitable security vulnerability being fixed.

Lower-prioritygraph/db: don't let tests write to graphCacheby Elle Mouton · 3c251953 · Mar 23, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Elle Mouton

graph/db: don't let tests write to graphCache

Instead of letting tests set the graphCache to nil in order to simulate
it not being set, we instead make use of the WithUseGraphCache helper.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit only changes test code in LND's channel graph database tests. It replaces a hack where tests manually set an internal graphCache field to nil with a proper helper option, WithUseGraphCache(false). There is no change to production code, no security fix, and no vulnerability being addressed.

Lower-prioritydocs: add release-notes to LND release 21by ziggie · c455975d · Mar 19, 2026 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · ziggie

docs: add release-notes to LND release 21

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only adds documentation to the release notes for LND version 0.21.0. It describes two new informational fields added to an RPC response about pending channel closures. There is no code change, no bug fix, and no security-relevant behavior change.

Lower-priorityrouting: fix log output lineby ziggie · 86af342d · Mar 19, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · ziggie

routing: fix log output line

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This is a trivial log message formatting fix. The original debug log line had a formatting placeholder but no value supplied, which would have printed an ugly '%!d(MISSING)' in logs. The patch adds the missing count so the log line displays correctly. It has no security relevance.

Lower-priorityitest: add test for blocks_til_closed fieldby ziggie · 3992dbbe · Mar 19, 2026 · 1 fileMessage 78 · AdequateInformational 14Details
Commit message · ziggie

itest: add test for blocks_til_closed field

Add an integration test that verifies the blocks_til_closed field and
the close_height field in the WaitingCloseChannel RPC response.
The test covers:

1. Initial state: shows full required confirmations when tx unconfirmed
2. Countdown: decrements as blocks are mined
3. Reorg handling: resets to full confirmations when close tx is
reorged out of the chain
4. Recovery: countdown resumes correctly after close tx is re-mined

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 14/100

This commit only adds new integration tests for an existing feature. It does not change production code, fix a bug, or alter behavior. The tests verify that a counter showing how many blocks remain until a cooperative channel close is final behaves correctly, including when the blockchain reorganizes. There is no security issue in this change itself.

Lower-prioritylnrpc+rpcserver: add new info to WaitingCloseChannelby ziggie · 8b4ecf6b · Mar 19, 2026 · 4 filesMessage 73 · AdequateInformational 19Details
Commit message · ziggie

lnrpc+rpcserver: add new info to WaitingCloseChannel

Add a new fields blocks_til_closed and close_height to the
WaitingCloseChannel message in PendingChannels RPC response.
This shows users how many more blocks until the waiting close
channel will be fully closed and removed.

The required confirmations are determined by CloseConfsForCapacity which
scales based on channel capacity for reorg safety. If the close tx is
not yet confirmed, the full required confirmations are shown.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 19/100

This commit adds two new informational fields to the PendingChannels RPC response in the LND Lightning node: one showing how many more blocks until a waiting close channel is considered final, and another showing the block height when the closing transaction was first confirmed. It is a user-facing informational enhancement, not a security fix or vulnerability.

Lower-prioritychanneldb: add CloseConfirmationHeight field to track close tx confirmationby ziggie · 09e46297 · Mar 19, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · ziggie

channeldb: add CloseConfirmationHeight field to track close tx confirmation

This commit adds a new CloseConfirmationHeight field to the OpenChannel
struct which records the block height at which the closing transaction
was first confirmed. This is stored using TLV encoding (TlvType9) for
backwards compatibility.

A new MarkCloseConfirmationHeight method is added to persist this value,
which can be called when the closing tx confirms and also supports
updates in case of chain reorgs.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit adds a new database field to record the block height at which a Lightning channel's closing transaction was confirmed. It is a straightforward data-model change with no security-relevant behavior visible in the diff. There is no fix for a vulnerability here—just new bookkeeping to support tracking how many confirmations a channel close has received and to handle blockchain reorganizations.

Lower-prioritycontractcourt: track close confirmation height in chain watcherby ziggie · 577f25c1 · Mar 19, 2026 · 1 fileMessage 73 · AdequateInformational 22Details
Commit message · ziggie

contractcourt: track close confirmation height in chain watcher

Update the chain watcher to set and reset the CloseConfirmationHeight
field when monitoring a channel close. When a spend is detected, we
record the spending height so users can see remaining confirmations.
When a reorg removes the close tx from the chain, we reset the height
to 0 to reflect that the transaction is no longer confirmed.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 22/100

This commit improves how LND records the block height at which a channel-closing transaction is confirmed. It stores the confirmation height when a close is detected and clears it if a blockchain reorganization removes the transaction. This is a bookkeeping/UI improvement rather than a fix for a known security vulnerability.

Security candidatelnwire: validate MuSig2 nonce points on wire decodeby Erick Cestari · 7517295e · Mar 19, 2026 · 6 filesMessage 73 · AdequateModerate 62Details
Commit message · Erick Cestari

lnwire: validate MuSig2 nonce points on wire decode

Add point-on-curve validation for MuSig2 public nonces at the TLV
decode layer. A MuSig2 nonce is 66 bytes (two 33-byte compressed
secp256k1 public keys). Previously, nonce bytes were accepted without
validation, with invalid points only failing later during MuSig2
session creation deep in the signing flow. Now, malformed nonces from
a peer are rejected immediately at decode time with clear errors.

This hardens all nonce-carrying messages: ClosingComplete (JIT closer
nonces in PartialSigWithNonce), ClosingSig (NextCloseeNonce), Shutdown,
ChannelReestablish, CommitSig, and others.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarydefensive validationnonce handling
AI analysis · Moderate 62/100

This change tightens input checking for a special type of cryptographic value (a MuSig2 nonce) that peers send to each other in Lightning Network messages. Before, a peer could send bytes that looked like a nonce but were not valid points on the Bitcoin curve; those invalid values would only be caught later, deep inside the signing code. Now they are rejected immediately when the message is first decoded. This is a defensive hardening fix: it makes the protocol more robust against malformed or malicious peer input and prevents potential crashes or unexpected behavior in the signing flow.

Lower-prioritypayments/db/migration1: sync bugfixes from main sql_storeby ziggie · dd73f1e4 · Mar 19, 2026 · 1 fileMessage 73 · AdequateInformational 23Details
Commit message · ziggie

payments/db/migration1: sync bugfixes from main sql_store

In this commit, we backport two bugfixes from the main sql_store into
the frozen migration1 snapshot that were accidentally missed when
arranging the commits.

The first fix corrects the resolution timestamps for settled and failed
HTLC attempts. The old code passed time.Now() instead of
settleInfo.SettleTime.UTC() and failInfo.FailTime.UTC(), which would
have overwritten the historical timestamps with the current wall clock
on write.

The second fix adds a deterministic sort by SequenceNum after
QueryPayments collects results from the map, ensuring a stable ordering
across calls.

Note that neither SettleAttempt, FailAttempt, nor QueryPayments are
invoked by the migration code itself — the migration only writes
historical KV data into SQL and reads it back for validation. These
changes are included purely for completeness so the frozen snapshot
doesn't silently carry known bugs.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 23/100

This commit fixes two bugs in a frozen copy of LND's payment database code used during data migration. One bug would overwrite historical success/failure timestamps with the current time when updating old payment attempts. The other bug made payment list ordering non-deterministic. The commit message explicitly states these fixed functions are not actually called by the migration itself, so the fixes are for completeness rather than active vulnerability remediation.

Lower-prioritysqldb+paymentsdb: improve filterpayments efficiencyby ziggie · 845ebe6f · Mar 19, 2026 · 4 filesMessage 73 · AdequateLow 29Details
Commit message · ziggie

sqldb+paymentsdb: improve filterpayments efficiency

In this commit, we fix a gap that was introduced when the payment DB
commits were arranged for the main line. The `migration1` package
already had the updated `FilterPayments` query using `COALESCE` for
the index bounds and a separate `FilterPaymentsDesc` query for
reverse-ordered pagination, but the corresponding changes in
`sqldb/sqlc` and the main `sql_store.go` were accidentally left out.

The old `FilterPayments` used OR-based nullable params for the
`created_at` bounds (e.g., `p.created_at >= $3 OR $3 IS NULL`). On
Postgres, mixing nullable text fallbacks in a `COALESCE` with
timestamp columns causes a type mismatch error. The OR-based approach
also prevents the query planner from using the `created_at` index.
We fix this by providing non-nullable `time.Time` params from the Go
side, defaulting to epoch start and year 9999 when no filter is set.

We also drop the `Reverse` param from `FilterPaymentsParams` and
instead introduce a dedicated `FilterPaymentsDesc` query that orders
by `p.id DESC`. This avoids the conditional `CASE WHEN` ordering
trick, which some planners handle poorly.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 29/100

This commit fixes a database query used to list Lightning Network payments. The old query could fail on Postgres with a type-mismatch error and was inefficient because it couldn't use a date index. The fix supplies default date bounds from the Go code, removes a problematic 'reverse' ordering trick, and adds a separate descending-order query. It is a correctness/performance bug fix rather than a security vulnerability.

Lower-prioritydocs: remove gossiper deadlock fix entry from 0.21.0 release notesby ziggie · 7a2a4ef5 · Mar 18, 2026 · 1 fileMessage 93 · StrongInformational 15Details
Commit message · ziggie

docs: remove gossiper deadlock fix entry from 0.21.0 release notes

The gossiper deadlock fix (PR #10540) was already included in the
v0.20.1 release, so the entry should not appear again in the 0.21.0
release notes.

93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only edits the release notes document for version 0.21.0. It removes a duplicate mention of a previously released gossiper deadlock fix and removes one contributor's name from the credits list. No program code is changed, so this has no direct security effect on the software itself.

Lower-prioritydocs: release notes entries removed for prs merged with release v0.20.1by saubyk · 13063769 · Mar 17, 2026 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · saubyk

docs: release notes entries removed for prs merged with release v0.20.1

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only removes two entries from the draft release notes for version 0.21.0. The entries describe bug fixes that were already merged into the earlier 0.20.1 release, so they are being deleted from the wrong document. No code was changed, and no new security issue is introduced or fixed by this commit.

Lower-prioritydocs: add missing v0.20.1 release notes from release branchby saubyk · 84e82bfe · Mar 17, 2026 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · saubyk

docs: add missing v0.20.1 release notes from release branch

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only adds text to the release notes document for version 0.20.1. It describes several previously merged bug fixes (TLS file handling, database race conditions, SQL connection limits, feature-bit parsing, and a gossiper deadlock), but it does not change any source code, configuration, or executable behavior. By itself, it cannot introduce or fix a security issue.

Lower-priorityitest: add a payments db itest similar to invoices and graphby ziggie · 4f73b4a0 · Mar 17, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · ziggie

itest: add a payments db itest similar to invoices and graph

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only adds a new integration test. It does not change any production code, so it cannot introduce a security vulnerability by itself. The test checks that a database migration for payment records works correctly and that new payments are written to the new database after the migration.

Lower-prioritylnd: add clarifiying comment when introducing a new dbby ziggie · f56e933a · Mar 17, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · ziggie

lnd: add clarifiying comment when introducing a new db

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only adds a clarifying code comment. No code behavior changes. It warns future developers that when promoting database migrations from test to production, they must also update which backend is used, otherwise production builds might keep using the older KV backend instead of the newer native SQL backend. There is no security vulnerability in this change itself.

Lower-prioritylnd: use sql store for payments in normal buildby ziggie · 8f11732a · Mar 17, 2026 · 3 filesMessage 45 · ThinInformational 15Details
Commit message · ziggie

lnd: use sql store for payments in normal build

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit changes how LND stores payment data in normal production builds, switching from an older key-value database backend to a newer SQL-based backend. It removes build-specific code differences so that both normal and test-native-SQL builds use the same SQL payments store. There is no indication in the commit of a security bug, vulnerability fix, or exploit.

Security candidatechanneldb: add V2 (taproot) waiting proof codec supportby Elle Mouton · fd239c18 · Mar 17, 2026 · 4 filesMessage 73 · AdequateInformational 18Details
Commit message · Elle Mouton

channeldb: add V2 (taproot) waiting proof codec support

Introduce the WaitingProofInner interface and two concrete
implementations — V1WaitingProof (AnnounceSignatures1) and
V2WaitingProof (AnnounceSignatures2 + optional aggregate MuSig2 nonce).

WaitingProof.Encode/Decode now dispatch on the type prefix byte added
in the previous commit, so the store can transparently persist either
proof variant.

The gossiper is updated with a V1 type assertion to maintain existing
behaviour; full V2 gossiper integration will follow when taproot channel
announcements are wired up.

No live code path creates V2 waiting proofs yet — this commit only
lands the codec and storage readiness so the schema is in place before
new writers are introduced.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarynonce handling
AI analysis · Informational 18/100

This commit adds database support for a new kind of channel-announcement proof used by upcoming taproot channels. It does not change any live network behavior; it only prepares the code so future taproot features can store their proofs safely. Existing V1 proofs keep working exactly as before, and the gossiper is explicitly restricted to V1 proofs only.