EP
← All projectsElements Project

Core Lightning

Modular C implementation of the Lightning Network protocol and node stack.

BitcoinLightning NetworkNormal
Repository coverage

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

158security candidates263second-pass queue1853AI analyses
140commits · 30 days
224commits · 60 days
803commits · 180 days
1839commits · 365 days
Backfill bands
Aug 5 → Feb 61049 seen37 candidatesComplete
Feb 6 → Jun 6579 seen10 candidatesComplete
Jun 6 → Jul 678 seen1 candidatesComplete
Jul 6 → Aug 5147 seen16 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
432Strong · 80–100
1164Adequate · 60–79
231Thin · 40–59
29Opaque · 0–39
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
dovgopoly15015164
Rusty Russell95873958072
Sangbida Chaudhuri14731146066
Dusty Daemon771377066
ShahanaFarooqui931093063
daywalker9090589062
Níckolas Goline40540076
Lagrang376476069
Christian Decker36436072
Vincenzo Palazzo838080
Chandra Pratap56256082
ekzyis222063
Analysis record

Published AI watches

Last scanned 31 minutes ago

Informational 15 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

Revert "doc: require Homebrew GNU make and gpatch on macOS"

This commit is a simple documentation revert. It undoes a previous change that told macOS users to install GNU make and GNU patch from Homebrew and to put those tools first in their command path. The reverted instructions now omit gpatch a…

0cfa949fby Sangbida Chaudhuri+4−81 file
No security note in commit
Informational 15 AI analysisMessage 75 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

Revert "tests: drop obsolete x-prefix in compacter-slow.sh"

This commit re-adds an old-style 'x' prefix to a string comparison in a test helper script. It is a test-only change with no effect on the actual Core Lightning node software, user funds, network behavior, or security. The change simply re…

116fd7cdby Sangbida Chaudhuri+1−11 file
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

doc: require Homebrew GNU make and gpatch on macOS

This commit only updates macOS installation instructions in the documentation. It tells macOS users to install newer GNU versions of 'make' and 'patch' from Homebrew because Apple's built-in tools are too old for building and running sourc…

d3ff1474by Sangbida Chaudhuri+8−41 file
No security note in commit
Informational 15 AI analysisMessage 83 · Strong
EP Elements ProjectCore Lightning BitcoinLightning Network

tests: drop obsolete x-prefix in compacter-slow.sh

This commit is a trivial shell script cleanup. It removes an old-fashioned 'x' prefix from a string comparison in a test helper script so that a newer version of the Shellcheck linter stops warning about it. The change does not alter progr…

474c272aby Sangbida Chaudhuri+1−11 file
No security note in commit
Informational 18 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

common: hoist amount+currency parsing into common code.

This commit moves existing code that parses payment amounts (Bitcoin millisatoshis, 'any' amount, or fiat currency amounts) from one plugin file into a shared library so it can be reused by a future feature. It is a code refactoring with n…

Refactoring of amount-parsing code into a shared helperAddition of explicit u64 overflow guards (mul_overflows_u64, add_overflows_u64) in the new common codeNo change to wire protocol or RPC interface semantics
e0f86c17by Rusty Russell+112−723 files
No security note in commit
Informational 17 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

lightningd: internal cleanups since all non-command JSON IDs are strings.

This is a routine internal cleanup commit in Core Lightning. It removes an unused helper function and simplifies how JSON-RPC request IDs are stored and formatted, since the project now always uses string IDs for non-command JSON traffic. …

No security-relevant keywords in commit title or messageNo CVE, advisory, or bug reference presentChanges are refactor/cleanup in nature
a70ae963by Rusty Russell+25−378 files
No security note in commit
Informational 15 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

common: hoist hash_str helper into its own header.

This commit is a routine code cleanup: it moves a small string-hashing helper function into a shared header file so it can be reused without being copied and pasted. There is no change to behavior, no bug fix, and no security relevance.

581bbb1fby Rusty Russell+16−176 files
No security note in commit
Informational 23 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

