LDK
← All projectsLightning Dev Kit

rust-lightning

Composable Rust libraries for building Lightning wallets, nodes, and services.

BitcoinCryptographic librariesLightning NetworkNormal
Repository coverage

1497 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.

225security candidates209second-pass queue1479AI analyses
71commits · 30 days
205commits · 60 days
663commits · 180 days
1488commits · 365 days
Backfill bands
Aug 5 → Feb 6819 seen18 candidatesComplete
Feb 6 → Jun 6468 seen16 candidatesComplete
Jun 6 → Jul 6128 seen8 candidatesComplete
Jul 6 → Aug 561 seen3 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.

69/100 average clarity
359Strong · 80–100
790Adequate · 60–79
288Thin · 40–59
60Opaque · 0–39
3security candidates 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.
Elias Rohrer15315153667
Matt Corallo35847356473
Jeffrey Czyz17741177168
Wilmer Paulino14939149169
Leo Nash11613116162
Valentine Wallace13710135169
Vincenzo Palazzo10210184
Joost Jager16224162069
elnosh301330056
shaavan22622069
Carla Kirk-Cohen78366068
benthecarman18318071
Analysis record

Published AI watches

Last scanned 53 minutes ago

Low 32 AI analysisMessage 91 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Only fetch TXIDs instead of entire block during gossip verification' (#4846)

This commit changes how the Lightning Dev Kit's block-sync module verifies Lightning network gossip announcements. Instead of downloading entire Bitcoin blocks (which can be large), it now downloads only the list of transaction IDs for a b…

API surface change in UtxoSource traitReduced data exposure: no longer fetches full blocks for gossip verificationNew JSON parsing for txid lists and TxOut values
ebe7a447by Matt Corallo+275−1025 files
No security note in commit
Low 35 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Allow filtered block rescans at the current tip' (#4847)

This commit changes how the Lightning Dev Kit (LDK) node software handles receiving the same block twice through its filtered-block interface. Previously, calling filtered_block_connected with the current tip again would trigger an asserti…

Assertion relaxation in block connection pathPotential denial-of-service vector removed: previously a malicious or buggy filter provider could crash the node by replaying the current tipNew test coverage for same-block filtered rescan
54ddbd0bby Matt Corallo+177−486 files
No security note in commit
Informational 15 AI analysisMessage 83 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Add test framework coverage of `Listen` block connection replays

This commit only adds a new test mode to the project's internal testing framework. It lets developers simulate a specific way blocks are delivered to the Lightning node (a 'replay' through the Listen interface) so that behavior is covered …

bf6ad23eby Matt Corallo+18−32 files
No security note in commit
Informational 15 AI analysisMessage 83 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Update functional test block connection to detect block replays

This commit changes only internal test helper code in the Lightning Dev Kit repository. It makes the functional test framework smarter about 'block replays'—situations where the same block is fed to a test node more than once—so the fake b…

No production code modifiedNo cryptographic, consensus, or networking changesCommit message frames change as test-framework correctness, not security
477facb4by Matt Corallo+41−333 files
No security note in commit
Moderate 66 AI analysisMessage 73 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Correct HTLC confusion on unrevoked counterparty commitment txs

This patch fixes a bug in the Lightning Dev Kit where the software could confuse HTLCs (payment contracts) on live, unrevoked counterparty commitment transactions with ones from old, revoked transactions. Previously, it relied only on whet…

