AQ
← All projectsACINQ

Eclair

Scala implementation of a Lightning Network node.

BitcoinLightning NetworkNormal
Repository coverage

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

51security candidates46second-pass queue191AI analyses
22commits · 30 days
46commits · 60 days
89commits · 180 days
168commits · 365 days
Backfill bands
Aug 5 → Feb 691 seen11 candidatesComplete
Feb 6 → Jun 660 seen5 candidatesComplete
Jun 6 → Jul 62 seen0 candidatesComplete
Jul 6 → Aug 514 seen0 candidatesComplete
Commit communication

Does the history explain itself?

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

79/100 average clarity
126Strong · 80–100
52Adequate · 60–79
19Thin · 40–59
8Opaque · 0–39
1security candidate with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Bastien Teinturier13332127581
pm4727622270
Fabrice Drouin21918075
Thomas HUET16116075
rorp313069
Nishant Bansal212084
dependabot[bot]111081
ekzyis101058
Rusty Russell101081
Analysis record

Published AI watches

Last scanned 50 minutes ago

Low 25 AI analysisMessage 81 · Strong
AQ ACINQEclair BitcoinLightning Network

Upgrade postgresql client from 42.7.11 to 42.7.12 (#3330)

This commit updates the PostgreSQL database driver used by Eclair from version 42.7.11 to 42.7.12. It is a routine dependency bump by an automated tool. The commit itself does not say what bugs the new driver fixes, but small point-release…

Dependency version bump of a database driverPoint-release upgrade may include upstream security fixes, but none are named in the commitNo application code changes or direct vulnerability evidence in the diff
972dfe99by dependabot[bot]+3−12 files
No security note in commit
Low 31 AI analysisMessage 58 · Thin
AQ ACINQEclair BitcoinLightning Network

Use bitcoin-kmp 0.49 (depends on bitcoin-kmp 0.32.0 and secp256k1-kmp 0.24.0) (#3362)

This commit updates Eclair's Bitcoin library dependency from version 0.48 to 0.49, which internally uses newer versions of bitcoin-kmp and secp256k1-kmp. The code changes only replace old property accesses (like `.txid`) with new method ca…

Dependency version bump for Bitcoin and secp256k1 cryptographic librariesSource changes are API adaptations (.txid -> .getTxid), not logic changesSecurity-critical validation code is touched (PSBT/transaction integrity checks against malicious Bitcoin Core)
6162e2aaby Fabrice Drouin+22−44 files
No security note in commit
Informational 15 AI analysisMessage 86 · Strong
AQ ACINQEclair BitcoinLightning Network

Update build to improve release process (#3381)

This commit is a routine build-system update. It upgrades several Maven plugin versions, removes the git commit ID from one jar manifest field to avoid a build-time circular dependency, and adds an optional build profile for a fuzz-testing…

c3e9f5d6by Fabrice Drouin+834−105 files
No security note in commit
High 79 AI analysisMessage 81 · Strong
AQ ACINQEclair BitcoinLightning Network

Reject API access from browsers (#3380)

This commit closes a cross-site request forgery (CSRF) hole in Eclair's admin API. Before the change, a malicious web page visited by a node operator could silently submit authenticated API requests (for example, to send funds or close Lig…

New origin-check directive rejecting all requests with an Origin headerRemoval of CORS response headers from API responsesCSRF protection described in commit message and release notes
27438b75by pm47+111−86 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 36 · Opaque
AQ ACINQEclair BitcoinLightning Network

Back to dev (#3379)

This commit is a routine post-release housekeeping change. It bumps the project version from 0.14.3 to 0.15.0-SNAPSHOT across several build files, re-enables a Maven trusted-checksum feature used for build verification, adds a placeholder …

No security-relevant code changesNo vulnerability indicatorsNo bug fixes or patches
bafcf3b6by Fabrice Drouin+74−68 files
No security note in commit
Informational 15 AI analysisMessage 76 · Adequate
AQ ACINQEclair BitcoinLightning Network

Improve the deterministic build (#3378)

This commit adjusts build packaging settings to make compiled releases more reproducible across different computers. It sets consistent file permissions and line endings for packaged documentation and runtime files. There is no indication …

eb7cb009by pm47+6−02 files
No security note in commit
Critical 89 AI analysisMessage 91 · Strong
AQ ACINQEclair BitcoinLightning Network

More AI fixes and defense-in-depth (#3376)

This is a large security patch for the Eclair Lightning node that fixes multiple ways an attacker could steal funds, burn money to miners, or lock funds forever. The fixes include: preventing force-closes with un-publishable splice transac…

Force-close uses latest publishable commitment to avoid unconfirmable splice commit txsClosing fee bounded by maxClosingFeerate when local node pays feesNew max-funding-feerate configuration caps funding/splice miner fees
4111ad86by pm47+698−9835 files
Vendor flagged security relevance
Low 38 AI analysisMessage 78 · Adequate
AQ ACINQEclair BitcoinLightning Network

Tor: allow password auth on private networks (#3375)

This change expands when Eclair will allow password-based authentication to a Tor control port. Previously, only loopback addresses (the same machine) were considered safe enough for password auth. Now, private/site-local and link-local ne…

Relaxation of authentication-method restriction for Tor control portPassword authentication now permitted on site-local and link-local addressesOriginal code explicitly rejected password auth for non-loopback addresses
8b58405dby pm47+1−11 file
No security note in commit
Informational 15 AI analysisMessage 36 · Opaque
AQ ACINQEclair BitcoinLightning Network

Back to dev (#3371)

This commit is a routine post-release housekeeping change. It bumps the project version from 0.14.2 to 0.15.0-SNAPSHOT, re-enables a Maven trusted-checksum feature used for build verification, adds a placeholder release-notes file, and del…

No security-relevant code changes indicating a vulnerabilityBoot.scala startup guard prevents accidental deployment of an unsafe development snapshotMaven trusted checksum verification is re-enabled, improving supply-chain/build integrity
39c5cb27by Bastien Teinturier+74−68 files
No security note in commit
High 70 AI analysisMessage 81 · Strong
AQ ACINQEclair BitcoinLightning Network

More robust splicing edge cases (#3366)

This commit hardens Eclair's handling of the Lightning 'splicing' feature when a peer misbehaves. Splicing lets two nodes resize an open payment channel without closing it on-chain. The patch adds extra checks so that if a peer sends unexp…

Adds commitment-index consistency checks before completing splice/RBF funding attemptsRejects forbidden update messages while remote peer is quiescingRejects commit_sig during quiescence to prevent commitment-index desync
59772fe1by Bastien Teinturier+408−3711 files
Vendor flagged security relevance
Moderate 54 AI analysisMessage 86 · Strong
AQ ACINQEclair BitcoinLightning Network

Add optional rate-limit on incoming pre-auth connections (#3356)

This commit adds a safety net to the Eclair Lightning node to limit how many incoming peer connections can sit unfinished before completing the cryptographic handshake. Previously, an attacker could open many TCP connections and leave them…

Resource-exhaustion mitigation: bounds unauthenticated incoming connections to prevent memory/file-descriptor/CPU exhaustionNew kill reason TooManyPendingConnections added to PeerConnection.KillReasonNew metrics incomingconnections.pending/evicted/rejected for monitoring abuse
a2fe6c74by Bastien Teinturier+445−2111 files
Vendor flagged security relevance
Moderate 67 AI analysisMessage 98 · Strong
AQ ACINQEclair BitcoinLightning Network

Fix a batch of Tor-related issues (#3354)

This commit fixes three security issues in how Eclair connects to the Tor network and stores sensitive files. First, it changes the default Tor authentication from password to safecookie, and blocks password mode when the Tor control port …

Default authentication changed from password to safecookiePassword authentication rejected for remote Tor control portsTor cookie length validated to be exactly 32 bytes
3d092da8by Bastien Teinturier+171−1067 files
Vendor flagged security relevance
Moderate 60 AI analysisMessage 86 · Strong
AQ ACINQEclair BitcoinLightning Network

Reject messages that include the wrong type of signatures (#3368)

This commit fixes a bug in the Eclair Lightning node where a peer could send a message containing both a correct standard signature and an incorrect partial signature. The old code would verify the correct signature but then store the inva…

Type-confusion between IndividualSignature and PartialSignatureWithNonce in channel messagesInvalid partial signature could be stored after valid individual signature was verifiedNew signatureFor helper enforces commitment-format-aware signature selection
1fc3dd7cby Fabrice Drouin+179−7816 files
Vendor flagged security relevance
Moderate 60 AI analysisMessage 88 · Strong
AQ ACINQEclair BitcoinLightning Network

Force-close on invalid HTLC `cltv_expiry` (#3367)

This change makes the Eclair Lightning node force-close a payment channel if a peer tries to add a payment whose timeout value (cltv_expiry) is 500,000,000 or higher. Such large values are invalid according to the Lightning BOLT 2 specific…

BOLT 2 compliance check added for HTLC cltv_expiry >= 500,000,000Invalid cltv_expiry now triggers local error and channel force-closeOff-by-one fix in locktime threshold interpretation (<= changed to <)
b7ebefdbby Bastien Teinturier+32−145 files
Vendor flagged security relevance
Low 37 AI analysisMessage 88 · Strong
AQ ACINQEclair BitcoinLightning Network

Add support for fulfillment payload (#3321)

This commit adds a new optional encrypted payload to Lightning payment fulfillment messages. It is a feature implementation, not a fix for an active vulnerability. The code does introduce a safety check: if a peer sends an oversized fulfil…

New cryptographic payload handling added to payment fulfillment pathSize limits and silent truncation applied to failure packets, fulfillment payloads, and attribution dataChannel force-close triggered on oversized peer fulfillment payload
1819a5e8by Bastien Teinturier+812−23344 files
No security note in commit
Moderate 52 AI analysisMessage 88 · Strong
AQ ACINQEclair BitcoinLightning Network

Fix a batch of low-severity issues (#3355)

This commit fixes five low-severity security or robustness issues in the Eclair Lightning node. It removes a risky type cast that could crash the node on corrupted channel data, forces encrypted cluster communication to prevent private dat…

Unsafe type cast removed from channel codecCluster mode now requires tls-tcp transportAPI error responses no longer include exception messages
06e0ff71by Bastien Teinturier+68−299 files
Vendor flagged security relevance
High 72 AI analysisMessage 93 · Strong
AQ ACINQEclair BitcoinLightning Network

Explicitly match on-the-fly HTLCs after a restart (#3357)

This commit fixes a bug in the Eclair Lightning node where, after a restart, the node could be tricked into keeping the wrong incoming payments alive. An attacker could reuse the same payment identifier (payment_hash) from a legitimate in-…

Fixes a logic bug that could lead to forced channel closuresAttack vector: payment_hash reuse to pin unrelated HTLCsChanges identifier from payment_hash to unique (channel_id, htlc_id)
aa321d69by Bastien Teinturier+57−53 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 86 · Strong
AQ ACINQEclair BitcoinLightning Network

Better documentation for remote `bitcoind` (#3359)

This commit only updates user documentation. It adds warnings that the Bitcoin node (bitcoind) should run on the same machine as Eclair, and if it runs remotely, operators must use a secure encrypted tunnel. No code was changed, so this pa…

Documentation-only changeNo code, configuration, or cryptographic modificationsDescribes pre-existing deployment risk rather than a new vulnerability
24229589by Bastien Teinturier+7−02 files
Vendor flagged security relevance
High 78 AI analysisMessage 98 · Strong
AQ ACINQEclair BitcoinLightning Network

Fix several on-the-fly-funding bugs (#3351)

This commit fixes several bugs in Eclair's 'on-the-fly funding' feature, which lets a node open a Lightning channel and pay for it using future payment fees. The bugs could allow a malicious peer to make the node pay twice, lose money on f…

Double-payment vulnerability fixed: paymentAlreadyRelayed now checks commitment transactions in addition to pending local changes, preventing relay of already-cross-signed HTLCs after restart.Loss-of-funds vulnerability fixed: funded channels with unpaid future-HTLC fees are force-closed before upstream HTLCs are failed, avoiding a race where the peer fulfills a cross-signed downstream HTLC after we failed upstream.Upstream settlement gap fixed: preimages received after HTLC expiry are now relayed upstream, preventing the node from paying downstream without being paid upstream.
48ff28abby Bastien Teinturier+375−617 files
Vendor flagged security relevance
Moderate 62 AI analysisMessage 53 · Thin
AQ ACINQEclair BitcoinLightning Network

Harden permissions of seeds and datadir (#3340)

This commit tightens file and folder permissions for Eclair's sensitive data. It ensures that seed files (which protect the node's identity and Lightning channel funds) and the data directory are readable only by the owner on Linux/macOS s…

Hardening of seed file permissions to owner-only read/writeHardening of datadir and chaindir permissions to owner-onlyMigration path also re-permissions copied seed files
17edd765by rorp+62−14 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-priorityAdd event for failed payment relay (#3244)by Bastien Teinturier · 369f042d · Jan 29, 2026 · 8 filesMessage 88 · StrongInformational 20Details
Commit message · Bastien Teinturier

Add event for failed payment relay (#3244)

We add an event when a payment could not be relayed and indicates that
we may need to add liquidity towards the next node. It is really hard
to figure it out in the context of a single payment though, so this
event does not by itself mean that liquidity should be allocated. The
listeners should collect several events and regularly query the state
of existing channels with our peers, and network graph data for remote
nodes, to create good heuristics for allocating liquidity. Otherwise,
it would be trivial for malicious senders to game routing nodes into
allocating liquidity "for free" towards them, which could result in
financial loss.

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 20/100

This commit adds new internal event notifications when a Lightning payment cannot be relayed through a node. It is a defensive, observability-only change: it does not alter payment handling logic, but gives node operators signals they can use to decide where to allocate channel liquidity. The commit message explicitly warns that the events can be gamed by malicious senders and should not be acted on blindly.

AI review queuedInclude the `node_id` of channel peers in payment events (#3243)by Bastien Teinturier · ff7a24c5 · Jan 23, 2026 · 40 filesMessage 81 · StrongInformational 19Details
Commit message · Bastien Teinturier

Include the `node_id` of channel peers in payment events (#3243)

When scoring peers, we don't really care about individual channels but
rather about the peer itself, who is identified by its `node_id`. We
update payment events to include the `node_id` of our channel peer, to
make it easier to compute statistics about each of our peers.

We also rework the events in `PaymentEvents.scala` to be more consistent
now that we've added support for trampoline, splicing, liquidity ads and
on-the-fly funding, which are all the features we had planned that can
impact peer scoring.

Note that we don't yet update the schema of the `AuditDb`, which means
that some of the data isn't stored and is currently filled with a dummy
value. We will include *all* updates to the DB schema in a future PR and
will fix this.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: unusually broad change
AI analysis · Informational 19/100

This commit is a refactoring and observability improvement for the Eclair Lightning node. It adds the node identifier (node_id) of channel peers to various payment events and restructures how payment events are represented in code. It does not fix a security vulnerability, nor does it introduce obvious new attack surface. The database schema is intentionally not yet updated, so some stored data uses a placeholder node_id. The change touches many files but is mostly internal plumbing for metrics and audit logging.

Security candidateAdd duration information to payment events (#3241)by Bastien Teinturier · 9856db85 · Jan 20, 2026 · 32 filesMessage 81 · StrongInformational 19Details
Commit message · Bastien Teinturier

Add duration information to payment events (#3241)

We now record start and end time for payment events, and for remote
failures, which lets us easily identify slower paths and faulty nodes.
We properly track the settlement of each individual payment now.

We also clean-up field names and harmonize those events. Note that we
don't update the DB schema at that point: this will be done in another
PR that batches all DB schema changes.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathseed or entropy path
AI analysis · Informational 19/100

This commit is a refactoring and observability improvement for the Eclair Lightning node. It adds start/end timestamps to payment events and failures, renames some timestamp fields for consistency, and updates how payment hashes are derived from preimages. There is no direct security vulnerability visible in the diff; the changes are primarily for monitoring, metrics, and database/event-stream hygiene. A few places now use the current time instead of a previously stored request time when recording relay settlement, which is a behavioral change but not an obvious exploit.

Lower-priorityAdd test vector for Bolt12 invalid bech32 padding (#3242)by Bastien Teinturier · 632713a6 · Jan 19, 2026 · 1 fileMessage 83 · StrongInformational 12Details
Commit message · Bastien Teinturier

Add test vector for Bolt12 invalid bech32 padding (#3242)

See https://github.com/lightning/bolts/pull/1312 for more details.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 12/100

This commit only adds a new test case to a JSON test file. It checks that Eclair correctly rejects a specific malformed BOLT 12 offer string whose Bech32 padding bits are invalid. There is no code change, no fix, and no behavior change in the application itself.

AI review queuedMore tests for accountability (#3240)by Thomas HUET · 0214a1e7 · Jan 8, 2026 · 4 filesMessage 78 · AdequateInformational 15Details
Commit message · Thomas HUET

More tests for accountability (#3240)

These tests are also added to lightning-kmp (https://github.com/ACINQ/lightning-kmp/pull/846) to check compatibility.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds new test cases for an existing feature called 'accountability' in the Eclair Lightning node software. It does not change any production code, so it cannot introduce a new security vulnerability or directly fix one. The tests verify that invoice and payment onion data containing an 'UpgradeAccountability' marker are encoded and decoded correctly.

Lower-priorityUse fallback feerates on testnets (#3233)by Bastien Teinturier · 9ed0014a · Jan 8, 2026 · 2 filesMessage 88 · StrongInformational 19Details
Commit message · Bastien Teinturier

Use fallback feerates on testnets (#3233)

When using testnet3 or testnet4, Bitcoin Core may fail to estimate fees
because there isn't enough block data. We now use the configured default
feerates when that happens to make it easier to run on testnets.

We also update the default feerates to better match current values.

Fixes #3105

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 19/100

This change makes Eclair easier to run on Bitcoin test networks by using configured default transaction fee rates when Bitcoin Core cannot estimate fees due to limited block data. It also lowers the default fee rates to match current network conditions. This is a usability and operational improvement, not a security fix.

AI review queuedCI: fix test with latest bitcoind (#3239)by Fabrice Drouin · 3ac122b9 · Jan 8, 2026 · 1 fileMessage 98 · StrongInformational 15Details
Commit message · Fabrice Drouin

CI: fix test with latest bitcoind (#3239)

Add flag to build without multiprocess architecture which we don't use and requires and additional dependency (capnproto).

98/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
documentation-only discountsecond-pass: broader security terminology
AI analysis · Informational 15/100

This is a routine GitHub Actions CI workflow change. It adds a build flag to disable an optional Bitcoin Core multiprocess feature that the project does not use, so that automated tests against the latest bitcoind version can compile without needing an extra dependency (capnproto). There is no change to Eclair's production code, no user-facing behavior change, and no security relevance.

AI review queuedRework channel lifecyle events (#3237)by Bastien Teinturier · 473b46d8 · Jan 7, 2026 · 20 filesMessage 88 · StrongInformational 20Details
Commit message · Bastien Teinturier

Rework channel lifecyle events (#3237)

We emit several events during the channel lifecycle, which have become
a bit of a mess over the years, especially with the addition of 0-conf,
splicing and on-the-fly funding.

We now use the following events:

- `ChannelCreated` once the funding transaction is created
- `ChannelFundingConfirmed` once the funding transaction is confirmed,
which is also emitted for splice transactions
- `ChannelReadyForPayments` once the channel is ready for payments,
after exchanging `channel_ready` for the channel creation or
`splice_locked` for splice transactions

The order between `ChannelFundingConfirmed` and `ChannelReadyForPayments`
depends on whether 0-conf is used or not.

We remove `ChannelOpened`, which was actually a subset of the existing
`ChannelReadyForPayments` event (which was added afterwards).

We add a few fields to existing channel events, which we don't yet
store in the DB to avoid modifying it, but will store later when we
modify the schema of the `AuditDb`.

We now store an entry in the `AuditDb` whenever a splice transaction
confirms, which allows tracking the full history of a channel's changes.

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: unusually broad change
AI analysis · Informational 20/100

This commit is a routine internal refactoring of Eclair's channel-lifecycle event system. It renames and splits events (for example replacing 'channel-opened' with 'channel-confirmed' and 'channel-ready') so the software can correctly track normal channels, zero-confirmation channels, and splice transactions. It also records more details in the audit database, such as the funding transaction ID for each splice. There is no direct security vulnerability in the diff; it is a maintainability and observability improvement.

Lower-priorityStop storing channel errors in `AuditDb` (#3236)by Bastien Teinturier · 7137eac2 · Jan 6, 2026 · 5 filesMessage 98 · StrongInformational 18Details
Commit message · Bastien Teinturier

Stop storing channel errors in `AuditDb` (#3236)

We stop storing every `ChannelErrorOccured` event in the `AuditDb`.
This is very spammy because there are a lot of non-fatal events,
and they turned out to be unnecessary for auditing (they make more
sense in the logs for debugging).

Such events include for example notifying that we tried to relay a
payment to a channel that didn't have enough balance, or commands
sent to channels that are offline, closing or reconnecting.

Note that we stop creating the corresponding table, but we don't
delete old data: it is up to node operators to decide whether they
want to keep it or not. We still support migrating older databases
including data from this table.

We also remove tests from very old migrations (more than 2 years old)
which are spammy but not very interesting anymore.

98/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 18/100

This commit removes a database table that was used to store routine, mostly non-serious channel error events. It is a cleanup change: the events are still logged to normal log files, but they are no longer written to the audit database. There is no indication this fixes a security vulnerability; it is described by the project as a way to reduce database noise and storage use.

Lower-priorityDon't rebroadcast announcements for spent channels (#3235)by Bastien Teinturier · c214b075 · Jan 6, 2026 · 3 filesMessage 93 · StrongLow 41Details
Commit message · Bastien Teinturier

Don't rebroadcast announcements for spent channels (#3235)

* Don't rebroadcast spent channels

We introduced a mechanism to keep spent channels in the `Router` until
the spending transaction has enough confirmations to avoid removing
spliced channels from our graph too eagerly. An unwanted side-effect
is that while we're waiting for confirmations, we may broadcast channel
announcements for these spent channels, which looks like spam to our
peers.

We now filter out channels that have been spent for which we're waiting
for confirmations when sending out gossip.

* Notify front nodes immediately when channel is spent

Another side-effect of the splice change is that we didn't notify front
nodes that the channel was spent before it reached enough confirmations
so we kept sending channel gossip to our peers.

We now immediately notify the front nodes so that they stop sending this
channel to our peers.

93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Low 41/100

This commit fixes a bug where Eclair would keep advertising Lightning channels that had already been spent (for example, as part of a splice operation) while waiting for the spending transaction to be confirmed. This caused the node to send stale or misleading routing information to its peers, which looks like network spam and could confuse other nodes' routing decisions. The fix filters those spent-but-pending channels out of gossip broadcasts and immediately tells front-end nodes to stop relaying them.

AI review queuedAccountable HTLCs (#3217)by Thomas HUET · e3fd1867 · Jan 5, 2026 · 68 filesMessage 58 · ThinLow 37Details
Commit message · Thomas HUET

Accountable HTLCs (#3217)

Add accountability signal for HTLCs, it replaces endorsement.
See https://github.com/lightning/bolts/pull/1280

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathparser or protocol pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Low 37/100

This commit replaces an older 'endorsement' anti-jamming signal with a new 'accountable' signal for Lightning HTLCs, following a draft specification update. It changes how invoices, payment onions, and channel messages carry and propagate this signal. Importantly, the release notes state the protections are not yet enforced: the node only collects data and logs what it would have rejected. The change is a protocol update and data-collection feature, not an active enforcement that directly blocks payments today.

Lower-priorityValidate Bolt 11 fallback addresses (#3232)by Bastien Teinturier · 1bc09764 · Jan 5, 2026 · 2 filesMessage 86 · StrongModerate 51Details
Commit message · Bastien Teinturier

Validate Bolt 11 fallback addresses (#3232)

Validate fallback addresses when decoding Bolt 11 invoices.
Note that we must remove an existing test that used invalid addresses.

Fixes #3135

86/100 · StrongMessage clarity
✓ 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
defensive validation
AI analysis · Moderate 51/100

This change tightens validation of Bitcoin fallback addresses embedded in Lightning invoices (Bolt 11). Previously, Eclair would accept invoices containing fallback addresses that were malformed or invalid for the invoice's network. Now it rejects such invoices during decoding. This is a defensive correctness fix that prevents downstream bugs or confusion, but the commit itself does not describe a specific exploitable vulnerability.

Lower-priorityAdd `maxCltvExpiryDelta` parameter to `findRoute*` APIs (#3234)by Bastien Teinturier · 3b2bc570 · Jan 5, 2026 · 7 filesMessage 81 · StrongInformational 18Details
Commit message · Bastien Teinturier

Add `maxCltvExpiryDelta` parameter to `findRoute*` APIs (#3234)

We add a parameter to `findroute` API variants to limit the total CLTV
expiry delta of the route(s) returned.

Fixes #2617

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 18/100

This commit adds a new optional setting called maxCltvExpiryDelta to Eclair's route-finding APIs. It lets users tell the Lightning node not to return payment routes whose total time-lock delay exceeds a chosen limit. The change is a feature addition, not a fix for an active vulnerability, and it does not alter default behavior when the new parameter is omitted.

Lower-priorityfixup! Add API methods to spend funds sent to taproot channel addresses (#3220) (#3228)by pm47 · 288c5418 · Jan 2, 2026 · 1 fileMessage 58 · ThinLow 41Details
Commit message · pm47

fixup! Add API methods to spend funds sent to taproot channel addresses (#3220) (#3228)

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
AI analysis · Low 41/100

This is a tiny one-line bugfix in Eclair's code for spending funds sent to Lightning channel addresses. The change corrects which Bitcoin script is checked to decide whether a channel uses the newer taproot format. Previously it checked the script of the destination address the user provided; now it checks the script of the actual output being spent from the funding transaction. Using the wrong script could cause the code to choose the wrong spending path or signature scheme, potentially making it impossible to recover funds sent to a taproot channel address or, in the worst case, constructing an invalid or insecure transaction. There is no claim in the commit that this is a security issue, and the fix is a follow-up to a recently added feature, so it likely fixes a functional bug rather than an active vulnerability.

Security candidateUse bitcoin-lib 0.46 (taproot tweak refactor) (#3225)by Fabrice Drouin · 53747cc5 · Dec 18, 2025 · 12 filesMessage 81 · StrongLow 27Details
Commit message · Fabrice Drouin

Use bitcoin-lib 0.46 (taproot tweak refactor) (#3225)

* Use bitcoin-lib 0.46 (taproot tweak refactor)

* Update eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala

Co-authored-by: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Low 27/100

This commit updates Eclair to use a newer version of its underlying Bitcoin library (bitcoin-lib 0.46). The main change is a code refactor in how Taproot addresses and scripts are created: instead of passing an optional script tree, callers now explicitly choose between a 'key path' tweak (for simple key-spending) or a 'script path' tweak (for script-spending). The commit also updates related cryptographic checksums and test code. There is no direct evidence in the commit message or diff that this fixes a known security vulnerability; it appears to be a routine dependency and API refactor.

Lower-priorityDon't scan the blockchain for spent external channels (#3226)by Bastien Teinturier · 36822bb6 · Dec 17, 2025 · 8 filesMessage 93 · StrongLow 30Details
Commit message · Bastien Teinturier

Don't scan the blockchain for spent external channels (#3226)

When an external channel is spent, we don't immediately remove it from
our network graph in case the spending transaction is a splice (see
https://github.com/lightning/bolts/pull/1270 for more details).

A side-effect of this change, introduced in #2936, is that when we
start watching a channel after receiving its `channel_announcement`,
we will scan the blockchain if it is actually already spent. This can
be expensive if peers send us `channel_announcement`s for channels
that have been spent a long time ago since `bitcoind` doesn't provide
an index for spending transactions. It is also misleading, because if
we give up after scanning X blocks of the blockchain, we will create
a log line saying that funds are at risk: they're never at risk since
those are not our channels.

This commit fixes this issue by only checking whether the channel is
already spent by a confirmed transaction or not when setting the watch
(which is an inexpensive and efficient RPC call to `bitcoind`), without
scanning the blockchain to find the spending transaction. If it is
already spent, we immediately remove it from our network graph, even
if the spending transaction was actually a splice. This is fine, since
that channel will be re-added to our graph whenever we receive the
`channel_announcement` for the splice. In the worst case, we will simply
not route through an actually available channels for a few blocks while
its splice transaction is confirming.

Co-authored-by: pm47 <pm.padiou@gmail.com>

93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Low 30/100

This commit fixes a performance and usability bug in the Eclair Lightning node. When the node learned about an old public channel that had already been closed, it would wastefully scan the entire Bitcoin blockchain looking for the closing transaction, which could be very slow and produced scary 'funds at risk' log messages even though no user funds were actually in danger. The fix makes the node simply check whether the channel output is already gone and, if so, remove the channel from its routing map without hunting for the closing transaction.

Lower-priorityAllow remote `dust_limit_satoshis` up to 5000 sats (#3227)by Bastien Teinturier · 5aea5142 · Dec 17, 2025 · 1 fileMessage 81 · StrongLow 37Details
Commit message · Bastien Teinturier

Allow remote `dust_limit_satoshis` up to 5000 sats (#3227)

Set allow remote `dust_limit_satoshis` up to 5000 sats, which means that
HTLC outputs should be claimable at feerates lower than `25 sat/kw`.

Given that our default `dust-tolerance` is set to 50 000 sats, this
allows at least 10 pending dust HTLCs before we start failing dust HTLCs
back instead of relaying them.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 37/100

This commit lowers the maximum dust-limit Eclair will accept from a remote Lightning peer from 10,000 satoshis to 5,000 satoshis. Dust limits determine which tiny channel outputs can be created on-chain. The change is framed as a defensive tightening: with Eclair's default dust tolerance of 50,000 sats, it still allows at least 10 tiny HTLCs to be pending before the node stops relaying them. The commit message itself describes the change in security-relevant terms (preventing uneconomical on-chain HTLC claims), but the diff is a single configuration value change and does not fix an obvious, exploitable bug.

Security candidateIdentify failing node by its index (#3224)by Thomas HUET · 856e236f · Dec 15, 2025 · 16 filesMessage 76 · AdequateLow 35Details
Commit message · Thomas HUET

Identify failing node by its index (#3224)

When a HTLC is failed remotely, the failing node was previously identified by its node id.
However this is not enough if the same node appears multiple times in the payment route, for instance for circular rebalancing.
We now identify the failing node using its index in the payment route.

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Low 35/100

This commit fixes a routing bug in the Eclair Lightning node. When a payment failed somewhere along the path, the software used to identify the failing node only by its public key. That caused confusion when the same node appeared more than once in a route (for example, in circular rebalancing payments), because the wrong occurrence could be blamed. The fix adds the failing node's position (index) in the route so the correct hop is identified. This is a correctness/reliability improvement rather than a direct theft-of-funds vulnerability, but misidentifying the failing hop could lead to poor routing decisions, unnecessary retries, or incorrect blacklisting of channels/nodes.

Lower-priorityUnwatch previous funding tx after splice (#3218)by Bastien Teinturier · 0318fb78 · Dec 15, 2025 · 4 filesMessage 76 · AdequateLow 25Details
Commit message · Bastien Teinturier

Unwatch previous funding tx after splice (#3218)

After a splice transaction confirms, we don't need to keep watching the
previous funding output: it has been irrevocably spent and needlessly
consumes resources in the `Watcher` actor.

Those watches are cleaned up when the `Channel` actor dies, which does
not happen if the channel isn't closed and the `Peer` actor is kept
alive while disconnected.

Whenever we receive a new block, we log the number of watches we have.
This lets us detect whether we're missing some clean-up of old watches
in edge cases.

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 25/100

This commit fixes a resource cleanup issue in the Eclair Lightning node. After a channel is upgraded via a 'splice' transaction, the old funding transaction output is permanently spent. Previously, Eclair kept watching that old output indefinitely if the channel stayed open and the peer stayed disconnected, wasting memory and processing power in the blockchain watcher. The change explicitly tells the watcher to stop watching those old, already-spent outputs. It also adds logging so operators can spot similar leftover watches. There is no direct evidence in the commit that this was exploitable to steal funds or attack other nodes; it appears to be a performance and robustness improvement.

Lower-priorityAdd API methods to spend funds sent to taproot channel addresses (#3220)by Fabrice Drouin · 38dc4072 · Dec 4, 2025 · 4 filesMessage 81 · StrongInformational 11Details
Commit message · Fabrice Drouin

Add API methods to spend funds sent to taproot channel addresses (#3220)

Add API methods to spend funds sent to taproot channel addresses

This PR adds new API calls that extend spendFromChannelAddress* calls to taproot channels.

---------

Co-authored-by: pm47 <pm.padiou@gmail.com>

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 11/100

This commit adds new API methods to let users spend funds that were accidentally sent to taproot-style Lightning channel addresses. It extends existing recovery tools to support a newer address format. There is no indication in the commit that this fixes a security vulnerability; it appears to be a feature addition.

Lower-priorityFix links to 'Reaching The Ground With Lightning' (#3219)by ekzyis · e1775eeb · Dec 4, 2025 · 2 filesMessage 58 · ThinInformational 15Details
Commit message · ekzyis

Fix links to 'Reaching The Ground With Lightning' (#3219)

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates two broken documentation links in markdown files. It does not change any program code, configuration, or security behavior. There is no security issue.

Lower-priorityMonitor the internal state of `ReputationRecorder` (#3216)by Bastien Teinturier · a87963b1 · Nov 19, 2025 · 2 filesMessage 81 · StrongInformational 17Details
Commit message · Bastien Teinturier

Monitor the internal state of `ReputationRecorder` (#3216)

It is quite hard to reason about the internal state of this actor, and
it tracks every pending HTLC. If for some reason we're not removing
HTLCs correctly, this would create a memory leak.

We log the number of pending HTLCs every 5 minutes to help detect if
clean-up is correctly implemented.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 17/100

This commit adds a periodic log message to an internal bookkeeping actor so developers can spot if pending payment records are piling up unexpectedly. It does not fix a known bug or change how payments are processed; it is purely an observability/monitoring improvement.

Lower-priorityUpdate default configuration for revoked HTLC clean-up (#3212)by Bastien Teinturier · fa7e2ee3 · Nov 18, 2025 · 2 filesMessage 81 · StrongLow 28Details
Commit message · Bastien Teinturier

Update default configuration for revoked HTLC clean-up (#3212)

The default configuration for removing old rows containing revoked HTLC
data after a channel close was too slow and inadequate for most nodes.
We update it to use smaller batches without a much shorter interval.

Thanks @DerEwige for providing data about their experiments.

Fixes #3211

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 28/100

This commit changes default settings and timing logic for a database cleanup task that removes old Lightning channel data after channels close. The old defaults deleted very large chunks very infrequently, which could slow down or stress busy nodes. The new defaults use smaller, more frequent deletions and avoid stacking up cleanup jobs when the database is already busy. There is no direct security vulnerability being patched; it is a performance and operational-stability improvement.

Lower-priorityAllow high remote `dust_limit_satoshis` (#3215)by Bastien Teinturier · f6a5a3ca · Nov 17, 2025 · 1 fileMessage 88 · StrongLow 33Details
Commit message · Bastien Teinturier

Allow high remote `dust_limit_satoshis` (#3215)

Now that we only accept anchor output channels and beyong, we should
let our peers use high `dust_limit_satoshis` values to ensure that the
transaction outputs are economically spendable.

We can't yet raise our `dust_limit_satoshis`: we must first accept high
values, and in the next release (and once other implementations support
it as well), then we'll be able to increase our default value.

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Low 33/100

This commit raises the maximum dust limit Eclair will accept from remote Lightning peers from 600 to 10,000 satoshis. Dust limits determine the smallest transaction output a channel will create. The change is framed as a forward-compatibility and economic-spendability improvement for newer 'anchor output' channels, not as a security fix. It does not change Eclair's own dust limit (still 546 satoshis).

Security candidateUpdate `bitcoin-lib` (#3213)by Bastien Teinturier · df75ed5a · Nov 12, 2025 · 2 filesMessage 43 · ThinInformational 12Details
Commit message · Bastien Teinturier

Update `bitcoin-lib` (#3213)

To add support for P2A PSBTs.

43/100 · ThinMessage clarity
✓ Descriptive subject✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
signing boundarycryptography-sensitive path
AI analysis · Informational 12/100

This is a routine dependency update for Eclair, a Bitcoin Lightning node. It bumps the internal 'bitcoin-lib' library from version 0.45 to 0.45.1 and its related 'bitcoin-kmp-jvm' component from 0.28.0 to 0.28.1. The commit message says the purpose is to add support for 'P2A PSBTs' (a new Bitcoin transaction format feature). The change only updates version numbers and recorded checksums; no application code is modified in this commit. There is no mention of a security fix, bug, or vulnerability.