downgrade: we need to remove "impressions" from askrene datastore when downgrading to v26.06.

This is a database downgrade helper fix, not a live network vulnerability. Core Lightning's downgrade tool previously failed to strip out new 'channel impression' records when rolling a database back to version v26.06. The patch teaches th…

Database downgrade path could leave incompatible records in older schemaOffline tool only; no remote or on-chain triggerFix prevents potential node startup failure after version rollback
4d926285by Rusty Russell+43−111 file
No security note in commit
Low 31 AI analysisMessage 68 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

downgrade tool: fix invalid memory bug

This commit fixes a typo in a database downgrade helper tool. The bug caused the tool to pass a negative number (turned into a huge positive size) when copying data, which led to an out-of-memory (OOM) error. The fix swaps two variable nam…

Integer underflow / negative-to-size_t wrap leading to excessive allocationOut-of-memory crash in maintenance toolMemory corruption potential if allocation somehow succeeded
42995326by Lagrang3+8−81 file
No security note in commit
Informational 24 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

xpay: actually tell askrene when a payment succeeded.

This commit fixes a bookkeeping bug in Core Lightning's xpay plugin. Previously, when a payment succeeded, xpay did not tell the askrene routing-helper that the route worked. As a result, askrene kept stale or overly pessimistic ideas abou…

Missing success feedback to routing layer can degrade payment reliabilityStale negative impressions may bias future path selection toward worse or failing routesNo direct funds-loss primitive is introduced or fixed
a66fabd4by Rusty Russell+40−02 files
No security note in commit
Low 49 AI analysisMessage 58 · Thin
EP Elements ProjectCore Lightning BitcoinLightning Network

askrene: correctly order constraints.

This commit fixes a bug in Core Lightning's routing helper (askrene) where two kinds of channel information—hard limits called 'constraints' and usage estimates called 'impressions'—were being applied in the wrong order. Because impression…

Routing decision bug caused by incorrect ordering of time-relative channel statePotential payment failure or acceptance of an over-capacity routeRegression test added demonstrating incorrect route acceptance before fix
4b6fe4a1by Rusty Russell+211−1182 files
No security note in commit
Low 35 AI analysisMessage 68 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

askrene: don't leak channel intel entries

