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 48 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 candidateStore our closing_complete in the simple close session (#3289)by Fabrice Drouin · da7cd962 · Apr 21, 2026 · 4 filesMessage 96 · StrongLow 32Details
Commit message · Fabrice Drouin

Store our closing_complete in the simple close session (#3289)

In the simple close session, which is never persisted, we just need to remember our closing_complete and
the partial signatures it contains, instead of keeping our musig2 nonces and generating our partial signatures a second time to build the final closing tx when we receive our peer's partial signatures.
We also check our peer's partial signature and fail early if they're not valid, instead of building a fully sign
closing tx and then verify that it is correct.

96/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarynonce handlingsigning or wallet path
AI analysis · Low 32/100

This commit changes how Eclair (a Bitcoin Lightning node) remembers its own closing signatures during a mutual channel close. Previously, the code re-generated signing nonces and re-signed closing transactions when the peer's signature arrived. Now it stores the original closing message and reuses its signatures. It also adds an early check that the peer's partial signature is valid before trying to build a final signed transaction. The change is a defensive correctness improvement rather than a clear fix for an active exploit.

Security candidateAllow reply-less pings (#3284)by Bastien Teinturier · 3ae73813 · Apr 7, 2026 · 3 filesMessage 88 · StrongModerate 51Details
Commit message · Bastien Teinturier

Allow reply-less pings (#3284)

BOLT1 says:

```
A node receiving a ping message:
- if num_pong_bytes is less than 65532:
- MUST respond by sending a pong message, with byteslen equal to num_pong_bytes.
- otherwise (num_pong_bytes is not less than 65532):
- MUST ignore the ping.
```

These reply-less pings are used to insert cover traffic to thwart
network-level traffic analysis. We wanted to allow them in #3278
but we missed this ping flood protection that needed to be updated.

We also had an off-by-one in the maximum pong length that
is now fixed.

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
cryptography-sensitive path
AI analysis · Moderate 51/100

This commit fixes two related bugs in how Eclair handles Lightning network 'ping' messages. First, it corrects an off-by-one error so pings asking for a 65532-byte reply are now ignored (matching the BOLT1 spec), instead of being answered. Second, it stops treating these 'reply-less' pings as a flood attack, so they no longer count toward the pending-ping limit that disconnects peers. The practical effect is that legitimate cover-traffic pings no longer risk getting a peer disconnected, and the protocol boundary now matches the specification.

Security candidateAdd backwards-compatible parts of the official splicing protocol (#3261)by Bastien Teinturier · 129df369 · Apr 3, 2026 · 12 filesMessage 86 · StrongLow 35Details
Commit message · Bastien Teinturier

Add backwards-compatible parts of the official splicing protocol (#3261)

* Add `funding_txid` to `commit_sig`

In https://github.com/lightning/bolts/pull/1160 we add a TLV field to
`commit_sig` messages to let the receiver know to which `funding_txid`
this signature applies. This is more resilient than relying on the
order of the `commit_sig` messages in the batch. This is an odd TLV,
so we can start writing it right now without creating compatibility
issues.

We also slightly refactor existing code to make it easier to introduce
a backwards-compat layer when migrating to the official splicing. We
also increase the default number of RBF attempts allowed.

* Insert a `start_batch` message during splices

In https://github.com/lightning/bolts/pull/1160, we introduce a message
to let our peer know how many `commit_sig` messages they will receive
and treat them as a batch. This replaces our previous version that did
something similar, but by adding a batch TLV in every `commit_sig`
message we send.

We currently do both: we keep inserting the experimental batch TLV, and
we start by sending a `start_batch` message (with the same information).
Since it is an odd message (127), it should be safely ignored if our
peer doesn't understand it.

86/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing boundaryparser or protocol path
AI analysis · Low 35/100

This commit updates the Eclair Lightning node software to support a new, backwards-compatible draft of the official Bitcoin Lightning 'splicing' protocol. It adds a funding transaction identifier to commitment signatures and introduces a 'start_batch' message so peers know when multiple signatures belong together. It also keeps the older experimental batching mechanism for compatibility with older Phoenix wallets. The changes are primarily a protocol upgrade and compatibility shim, not a clear security fix, though they reduce ambiguity about which signature applies to which funding transaction during splices.

Security candidateAdd fuzzing infrastructure (#3276)by Nishant Bansal · e6c3d6ef · Mar 31, 2026 · 8 filesMessage 76 · AdequateInformational 15Details
Commit message · Nishant Bansal

Add fuzzing infrastructure (#3276)

Add a fuzzing module based on Jazzer to allow fuzzing parts of eclair.
This commit includes fuzz tests for codecs to be used as examples.
It is a separate module (minimal interaction with the other modules).
We include helper scripts to run many fuzz tests in parallel or generate
reports.

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidencecryptography-sensitive pathparser or protocol path
AI analysis · Informational 15/100

This commit adds a new testing-only module that uses a fuzzing tool called Jazzer to automatically throw random data at Eclair's Lightning message parsers. It does not change any production code, network behavior, or security logic. It is purely a defensive testing improvement.

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.

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.

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.

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.

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.

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.

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.

Security candidateUse 73 bytes der-encoded signatures in weight estimation (#3210)by Bastien Teinturier · bfe34ab1 · Nov 5, 2025 · 2 filesMessage 100 · StrongLow 35Details
Commit message · Bastien Teinturier

Use 73 bytes der-encoded signatures in weight estimation (#3210)

While 73 bytes der-encoded signatures aren't standard (they're only
possible with high-S signatures), miners could accept such signatures.

Most of our tests use 72 bytes der-encoded signatures because we will
never generate 73 bytes der-encoded signatures ourselves. But it's more
safe to use a 73 bytes signature in our weight estimation because:

- it's what the BOLTs recommend
- it's what other implementations use (e.g. LDK) which means they may
reject our interactive-tx attempts by thinking we're under-paying
fees

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✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 35/100

This commit adjusts how Eclair estimates the 'weight' (a measure of transaction size used to calculate Bitcoin mining fees) for funding inputs in Lightning channel transactions. It increases the assumed signature size from 72 to 73 bytes, matching what the Lightning specification recommends and what other implementations like LDK use. The change is defensive: it helps prevent Eclair's interactive transaction proposals from being rejected by peers who think Eclair is under-paying fees, and it avoids edge cases where miners might accept a slightly larger signature than Eclair accounted for.

Security candidateAllow aborting liquidity purchases after signing (#3206)by Bastien Teinturier · 5e1a4882 · Nov 5, 2025 · 6 filesMessage 81 · StrongLow 47Details
Commit message · Bastien Teinturier

Allow aborting liquidity purchases after signing (#3206)

When a liquidity purchase is signed, we eagerly add it to our DB before
receiving the remote `interactive-tx` signatures. If we reach that step,
our peer should always finalize the signing steps, so we didn't bother
handling the case where they would instead send `tx_abort`. When that
happened, we kept the upstream HTLCs pending until they got close to
their expiry, at which point we failed them.

We've seen cases where seemingly non-malicious mobile wallets abort
that kind of liquidity purchases after a disconnection. It is harmful
for an honest sender to keep the HTLCs pending, so we now immediately
fail them in that case.

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

This commit fixes a bug in Eclair, a Bitcoin Lightning Network node implementation. When a user tried to buy extra spending capacity (a 'liquidity purchase') and the remote peer backed out after the local node had already signed, Eclair kept the related incoming payments stuck in limbo until they nearly expired. The patch makes Eclair immediately fail those stuck payments when the peer aborts, which is fairer to honest senders and avoids unnecessary delays. It is a correctness/availability improvement rather than a direct theft-of-funds vulnerability.

Security candidateNits (#3203)by pm47 · 7ef3c4b2 · Oct 31, 2025 · 5 filesMessage 26 · OpaqueInformational 15Details
Commit message · pm47

Nits (#3203)

26/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Links an issue, advisory, or supporting reference! Too few words to establish purpose! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive pathparser or protocol path
AI analysis · Informational 15/100

This commit is a small cleanup pull request titled 'Nits'. It fixes a typo in documentation, corrects a log message to show the right commitment format name, changes a debug log to info level for transaction signing, adds structured logging context for authenticated peer connections, and removes an outdated ASCII diagram comment. None of these changes affect security.

Security candidateRemove support for non-anchor channels (#3173)by Bastien Teinturier · 9911cb73 · Oct 27, 2025 · 86 filesMessage 98 · StrongLow 34Details
Commit message · Bastien Teinturier

Remove support for non-anchor channels (#3173)

We remove support for `static_remotekey` channels and `default`
channels, as advertised in the v0.13 release. This lets us remove
some code related to feerate management and simplifies the test
matrix.

Node operators that still have such channels must not run this
version of `eclair`, which will otherwise fail to start.

Note that for now, we keep sending `update_fee` whenever necessary.
We could remove that now that package relay allows 1p1c packages to
propagate even when the parent is below the mempool minimum feerate,
but we defer that to a later PR for simplicity.

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
cryptography-sensitive pathsigning or wallet pathauthentication pathparser or protocol path
AI analysis · Low 34/100

This commit removes support for older Lightning channel types ('static_remotekey' and 'default' channels) from the Eclair node software. It is a deliberate feature-removal change announced in the previous release. The main risk is operational: node operators who still have legacy channels and upgrade to this version will find Eclair fails to start, potentially leaving them unable to manage funds until those channels are closed with an older version. The patch also simplifies fee-rate handling because anchor-style channels handle fees differently, and it removes wallet-public-key caching code that was only needed for the obsolete channel types.

Security candidateConfigure bitcoind test instances to use bech32m addresses (#3195)by Bastien Teinturier · 9771b2d8 · Oct 24, 2025 · 7 filesMessage 100 · StrongLow 34Details
Commit message · Bastien Teinturier

Configure bitcoind test instances to use bech32m addresses (#3195)

When addres type or change type is not specified, bitcoind will
now start with addresstype=bech32m and changetype=bech32m.

We take this opportunity to fix feerate tests that failed because
of the following reasons:

- first of all, we had a bug where we didn't take into account the
anchor amount in our fee calculation, so we ended up always adding
`330 sats` to the on-chain fees we paid, which was hidden by our
tolerance interval, but started appearing with smaller p2tr inputs
- then we fix the remaining tests that need manual tweaking of the
utxos available in the test wallet, because they end up creating
transactions where we don't have a change output (and overpay fees
slightly, but not enough to make it worth adding a change output),
these tests simply needed to be tweaked to accomodate p2tr weights

Co-authored by @sstone

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
signing boundary
AI analysis · Low 34/100

This commit updates Eclair's Bitcoin Core integration to use taproot (bech32m) addresses by default and fixes a fee-calculation bug where the anchor output amount was not being counted. The fee bug caused on-chain fees to be undercounted by 330 satoshis, which was previously hidden by test tolerances but surfaced when switching to smaller taproot inputs. The fix is in the ReplaceableTxFunder component, which funds transactions for force-closing Lightning channels. There is no evidence this was a remotely exploitable vulnerability; it is best characterized as a correctness/robustness fix that could lead to slightly overpaying on-chain fees.

Security candidateUpdate `bitcoin-lib` (#3193)by Bastien Teinturier · 7372a877 · Oct 24, 2025 · 2 filesMessage 58 · ThinInformational 22Details
Commit message · Bastien Teinturier

Update `bitcoin-lib` (#3193)

We update `bitcoin-lib` to v0.45, which changes our JNI bindings for
`secp256k1` and adds support for P2A outputs.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 22/100

This commit simply bumps the project's `bitcoin-lib` dependency from version 0.44 to 0.45 and updates the corresponding cryptographic library checksums. The commit message says the new version changes how the app binds to the secp256k1 library and adds support for a new Bitcoin output type called P2A. There is no code change in this repository itself, and no security fix or vulnerability is mentioned.

Security candidateUse bitcoin-lib 0.44 (#3185)by Fabrice Drouin · 32082666 · Oct 13, 2025 · 2 filesMessage 53 · ThinLow 36Details
Commit message · Fabrice Drouin

Use bitcoin-lib 0.44 (#3185)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Low 36/100

This commit simply updates the project's dependency on ACINQ's bitcoin-lib library from version 0.43.2 to 0.44, along with matching updates to related cryptographic libraries (secp256k1-kmp) and their checksums. The change itself is a routine version bump in the build file. There is no direct code change shown, and the commit message does not say this is a security fix. Because we have no release notes or changelog for bitcoin-lib 0.44, we cannot tell from this diff alone whether the new version fixes a security issue or introduces one. It is a dependency change that could affect how the Lightning node handles Bitcoin transactions and signatures, so it deserves review, but the diff does not prove any vulnerability.

Security candidateAdd `DATA_CLOSED` class when active channel is closed (#3170)by Bastien Teinturier · 16a309e4 · Sep 30, 2025 · 26 filesMessage 81 · StrongLow 29Details
Commit message · Bastien Teinturier

Add `DATA_CLOSED` class when active channel is closed (#3170)

We introduce a `DATA_CLOSED` class with minimal information about a
past channel that has been fully closed. This will let us deprecate
legacy channels without having backwards-compatibility issues with
very old closed channels inside our DB.

When channels have never been properly opened or used, we don't
bother storing them in our DB, as it would open the door to DoS
attacks.

We create a dedicated table to store `DATA_CLOSED`. We migrate the
existing DB and remove the foreign key constraint on `htlc_infos`.

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
explicit security languagesigning or wallet path
AI analysis · Low 29/100

This commit refactors how Eclair stores closed Lightning channels. Instead of keeping all closed channel data in the same table as active channels, it moves them to a dedicated table with only essential summary information. The main stated security benefit is preventing denial-of-service (DoS) attacks by not storing channels that were never properly opened or used. It also removes a database foreign-key constraint and changes the API response format for closed channels. The commit is primarily a data-model and migration change, not a fix for an active vulnerability.

Security candidateUpdate `bitcoin-lib` (#3179)by Bastien Teinturier · 2b39bf62 · Sep 30, 2025 · 20 filesMessage 58 · ThinLow 35Details
Commit message · Bastien Teinturier

Update `bitcoin-lib` (#3179)

And simplify musig2 nonce using Scala classes.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
nonce handlingcryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Low 35/100

This commit updates Eclair's underlying bitcoin-lib dependency from version 0.41 to 0.43.2 and adjusts Eclair's code to match the new library's API. The changes are mostly mechanical: switching how Musig2 nonces and Taproot script trees are represented, removing Kotlin-to-Scala conversion helpers, and updating Maven checksums. There is no explicit mention of a security fix in the commit message or diff, and no independent security advisory was supplied. The update could include upstream security fixes, but that is speculation based on the version bump, not direct evidence in this commit.

Security candidateKill the connection if a peer sends multiple ping requests in parallel (#3172)by pm47 · 08a1fc66 · Sep 19, 2025 · 2 filesMessage 81 · StrongModerate 64Details
Commit message · pm47

Kill the connection if a peer sends multiple ping requests in parallel (#3172)

We keep track of the number of pings that we have not yet sent a pong for. If there is more than 1, our peer is malicious and we close the connection.

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 path
AI analysis · Moderate 64/100

This update makes Eclair disconnect a Lightning peer if it sends more than one ping message before getting a reply. The goal is to stop a 'ping flood' attack, where a malicious peer could overwhelm the node with many ping requests and possibly cause it to run out of memory or become unresponsive. The change is defensive and includes a test showing the connection is closed when two pings arrive back-to-back.

Security candidateCorrectly fill PSBT for taproot `interactive-tx` (#3169)by Bastien Teinturier · 76f8d53a · Sep 17, 2025 · 14 filesMessage 100 · StrongModerate 60Details
Commit message · Bastien Teinturier

Correctly fill PSBT for taproot `interactive-tx` (#3169)

When using tapoot for our inputs, our signatures will cover *all* inputs
of the transaction, even those that don't belong to us. If our peer adds
inputs, we must thus fill them in the PSBT we create, otherwise signing
will fail.

This was the reason why we were previously sharing the same dummy wallet
between Alice and Bob in our unit tests, otherwise we were seeing that
kind of failures in unit tests, but we never figured out why before.

Now that this is fixed, we can improve the unit tests by having separate
wallets for Alice and Bob, and remove the unused `NoOpOnChainWallet`.

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
signing boundarycryptography-sensitive pathsigning or wallet path
AI analysis · Moderate 60/100

This commit fixes a bug in Eclair's dual-funded Lightning channel logic. When opening or splicing a channel using taproot (P2TR) inputs, each participant's wallet needs full details about every input in the transaction, not just its own. Previously, the PSBT (a data structure used to pass transaction signing information to the wallet) only included the shared splice input, but omitted the other peer's inputs. That caused the local wallet to fail when signing taproot inputs, because it couldn't compute the signature that covers all inputs. The fix adds all remote inputs to the PSBT before signing. The rest of the diff is mostly test cleanup: separate wallets for Alice and Bob and removal of an unused test helper.

Security candidateAdd high-S signature Bolt 11 test vector (#3163)by Bastien Teinturier · e8ec1489 · Sep 10, 2025 · 1 fileMessage 91 · StrongInformational 12Details
Commit message · Bastien Teinturier

Add high-S signature Bolt 11 test vector (#3163)

We must accept both high-S and low-S signatures in Bolt 11 invoices
when performing public key recovery (which matches secp256k1's
behavior).

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

91/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✓ Names security-relevant behavior explicitly
Why it was queued
signing boundaryfuzzing or regression evidence
AI analysis · Informational 12/100

This commit only adds a new test case to Eclair's invoice parsing tests. It checks that a specific Bitcoin Lightning invoice with a non-standard 'high-S' signature can still be decoded and that the sender's public key is recovered correctly. There is no code change to the actual invoice handling logic.

Security candidateAllow omitting `previousTx` for taproot splices (#3143)by Bastien Teinturier · 0e0da422 · Aug 25, 2025 · 5 filesMessage 86 · StrongLow 28Details
Commit message · Bastien Teinturier

Allow omitting `previousTx` for taproot splices (#3143)

When splicing a taproot channel, both participants will provide a
signature for a segwit v1 input: this signature will cover every
spent `txOut`, including their amount and script. This ensures
that attackers cannot reuse a signature while replacing a segwit
input with a non-segwit input, which could be used to steal funds.

A side-effect of this change in signature behavior is that we don't
need to provide the entire previous transaction when both channel
participants sign a taproot input. For simplicity, we only allow
this simplification when splicing taproot channels for now. We can
also allow channel creation based on swap-in-potentiam, which also
uses musig2 and has the same non-malleability guarantee (on feature
branches for phoenix users).

86/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
explicit security languagesigning boundaryparser or protocol path
AI analysis · Low 28/100

This commit changes how Eclair handles taproot channel splicing. Normally, when two parties build a shared Bitcoin transaction together, each must send the full previous transaction that created the coins being spent. For taproot channels, the commit allows sending only the relevant output details instead, because taproot signatures already protect against a specific malleability trick. The change is framed as a bandwidth optimization and is restricted to taproot splicing to preserve security guarantees.

Security candidateSimple taproot channels (#3103)by Fabrice Drouin · d8ce91b4 · Aug 19, 2025 · 51 filesMessage 71 · AdequateLow 32Details
Commit message · Fabrice Drouin

Simple taproot channels (#3103)

Implement simple taproot channels

We add new commitment formats and TLV extensions to include musig2 nonces. This includes a specific commitment format for phoenix
taproot channels.

The old v1 channel establishment protocol is updated to include nonces and partial signatures.

The v2 channel estalishment protocol, based on the interactive tx constuction protocol, is also updated, and the
interactive tx session now includes:
- an optional funding nonce for the shared input (i.e. the funding tx that is being spent)
- a nonce for the commit tx that is being created, and another nonce that will become the channel's "next remote nonce" once the session completes
The funding nonce is random and its lifecycle is bound to the interactive session.

Side note: the new v2 protocol is both simpler to extend and gives us support for dual-funding and splices.

Since there can be several different commitment transactions that valid at the same time while splices are pending, revoke_and_ack
and channel_restablish are extended to include a list of funding_tx_id -> nonce tuples (one for each active commitment).

channel_restablish also includes as an optional "current commit nonce": if we got disconnected while a splice was in progress
before both nodes exchanged their commit signatures: if that is the case, we need to re-send our peer's current signature
and will use this nonce to compute it.

We also update the simple close protocol to include closing nonces.

We allow upgrading channels to taproot during splices, with an optional channel_type TLV added to splice_init/splice_ack.
This is not part of the BOLT proposal, and upgrading is currently limited to phoenix taproot channels from phoenix anchor channels.

71/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarynonce handlingcryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Low 32/100

This is a large feature commit that adds support for a new kind of Bitcoin Lightning channel using Taproot and MuSig2 signatures. It changes how channels are opened, spliced, re-established after disconnections, and closed. The commit is primarily a protocol upgrade, not a stated security fix. However, because it touches sensitive signing logic and introduces new nonce handling, there is a moderate risk that mistakes in the new code could affect channel safety or allow a malicious peer to cause problems. The commit message does not describe this as fixing a known vulnerability.