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
74commits · 30 days
208commits · 60 days
663commits · 180 days
1491commits · 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 42 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.

Security candidateCorrect EOF handling in stream read in `ChaChaDualPolyReadAdapter`by Matt Corallo · 423844de · Oct 6, 2025 · 1 fileMessage 91 · StrongModerate 60Details
Commit message · Matt Corallo

Correct EOF handling in stream read in `ChaChaDualPolyReadAdapter`

When `ChaChaDualPolyReadAdapter` encounters an EOF (`Read::read`
returns `Ok(0)`) while trying to drain the stream (even though the
`FixedLengthReader` thinks it has available space) we'll end up
infinite-looping trying to drain the stream looking for
`Read::read` to return an `Err` (which it won't).

The fix is, of course, simple, to detect the EOF signal.

Found by the `onion_message_target` fuzzer which @dergoegge ran.
Thanks to @morehouse for digging deeper on the specific fuzz test
case and thoroughly reporting the underlying causes.

Fixes #4139.

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidencecryptography-sensitive path
AI analysis · Moderate 60/100

This commit fixes a bug in rust-lightning's encrypted stream reader where reaching the end of a data stream could cause the program to get stuck in an endless loop instead of stopping cleanly. The fix makes the reader recognize the end-of-stream signal and return a 'short read' error. The bug was found by a fuzz tester, not reported as an active attack.

Lower-priorityTrivially replace `wake_by_ref` with `wake`.by Matt Corallo · 1bea7a81 · Oct 4, 2025 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Matt Corallo

Trivially replace `wake_by_ref` with `wake`.

`Waker::wake_by_ref` is allowed to be less efficient than
`Waker::wake` and given we have ownership we might as well use the
more efficient one.

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

This is a one-line performance micro-optimization in Rust's async waker code. It changes a waker call from 'wake without consuming' to 'wake and consume' because the code already owns the waker and no longer needs it. There is no security relevance.

Lower-priorityRustfmt handle_new_monitor_updateby Valentine Wallace · c00571c5 · Oct 1, 2025 · 1 fileMessage 40 · ThinInformational 15Details
Commit message · Valentine Wallace

Rustfmt handle_new_monitor_update

We'll be breaking up this macro in upcoming commits.

40/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body! Too few words to establish purpose
AI analysis · Informational 15/100

This commit is purely a code-formatting cleanup. It rewrites a Rust macro called handle_new_monitor_update to follow the project's rustfmt style rules, splitting long lines and adjusting braces. No logic, behavior, or security properties of the code are changed.

Security candidateWipe splice state upon failed interactive funding constructionby Wilmer Paulino · 6d2b110a · Sep 30, 2025 · 3 filesMessage 73 · AdequateLow 44Details
Commit message · Wilmer Paulino

Wipe splice state upon failed interactive funding construction

An interactive funding construction can be considered failed upon a
disconnect or a `tx_abort` message. So far, we've consumed the
`InteractiveTxConstructor` in the latter case, but not the former.
Additionally, we may have splice-specific state that needs to be
consumed as well to allow us to negotiate another splice later on.

This commit ensures that we properly consume all splice and interactive
funding state whenever possible upon a disconnect or `tx_abort`.

The interactive funding state is safe to consume as long as we have
either yet to reach `AwaitingSignatures`, or we have but `tx_signatures`
has not been sent/received. In all of these cases, we also make sure to
clear the quiescent state flag such that we're able to resume processing
updates on the channel.

The splice state is safe to consume as long as we don't have a pending
`FundingNegotiation::AwaitingSignatures` with a `tx_signatures`
sent/received and we don't have any negotiated candidates. Note that
until splice RBF is supported, it is not currently possible to have any
negotiated candidates with a pending interactive funding transaction.

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 · Low 44/100

This commit fixes a state cleanup bug in the Lightning Dev Kit's handling of failed or aborted splice negotiations. Previously, if a peer disconnected during a splice negotiation, the channel could be left in a 'quiescent' (frozen) state and retain leftover splice data, preventing future splice attempts and possibly blocking normal payments. The patch ensures that when a splice fails before signatures are exchanged, all related temporary state is cleared both on disconnect and when a tx_abort message is received, and it adds tests for these scenarios.

Lower-priorityConsume InteractiveTxConstructor after error checksby Jeffrey Czyz · 0956efdb · Sep 30, 2025 · 2 filesMessage 73 · AdequateLow 32Details
Commit message · Jeffrey Czyz

Consume InteractiveTxConstructor after error checks

InteractiveTxConstructor contains the users contributed inputs. When an
interactive tx sessions is aborted, the user will need to be notified
with an event indicating which inputs and outputs were contributed. This
allows them to re-use inputs that are no longer in use. This commit
ensures the InteractiveTxConstructor is only consumed after all error
checking. That way, in the case of a failure, we're able to produce an
event from its input data.

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

This change fixes a bookkeeping problem in Lightning Dev Kit's interactive transaction negotiation. Previously, if something went wrong while finalizing a funding or splicing transaction, the list of inputs and outputs the user had contributed could be lost before the user could be told about them. The patch delays consuming that constructor object until after all error checks pass, so on failure the software can still report which coins were involved and let the user spend them again. It is a correctness/availability improvement rather than a remote exploit.

Lower-priorityUse u16 for ConstructedTransaction::shared_input_indexby Jeffrey Czyz · 0ecbe629 · Sep 29, 2025 · 1 fileMessage 73 · AdequateInformational 18Details
Commit message · Jeffrey Czyz

Use u16 for ConstructedTransaction::shared_input_index

The number of inputs allowed during an interactive-tx construction
session is limited to 4096, so a u16 can be used instead of u32 when
serializing ConstructedTransaction.

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

This commit narrows a numeric field used to track a shared transaction input from a 32-bit integer to a 16-bit integer. The change is safe because the protocol already caps the number of inputs at 4,096, which fits comfortably in a 16-bit value. It is a small cleanup or consistency fix, not a security patch.

Lower-priorityStore shared output index in ConstructedTransactionby Jeffrey Czyz · dc672f12 · Sep 29, 2025 · 1 fileMessage 85 · StrongInformational 20Details
Commit message · Jeffrey Czyz

Store shared output index in ConstructedTransaction

Currently, only the shared input index is stored in
ConstructedTransaction. This will be used later to filter out the shared
input when constructing an error during interactive tx negotiation.
Store the shared output index as well so that the shared output can be
filtered out as well.

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

This commit is a small internal cleanup in the code that builds Bitcoin funding transactions for the Lightning interactive-tx protocol. It records the position of the shared funding output inside a data structure, just as the shared input position was already recorded. The immediate change only refactors how the code checks that the shared output exists, and it adds serialization for the new field. There is no direct security fix here, but it prepares the ground for later error-handling logic that will need to ignore the shared output when building protocol error messages.

Lower-priorityKeep InteractiveTxConstructor contributed inputs and outputsby Jeffrey Czyz · 8ca05a86 · Sep 29, 2025 · 1 fileMessage 85 · StrongInformational 11Details
Commit message · Jeffrey Czyz

Keep InteractiveTxConstructor contributed inputs and outputs

Instead of popping each input and output to contribute during an
interactive tx session, clone the necessary parts and keep around the
original inputs and outputs. This will let us reuse them later when
constructing an error. The tradeoff is using additional memory to avoid
more code complexity required to extract the sent input and outputs from
NegotiationContext.

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

This commit is a small internal refactor in the code that builds Bitcoin transactions for Lightning channel operations. It changes how the list of inputs and outputs is walked through during the interactive transaction protocol: instead of permanently removing each item from the list as it is sent, the code now keeps the original list and advances an index. The commit message says this is done so the original inputs and outputs can be reused later when constructing an error. There is no direct security fix visible in the diff itself, and no public references claim otherwise.

Lower-priorityMake `util::async_poll` publicby Matt Corallo · 16e4ece7 · Sep 28, 2025 · 2 filesMessage 50 · ThinInformational 16Details
Commit message · Matt Corallo

Make `util::async_poll` public

We have several interfaces that rely on types from `async_poll`, so
it clearly needs to be public.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
AI analysis · Informational 16/100

This commit changes an internal Rust utility module from private to public so that other parts of the library can use its types. It is a routine API-visibility change with no security implications.

Lower-priorityMake background-processor `NO_*` constants actually `Send` + `Sync`by Matt Corallo · e040fcdc · Sep 28, 2025 · 1 fileMessage 73 · AdequateLow 25Details
Commit message · Matt Corallo

Make background-processor `NO_*` constants actually `Send` + `Sync`

In 0d59d73c55f873e9d78703763ae97de47c186bd8 we added constants to
better enable users to call background processor methods without
optional parameters. Sadly, they didn't work for the async BP as
they weren't actually `Send` + `Sync`, which we fix here.

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

This commit fixes Rust type definitions for placeholder constants used when starting the Lightning background processor without optional components. The constants were supposed to be usable in multi-threaded and async code, but they were missing required Send and Sync markers, meaning async users could not actually compile code using them. The fix adds those markers and adjusts related type aliases. It is a compile-time API usability fix, not a runtime vulnerability patch.

AI review queuedGive the `get_change_destination_script` future access to `self`by Matt Corallo · b81fedc7 · Sep 28, 2025 · 1 fileMessage 73 · AdequateInformational 13Details
Commit message · Matt Corallo

Give the `get_change_destination_script` future access to `self`

Its generally useful for trait methods to be able to access `self`,
sadly our definition of `get_change_destination_script` was screwed
up and couldn't. Luckily its an easy fix as none of the callsites
care about the extra `self` lifetime.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 13/100

This is a small Rust API cleanup. It changes one method signature so that the future it returns can safely borrow from the object it is called on. There is no security bug being fixed and no behavior change for callers.

Lower-priorityDrop `OutputSweeper` non-`BestBlock` `Readable` implementationby Matt Corallo · 61aba250 · Sep 26, 2025 · 1 fileMessage 85 · StrongLow 42Details
Commit message · Matt Corallo

Drop `OutputSweeper` non-`BestBlock` `Readable` implementation

`OutputSweeper`, like any `Confirm`/`Listen` client, needs to have
the chain synced back up on startup. Thus, like `ChannelMonitor`
and `ChannelManager`, we force users to `read` it via a method that
gives them the latest chain tip so that they can sync.

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

This commit removes an older, less-safe way to restore the OutputSweeper object from disk. The old method let users load it without providing the current blockchain tip, which could leave the sweeper unaware of recent blocks and potentially miss on-chain events it needs to react to. The remaining method forces callers to supply the latest 'best block' so the sweeper can resync on startup, matching how other critical components already work. It is a hardening/correctness change rather than a clear-cut remote exploit fix.

Lower-priorityAdd missing `Listen`/`Readable`/methods for `OutputSweeperSync`by Matt Corallo · 2917fd2e · Sep 26, 2025 · 1 fileMessage 65 · AdequateInformational 23Details
Commit message · Matt Corallo

Add missing `Listen`/`Readable`/methods for `OutputSweeperSync`

It appears we just forgot to add these when we added the sync
wrapper.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 23/100

This commit fills in missing plumbing for a synchronous wrapper around an existing async component (OutputSweeperSync). It adds the ability to receive block updates, handle chain reorganizations, and restore state from disk—features that the async version already had but the sync wrapper lacked. The change is best described as a bug fix / API completeness patch rather than a direct security vulnerability. However, missing these interfaces could have caused a node to miss on-chain events, which in a Lightning context can eventually lead to loss of funds if outputs aren't swept in time.

Lower-priorityrustfmt: Remove skip from request_refund_paymentby shaavan · 6e197de6 · Sep 26, 2025 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · shaavan

rustfmt: Remove skip from request_refund_payment

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

This commit is purely a code-formatting cleanup. It removes a `#[rustfmt::skip]` directive from a Rust function and lets rustfmt reformat the code. There is no functional change, no bug fix, and no security relevance.

Lower-priorityRefactor: Introduce `get_payment_info` closure for invoice creationby shaavan · d2dd871c · Sep 26, 2025 · 2 filesMessage 97 · StrongLow 31Details
Commit message · shaavan

Refactor: Introduce `get_payment_info` closure for invoice creation

To ensure correct Bolt12 payment flow behavior, the `amount_msats`
used for generating the `payment_hash`, `payment_secret`,
and payment path must remain consistent. Previously, these steps
could inadvertently diverge due to separate sources of `amount_msats`.

This commit refactors the interface to use a `get_payment_info` closure,
which captures the required variables and provides a single source of
truth for both payment info (payment_hash, payment_secret) and path
generation. This ensures consistency and eliminates subtle bugs
that could arise from mismatched amounts across the flow.

97/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Low 31/100

This commit is a code cleanup (refactor) in a Bitcoin Lightning Network library. It changes how invoice creation gets its payment details so that the amount used to build the payment hash, secret, and payment path all come from one place instead of potentially different places. The commit message says this prevents subtle bugs from mismatched amounts, but the actual code change does not appear to fix any currently reachable bug by itself. It is a defensive improvement rather than a clear security fix.

Security candidateIntroduce specific InvoiceBuilders in OffersMessageFlowby shaavan · 68510017 · Sep 26, 2025 · 2 filesMessage 73 · AdequateInformational 12Details
Commit message · shaavan

Introduce specific InvoiceBuilders in OffersMessageFlow

This change improves type safety and architectural clarity
by introducing dedicated `InvoiceBuilder` methods tied to
each variant of `VerifiedInvoiceRequestEnum`.

With this change, users are now required to match on the
enum variant before calling the corresponding builder method.
This pushes the responsibility of selecting the correct
builder to the user and ensures that invalid builder
usage is caught at compile time, rather than relying
on runtime checks.

The signing logic has also been moved from the builder
to the `ChannelManager`. This shift simplifies the
builder's role and aligns it with the rest of the API,
where builder methods return a configurable object that
can be extended before signing. The result is a more
consistent and predictable interface that separates
concerns cleanly and makes future maintenance easier.

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 code cleanup and API redesign in the Lightning Dev Kit library. It splits one large internal method into two smaller, type-specific methods and moves invoice signing from a helper into the main ChannelManager. The change is described by the authors as improving compile-time safety and making the API more consistent. There is no indication in the commit that it fixes a security bug or vulnerability.

Security candidateIntroduce VerifiedInvoiceRequest<S: SigningPubkeyStrategy>by shaavan · eeb5d244 · Sep 26, 2025 · 6 filesMessage 63 · AdequateInformational 24Details
Commit message · shaavan

Introduce VerifiedInvoiceRequest<S: SigningPubkeyStrategy>

This commit reintroduces `VerifiedInvoiceRequest`, now parameterized by
`SigningPubkeyStrategy`.

The key motivation is to restrict which functions can be called on a
`VerifiedInvoiceRequest` based on its strategy type. This enables
compile-time guarantees — ensuring that an incorrect `InvoiceBuilder`
cannot be constructed for a given request, and misuses are caught early.

63/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Provides detailed explanatory context
Why it was queued
signing boundary
AI analysis · Informational 24/100

This commit is a code-quality and type-safety refactor in rust-lightning's BOLT12 offers handling. It reintroduces VerifiedInvoiceRequest with a generic signing-key strategy so the Rust compiler can prevent mismatched invoice builders (e.g., trying to use automatically derived keys when explicit keys are required). The change itself does not fix a runtime crash or a known exploit; it makes a class of programming mistakes impossible at compile time. There is no vendor statement that this is a security fix, and no independent researcher is credited.

Lower-priorityRefactor: Convert fields function to macroby shaavan · 2a5f1682 · Sep 26, 2025 · 1 fileMessage 80 · StrongInformational 15Details
Commit message · shaavan

Refactor: Convert fields function to macro

In the following commits we will introduce `fields` function
for other types as well, so to keep code DRY we convert the
function to a macro.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit is a pure code cleanup: it takes an existing function and turns it into a reusable macro (template). The actual behavior of the code does not change; it is only reorganized so the same logic can be reused in future commits. There is no security-relevant change visible in the diff.

Lower-priorityDrop excess `Transaction` `clone` in LSPS2 serviceby Matt Corallo · 3292ef10 · Sep 26, 2025 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Matt Corallo

Drop excess `Transaction` `clone` in LSPS2 service

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

This commit is a minor code cleanup in the LSPS2 liquidity service. It removes an unnecessary copy (clone) of a Bitcoin transaction when retrieving and broadcasting a funding transaction. The change returns a reference to the existing transaction instead of duplicating it. There is no security issue here—only a small performance improvement and cleaner code.

Lower-priorityNote that balance entries remain as long as a splice has < 6 confsby Matt Corallo · 84a220d2 · Sep 26, 2025 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Matt Corallo

Note that balance entries remain as long as a splice has < 6 confs

This may be somewhat surprising, so it seems worth noting.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit only adds a documentation comment explaining an existing behavior in the code. It does not change any logic, fix any bug, or alter how the software operates. There is no security issue present in the change itself.

AI review queuedSupport client_trusts_lsp on LSPS2by Martin Saposnic · 8ce4147e · Sep 25, 2025 · 9 filesMessage 35 · OpaqueLow 34Details
Commit message · Martin Saposnic

Support client_trusts_lsp on LSPS2

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Low 34/100

This commit adds a new LSPS2 trust model called client_trusts_lsp. In this model, a Lightning Service Provider (LSP) delays broadcasting the Bitcoin funding transaction for a new channel until the client has actually paid the channel-opening fee via a forwarded payment. The commit also adds a new ChannelManager method that lets LDK validate a funding transaction without immediately broadcasting it. The changes are primarily a feature addition with safety checks to avoid broadcasting funding transactions after a channel has closed or force-closed.

Lower-priorityFix races when removing per-peer state from KVStore in LSPS2/5by Matt Corallo · 0f237961 · Sep 25, 2025 · 2 filesMessage 73 · AdequateModerate 61Details
Commit message · Matt Corallo

Fix races when removing per-peer state from KVStore in LSPS2/5

If we note that a peer should be removed in LSPS2/5 handling, we
need to make sure that the peer wasn't re-added between dropping
its state in memory and going to remove its state from disk. If it
is, we need to overwrite the current on-disk state instead.

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

This patch fixes a race condition in the Lightning Dev Kit's liquidity service plugins (LSPS2 and LSPS5). Previously, when the code decided a peer's state should be removed from disk, it could drop the in-memory lock before deleting the stored data. In that gap, another operation could re-add state for the same peer. The removal could then delete the newly-written state, or an outdated write could overwrite newer data, leading to lost or inconsistent peer records. The fix holds the appropriate locks until the storage write or remove operation is started, and re-checks whether the peer is still removable before deleting anything. If the peer was re-added, it now forces a fresh persist instead of removing.

Lower-priorityEnsure mutual exclusion in LSPS2/5 persistenceby Matt Corallo · a9ddf3f1 · Sep 25, 2025 · 2 filesMessage 68 · AdequateModerate 57Details
Commit message · Matt Corallo

Ensure mutual exclusion in LSPS2/5 persistence

There are various race conditions between `persist` calls on the
LSPS2 and LSPS5 services. Thus, we simply ensure that no two
`persist` calls can be in-flight at the same time, ensuring that
any new state updates between them will ultimately be persisted by
re-persisting from the top in the originally-running `persist` call
if another is started before it finishes.

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

This commit fixes race conditions in how two liquidity-service modules (LSPS2 and LSPS5) save their state to disk. Previously, multiple 'persist' operations could run at the same time, which could cause stale or partially-written state to overwrite newer data, or cause a peer's state to be removed incorrectly. The fix adds a simple in-flight flag so only one persist runs at a time, and if new changes arrive during a persist, the process loops around and saves them before finishing.

Lower-priorityCorrect idempotency key docs on `LSPS2ServiceEvent::OpenChannel`by Matt Corallo · c202d35f · Sep 25, 2025 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Matt Corallo

Correct idempotency key docs on `LSPS2ServiceEvent::OpenChannel`

While it would be correct to use `(their_network_key,
intercept_scid)` as the idempotency key when handling
`LSPS2ServiceEvent::OpenChannel`, we don't actually expect anyone
to do so as it would require separate storage to track the
`intercept_scid` -> opened channel mappings.

Thus, we update the documentation to note that the correct
idempotency key is `(their_network_key, user_channel_id)`.

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

This commit is a one-word documentation correction in a Rust comment. It changes the recommended idempotency key for handling an LSPS2 service event from a temporary routing identifier (intercept_scid) to a stable user-supplied identifier (user_channel_id). There is no code change, no security fix, and no vulnerability.

Lower-priorityAdd tests for `lightning-persister` with `tokio` feature to CIby Elias Rohrer · 96ad2409 · Sep 25, 2025 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · Elias Rohrer

Add tests for `lightning-persister` with `tokio` feature to CI

We recently introduced a new `tokio` feature to `lightning-persister`,
but never added it to CI which has us never run the tests that depend on
it. Here we fix this omission.

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

This commit only adds automated CI test commands for a newly added optional 'tokio' feature in the lightning-persister crate. It does not change application code, fix a bug, or alter any security-relevant behavior. It is purely a testing/continuous integration configuration change.