Incorrect revocation state detection for counterparty commitment transactionsHTLC direction not previously checked when matching against pending HTLCsPromotion of debug assertions to full assertions for HTLC claim path consistency
f06a08a6by Matt Corallo+26−192 files
Vendor flagged security relevance
Low 47 AI analysisMessage 85 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Return `Err`s` instead of panicking on oversized messages

This commit changes how the Lightning networking code handles oversized encrypted messages. Previously, certain conditions would cause the program to crash with a panic. Now the code returns errors instead, which is a defensive improvement…

panic-to-error conversion for oversized message encryption/decryptiondenial-of-service hardening against oversized peer messagesdebug_assert retained to preserve test coverage of invariant violations
08f12bc7by Matt Corallo+68−313 files
Vendor flagged security relevance
Moderate 62 AI analysisMessage 85 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Avoid panicking when attempting to send an oversized message

This commit fixes a crash bug in the Lightning Dev Kit's peer message handling. Previously, if a message grew too large to be sent over the encrypted peer connection, the code would panic (abruptly terminate the whole program). The patch m…

Replaces a `.expect()` panic path with a fallible `Result` in peer message encryptionAdds graceful peer disconnection when a critical message cannot be sentIncludes a regression test for oversized-message handling
c5fdc3bfby Matt Corallo+148−901 file
Vendor flagged security relevance
High 74 AI analysisMessage 78 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Avoid oversized relayed failure messages

This patch fixes a crash bug in the Lightning Dev Kit's handling of HTLC failure messages. A downstream peer could send a maximally-sized failure message without attribution data. When the node added its own attribution data while relaying…

Denial-of-service via remote-triggered panic in message encryptionOversized message exceeding Noise/Lightning wire framing limitMissing length validation before adding attribution data during relay
6b1dfb1aby Matt Corallo+64−191 file
Vendor flagged security relevance
Moderate 64 AI analysisMessage 83 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Reject attempts to advance one-hop blinded forward paths

This commit fixes a denial-of-service bug in rust-lightning where a maliciously crafted one-hop blinded reply path could cause the node to panic when it tried to respond. The fix rejects paths with too few hops before advancing them, and a…

Denial-of-service vector via malformed blinded pathPanic in onion construction due to zero-hop pathUntrusted reply path input validation gap
969a40cfby Matt Corallo+49−14 files
Vendor flagged security relevance
High 72 AI analysisMessage 96 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

lightning-types: replace Zl/Zp separators in `PrintableString`

This commit fixes a log-forgery risk in a Rust Lightning library helper called PrintableString. That helper is meant to make untrusted text safe to print by replacing dangerous characters with a placeholder. It already caught most control …

log injection / log forgery via U+2028/U+2029 line separatorsincomplete input sanitisation in PrintableStringpeer-controlled strings (node alias, BOLT 12 description/issuer/payer_note, peer_msg) as attack surface
75defa9cby Vincenzo Palazzo+63−83 files
Vendor flagged security relevance
Moderate 69 AI analysisMessage 73 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Apply the unfunded channel peer limit to all unaccepted channels

This commit fixes a rate-limiting bug in the Lightning Dev Kit (LDK) that let a single peer bypass the cap on how many different peers can have unfunded (not-yet-funded) channels open. Previously, if a peer sent multiple channel requests q…

Denial-of-service resource exhaustion via rapid inbound channel open requestsLogic error in rate-limiting conditionRegression test added for the bypass scenario
56a4ee43by Matt Corallo+87−62 files
Vendor flagged security relevance
Moderate 60 AI analysisMessage 88 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Allow filtered block rescans at the current tip

This commit fixes a bug where replaying the current blockchain block through a normal listener callback could crash two core Lightning components (ChannelManager and OutputSweeper) with a panic. The fix recognizes a same-block replay as a …

panic in chain listener callbacksame-block replay/rescan mishandlingassertion failure on valid chain input
686f9860by Elias Rohrer+118−123 files
Vendor flagged security relevance
Moderate 57 AI analysisMessage 78 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Avoid panic when reorged claims cannot merge

This commit fixes a crash bug in the Lightning Dev Kit's on-chain transaction handler. During a deep blockchain reorganization, a previously settled HTLC claim could be 'resurrected' at a block height where it could no longer be combined w…

Assertion/panic in reorg handling pathDeep blockchain reorg as trigger conditionHTLC claim resurrection after reorg
f1dc8487by Matt Corallo+219−52 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 45 · Thin
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Update crate repository links to forgejo

This commit simply updates the 'repository' web links in 15 package metadata files from GitHub to a self-hosted Forgejo instance. It does not change any program code, build logic, dependencies, or security behavior. There is no security is…

eb77676dby benthecarman+15−1515 files
No security note in commit
Low 45 AI analysisMessage 73 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Account for message type prefix len in prevtx length enforcement

This commit fixes a small but real accounting bug in how rust-lightning checks whether a previous transaction (prevtx) attached to a funding input will make the resulting Lightning wire message too large. The code previously compared the m…

Off-by-constant length check in protocol message size enforcementPotential acceptance of a prevtx that produces an oversized Lightning wire messageDenial-of-service / protocol-interop risk from peer message rejection
d29e1415by Wilmer Paulino+21−41 file
No security note in commit
Moderate 54 AI analysisMessage 73 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Retransmit splice_locked for 0-conf channels missing tx_signatures

This commit fixes a bug in the Lightning Dev Kit where, after a disconnection, a node could fail to retransmit a 'splice_locked' message to a peer that was still waiting for transaction signatures. Without this retransmission, the two peer…

Protocol state desynchronization between channel peers after reconnectionMissing retransmission of splice_locked for 0-conf splice channelsPotential channel unusability or stuck splice negotiation
5434015bby Wilmer Paulino+266−12 files
No security note in commit
Low 37 AI analysisMessage 83 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

bolt12: add pay_for_bolt12_invoice for externally-sourced invoices

This commit adds a new API, pay_for_bolt12_invoice, that lets users pay a BOLT 12 invoice even if LDK did not originally request it. It is intended for advanced use cases like multi-sender payments and replaces an older, more restrictive A…

New API removes internal invoice-origin verification, shifting trust boundary to callerDocumentation explicitly warns caller to verify invoice via Bolt12Invoice::verify_using_metadata and to ensure unique payment_id to avoid duplicate paymentsInput validation added for zero amount, overpay, and partial-amount-without-MPP
5b80fe9cby Alkamal01+550−156 files
No security note in commit
Low 26 AI analysisMessage 90 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Include to_self_delay size in DelayedPaymentOutput weight calculation

This commit fixes a small accounting bug in how the Lightning wallet estimates the size (and therefore transaction fee) of a special Bitcoin transaction that sweeps funds back to the user after a channel closes. The old code always assumed…

debug assertion failure possible in development/testing buildstransaction weight/fee estimate overestimation up to 3 WUconstant replaced with per-descriptor length computation
e6652237by Matt Morehouse+97−83 files
No security note in commit
Informational 18 AI analysisMessage 65 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Correct docs on `ChannelSigner::get_per_commitment_point`

This commit only updates documentation comments for a Rust function called get_per_commitment_point. It removes an outdated warning that the method was non-asynchronous and that returning an error could cause a crash, and replaces it with …

Documentation-only changeRemoves outdated panic warningAdds retry/unblock guidance for signer errors
5057809bby Matt Corallo+6−31 file
No security note in commit
Informational 16 AI analysisMessage 35 · Opaque
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

ln/refactor: remove BlindedTrampolineEntrypoint

This commit is a small internal code cleanup in the Lightning Dev Kit's Trampoline routing code. It removes a separate 'BlindedTrampolineEntrypoint' payload variant and folds an optional blinding point into the existing 'Forward' variant. …

Refactor-only change with no added bounds checks or validationNo mention of vulnerability, CVE, security fix, or bug in commit messageTLV field changed from required to optional, but only for a newly unified variant used in internal construction
3e0c2697by Carla Kirk-Cohen+8−263 files
No security note in commit
Repository ledger

Explore captured commits

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

Lower-priorityAccount for shared input EMPTY_SCRIPT_SIG_WEIGHTby Jeffrey Czyz · 75b7e802 · Aug 21, 2025 · 1 fileMessage 68 · AdequateLow 44Details
Commit message · Jeffrey Czyz

Account for shared input EMPTY_SCRIPT_SIG_WEIGHT

When splicing a channel, the previous funding output is spent and fees
for it are paid by the splice initiator. However, the witness weight was
not including EMPTY_SCRIPT_SIG_WEIGHT. Fix this and update the variable
name to make clear the weight needed is the input satisfaction.

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

This commit fixes a fee-calculation bug in an experimental Lightning channel-splicing feature. When two parties splice a channel, the initiator pays the on-chain Bitcoin transaction fee. The code previously forgot to count a small but mandatory 8-weight-unit 'empty script signature' cost for the old funding input it re-spends. That made the initiator's fee estimate slightly too low. The fix adds that missing weight, so the initiator contributes enough fee and the splice transaction is more likely to confirm at the intended fee rate. It is a correctness/economic bug, not a direct theft-of-funds vulnerability, but a low fee could cause a transaction to stall or be dropped from mempools.

Lower-priorityInclude invoice_slot in OfferPathsRequest messageby Valentine Wallace · 33291b62 · Aug 21, 2025 · 3 filesMessage 68 · AdequateInformational 18Details
Commit message · Valentine Wallace

Include invoice_slot in OfferPathsRequest message

In the initially-merged version of the static invoice server protocol, the
static invoice server would sometimes have to find a specific static invoice
based on (recipient_id, invoice_slot) and sometimes based on (recipient_id,
invoice_id). This made the API harder to use in terms of how the server would
index into the KVStore.

We'd like to transition to the server always finding a specific invoice based on
(recipient_id, invoice_slot) and get rid of the invoice_id concept.

Now that the invoice_slot is in the initial paths request, the server will be
able to include the slot in the offer paths that they create in response,
allowing the slot to be surfaced instead of the invoice_id when the invoice
request comes in, in upcoming commits.

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

This commit changes an internal Lightning protocol message so that a wallet tells a static invoice server which database 'slot' to use when storing an invoice. It is a protocol/API simplification, not a security fix. There is no evidence it prevents or fixes any exploit.

Lower-priorityRemove their_funding_contribution_satoshis from FundingNegotiationContextby Jeffrey Czyz · c9ddcbfc · Aug 20, 2025 · 2 filesMessage 63 · AdequateInformational 13Details
Commit message · Jeffrey Czyz

Remove their_funding_contribution_satoshis from FundingNegotiationContext

Once the counterparty supplies their funding contribution, there is no
longer a need to store it in FundingNegotiationContext as it will have
already been used to create a FundingScope.

63/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Provides detailed explanatory context
AI analysis · Informational 13/100

This commit removes an unused field that tracked how much money the other party was putting into a channel. The field was marked as dead code and only relevant for future dual-funding/splicing features. The commit message says the value is no longer needed because it has already been used to create a FundingScope. There is no indication of a security bug being fixed.

Lower-priorityRemove TransactionU16LenLimitedby Jeffrey Czyz · 70929ae8 · Aug 20, 2025 · 6 filesMessage 60 · AdequateLow 44Details
Commit message · Jeffrey Czyz

Remove TransactionU16LenLimited

TransactionU16LenLimited was used to limit Transaction serialization
size to u16::MAX. This was because messages can not be longer than
u16::MAX bytes when serialized for the transport layer. However, this
limit doesn't take into account other fields in a message containing a
Transaction, including the length of the transaction itself.

Remove TransactionU16LenLimited and instead check any user supplied
transactions in the context of the enclosing message (e.g. TxAddInput).

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode! Too few words to establish purpose
AI analysis · Low 44/100

This commit removes a wrapper that limited individual Bitcoin transactions to 65,535 bytes. The old limit was too generous in some places and too strict in others: it did not account for other fields in the same message, so a transaction just under the limit could still make the overall wire message too large. The patch moves the size check into the context of the enclosing message (TxAddInput) and lets the transaction field hold a normal Bitcoin transaction. It is a correctness/refactoring change for the Lightning protocol implementation, not a clear-cut remote exploit.

Security candidateCheck splice contributions against SignedAmount::MAX_MONEYby Jeffrey Czyz · 9bd2144d · Aug 20, 2025 · 3 filesMessage 78 · AdequateModerate 60Details
Commit message · Jeffrey Czyz

Check splice contributions against SignedAmount::MAX_MONEY

Splice contributions should never exceed the total bitcoin supply. This
check prevents a potential overflow when converting the contribution
from sats to msats. The commit additionally begins to store the
contribution using SignedAmount.

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
memory safety
AI analysis · Moderate 60/100

This commit fixes a potential integer overflow in the experimental splicing feature of the Lightning Dev Kit. When a user or peer tried to splice a channel with a contribution larger than the total Bitcoin supply (about 21 million BTC), the code could overflow while converting the amount from satoshis to millisatoshis. The patch adds explicit checks that reject contributions above SignedAmount::MAX_MONEY and begins storing contributions using the safer SignedAmount type instead of raw i64 values. The bug is only reachable through the still-experimental splicing code path.

Security candidateInclude witness weights in FundingNegotiationContextby Jeffrey Czyz · 33273821 · Aug 20, 2025 · 3 filesMessage 73 · AdequateInformational 12Details
Commit message · Jeffrey Czyz

Include witness weights in FundingNegotiationContext

ChannelManager::splice_channel takes witness weights with the funding
inputs. Storing these in FundingNegotiationContext allows us to use them
when calculating the change output and include them in a common struct
used for initiating a splice-in.

In preparation for having ChannelManager::splice_channel take
FundingTxContributions, add a weight to the
FundingTxContributions::InputsOnly, which supports the splice-in use
case.

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

This commit is a straightforward internal refactoring in the Lightning Dev Kit codebase. It changes how transaction 'witness weights' (a measure of data size) are stored alongside funding inputs during channel creation and splicing. The weights are now kept in a shared negotiation context so they can be used later when calculating change outputs. There is no indication this fixes a security bug; it appears to be preparatory cleanup for upcoming dual-funding and splicing features.

Lower-priorityFetch HolderCommitmentPoint::current_point on readby Jeffrey Czyz · 3ae8c4a6 · Aug 20, 2025 · 1 fileMessage 73 · AdequateLow 30Details
Commit message · Jeffrey Czyz

Fetch HolderCommitmentPoint::current_point on read

When reading HolderCommitmentPoint, attempt to fetch the current point
if it wasn't serialized. This allows channels to be spliced without
first needing to have the HolderCommitmentPoint advanced. Don't fail if
it can't be fetch synchronously as the channel can still be spliced once
it is advanced.

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

This change fixes a channel-recovery edge case in the Lightning Dev Kit. When an older serialized channel state is loaded after an upgrade, the code now tries to re-derive a missing 'current commitment point' from the signer instead of leaving it blank. That lets splicing work immediately after restore; if the signer cannot provide the point, the code falls back to the old behavior rather than failing. It is a robustness improvement, not a clear exploitable vulnerability.

Lower-prioritySet HolderCommitmentPoint::current_point on readby Jeffrey Czyz · 7a5a2a9c · Aug 20, 2025 · 1 fileMessage 68 · AdequateModerate 52Details
Commit message · Jeffrey Czyz

Set HolderCommitmentPoint::current_point on read

When introducing HolderCommitmentPoint::current_point, the value was
mistakenly not set when read except in the legacy case where the next
point needed to be fetched. But in that case, it would have been read as
None given it is a new field.

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

This is a one-line bug fix in a Bitcoin Lightning Network library. A new field called `current_point` was added to track a cryptographic key for the current channel state, but when loading older saved channel data, the code accidentally left it blank (None) instead of restoring the saved value. This could cause the node to lose track of the correct key for the current commitment transaction, potentially leading to failures when signing or broadcasting channel state updates. It appears to be a data-corruption-on-upgrade bug rather than an obvious remote exploit.

Lower-priorityFix comment regarding holder commitment pointby Jeffrey Czyz · fa9cb2e1 · Aug 20, 2025 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Jeffrey Czyz

Fix comment regarding holder commitment point

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

This commit changes a single word in a code comment, replacing 'current' with 'next' to accurately describe which commitment point is being populated when restoring a channel after an upgrade. There is no code change, no functional change, and no security impact.

Lower-priorityUse WarnAndDisconnect to fail a spliceby Jeffrey Czyz · 8ef76e9c · Aug 20, 2025 · 1 fileMessage 80 · StrongLow 41Details
Commit message · Jeffrey Czyz

Use WarnAndDisconnect to fail a splice

When the current holder commitment point is unavailable for a channel,
we can't splice the channel. Make sure to disconnect so that the channel
is no longer quiescent. Otherwise, it cannot be used for payments.

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

This tiny patch changes how one specific splicing failure is handled in a Lightning channel. Previously, when the local node's commitment point was not ready, the code only warned the peer. Now it also disconnects the peer. The goal is to take the channel out of a temporary 'quiet' (quiescent) state so it can be used for normal payments again. Without the disconnect, the channel could get stuck and be unable to process payments after a failed splice attempt. This is a reliability/availability fix rather than a direct theft-of-funds bug.

Lower-priorityRe-phrase splice_channel error messageby Jeffrey Czyz · 9d2d3687 · Aug 20, 2025 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Jeffrey Czyz

Re-phrase splice_channel error message

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

This commit only rewords an error message shown when a user tries to splice a Lightning channel before it is ready. No code behavior, logic, or security boundary changes.

Lower-priorityMake `ChannelMonitor` round-trip tests more robustby Matt Corallo · a8ec9661 · Aug 19, 2025 · 2 filesMessage 83 · StrongInformational 16Details
Commit message · Matt Corallo

Make `ChannelMonitor` round-trip tests more robust

During testsing, we check that a `ChannelMonitor` will round-trip
through serialization exactly. However, we recently added a fix to
change a value in `PackageTemplate` on reload to fix some issues in
the field in 0.1. This can cause the round-trip tests to fail as a
field is modified during read.

We fix it here by simply exempting the field from the equality test
in the condition where it would be updated on read.

We also make the `ChannelMonitor` `PartialEq` trait implementation
non-public as weird workarounds like this make clear that such a
comparison is a britle API at best.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 16/100

This commit only changes test code and the visibility of an equality-checking feature. It makes a test comparison ignore a field that gets rewritten when data is loaded back from disk, and it hides the equality trait from public use because the comparison is fragile. There is no runtime security fix here.

Lower-priorityCorrect `test_dup_htlc_onchain_doesnt_fail_on_reload`by Matt Corallo · 0a6c3fb4 · Aug 19, 2025 · 1 fileMessage 63 · AdequateInformational 15Details
Commit message · Matt Corallo

Correct `test_dup_htlc_onchain_doesnt_fail_on_reload`

`test_dup_htlc_onchain_doesnt_fail_on_reload` made reference to
`ChainMonitor` persisting `ChannelMonitor`s on each new block,
which hasn't been the case in some time. Instead, we update the
comment and code to make explicit that it doesn't impact the test.

63/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Provides detailed explanatory context✓ Mentions testing or verification! Too few words to establish purpose
AI analysis · Informational 15/100

This commit only updates an internal test and its comments. It removes an outdated assumption that a component called ChainMonitor saves ChannelMonitors on every new block, and instead makes clear that the test does not rely on that behavior. There is no change to production code, no fix for a security issue, and no security relevance stated by the project.

Lower-priorityAllow quiescence-init while disconnected from peersby Matt Corallo · c7e4887d · Aug 19, 2025 · 2 filesMessage 73 · AdequateLow 26Details
Commit message · Matt Corallo

Allow quiescence-init while disconnected from peers

There are a number of things in LDK where we've been lazy and not
allowed the user to initiate an action while a peer is
disconnected. While it may be accurate in the sense that the action
cannot be started while the peer is disconnected, it is terrible
dev UX - these actions can fail without the developer being at
fault and the only way for them to address it is just try again.

Here we fix this dev UX shortcoming for splicing, keeping any
queued post-quiescent actions around when a peer disconnects and
retrying the action (and quiescence generally) when the peer
reconnects.

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

This commit improves developer experience in the Lightning Dev Kit by allowing users to request a channel pause (called 'quiescence') even when the peer is temporarily disconnected. Previously, the action would fail and the developer had to retry manually. Now, the request is remembered and automatically retried when the peer reconnects. This is a usability fix, not a security bug fix, and the commit message explicitly frames it as a developer-experience improvement.

Lower-priorityStop skipping the line in quiescence if our peer speaks firstby Matt Corallo · dd024982 · Aug 19, 2025 · 2 filesMessage 85 · StrongLow 27Details
Commit message · Matt Corallo

Stop skipping the line in quiescence if our peer speaks first

In the case where we prepare to initiate quiescence, but cannot yet
send our `stfu` because we're waiting on some channel operations to
settle, and our peer ultimately sends their `stfu` before we can,
we would detect this case and, if we were able, send an `stfu`
which would allow us to send "something fundamental" first.

While this is a nifty optimization, its a bit overkill - the chance
that both us and our peer decide to attempt something fundamental
at the same time is pretty low, and worse this required additional
state tracking.

We simply remove this optimization here, simplifying the quiescence
state machine a good bit.

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

This commit removes a small optimization in the Lightning quiescence protocol. Previously, if both sides were about to request a pause (quiescence) at nearly the same time, the code tried to let one side 'go first' based on a tie-breaker. The commit simplifies this by always treating the peer that sends its pause message first as the initiator. This is a cleanup change that reduces state-tracking complexity and lowers the chance of subtle state-machine bugs, but it does not by itself fix a known active exploit.

Lower-priorityAdd a `QuiescentAction` to track why we're going quiescentby Matt Corallo · e15c2f59 · Aug 19, 2025 · 2 filesMessage 85 · StrongInformational 18Details
Commit message · Matt Corallo

Add a `QuiescentAction` to track why we're going quiescent

When we initiate quiescence, it should always be because we're
trying to accomplish something (in the short term only splicing).
In order to actually do that thing, we need to store the
instructions for that thing somewhere the splicing logic knows to
look at once we reach quiescence.

Here we add a simple enum which will eventually store such actions.

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 18/100

This commit adds internal bookkeeping so that when a Lightning channel enters a quiet 'pause' state (called quiescence), the code remembers what action triggered the pause. Right now the only action is a placeholder used in tests, so this is a development-only infrastructure change with no immediate security impact on users.

Lower-priorityMove `test_peer_storage` to `reload_tests`by Matt Corallo · c6103e6e · Aug 19, 2025 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · Matt Corallo

Move `test_peer_storage` to `reload_tests`

In general we shouldn't be adding new tests in `channelmanager.rs`

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit simply moves an existing test function from one file to another within the project's test suite. No production code, behavior, or security properties changed. It is a code-organization cleanup with no security relevance.

Lower-priorityCorrect comments and flow in `test_peer_storage`by Matt Corallo · 2ce54796 · Aug 19, 2025 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Matt Corallo

Correct comments and flow in `test_peer_storage`

This cleans up `test_peer_storage` a bit to clarify what messages
are actually being exchanged.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit only rewrites comments and reorders assertions inside a single test function. It does not change any production code, cryptographic logic, network handling, or behavior visible to users. There is no security issue here.

Lower-priorityUpdate `test_peer_storage` style to match newer testsby Matt Corallo · 0a598a3c · Aug 19, 2025 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Matt Corallo

Update `test_peer_storage` style to match newer tests

...somewhat cleaning up rustfmt crust.

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This commit is a minor cleanup of a single test file. It introduces local variables for node IDs and reuses an Init message object to make the test code shorter and more readable. There is no change to production code or to the test's actual behavior.

Lower-priorityAdd debug assertions on revoked counterparty tx number fetchingby Matt Corallo · 9d9cfe65 · Aug 19, 2025 · 1 fileMessage 73 · AdequateInformational 16Details
Commit message · Matt Corallo

Add debug assertions on revoked counterparty tx number fetching

We actually store the latest counterparty revoked commitment
transaction number in two places in `Channel` - as
`context.cur_counterparty_commitment_transaction_number + 2` and
in `commitment_secrets`.

Here we add a debug assertion that both values are equal.

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

This commit adds an internal consistency check (a debug-only assertion) to make sure two different places storing the same counterparty commitment transaction number agree. It does not change release behavior, fix a known bug, or alter how funds are secured. It is a defensive code-quality improvement.

Lower-priorityRevert fuzz changes in 61bc1e06e75113238501e7ce29e793aa3ba43778by Matt Corallo · 8d86558e · Aug 19, 2025 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · Matt Corallo

Revert fuzz changes in 61bc1e06e75113238501e7ce29e793aa3ba43778

This reverts the changes to `fuzz/src/full_stack.rs` in commit
61bc1e06e75113238501e7ce29e793aa3ba43778 which were spuriously
included after a rebase and ultimately broke the fuzzing test.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit reverts two accidental changes in a fuzzing test file. The changes were mistakenly included during a previous rebase and caused the fuzzing test to break. The fix restores the original expected test values so the fuzz test passes again. There is no indication this affects real Lightning node behavior or introduces a security vulnerability.

Lower-priorityAllow building Invoice from Bolt11InvoiceDescriptionRefby benthecarman · 9066f628 · Aug 18, 2025 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · benthecarman

Allow building Invoice from Bolt11InvoiceDescriptionRef

Small annoyance I found when updating in one of my downstream projects.
Now that there are 2 types of Bolt11InvoiceDescription you can't just
copy one from one invoice to a new one. This makes it so we can again
build an invoice from the ref version.

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 small convenience method to make it easier to copy invoice descriptions from one Lightning invoice to another. It is a routine developer-experience improvement with no apparent security relevance.

Lower-priorityCheck correct commitment number/point in initial commitment_signedby Jeffrey Czyz · c8af714f · Aug 18, 2025 · 1 fileMessage 73 · AdequateModerate 57Details
Commit message · Jeffrey Czyz

Check correct commitment number/point in initial commitment_signed

When splicing a channel, the initial commitment_signed received should
use the same commitment number and point previously received prior to
splicing the channel. Account for this by checking the commitment_signed
against that one instead, which is now stored separately in
FundedChannel.

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

This patch fixes a logic bug in how a Lightning node validates the first commitment signature after a channel splice. Previously, the code checked the new commitment against the wrong commitment number and public key, which could cause the node to reject a valid splice or, in some edge cases, accept an inconsistent state. The fix stores and compares against the commitment number and point that were actually in use before the splice.

Lower-priorityUse correct commitment number/point in initial commitment_signedby Jeffrey Czyz · 87db06ab · Aug 18, 2025 · 1 fileMessage 73 · AdequateModerate 54Details
Commit message · Jeffrey Czyz

Use correct commitment number/point in initial commitment_signed

When splicing a channel, the initial commitment_signed should use the
same commitment number and point previously sent. Account for this by
adjusting these to use the previous commitment number and point, since
the next expected one is stored.

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

This patch fixes a bug in the Lightning Dev Kit's channel-splicing code. When a channel is being spliced, the first new commitment transaction was being built with the wrong commitment number and the wrong counterparty public key (the 'commitment point'). The fix makes the code use the previous commitment number and the previous commitment point instead, matching what the counterparty already expects. Using the wrong values could cause the commitment transaction to be rejected or, in the worst case, lead to an invalid or unenforceable on-chain transaction if a dispute arises.

Security candidateDrop outdated async signing commentby Jeffrey Czyz · 13c81a15 · Aug 18, 2025 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Jeffrey Czyz

Drop outdated async signing comment

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

This commit removes an outdated code comment and adjusts how a future commitment public key is serialized to disk. It is a cleanup/refactoring change with no apparent security relevance.