This commit fixes a memory leak in the askrene plugin of Core Lightning. When individual channel intelligence entries were deleted, the code removed the entry from its array but forgot to free two internal pointers (impression and constrai…

Memory leak in plugin data structure cleanupMissing deallocation of nested pointers before array removalFix located in routing/intelligence plugin (askrene)
8891f414by Lagrang3+5−01 file
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

xpay: tests should expect the new error messages

This commit only updates test files so that automated checks expect slightly different error wording from the xpay payment command. It does not change any production code, so it cannot introduce a security vulnerability or fix one on its o…

0b67601fby Lagrang3+24−32 files
No security note in commit
Low 43 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

offers: limit invoices to 10 minutes for recurring offers in other currencies.

This change tightens the lifetime of recurring invoices priced in foreign currencies (like USD) to 10 minutes by default, and refreshes them with current exchange rates when they expire. Previously, such invoices could remain valid for the…

Fixes stale exchange-rate exposure for currency-denominated recurring invoicesAdds configurable expiry cap for recurring currency invoicesDistinguishes user-cancellation (0s expiry) from natural expiry to avoid misleading errors
446312cfby Rusty Russell+134−148 files
No security note in commit
Low 45 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

offers: limit expiry to offer limit, or 10 minutes with currency conversion.

This commit tightens the expiration time on invoices created from BOLT12 offers. Previously, all such invoices defaulted to a 2-hour payment window. Now, if the offer has an absolute expiry, the invoice expires when the offer expires; and …

BOLT12 invoice expiry now bounded by offer absolute expiryCurrency-converted invoices use short expiry to limit exchange-rate exposureNew regression test added for expiry behavior
a6cf4915by Rusty Russell+55−22 files
No security note in commit
Low 29 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

fetchinvoice: don't bother with checking recurrence timing.

This commit removes local timing checks in Core Lightning's fetchinvoice plugin for recurring payments. Instead of the plugin refusing too-early or too-late invoice requests, it now lets the remote node decide and report back. The change i…

Removal of local input-validation checks for recurring invoice requestsReliance on remote-party enforcement for recurrence period limits and pay windowsTest expectations changed from local rejection to remote failure messages
3e49d908by Rusty Russell+2−682 files
No security note in commit
Low 32 AI analysisMessage 73 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

lightningd: don't do previous invoice checking in createinvoicerequest.

This commit removes a local sanity check in Core Lightning's experimental 'createinvoicerequest' command. Previously, when creating a recurring invoice request, the code looked up past payments by label to verify the previous recurrence wa…

Removal of local payment-state validation for recurring invoice requestsParameter rename from recurrence_label to label in internal RPC callsTest expectations changed from local 'previous invoice has not been paid' errors to remote failure messages
4348d8acby Rusty Russell+5−1224 files
No security note in commit
Low 35 AI analysisMessage 65 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

fetchinvoice: handle weird labels in recurrence_label parameter.

This commit fixes how the fetchinvoice plugin handles user-supplied labels that contain special characters such as backslashes, quotes, tabs, and newlines. Previously these labels were passed as raw strings, which could cause JSON encoding…

JSON injection / improper escaping of user-controlled input passed between RPC componentsPotential mismatch between label parsing and label serialization leading to functional failures or unexpected behaviorFix is narrowly scoped to a single plugin and parameter
d7f87f2dby Rusty Russell+37−102 files
No security note in commit
Informational 15 AI analysisMessage 70 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

Add unit tests for str_to_u64

This commit only adds a new automated test file that checks how a helper function (str_to_u64) converts text strings to unsigned 64-bit integers. It does not change any production code, so it cannot by itself introduce a security vulnerabi…

dddb455dby Lagrang3+203−01 file
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
EP Elements ProjectCore Lightning BitcoinLightning Network

pytest: add tests for what we want askrene to do.

This commit only adds a new pytest test file. It does not change any production code. The test describes desired future behavior for the askrene routing module's error messages when a payment source or destination lacks enough channel capa…

518620aeby Rusty Russell+67−01 file
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-prioritylibplugin: correctly mark that plugin_notification_end STEALS the stream.by Rusty Russell · 4c23cf29 · Aug 14, 2025 · 4 filesMessage 73 · AdequateInformational 24Details
Commit message · Rusty Russell

libplugin: correctly mark that plugin_notification_end STEALS the stream.

And also slightly generalize: plugin_notification_start() can take any
tal ptr.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This is a small cleanup in Core Lightning's plugin helper library. It changes how memory ownership is documented for plugin notification messages so the code's automatic memory tracking matches what actually happens. The change itself is defensive and unlikely to be directly exploitable, but it fixes a mismatch that could hide real memory-management bugs in plugins.

Lower-prioritycommon: add json_add_timerel helper.by Rusty Russell · 80309dfb · Aug 14, 2025 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Rusty Russell

common: add json_add_timerel helper.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This commit simply adds a new helper function for formatting relative time values as JSON numbers. It is a routine, non-security code addition with no bug fix or behavior change to existing features.

Lower-prioritypytest: test xpay notifications.by Rusty Russell · c88ec27d · Aug 14, 2025 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · Rusty Russell

pytest: test xpay notifications.

The custom_notifications handler produces really ugly results, and I
was lazy, but it works!

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit only adds new automated tests for the xpay feature's notification system. It does not change any production code, so it cannot introduce a security vulnerability or fix one. The tests verify that plugins receive messages when a payment starts and ends, including failure cases.

Lower-priorityconnectd: Implement sending of `start_batch`by Dusty Daemon · 052f36cf · Aug 14, 2025 · 2 filesMessage 68 · AdequateLow 27Details
Commit message · Dusty Daemon

connectd: Implement sending of `start_batch`

Implement the sending of `start_batch` and `protocol_batch_element` from `channeld` to `connectd`.

Each real peer wire message is prefixed with `protocol_batch_element` so connectd can know the size of the message that were batched together.

`connectd` intercepts `protocol_batch_element` messages and eats them (doesn’t forward them to peer) to get individual messages out of the batch.

It needs this to be able to encrypt them individiaully. Afterwards it recombines the now encrypted messages into a single message to send over the wire to the peer.

`channeld` remains responsible for making `start_batch` the first message of the message bundle.

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

This commit adds a new internal batching mechanism so that multiple Lightning protocol messages can be grouped together, split apart again inside the connection daemon, encrypted individually, and then sent as one stream to the peer. It is a feature implementation, not a clear security fix. There are no disclosed security references or incident claims supplied, and the commit message does not describe it as fixing a vulnerability.

Lower-prioritychanneld: Implement receiving of `start_batch`by Dusty Daemon · 7eb2add2 · Aug 14, 2025 · 1 fileMessage 60 · AdequateLow 33Details
Commit message · Dusty Daemon

channeld: Implement receiving of `start_batch`

Since `batch_size` has moved into this new message, we can’t ignore it anymore and have to process it

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

This commit adds code to handle a new peer message called 'start_batch' in Core Lightning's channel daemon. Previously, the message type existed but was ignored (the case just returned). Now the daemon parses the message, checks that it is requesting a batch of 'commitment_signed' messages, and forwards the batch size into the existing batch signature handling logic. The change itself is a feature completion rather than a clear security fix, but it removes a place where a protocol message was silently ignored and could have caused mismatched state between two channel peers.

Lower-prioritychanneld: Cleaner error messagesby Dusty Daemon · 3841737d · Aug 14, 2025 · 1 fileMessage 58 · ThinLow 26Details
Commit message · Dusty Daemon

channeld: Cleaner error messages

Since handling commit sig batches is coming for multiple locations now, add more explicity error handling so log messages are more useful.

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

This commit adds a safety check in Core Lightning's channel daemon to verify that incoming peer messages are actually the expected 'commitment signed' type before processing them. If a different message type arrives, the daemon now logs a clear error and fails the peer connection rather than potentially misinterpreting the data. It is a defensive hardening change, not a fix for a known exploitable bug.

Security candidatesplice: Remove `batch_size` from `commitment_signed`by Dusty Daemon · e755be0c · Aug 14, 2025 · 4 filesMessage 73 · AdequateLow 31Details
Commit message · Dusty Daemon

splice: Remove `batch_size` from `commitment_signed`

The new spec sends `batch_size` in `start_batch` and removes it from `commitment_signed` so we need to stop processing it in `commitment_signed`.

Since the tlv is now reduced to one element and that automagically turns it into a direct use TLV so we have to update the code everywhere it is referenced.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
boot or update path
AI analysis · Low 31/100

This commit updates Core Lightning's implementation of the Lightning Network splicing protocol to match a newer version of the specification. It removes a 'batch_size' field from the 'commitment_signed' message and moves that information to a different message ('start_batch'). The code changes are mostly mechanical: updating data structures, removing checks that used batch_size, and adjusting how messages are parsed and compared. There is no direct evidence in the commit or supplied references that this fixes a security vulnerability; it appears to be a protocol compatibility/spec-compliance update.

Security candidatesplice: Add `start_batch` and an internal wire typeby Dusty Daemon · 07f4bc39 · Aug 14, 2025 · 11 filesMessage 73 · AdequateInformational 23Details
Commit message · Dusty Daemon

splice: Add `start_batch` and an internal wire type

We add `start_batch` to match t-bast’s splicing spec and we add a new internal wire type `WIRE_PROTOCOL_BATCH_ELEMENT` using the type number 0

Changelog-Added: support for `start_batch`

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

This commit adds support for two new Lightning protocol messages used in splicing: `start_batch` and an internal-only `protocol_batch_element`. The code mostly ignores or routes these messages; it does not appear to fix a security bug. The change is a feature addition matching a draft specification, with no clear security relevance in the diff itself.

AI review queuedwallet: remove now-gratuitous counters from update statements.by Rusty Russell · 51d6afec · Aug 14, 2025 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Rusty Russell

wallet: remove now-gratuitous counters from update statements.

When we had to use the number to the db_bind call, these annotations made
sense, but since 0bcff1e76d6796e20a26c883ad83bc8fad17efeb (for v23.08) we
removed that.

So remove all the counters, which are simple overhead if we want to
change something.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This commit simply removes inline number comments (like '// 0', '// 1') from SQL UPDATE statements in the wallet code. These numbers used to help match database bind parameters, but are no longer needed after an earlier code change. There is no functional change to the program's behavior, no bug fix, and no security relevance.

AI review queuedwallet: we can assume local_alias field is non-null.by Rusty Russell · bb4dda6f · Aug 14, 2025 · 3 filesMessage 73 · AdequateLow 26Details
Commit message · Rusty Russell

wallet: we can assume local_alias field is non-null.

We have a migration which ensures this, but then I discovered that did
*not* address channels without an SCID yet. So fixed the migration, and
simpligied the code.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This commit fixes a database migration in Core Lightning that was supposed to ensure every channel has a local alias (a routing identifier), but it missed channels that didn't yet have a stable channel ID (SCID). The patch moves and broadens the migration so all channels without a local alias get one, and then simplifies the code to always expect the field to be present. It is a data-integrity bug fix rather than an obvious remote exploit, but if a channel lacked a local alias it could lead to inconsistent routing behavior or crashes in later code paths that assume the alias exists.

AI review queuedbitcoin: have random_scid() function.by Rusty Russell · 639452ac · Aug 14, 2025 · 5 filesMessage 50 · ThinInformational 15Details
Commit message · Rusty Russell

bitcoin: have random_scid() function.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a small code cleanup: it creates a shared helper function called random_scid() that generates a random channel identifier, and replaces two places that previously did this directly with calls to the new helper. It also adds a couple of test setup lines so wallet tests don't reuse stale channel maps. There is no security fix here—just refactoring and test hygiene.

AI review queuedlightningd: require local_alias in new_channel().by Rusty Russell · 5e263bac · Aug 14, 2025 · 7 filesMessage 68 · AdequateLow 25Details
Commit message · Rusty Russell

lightningd: require local_alias in new_channel().

We allowed NULL for stub channels, but just don't put the stub scid
into the hash tables. This cleans up all the callers to make it
clear this is a non-optional parameter.

We opencode channel_set_random_local_alias, since there's only one caller now.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

68/100 · AdequateMessage clarity
✓ 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 · Low 25/100

This commit is a code-cleanup change in Core Lightning that makes the local channel alias a required value when creating a channel record, instead of allowing it to be optional/NULL. It removes a fallback that generated a random alias if one was missing. The change is defensive: it ensures every channel has a known local alias and avoids subtle bugs where a missing alias could lead to inconsistent channel lookup tables. There is no direct evidence in the commit or supplied references that this fixes an active security vulnerability.

AI review queuedlightningd: save previous short_channel_ids during splice, and keep in db.by Rusty Russell · 4abd0af3 · Aug 14, 2025 · 8 filesMessage 73 · AdequateInformational 23Details
Commit message · Rusty Russell

lightningd: save previous short_channel_ids during splice, and keep in db.

There can be any number of these, and it will be useful to allow
routing by older scids (when other nodes haven't seen our gossip, or
even before we *can* announce the new post-splice channel).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This commit adds bookkeeping for previous channel identifiers (short_channel_ids) when a Lightning channel is spliced. Splicing changes the channel's identifier, so the software now remembers old identifiers in memory and in the wallet database. This is a routing/reliability improvement, not a security fix, and the commit message does not describe any vulnerability.

Lower-prioritypytest: test if we correctly route using old scids after spliceby Rusty Russell · 931924a1 · Aug 14, 2025 · 1 fileMessage 75 · AdequateLow 44Details
Commit message · Rusty Russell

pytest: test if we correctly route using old scids after splice

Spoiler: we don't!

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This commit adds a test showing that, after a Bitcoin 'splice' operation changes a Lightning channel's short channel ID (SCID), payments routed using the old SCID fail. The test is marked as expected-to-fail, meaning the bug is known but not yet fixed. It could cause legitimate post-splice payments to fail until the network learns the new routing identifier.

Lower-prioritylightningd: use the hash table to lookup scids.by Rusty Russell · d1f56eb6 · Aug 14, 2025 · 1 fileMessage 68 · AdequateInformational 12Details
Commit message · Rusty Russell

lightningd: use the hash table to lookup scids.

This replaces the old "iterate through each peer, then each peer's channel" suboptimality.

A bit of care required that we don't expose scids if we're forwarding,
but that was already carefully handled.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This is a performance improvement that replaces a slow search through every peer and channel with a fast hash table lookup when finding a channel by its short channel ID. The commit message and code show the same privacy rules were preserved. There is no security bug being fixed here.

Lower-prioritypytest: test persistence of old scids, even if we spliced multiple times.by Rusty Russell · f265a956 · Aug 14, 2025 · 1 fileMessage 75 · AdequateInformational 15Details
Commit message · Rusty Russell

pytest: test persistence of old scids, even if we spliced multiple times.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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 only adds a new test case to the project's test suite. It checks that old channel identifiers (short channel IDs, or SCIDs) remain usable for routing payments even after a channel has been spliced multiple times and a node has restarted. There is no change to production code, no bug fix, and no security-relevant behavior introduced.

Lower-prioritylightningd: maintain a hash table of short_channel_id, for faster lookup.by Rusty Russell · ab803457 · Aug 14, 2025 · 9 filesMessage 65 · AdequateInformational 12Details
Commit message · Rusty Russell

lightningd: maintain a hash table of short_channel_id, for faster lookup.

This contains real scids, as well as aliases, and old scids.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This commit is a performance and code-organization change. It builds a fast lookup table (hash map) so the node can quickly find a channel from any of its short channel IDs, including old IDs and aliases. It also centralizes how channel IDs are set so the table stays consistent. There is no security fix or vulnerability described in the commit.

Lower-prioritylightningd: consider old scids when looking up channels (for routing).by Rusty Russell · d70fc13b · Aug 14, 2025 · 2 filesMessage 73 · AdequateLow 32Details
Commit message · Rusty Russell

lightningd: consider old scids when looking up channels (for routing).

Changelog-Fixed: Protocol: we now allow routing through old short-channel-ids once a splice is done (previously we would refuse, leading to a 6 block gap in service).
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

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

This commit fixes a routing bug in Core Lightning related to channel splicing. After a channel is spliced (a procedure that changes its identifying short-channel-id), the software previously refused to route payments using the old identifier for about six blocks, causing a temporary service gap. The fix makes the node also look up channels by their old identifiers, restoring routing continuity. There is no direct evidence this is a security vulnerability; it appears to be a protocol/routing reliability fix.

Lower-priorityinteractive_tx: Add verbose loggingby Dusty Daemon · 286124e3 · Aug 13, 2025 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Dusty Daemon

interactive_tx: Add verbose logging

Adding verbose logging option to introspect into what interactive tx is doing with inputs.

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

This commit only adds extra debug logging to a transaction-handling routine. It does not change program logic, fix a bug, or introduce a security weakness. It is a diagnostic improvement.

Security candidatesplice: Fix cross-channel splicesby Dusty Daemon · 2e660d9f · Aug 13, 2025 · 1 fileMessage 68 · AdequateLow 41Details
Commit message · Dusty Daemon

splice: Fix cross-channel splices

When doing a cross channel splice, inputs move from having no SIGHASH to having SIGHASH_ALL assigned.

This causes psbt_get_changeset to flag the input as having changed, as the sighash value is compared.

This causes the second channel splice to `tx_remove_input` the input as it doesn’t match anymore, breaking the splice.

We fix this by removing the sighash value from input comparisions.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 41/100

This commit fixes a bug in Core Lightning's splicing feature where a transaction input could be incorrectly removed during a 'cross-channel splice' because the software compared a newly-added signature hash flag. The fix tells the comparison logic to ignore the signature-hash value so the input is not treated as changed and wrongly dropped. It is a functional bug fix rather than an obvious security vulnerability, but it could cause a splice to fail or funds to be handled incorrectly.

Security candidatepsbt: don’t accumlate 0 lenth widtness databy Dusty Daemon · a5a71f3b · Aug 13, 2025 · 1 fileMessage 45 · ThinLow 32Details
Commit message · Dusty Daemon

psbt: don’t accumlate 0 lenth widtness data

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 32/100

This commit fixes a small bug in how Core Lightning builds Bitcoin witness data from a PSBT. Previously, when a witness item had a declared length of zero, the code would still try to copy data from a pointer that could be NULL. The fix skips the copy when the length is zero and adds an assertion that the pointer is valid when length is non-zero. This is a defensive correctness fix; it likely prevents a potential NULL-pointer read or undefined behavior rather than an obvious remote exploit.

Lower-prioritysplice: Test for two channel spliceby Dusty Daemon · a17b364c · Aug 13, 2025 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Dusty Daemon

splice: Test for two channel splice

A python test that splices into two channels at the same time with on transaction.

Changelog-Added: Adding support for cross-channel splicing.

78/100 · AdequateMessage clarity
✓ 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 a new automated test to the project's test suite. It exercises a feature called 'cross-channel splicing'—combining updates to two payment channels into a single Bitcoin transaction. There is no change to production code, no bug fix, and no security-related content.

Security candidatesplice: Add field to DB to track if we’ve sent sigsby Dusty Daemon · a8ff8ce7 · Aug 13, 2025 · 12 filesMessage 78 · AdequateInformational 24Details
Commit message · Dusty Daemon

splice: Add field to DB to track if we’ve sent sigs

We used to use a check on the active psbt to see if our splice signature was in it — but now we need to generate the signature early.

So we have to add a field tracking if we’ve sent it and add it to the database, wire protocols, and inflight objects.

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
signing boundarysigning or wallet path
AI analysis · Informational 24/100

This commit adds a new bookkeeping flag, 'i_sent_sigs', to track whether a splice signature has already been sent. It changes how the node decides that question: previously it inspected the active PSBT, but now it records the fact explicitly in memory, wire messages, and the wallet database. The change is described as a refactor to support generating splice signatures earlier. There is no direct evidence in the commit of a security vulnerability, but any mismatch in this flag could in principle cause a node to send signatures twice, omit them, or resume a splice incorrectly after a restart.

Lower-prioritysplice: Add details to log messageby Dusty Daemon · 8783f3c0 · Aug 13, 2025 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Dusty Daemon

splice: Add details to log message

Add more information to funding issue failure messages when splicing

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

This commit only adds extra details to existing error log messages during a Lightning channel splicing operation. It does not change program logic, fix a bug, or alter security behavior. It is a diagnostic/logging improvement.

Lower-prioritysplice: Track if splice sigs are sentby Dusty Daemon · d84d0f70 · Aug 13, 2025 · 1 fileMessage 60 · AdequateLow 42Details
Commit message · Dusty Daemon

splice: Track if splice sigs are sent

Use the new i_sent_sigs field to track if we’ve sent our peer our user sigs.

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

This commit adds tracking for whether a node has sent its own splice signatures during a channel-splicing negotiation. It also changes the logic so that the node updates its internal 'inflight' funding record when it either receives the peer's signature or sends its own. The change appears to fix a state-tracking gap that could cause a splice to stall or leave the channel in an inconsistent state, but the commit message does not frame it as a security fix and no exploit is directly evident from the diff alone.