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

Security candidateUse bitcoin-lib 0.47 (#3268)by Fabrice Drouin · 5e741b1a · Mar 26, 2026 · 6 filesMessage 76 · AdequateInformational 22Details
Commit message · Fabrice Drouin

Use bitcoin-lib 0.47 (#3268)

* Use bitcoin-lib 0.47

* Add checksums for secp256k1-kmp 0.23.0

* der2compact() and compact2der() methods have been removed, new signInputCompact() method has been added

* Use Transaction.encodeWitnessEcdsaSig() instead of low-level calls

* Replace local der() methode with bitcoin-lib's encodeWitnessEcdsaSig()

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 pathsigning or wallet path
AI analysis · Informational 22/100

This commit updates Eclair to use a newer version of its underlying Bitcoin library (bitcoin-lib 0.47). Most changes are mechanical: replacing local helper functions with new library-provided equivalents for encoding signatures and signing transaction inputs. There is no direct evidence in the commit message or diff that this fixes a specific security vulnerability, but it does touch cryptographic code and updates a dependency, which can sometimes address bugs or weaknesses in the library itself.

Lower-priorityImprove data stored in `AuditDb` (#3245)by Bastien Teinturier · 890ccb37 · Mar 26, 2026 · 12 filesMessage 76 · AdequateInformational 18Details
Commit message · Bastien Teinturier

Improve data stored in `AuditDb` (#3245)

* Improve `channel_events` in the `AuditDb`

We improve the `channel_events` table in the `AuditDb` by:

- adding the `funding_txid` from each event
- adding the `channel_type` from each event
- using hex instead of blobs in sqlite
- providing APIs to list these events
- adding indexes on `channel_id` and `remote_node_id`

The added data isn't available in past events. We decide to simply
rename the older tables and start fresh: previous data will not be
available from the API, but can still be queried directly in SQL if
necessary.

* Improve transaction events in the `AuditDb`

We improve the `transactions_published` and `transactions_confirmed`
tables in the `AuditDb` by:

- adding more details about mining fees and feerates
- adding input and output counts
- using hex instead of blobs in sqlite
- providing APIs to list transactions by `remote_node_id`
- adding indexes for listing APIs

The added data isn't available in past events. We decide to simply
rename the older tables and start fresh: previous data will not be
available from the API, but can still be queried directly in SQL if
necessary.

* Improve payment sent and received events in the `AuditDb`

We improve the `sent` and `received` payment tables in the `AuditDb` by:

- adding `start_at` / `settled_at` timestamps to measure duration
- adding `remote_node_id` for every channel used
- using hex instead of blobs in sqlite
- reordering columns and renaming them wherever useful

The added data isn't available in past events. We decide to simply
rename the older tables and start fresh: previous data will not be
available from the API, but can still be queried directly in SQL if
necessary.

* Improve payment relayed events in the `AuditDb`

We improve the `relayed` and `relayed_trampoline` payment tables in the
`AuditDb` by:

- unifying the way we handle multi-part payments, by having one row per
payment, whether incoming or outgoing, and reconciling based on type
and direction when listing events
- adding `remote_node_id` for every channel used
- using hex instead of blobs in sqlite
- renaming columns for better clarify

The added data isn't available in past events. We decide to simply
rename the older tables and start fresh: previous data will not be
available from the API, but can still be queried directly in SQL if
necessary.

* Improve relay statistics computation

We change the relay statistics we compute, to more accurately reflect
nodes that are good or bad peers and inform liquidity allocation
decisions.

* Add liquidity purchase fees in transaction events

We now track liquidity purchases as well in transaction events, as their
fees must be taken into account when evaluating the overall fees earned
from a node.

We also add the number of on-chain transactions made with a given peer
to its relay stats.

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

This commit is a planned database schema upgrade for Eclair's audit logging. It renames old audit tables, creates new ones with extra columns (such as remote node IDs, transaction details, and timestamps), and replaces two old API endpoints with a new 'relaystats' endpoint. There is no obvious security vulnerability in the diff itself; it is a backwards-incompatible but intentional data-model change.

Security candidateClose connection when receiving malformed messages (#3273)by Bastien Teinturier · fde8de65 · Mar 24, 2026 · 2 filesMessage 93 · StrongHigh 70Details
Commit message · Bastien Teinturier

Close connection when receiving malformed messages (#3273)

When receiving a message that we're supposed to be able to decode, for
which decoding fails, we must send a warning and close the connection.
This ensures that the connection state cannot become corrupted, which
may otherwise happen if we fail to deserialize a `commit_sig` message
(for example) and simply ignored it while continuing to process the
next messages.

Fixes #3271

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
Why it was queued
cryptography-sensitive path
AI analysis · High 70/100

This patch fixes a bug in Eclair, a Bitcoin Lightning Network node implementation. Previously, if a peer sent a message that Eclair couldn't properly decode (for example, a corrupted or unexpected 'commit_sig' message), Eclair would log a warning but otherwise ignore it and keep processing later messages. This could cause the two peers' views of the channel state to drift out of sync, potentially leading to incorrect behavior or security issues. The fix makes Eclair send a warning back to the peer and immediately close the connection when it fails to decode a message it expected to understand.

Lower-priorityUpdate Bitcoin Core to v30.2 (#3274)by Bastien Teinturier · bda55186 · Mar 24, 2026 · 5 filesMessage 68 · AdequateInformational 15Details
Commit message · Bastien Teinturier

Update Bitcoin Core to v30.2 (#3274)

This release contains improvements for v3 transactions, which we want
for #3192.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit simply updates Eclair's required Bitcoin Core version from 29.x to 30.2. It changes documentation, download URLs, SHA-256 checksums, and a runtime version check. There is no security vulnerability in this change itself.

AI review queuedAdd per-peer profit scoring (#3247)by Bastien Teinturier · c24c3a74 · Mar 20, 2026 · 15 filesMessage 76 · AdequateLow 34Details
Commit message · Bastien Teinturier

Add per-peer profit scoring (#3247)

We create a new set of actors that keep track of payment statistics
across our peers and rank them to identify the top profit earners.
Based on those statistics, the actors issue recommendations to:

- allocate more liquidity towards nodes that are generating revenue and
may run out of liquidity in the next few days
- reclaim liquidity from inactive channels
- change our relay fees to optimize increases or decreases in outgoing
flow and volume

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 34/100

This commit adds a new optional 'peer profit scoring' feature to the Eclair Lightning node. When enabled, it automatically tracks payment statistics, ranks peers by profitability, and can automatically open channels, close idle channels, and adjust relay fees. By default all automatic actions are disabled, so the change is primarily an operational automation feature rather than an immediate security patch or vulnerability. The main security consideration is that enabling the automatic actions gives the node software control over on-chain funds and channel pricing, which could in theory be abused or misconfigured, but the commit itself does not introduce a known exploit.

AI review queuedFix race condition in `Postman` causing flaky `OfferPayment` tests (#3270)by Bastien Teinturier · 8c5f39f4 · Mar 19, 2026 · 1 fileMessage 100 · StrongLow 33Details
Commit message · Bastien Teinturier

Fix race condition in `Postman` causing flaky `OfferPayment` tests (#3270)

The integration test "send blinded multi-part payment a->b->c (single
channel a->b)" in `OfferPaymentSpec` fails intermittently. The root
cause is a race condition in `Postman` where the subscription for an
onion message reply is registered after the message is sent, allowing
the reply to arrive and be silently dropped before the subscription
exists.

In integration tests where all 3 nodes run on the same JVM, the onion
message round-trip (Alice -> Bob -> Carol -> creates invoice -> Carol
-> Bob -> Alice) can complete in just a few milliseconds - fast enough
to beat the `Subscribe` message to the `Postman`'s mailbox.

This explains why the test is flaky: it usually works (round-trip slower
than subscribe), but occasionally fails (round-trip faster than
subscribe, reply dropped).

We simply move the subscription registration to *before* the message is
sent to the network.

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✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: broader security terminology
AI analysis · Low 33/100

This commit fixes a timing bug in Eclair's message-delivery component called Postman. When sending an onion message that expects a reply, the code used to register for the reply *after* sending the message. In fast local tests (and potentially fast real networks), the reply could arrive before the registration completed, causing the reply to be lost. The fix registers the subscription *before* sending the message. The commit describes this as a test flakiness issue, not a security vulnerability.

AI review queuedAdd bitcoin rpc call to check if an address belongs to our wallet (#3267)by Fabrice Drouin · a4d66adc · Mar 18, 2026 · 4 filesMessage 73 · AdequateInformational 17Details
Commit message · Fabrice Drouin

Add bitcoin rpc call to check if an address belongs to our wallet (#3267)

We use the "ismine" property that is returned by the "getaddressinfo" RPC call.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 17/100

This commit adds a new helper function that lets Eclair ask Bitcoin Core whether a given bitcoin address belongs to the user's own wallet. It is a feature addition with no visible bug fix or security patch. There is no indication in the commit that it fixes a vulnerability.

AI review queuedImprove support for plugin-defined features (#3264)by Bastien Teinturier · a4f4abd9 · Mar 17, 2026 · 42 filesMessage 93 · StrongLow 35Details
Commit message · Bastien Teinturier

Improve support for plugin-defined features (#3264)

We allow injecting non-official features via plugins, by extending the
`CustomFeaturePlugin` trait. However, we previously added those features
to a set of unknown features: we can do better and add them to the known
features map, which provides pretty-printing in logs and simplifies
debugging.

We also had an issue where `hasFeature` would always return `false` for
plugin features, even when they were supported by both nodes, because we
only looked at our `activated` features map which only contains official
features.

We get rid of the `UnknownFeature` class entirely and keep the encoded
feature bits after deserializing them. We take those feature bits into
account in `hasFeature`, which fixes the issue.

This creates a slightly weird asymmetry because our local features,
which are created based on our `eclair.conf`, will not have this field
set while features that are read from network messages or the DB will
have this field set. A better architecture would be to remove the
`activated` map entirely and directly wrap the feature bits, while
providing helper functions to interact with features without having
to directly read a `BitVector`. This is a larger refactoring though,
because we'd need to add support for filtering `init` / `node` features
using bitmasks, which isn't entirely trivial to handle and requires
careful management of plugin features.

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
Why it was queued
signing or wallet pathparser or protocol pathsecond-pass: broader security terminologysecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Low 35/100

This commit fixes a bug where Eclair did not correctly recognize custom features added by plugins when checking if another node supports them. Previously, plugin features were treated as 'unknown' and `hasFeature` always returned false for them, even when both nodes supported the same plugin feature. The change stores the raw feature bits after decoding and uses them in feature checks, while removing the old 'UnknownFeature' class. It is a correctness and compatibility improvement rather than a critical security patch, but it could affect whether nodes agree on required features during connection.

AI review queuedFix flaky onion message test (#3266)by Bastien Teinturier · 1543e7ca · Mar 17, 2026 · 1 fileMessage 98 · StrongInformational 15Details
Commit message · Bastien Teinturier

Fix flaky onion message test (#3266)

The "automatically connect to known nodes" test was flaky, because there
is a race with our code that lazily removes node announcements from our
DB after channels close (in `handleChannelSpent` in `Validation.scala`).

We now explicitly wait for gossip to ensure that we cannot run into this
race condition, which should fix the flakyness during CI.

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
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit fixes a flaky automated test in the Eclair Lightning node software. It adds a wait step so that test nodes have time to learn about network channels before the test proceeds. There is no security issue here—only a test reliability improvement.

AI review queuedReject offers with amount set to `0` (#3265)by Bastien Teinturier · 16ebf01a · Mar 17, 2026 · 2 filesMessage 76 · AdequateLow 28Details
Commit message · Bastien Teinturier

Reject offers with amount set to `0` (#3265)

This doesn't make any sense, the field should be omitted if any amount
is acceptable: setting it to `0` is confusing.

See https://github.com/lightning/bolts/pull/1316

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
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Low 28/100

This commit tightens validation of Lightning Network 'offers' (a way for a merchant to publish a payment request). Previously, an offer could include an amount field set to zero, which the protocol designers consider invalid and confusing. The change makes Eclair reject such offers. The main risk is that an attacker or buggy peer could send a zero-amount offer and, before this patch, Eclair might have accepted or processed it in an unintended way. The commit itself is a straightforward validation fix and does not show an active exploit.

AI review queuedRemove support for zlib encoding for channel queries (#3263)by Bastien Teinturier · eef7c326 · Mar 11, 2026 · 8 filesMessage 81 · StrongLow 28Details
Commit message · Bastien Teinturier

Remove support for zlib encoding for channel queries (#3263)

We removed support for sending compressed data when it was removed from
the spec (see https://github.com/ACINQ/eclair/pull/2244). We meant to
remove support for receiving compressed data as well as a follow-up, but
it slipped for a long time! There's no reason to keep supporting it now.

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
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Low 28/100

This commit removes the ability of the Eclair Lightning node to receive zlib-compressed channel-query data from peers. The Lightning protocol spec dropped zlib compression for these messages some time ago, and this change catches up by rejecting or ignoring compressed encodings. It is a hardening/cleanup change rather than a fix for an active vulnerability, though keeping a deprecated decompression path could in theory expose a node to memory or CPU issues if a peer sent malicious compressed data.

Lower-priorityPlugin validation of interactive transactions (#3258)by Bastien Teinturier · 28f3545a · Mar 3, 2026 · 5 filesMessage 81 · StrongInformational 21Details
Commit message · Bastien Teinturier

Plugin validation of interactive transactions (#3258)

We add a new `ValidateInteractiveTxPlugin` trait that can be extended
by plugins that want to perform custom validation of remote inputs and
outputs added to interactive transactions. This can be used for example
to reject transactions that send to specific addresses or use specific
UTXOs.

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
defensive validation
AI analysis · Informational 21/100

This commit adds a new optional plugin hook that lets Eclair node operators write custom checks for Bitcoin transactions used in Lightning channel funding or splicing. It is a defensive feature, not a vulnerability fix. The same change also improves error messages when a transaction is rejected and slightly refactors how input confirmation checks are run. There is no evidence in the commit of an active security bug being patched.

Lower-priorityAuto-refresh relay fees from conf can be disabled (#3260)by pm47 · 0a9853bf · Mar 2, 2026 · 7 filesMessage 81 · StrongInformational 18Details
Commit message · pm47

Auto-refresh relay fees from conf can be disabled (#3260)

There is a performance hit on restart if there is a large number (>100s) of channels, so it can be disabled with a new `eclair.relay.fees.reset-existing-channels` setting.

The default behavior is unchanged.

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 an optional setting that lets node operators disable an automatic fee refresh for existing payment channels when Eclair restarts. By default, the old behavior is preserved (fees are still refreshed). The change is framed as a performance improvement for operators with hundreds of channels, not as a security fix. There is no direct evidence in the commit that this resolves a vulnerability or that an attacker can exploit the old behavior.

AI review queuedAdd `ChannelFundingCreated` event (#3256)by Bastien Teinturier · 656e5039 · Feb 27, 2026 · 12 filesMessage 66 · AdequateInformational 20Details
Commit message · Bastien Teinturier

Add `ChannelFundingCreated` event (#3256)

We add a `ChannelFundingCreated` event that is emitted when the funding
transaction or a splice transaction has been signed and can now be
published, either by us or by our peer (depending on who funds).

This can be handy to detect peers that are using black-listed inputs and
immediately close the channel before it confirms and can be used.

66/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 20/100

This commit adds a new notification event called ChannelFundingCreated to the Eclair Lightning node. It tells external listeners when a channel funding or splice transaction has been signed and is ready to be published. The change is purely additive: it emits an event at existing points in the code and exposes it over the WebSocket API. It does not alter security-critical logic such as transaction signing, validation, or channel state transitions. The release notes explicitly say the event is handy for detecting peers that use black-listed inputs so operators can close the channel early, but that is a monitoring/operational use case, not a vulnerability fix.

Lower-priorityLazily load peer storage at node restart (#3257)by pm47 · 5f934ea0 · Feb 27, 2026 · 3 filesMessage 68 · AdequateInformational 18Details
Commit message · pm47

Lazily load peer storage at node restart (#3257)

This avoids a herd effect when restarting the node.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 18/100

This commit changes how Eclair (a Bitcoin Lightning node) loads stored peer data when the node restarts. Previously, every peer's stored data was read from the database immediately at startup. Now it is loaded only when the peer first reconnects. The stated goal is to avoid a 'herd effect'—a large burst of database reads all at once after a restart. There is no direct security vulnerability in the diff; it is a performance and reliability improvement. The change does not alter who can request data or what data is stored.

Lower-priorityDon't automatically use `scid_alias` for public channels (#3255)by Bastien Teinturier · 546028fd · Feb 27, 2026 · 3 filesMessage 81 · StrongLow 37Details
Commit message · Bastien Teinturier

Don't automatically use `scid_alias` for public channels (#3255)

In #3250 we started implicitly choosing the best channel type based on
activated features when not explicitly specified by the node operator.
However, we automatically used `scid_alias` if it was supported by both
peers, but it is only allowed for unannounced channels. We now restrict
this to follow the BOLTs.

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 fixes a bug where Eclair would automatically enable a feature called `scid_alias` for public Lightning Network channels, even though the Lightning protocol rules (BOLTs) only allow that feature for unannounced (private) channels. Public channels with `scid_alias` could violate protocol rules and cause interoperability or routing problems, though it is not a direct theft-of-funds vulnerability.

Lower-priorityAdd basic CLAUDE.md (#3254)by Bastien Teinturier · d473b53a · Feb 23, 2026 · 1 fileMessage 88 · StrongInformational 15Details
Commit message · Bastien Teinturier

Add basic CLAUDE.md (#3254)

This was generated using Opus 4.6 with the `/init` command. It provides
overall context about the codebase to every Claude session, to avoid
repeating work to build that context (consume less token whenever using
Claude for a task).

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
documentation-only discount
AI analysis · Informational 15/100

This commit adds a documentation file called CLAUDE.md that gives the Claude AI coding assistant general context about the Eclair Lightning Network project. It contains no code changes, no configuration changes, and nothing that affects how the software runs or processes data. It is purely informational for AI-assisted development.

AI review queuedFix flaky wallet funding tests (#3253)by Bastien Teinturier · 9709a916 · Feb 23, 2026 · 3 filesMessage 86 · StrongInformational 15Details
Commit message · Bastien Teinturier

Fix flaky wallet funding tests (#3253)

We fix a few flaky tests in our channel FSM that test scenarios where
errors are received while creating funding transactions. The issue was
that we used a dummy wallet that could complete its call before our
calls to `awaitCond(alice.stateName == WAIT_FOR_FUNDING_INTERNAL)`.

We use a new dummy on-chain wallet that never responds to transaction
funding calls to allow tests to inject failure events.

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only changes test code. It fixes flaky automated tests in the Eclair Lightning node by introducing a fake wallet that never completes funding transactions, so tests can reliably simulate error events during channel funding. There is no change to production code and no security vulnerability is being fixed or introduced.

Lower-priorityAdd claude files to `.gitignore` (#3252)by pm47 · 11a86046 · Feb 20, 2026 · 1 fileMessage 76 · AdequateInformational 15Details
Commit message · pm47

Add claude files to `.gitignore` (#3252)

Claude adds a `.claude` dir at the root of the project. In a sandboxing setup we may want to use other custom claude-related directories, hence the wildcard.

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

This commit simply adds a new pattern to the project's .gitignore file so that files and folders created by the Claude AI assistant are not accidentally committed to the repository. It has no security relevance to the Eclair Lightning node software itself.

Lower-prioritySelect `channel_type` for automatic channel creation (#3250)by Bastien Teinturier · 4461c040 · Feb 20, 2026 · 3 filesMessage 81 · StrongInformational 18Details
Commit message · Bastien Teinturier

Select `channel_type` for automatic channel creation (#3250)

When creating channels automatically, we don't necessarily have access
to our peer's features. It is useful to automatically select the channel
type based on local and remote features. We now allow this behavior in
the `OpenChannelInterceptor`.

Note that when we add official support for taproot channels and 0-fee
commitments, we will hard-code in `eclair` which type of channels we
think is best. If node operators want to override this order, they will
need to explicitly provide the `channel_type` parameter (which can be
done when using the API).

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 changes how Eclair selects a Lightning channel type when opening a channel automatically. Previously, the caller had to explicitly provide a channel type. Now, if no type is provided, Eclair will automatically pick a preferred type based on what both the local node and the remote peer support. If no compatible type can be found, the channel opening is rejected. This is a feature improvement, not a security fix, and the commit message does not describe it as fixing a vulnerability.

Lower-priorityFix balance fuzz tests (#3251)by Bastien Teinturier · 7c52250e · Feb 20, 2026 · 1 fileMessage 98 · StrongInformational 15Details
Commit message · Bastien Teinturier

Fix balance fuzz tests (#3251)

Those tests started randomly failing after moving to anchor outputs.
The reason is that anchor outputs have a bigger commit weight than non
anchor channels, and with our initial balance allocation we sometimes
reached a point where the *remote* had exhausted all of its balance to
pay commit fees (when the feerate was around 10 000 sat/kw), so the
*local* couldn't send HTLCs (`RemoteCannotAffordFeesForNewHtlc`). This
is an expected situation where we cannot do anything except wait for
pending HTLCs to resolve before sending other HTLCs.

We simply increase the initial balance to avoid running into this case.
We also remove the `skip` case (which wasn't working at all, we should
have used the `cancel` scalatest helper if we wanted to interrupt the
test without failing it) and allow failures during the initial HTLC
setup (which can happen if HTLCs are larger than the available balance).

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
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit only changes test code. It fixes flaky balance fuzz tests in Eclair by giving simulated channels more starting money so they can afford higher transaction fees under anchor outputs. There is no change to production code, no real-world security fix, and no vulnerability being patched.

Security candidate (Minor) Upgrade postgres libs (#3238)by pm47 · ea183c35 · Feb 12, 2026 · 2 filesMessage 68 · AdequateInformational 23Details
Commit message · pm47

(Minor) Upgrade postgres libs (#3238)

Upgrade the jdbc driver to the latest version.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 23/100

This commit updates the PostgreSQL JDBC driver used by the Eclair Lightning node software from version 42.6.0 to 42.7.8, and also bumps the embedded PostgreSQL test library from 2.0.1 to 2.2.0. The accompanying checksum file is updated to match the new library versions and their transitive dependencies. The commit message frames this as a routine minor library upgrade. There is no direct code change in Eclair itself, and no explicit security advisory or CVE is referenced in the commit materials.

Lower-priorityAdd type to local/remote error metrics (#3249)by pm47 · 5c5b9f90 · Feb 11, 2026 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · pm47

Add type to local/remote error metrics (#3249)

We were only splitting by origin (local/remote).

This compensates for #3236.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit only improves monitoring/observability. It adds a new label ('error-type') to internal error-counting metrics so developers can see what kind of channel errors are happening, in addition to whether they came from the local node or a remote peer. There is no user-facing behavior change, no bug fix in business logic, and no security fix.

Lower-priorityPrioritize private channels when relaying payments (#3248)by Bastien Teinturier · aff16b26 · Feb 11, 2026 · 2 filesMessage 93 · StrongLow 32Details
Commit message · Bastien Teinturier

Prioritize private channels when relaying payments (#3248)

When relaying payments, we want to select private channels first and
keep as much liquidity available as possible in public channels, to
ensure that we don't send a `channel_update` that would otherwise
disable the public channel (and thus make the private channels also
unusable since they aren't visible by path-finding algorithms) or
limit the `htlc_maximum_msat` of this public channel (which also
indirectly applies to private channels).

We also change the order in which we select channels that have the
same visibility: we prioritize channels with smaller balances, to
ensure that we keep our larger balances for larger payments. When
balances are equal, we prioritize the largest channel, which creates
a larger inbound liquidity to allow receiving larger payments.

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

This commit changes how Eclair lightning nodes pick which outgoing channel to use when forwarding payments. The new logic prefers private (unannounced) channels first, then smaller public channels, to avoid draining or disabling the larger public channels that other nodes rely on for routing. It is a routing-optimization and operational-hardening change rather than a fix for a known exploit. The commit message explicitly frames the change as avoiding public-channel exhaustion and disabled channel_updates, which has indirect security relevance for node availability and routing reputation.

AI review queuedImprove channel and payment events (#3246)by Bastien Teinturier · d735e0b5 · Feb 11, 2026 · 19 filesMessage 76 · AdequateInformational 19Details
Commit message · Bastien Teinturier

Improve channel and payment events (#3246)

We improve the following events:

- `TransactionPublished` includes more details about mining fees and
an optional liquidity purchase
- all channel events include the latest `channel_type`
- `PaymentRelayed` exposes the `relayFee` earned

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
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 19/100

This commit is a routine refactoring of internal event definitions in the Eclair Lightning node. It changes how channel and payment events are structured so they carry more detailed information (such as splitting mining fees into local and remote portions, adding timestamps, and exposing relay fees). There is no direct evidence in the commit that these changes fix a security vulnerability; they appear to be observability and accounting improvements.