LDK
← All projectsLightning Dev Kit

rust-lightning

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

BitcoinCryptographic librariesLightning NetworkNormal
Repository coverage

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

254security candidates228second-pass queue1527AI analyses
83commits · 30 days
183commits · 60 days
554commits · 180 days
1255commits · 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.

70/100 average clarity
478Strong · 80–100
837Adequate · 60–79
295Thin · 40–59
62Opaque · 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 Corallo43754372574
Jeffrey Czyz19545182169
Wilmer Paulino15945155169
Leo Nash11613116162
Valentine Wallace14612139169
Vincenzo Palazzo11311183
Joost Jager16224162069
elnosh391333058
auto-pr-bot2578087
shaavan22622069
Carla Kirk-Cohen78366068
Analysis record

Published AI watches

Last scanned 6 minutes ago

Moderate 57 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Don't track refused monitor updates as pending' (#5030)

This patch fixes a bookkeeping bug in rust-lightning's ChainMonitor. When a channel monitor refuses an update (for example, because the channel is already force-closing), the code used to still record that update as 'pending completion.' B…

State inconsistency: pending monitor updates tracked for updates that will never completePotential denial of service / channel freeze: stale pending entry could block completion actionsLightning-specific risk: delayed or blocked PaymentClaimed event could affect fund recovery timing
47850384by Matt Corallo+44−132 files
No security note in commit
Moderate 55 AI analysisMessage 76 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Persistent `MonitorEvent`s' (#4491)

This commit makes on-chain 'MonitorEvent' notifications durable and replay-safe. Previously, if a node crashed after a ChannelMonitor persisted a block update but before the ChannelManager processed the resulting event, the event could be …

Durability/atomicity fix for async persistence: prevents lost MonitorEvents across crashesNew ack-based event lifecycle with random event IDsArchival gating on unacknowledged events to avoid losing preimage/timeout information
9a324e72by wpaulino+467−45912 files
No security note in commit
Low 47 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Fix payment attribution edge cases and simplify claiming' (#5021)

This commit refactors how LDK nodes claim incoming Lightning payments. It replaces a separate 'claim with known custom TLVs' method with an options struct passed to the normal claim call, and fixes two edge cases in payment attribution dat…

API change: claim_funds now takes ClaimFundsOptions, consolidating TLV-known behavior into one pathFailure-packet length bound added to prevent oversized onion error messagesIncoming failure packet truncated at 32 KiB before processing
ee7c61c2by Matt Corallo+256−17322 files
No security note in commit
Low 47 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'release utxos from failed splices' (#4973)

This change fixes a wallet bookkeeping problem in rust-lightning's built-in coin-selection wrappers. Previously, when a splice attempt failed or coin selection errored after picking UTXOs, those UTXOs stayed marked as 'reserved' in memory …

Resource exhaustion / denial-of-service via permanent in-memory UTXO reservationIncorrect state tracking in coin-selection wrapperNew API method required for correct lifecycle management (release_utxos)
7220a6fdby jkczyz+295−383 files
No security note in commit
Low 49 AI analysisMessage 73 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Restore `Wallet` UTXO locks when coin selection fails afterwards

This commit fixes a bug in the wallet's coin-selection code. When the wallet picked UTXOs to spend, it locked them immediately so they couldn't be reused. But if a later step—fetching the change address or the previous transaction—failed, …

Resource lock leak on error pathUTXO lock state inconsistency between selection and confirmationDenial-of-service/funds-unavailability risk from persistent UTXO locks
81afd9caby elnosh+146−331 file
No security note in commit
Moderate 66 AI analysisMessage 68 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Don't track refused monitor updates as pending

This patch fixes a bookkeeping bug in rust-lightning's ChainMonitor. When a monitor update is rejected (for example, because the channel funding has already been spent), the code may persist the entire monitor instead of the individual upd…

State inconsistency: rejected monitor update tracked as pending-persist despite never being persisted individuallyDenial-of-service-like effect: completion actions blocked until restartForce-close risk: stalled forwarding channel can lead to HTLC timeout and force close
ada0cb7aby Valentine Wallace+44−132 files
Vendor flagged security relevance
Informational 19 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'tx-sync: Parallelize esplora status queries' (#4913)

This commit rewrites how a Lightning wallet talks to Esplora block-explorer servers so that many status checks happen in parallel instead of one at a time. It is a performance/refactoring change. There is no direct evidence in the commit t…

Concurrency/timing change in transaction confirmation logicNew inconsistency check preserved when a previously-confirmed tx is reported unconfirmedAdded defensive error path for missing pre-fetched block status
c303f515by Matt Corallo+140−371 file
No security note in commit
Low 30 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Skip Electrum creator transaction downloads' (#4992)

This change stops the Electrum-based transaction sync client from downloading the very transaction that created an output it is watching. Previously, the client could request that transaction from Electrum, even though a transaction can ne…

Avoids unnecessary Electrum transaction.get requests for watched outputsReduces information disclosure to Electrum server about watched outpointsAdds regression test verifying request suppression
c36e50cbby Matt Corallo+142−02 files
No security note in commit
Low 44 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Use preferred sPK of watched txn in electrum, not rand ones' (#4867)

This change improves how the Lightning Dev Kit's Electrum and Esplora transaction-sync clients track watched Bitcoin transactions. Previously, the code ignored the script pubkey (the 'address' associated with a transaction) supplied when r…

Previously ignored `script_pubkey` argument in `register_tx` for transaction watchersElectrum script-history queries previously used an arbitrary transaction output, which could be OP_RETURN and therefore unindexed by some Electrum serversNew logic prefers caller-supplied script pubkey and falls back to non-OP_RETURN outputs
bfe5ca89by tnull+52−243 files
No security note in commit
Low 33 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Serialize transient Event variants; move persist decision into ChannelManager' (#4791)

This commit changes how LDK stores pending event notifications. It adds serialization support for several event types that previously were not fully saved to disk, and introduces a helper method so the code can decide which events are wort…

Data-loss prevention: previously non-round-trippable event variants are now fully serialized, avoiding accidental event loss when users serialize Event queues themselvesState-consistency hardening: ChannelManager now explicitly skips events that describe non-surviving restart state, preventing replay of stale eventsDefensive assertion: debug builds assert that every persisted event round-trips to Some(event), catching serialization mismatches
a0d4632eby Matt Corallo+694−818 files
No security note in commit
Informational 15 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Document that funding signing events can go stale' (#4960)

This commit only adds documentation comments to two source files. It explains that certain funding-signing events can become stale if the underlying negotiation fails, and that callers may see specific harmless errors as a result. No code …

26eecf2dby Matt Corallo+15−02 files
No security note in commit
Moderate 58 AI analysisMessage 73 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Add `Wallet::release_utxos` to free UTXOs from abandoned transactions

This commit fixes a design flaw in LDK's built-in wallet helper where coins selected for a splice-in (or other unclaimed funding) were permanently reserved in memory if the transaction was abandoned. Over repeated failed splices, all spend…

Denial-of-service via UTXO exhaustion from repeated failed splice negotiationsRisk of inability to broadcast fee-bumping/claim transactions due to lack of available UTXOsNew API surface (release_utxos) introduced to mitigate resource leak
52ab13fdby elnosh+148−43 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 100 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Drop the honggfuzz version pin from the CI fuzz job

This commit removes a fixed-version pin for the honggfuzz fuzzing tool in a continuous-integration script. The project now uses the current release of honggfuzz instead of an older pinned version. There is no change to the actual Lightning…

4a1635efby auto-pr-bot+1−51 file
No security note in commit
Informational 15 AI analysisMessage 86 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Run the CI fuzz job on the stable toolchain

This commit changes the Rust toolchain used in the continuous integration (CI) fuzzing job from a fixed older version (1.75) to the latest stable release. It is purely a build/test infrastructure change to fix a dependency compatibility is…

21c4ed2bby auto-pr-bot+3−32 files
No security note in commit
Informational 19 AI analysisMessage 91 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Expose the dummy-hop tail constructor publicly

This commit makes a previously internal helper function public so that outside developers can build dummy-hop tails for blinded payment paths without recreating the logic themselves. It is an API usability change, not a fix for a known sec…

No security-relevant behavior change in the diffAPI visibility broadened from crate-public to publicCLTV expiry overflow check already present and unchanged
c5443353by auto-pr-bot+14−71 file
No security note in commit
Moderate 54 AI analysisMessage 100 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Fail commitment sig verification without counterparty params

This change adds a safety check in a Bitcoin Lightning Network library (LDK). Previously, if the software tried to verify a peer's commitment signature before it had learned the peer's channel parameters, it could crash with a panic. Now i…

Defensive check added on peer-driven code path to prevent panicMissing counterparty_parameters could previously cause panic during commitment transaction constructionChannel closure returned instead of panic
de7ecc2fby auto-pr-bot+24−01 file
Vendor flagged security relevance
Informational 15 AI analysisMessage 100 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Clarify the commitment validation failure message

This commit only changes the wording of an error message sent to peers when a commitment transaction fails validation. It replaces the vague phrase 'Failed to validate our commitment' with the clearer 'Received commitment failed validation…

3284a006by auto-pr-bot+11−114 files
No security note in commit
Moderate 61 AI analysisMessage 81 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Move holder commit sig checks to `InMemorySigner`' (#4885)

This commit moves the checks that validate a counterparty's signatures on the holder's commitment and HTLC transactions out of the general channel code and into the signer module (InMemorySigner). Previously, these signature checks were do…

Moved signature validation from channel state machine into signer moduleAdded new tests that corrupt signatures and verify rejectionChanged error message from 'Invalid commitment tx signature from peer' / 'Invalid funding_created signature from peer' to 'Failed to validate our commitment'
83f5ba55by Matt Corallo+626−31024 files
No security note in commit
Low 42 AI analysisMessage 86 · Strong
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Merge PR 'Drop stale splice signature on disconnect' (#4954)

This change fixes a Lightning channel splicing bug: when two peers temporarily disconnect during a splice, any half-finished signature the other side already sent is now discarded. Before the fix, that stale signature could be reused after…

State-invalidation bug in multi-step protocol (splice negotiation)Stale cryptographic signature not cleared on disconnectPotential reuse of old commitment state after reconnect
c9a77251by Matt Corallo+22−12 files
No security note in commit
Moderate 58 AI analysisMessage 73 · Adequate
LDK Lightning Dev Kitrust-lightning BitcoinCryptographic librariesLightning Network

Drop stale splice signature on disconnect

This fix prevents a Lightning channel from being accidentally force-closed. During a splice (a way to resize a payment channel), one side's initial signature could be kept in memory after the peers disconnected. If the peers later reconnec…

State inconsistency: in-memory buffered message not cleared on disconnectDuplicate message processing after reconnectionForce-close consequence for active Lightning channel
71405b4bby Wilmer Paulino+22−12 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-priorityStore current_point in HolderCommitmentPointby Jeffrey Czyz · a7ba4dd3 · Aug 18, 2025 · 1 fileMessage 58 · ThinLow 41Details
Commit message · Jeffrey Czyz

Store current_point in HolderCommitmentPoint

When splicing a channel, sending and receiving the initial
commitment_signed message should use the current commitment point
rather then the next one. Store this in HolderCommitmentPoint whenever
it is advanced.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Low 41/100

This commit fixes a state-tracking bug in the experimental splicing feature of a Lightning Network implementation. Previously, during a splice, the code used the wrong commitment point (the 'next' one instead of the 'current' one) when sending or receiving the first commitment_signed message. The fix stores the current commitment point explicitly and adds guards that prevent splicing until the commitment point has been advanced at least once. It also persists the new field across restarts. The change is defensive and corrects protocol behavior, but it is not a clear-cut critical security patch on its own.

Lower-priorityRename HolderCommitmentPoint::pointby Jeffrey Czyz · 27138ebe · Aug 18, 2025 · 1 fileMessage 58 · ThinInformational 15Details
Commit message · Jeffrey Czyz

Rename HolderCommitmentPoint::point

HolderCommitmentPoint::point represents the next point we expect to
receive. Rename it to next_point to reflect that and similarly rename
transaction_number. The next commit will add the current point, which is
needed in splicing.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit is a straightforward internal rename of variables and struct fields in the Lightning Dev Kit's channel management code. It changes names like `point` to `next_point` and `transaction_number` to `next_transaction_number` to make the code clearer for an upcoming feature (splicing). No behavior changes, bug fixes, or security fixes are present.

Lower-priorityRename HolderCommitmentPoint::next_pointby Jeffrey Czyz · 8c482939 · Aug 18, 2025 · 1 fileMessage 70 · AdequateInformational 15Details
Commit message · Jeffrey Czyz

Rename HolderCommitmentPoint::next_point

HolderCommitmentPoint::next_point represents the point to use after
advancing the point. However, HolderCommitmentPoint::point actually
represents the next point we'd expect to receive. This will be renamed
in the next commit, so to avoid clashing the existing next_point field
needs to be renamed.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This commit is a simple internal rename of a struct field and its related variables from `next_point` to `pending_next_point`, plus updated comments and log messages. It does not change program behavior, fix a bug, or alter any security-relevant logic. It is preparation for a future rename of another field.

AI review queuedRemove #[rustfmt] from test_peer_storageby Aditya Sharma · e51028c5 · Aug 18, 2025 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Aditya Sharma

Remove #[rustfmt] from test_peer_storage

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

This commit is purely a code-style cleanup. It removes a `#[rustfmt::skip]` annotation from a single test function and reformats the code so that the project's automated formatter can handle it. No behavior of the program or test logic was changed.

Lower-prioritytest: Modify test_peer_storage to check latest changesby Aditya Sharma · 51c475e1 · Aug 18, 2025 · 1 fileMessage 87 · StrongInformational 12Details
Commit message · Aditya Sharma

test: Modify test_peer_storage to check latest changes

Node should now determine lost states using retrieved peer storage.

87/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
AI analysis · Informational 12/100

This commit only changes a test file. It updates an existing unit test to exercise a new behavior: after a node reloads from an older backup, it should detect that it is behind by comparing against peer storage data. The test is gated behind a compile-time feature flag and does not alter production code. There is no indication this fixes or introduces a security vulnerability in live code.

Lower-priorityDetermine if we have lost databy Aditya Sharma · 33d466a1 · Aug 18, 2025 · 1 fileMessage 60 · AdequateModerate 52Details
Commit message · Aditya Sharma

Determine if we have lost data

Deserialise the ChannelMonitors and compare the data to determine if we have
lost some states.

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

This commit adds a safety check in LDK that compares a backup of channel data received from a peer against the local state. If the peer's backup shows a newer state than what the local node has, the code now deliberately crashes with a panic and tells the user to use a recovery tool to force-close the channel and reclaim funds. The goal is to detect when the local node has lost critical channel data and prevent it from accidentally losing money.

Lower-prioritySerialise ChannelMonitors and send them over inside Peer Storageby Aditya Sharma · 61bc1e06 · Aug 18, 2025 · 5 filesMessage 85 · StrongLow 31Details
Commit message · Aditya Sharma

Serialise ChannelMonitors and send them over inside Peer Storage

Create a utililty function to prevent code duplication while writing ChannelMonitors.
Serialise them inside ChainMonitor::send_peer_storage and send them over.

Cfg-tag the sending logic because we are unsure of what to omit from ChannelMonitors stored inside
peer-storage.

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

This commit adds an experimental feature (gated behind a special compile-time flag) that serializes sensitive Lightning channel backup data and sends it to peers for storage. The code itself is a work-in-progress: the authors explicitly note they are unsure which sensitive fields should be omitted from the backup, and the feature is disabled by default. There is no direct vulnerability in the diff, but it introduces a new attack surface where a bug or misconfiguration could leak channel secrets to counterparty peers.

Lower-priorityWrite structs to serialise-deserialise Channels inside Peer-storageby Aditya Sharma · 82ce98a2 · Aug 18, 2025 · 2 filesMessage 85 · StrongInformational 11Details
Commit message · Aditya Sharma

Write structs to serialise-deserialise Channels inside Peer-storage

'PeerStorageMonitorHolder' is used to wrap a single ChannelMonitor, here we are
adding some fields separetly so that we do not need to read the whole ChannelMonitor
to identify if we have lost some states.

`PeerStorageMonitorHolderList` is used to keep the list of all the channels which would
be sent over the wire inside Peer Storage.

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 adds new data structures for serializing and deserializing Lightning channel backup information stored with peers. It is purely foundational code that defines how channel data should be formatted for storage and transmission. There is no indication this commit introduces a security vulnerability or fixes one—it appears to be a building block for a future peer-storage backup feature.

Lower-priorityRemove #[rustfmt::skip] from fn writeby Aditya Sharma · d7901a13 · Aug 18, 2025 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Aditya Sharma

Remove #[rustfmt::skip] from fn write

Fixed formatting for write() in ChannelMonitorImpl. This would make the next
commit cleaner by ensuring it only contains direct code shifts, without
unrelated formatting changes.

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

This commit is purely a formatting cleanup. It removes a directive that told the Rust formatter to ignore a specific function, then applies standard formatting (line breaks, indentation) to that function. No behavior of the code changes.

AI review queuedFix panic when calling `batch_funding_transaction_generated` earlyby Matt Corallo · e2988543 · Aug 18, 2025 · 3 filesMessage 73 · AdequateLow 33Details
Commit message · Matt Corallo

Fix panic when calling `batch_funding_transaction_generated` early

If a user calls `batch_funding_transaction_generated` before a
channel is ready to fund its possible to hit an `unwrap` when the
transaction-scanning logic attempts to fetch the channel's expected
output `scriptPubKey`.

While users shouldn't be doing this, we should also avoid the
panic, so here check the channel state first.

Found by the `full_stack_target` fuzzer.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
fuzzing or regression evidencesecond-pass: broader security terminology
AI analysis · Low 33/100

This commit fixes a crash (panic) in the Lightning Dev Kit's rust-lightning library. The crash could happen if a user called a specific function, `batch_funding_transaction_generated`, too early in the channel-opening process—before the channel was actually ready to be funded. The fix adds a state check so the function returns a normal error instead of crashing. It was discovered by an internal fuzzer, not reported by an outside researcher.

Security candidateAllow funding errors in `full_stack_target` fuzzerby Matt Corallo · c1fefcfe · Aug 18, 2025 · 1 fileMessage 85 · StrongInformational 18Details
Commit message · Matt Corallo

Allow funding errors in `full_stack_target` fuzzer

When a channel gets replaced before we can fund it, its possible
now (due to RNG output repetition) to hit the "trying to fund
channel before its ready to be funded" error in the
`full_stack_target` fuzzer.

Thus, we now simply ignore errors when funding.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
entropy or randomnessfuzzing or regression evidence
AI analysis · Informational 18/100

This commit changes a fuzz test (a randomized testing harness) so it no longer crashes when it tries to fund a channel that isn't ready to be funded. The change only affects test code, not the real Lightning node software that users run. It is a test-hardening fix, not a security patch for a vulnerability in production code.

Lower-priorityMove additional channel opening tests to `channel_open_tests.rs`by Matt Corallo · 399e6e7c · Aug 18, 2025 · 2 filesMessage 75 · AdequateInformational 15Details
Commit message · Matt Corallo

Move additional channel opening tests to `channel_open_tests.rs`

`functional_tests.rs` is a rather large beast, but with this move
we take it down to under 10k LoC.

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

This commit is purely a code cleanup: it moves a large number of channel-opening test functions from one test file (functional_tests.rs) into another, more focused test file (channel_open_tests.rs). No production code, protocol logic, or security behavior is changed. The goal is simply to reduce the size of the large functional_tests.rs file.

Lower-priorityMove `channel_acceptance_tests.rs` to `channel_open_tests.rs`by Matt Corallo · 4b3ad40f · Aug 18, 2025 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Matt Corallo

Move `channel_acceptance_tests.rs` to `channel_open_tests.rs`

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

This commit simply renames a test file from channel_acceptance_tests.rs to channel_open_tests.rs and updates the module reference in mod.rs. The actual test code is unchanged except for adding a standard license/copyright header and a module doc comment. There is no change to production code, no security fix, and no vulnerability introduced.

Security candidateoffer: fix path validation to only require non-empty paths when issuer_id is missingby Erick Cestari · 5314ebb3 · Aug 18, 2025 · 1 fileMessage 73 · AdequateModerate 51Details
Commit message · Erick Cestari

offer: fix path validation to only require non-empty paths when issuer_id is missing

When an offer has an issuer_id, empty paths should be allowed since the
issuer_id can be used for signing. Only when issuer_id is None should
we require non-empty paths to extract the blinded node ID for signing.

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 · Moderate 51/100

This commit fixes a validation bug in how Lightning offers (BOLT12) are checked. Previously, an offer that included an issuer ID but had an empty list of payment paths was incorrectly rejected. The fix allows empty paths when an issuer ID is present, because the issuer ID itself can be used for signing. The bug was a logic error, not a clear-cut security vulnerability, but it could cause valid offers to be rejected or force users to add unnecessary paths, which may have privacy or usability implications.

Lower-priorityOnly prune on `peer_{dis}connected`by Elias Rohrer · 9065f311 · Aug 18, 2025 · 2 filesMessage 68 · AdequateInformational 18Details
Commit message · Elias Rohrer

Only prune on `peer_{dis}connected`

Previously, we'd constantly check whether or not we can prune stale
webhooks. While not wrong, it lead to a bunch of ~unnecessary
operations, especially given that we only prune once a day currently.
Here we move pruning to `peer_connected`/`peer_disconnected`, which is
similar to what we do for LSPS2, and should still be more than enough.

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

This commit is a routine performance cleanup, not a security fix. It moves a once-a-day cleanup task (pruning old webhook records) so it only runs when peers connect or disconnect, instead of running during every message-handling operation. The change reduces unnecessary work and avoids briefly holding a write lock during common read-only operations. There is no indication this fixes a vulnerability.

Lower-priorityAlso reset notification cooldown on peer disconnectionby Elias Rohrer · b3e9bc6f · Aug 18, 2025 · 2 filesMessage 73 · AdequateLow 35Details
Commit message · Elias Rohrer

Also reset notification cooldown on peer disconnection

If we happened to send a notification while the client is connected to
us, we would previously only reset the cooldown once the client connects
again.

While theoretically it would be preferable to never set the
`last_notification_sent` field to begin with if the client is connected
to us, allowing the service handler to query the peer connection state
would be unnecessarily complex. Here, we therefore simply opt to also
reset the `last_notification_sent` state once the peer disconnects from
us.

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

This patch fixes a logic bug in how webhook notifications are paced. Previously, if a notification was sent while a client was connected, the system would wait for the client to reconnect before resetting the cooldown timer. If the client disconnected right after the notification, the cooldown could block future notifications from being sent promptly. The fix now resets the cooldown when the peer disconnects, so notifications can resume on schedule.

Lower-priorityAdd missing license headersby Elias Rohrer · f95ba694 · Aug 18, 2025 · 7 filesMessage 50 · ThinInformational 15Details
Commit message · Elias Rohrer

Add missing license headers

We add the license header to all files in `lightning-liquidity` where it
was absent.

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

This commit only adds or fixes standard open-source license header comments at the top of several source files. It makes no changes to actual program logic, data handling, or security behavior. There is no security vulnerability here.

Lower-priorityRefactor `LSPS5ServiceHandler` to hold a `PeerState`by Elias Rohrer · ce89e6b3 · Aug 18, 2025 · 2 filesMessage 73 · AdequateInformational 20Details
Commit message · Elias Rohrer

Refactor `LSPS5ServiceHandler` to hold a `PeerState`

Going forward, we'll add serialization logic for LSPS5 types. To contain
the persisted state a bit better (and to align the model with LSPS1/2),
we refactor the `LSPS5ServiceHandler` to hold a `PeerState` object.

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

This commit is a code cleanup in the LSPS5 (webhook) service module. It replaces a flat hash map of webhooks with a per-peer state object, moving webhook storage from a Mutex to an RwLock and adding helper methods. The stated goal is to prepare for future serialization/persistence work and to match the design used in LSPS1/LSPS2. There is no direct security fix here, but any refactor that changes locking and data structures can introduce subtle concurrency or correctness bugs.

Lower-priorityPrefactor: Simplify `last_notification_sent` trackingby Elias Rohrer · bf91c4ed · Aug 18, 2025 · 2 filesMessage 63 · AdequateInformational 20Details
Commit message · Elias Rohrer

Prefactor: Simplify `last_notification_sent` tracking

While bLIP-55 describes that the service should wait at least some
cooldown between sending notifications per individual `method`, there is
nothing that keeps us from simplifying our approach to apply the
cooldown to *any* notifications sent, especially since we just reduced
the cooldown period to 1 minute elsewhere. Here, we therefore simplify
the `last_notification_sent` field to just be a `Option<LSPSDateTime>`.

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

This commit is a code cleanup (prefactor) that changes how a webhook notification cooldown is tracked. Previously, the system remembered the last time each type of notification was sent separately. Now it only remembers the last time any notification was sent. This means a user could hit the cooldown for one kind of alert and then not receive a different kind of alert for up to a minute, even though the old behavior would have allowed it. The change is intentional and documented in the commit message, and the tests were updated to match. It is not a hidden vulnerability, but it does slightly broaden when notifications can be suppressed.

Security candidateDetect commitment transaction confirmation in ChannelMonitor insteadby Wilmer Paulino · 68cd71c0 · Aug 15, 2025 · 11 filesMessage 83 · StrongLow 34Details
Commit message · Wilmer Paulino

Detect commitment transaction confirmation in ChannelMonitor instead

Previously, the `ChannelManager` would assume a `Channel` was closed the
moment it saw a spend for its funding input. With splicing, this will no
longer be the case. Since the `ChannelMonitor` is already responsible
for reliably tracking each onchain transaction relevant to a channel, we
now produce a `MonitorEvent::CommitmentTxConfirmed` event to inform the
`ChannelManager` the channel can be considered closed and removed.

As a result of this change, many tests failed now that we rely on
handling the `MonitorEvent::CommitmentTxConfirmed` first before seeing
the `ChannelMonitorUpdateStep::ChannelForceClosed` go out.

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
signing or wallet pathboot or update path
AI analysis · Low 34/100

This commit moves the responsibility for detecting when a channel-closing transaction has been confirmed from the ChannelManager to the ChannelMonitor. This is a preparatory architectural change for splicing, where a spend of the funding output does not necessarily mean the channel is closed. The change introduces a new MonitorEvent::CommitmentTxConfirmed event so the ChannelMonitor can reliably inform the ChannelManager when to actually close and remove a channel. Most of the diff is test updates adjusting the order in which closure-related events and monitor updates are expected.

Lower-priorityUse struct for HolderCommitmentPointby Jeffrey Czyz · 183c0be0 · Aug 15, 2025 · 1 fileMessage 70 · AdequateInformational 13Details
Commit message · Jeffrey Czyz

Use struct for HolderCommitmentPoint

The only difference between the two variants is the next point, which
can be stored using an Option for simplicity. The naming of the
Available variant is also confusing as it refers to the next commitment
point. But HolderCommitmentPoint is typically used to represent the next
point, which is actually stored in the current field. Drop the "current"
nomenclature to avoid confusion.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 13/100

This commit is a straightforward internal code cleanup in the Lightning Dev Kit's channel state management. It replaces an enum (a type with two distinct variants) with a struct (a simple container of fields) for tracking the holder's per-commitment point. The behavior is intended to be equivalent; the change only simplifies naming and removes redundant pattern matching. There is no indication of a security fix or vulnerability being addressed.

Lower-priorityUpdate comments in `full_stack_target` test for reduced breakageby Matt Corallo · ee06a900 · Aug 13, 2025 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · Matt Corallo

Update comments in `full_stack_target` test for reduced breakage

The previous two changes should materially reduce how finicky the
`full_stack_target` tests are, which we reflect in the comments
here.

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 updates comments in a fuzz test file. It changes wording to reflect that recent code changes have made the tests less fragile. No code behavior is modified, and there are no security implications.

Security candidateStop counting for RNG output in `full_stack_target`by Matt Corallo · dadac03a · Aug 13, 2025 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · Matt Corallo

Stop counting for RNG output in `full_stack_target`

The `full_stack` fuzzer ensures that RNG output is unique by
keeping a counter of the number of `get_secure_random_bytes` calls
and using it to determine the "random" value to return.

However, because LDK regularly changes when it requests RNG output
this causes the fuzz input required to reach a codepath to change
regularly, making any existing fuzz corpus stale.

Instead, here, we allow the fuzz input to set a new RNG output
value, but otherwise always return the same output. This allows the
fuzzer to still reach RNG-output-specifc paths, but fuzzing seeds
aren't invalidated when LDK changes.

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
entropy or randomnessdefensive validationfuzzing or regression evidence
AI analysis · Informational 15/100

This commit changes only a fuzzing test harness, not production code. It alters how fake random numbers are generated during automated fuzz testing so that test inputs remain useful even when the underlying software changes. There is no security vulnerability or fix to a real system here.

Security candidateStop reading fee estimates directly in `full_stack_target`by Matt Corallo · 8230ff7f · Aug 13, 2025 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · Matt Corallo

Stop reading fee estimates directly in `full_stack_target`

The `full_stack` fuzzer tries to just expose much of the entire
library to the fuzzer, and as such when a request comes in from
LDK to estimate the current fee it tries to read two bytes of
fuzzing input and returns that as the fee to LDK.

However, because LDK regularly changes when it requests a fee
estimate from the user this causes the fuzz input required to reach
a codepath to change regularly, making any existing fuzz corpus
stale.

Instead, here, we allow the fuzz input to load a fee estimate
result into a buffer, and if its empty simply return 253. This
allows the fuzzer to still reach fee-estimate-triggered overflows,
but only invalidates fuzzing seeds that relied on fee estimate
inputs rather than all seeds whenever LDK changes fee estimate
calls.

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
memory safetydefensive validationfuzzing or regression evidence
AI analysis · Informational 15/100

This commit is a fuzz-testing infrastructure change, not a security fix. It changes how a test harness feeds fake fee estimates to the Lightning library during automated fuzzing so that existing test inputs don't become useless every time the library asks for fees in a slightly different place. There is no change to production code or to how real users' fee estimates are handled.

Lower-priorityFollow-ups from removing async_payments cfg flagby Valentine Wallace · f0551f75 · Aug 13, 2025 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Valentine Wallace

Follow-ups from removing async_payments cfg flag

Missed removing some _ prefixes from vars that were previously cfg-gated.

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

This commit is a minor code cleanup. It removes leading underscore prefixes from variable names (like `_recipient_id` becoming `recipient_id`) after a feature flag was removed. These underscores are a Rust convention meaning 'this variable is currently unused.' Once the feature became always-enabled, the variables are now used, so the underscores were no longer appropriate. There is no functional change and no security impact.