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

Lower-priorityDeduplicate closing balance during mutual close (#3182)by Bastien Teinturier · d04ed3dc · Sep 29, 2025 · 2 filesMessage 81 · StrongInformational 15Details
Commit message · Bastien Teinturier

Deduplicate closing balance during mutual close (#3182)

When a mutual close transaction is published or recently confirmed, we
don't include the corresponding channel in our off-chain balance to
avoid counting it twice (which would resolve itself after confirmations
but is misleading).

There are degenerate cases where the channel will actually end up being
force-closed, even though we started with a mutual close, but that will
be very infrequent and will resolve itself after confirmations.

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

This commit fixes an accounting display bug in Eclair's balance reporting. When a mutual close transaction has been published or recently confirmed, the same funds could be counted both as 'closing' balance and as regular off-chain balance for a short time. The patch makes the off-chain balance exclude the channel in that situation, so the total shown to the user is not temporarily doubled. It does not move, lose, or expose any funds; it only changes how balances are reported.

Lower-prioritySmaller default value for `peer-connection.max-no-channels` (#3180)by Bastien Teinturier · 90778ca4 · Sep 25, 2025 · 1 fileMessage 81 · StrongModerate 54Details
Commit message · Bastien Teinturier

Smaller default value for `peer-connection.max-no-channels` (#3180)

We previously allowed 250 parallel incoming connections from nodes with
whom we don't have any channels yet. While this makes sense for wallet
providers, this is too large for standard routing nodes and exposes them
to more DoS risk. We reduce the default value to 64 instead, which can
of course be overridden by node operators in their `eclair.conf`.

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

This commit lowers a default setting that controls how many incoming connections Eclair will accept from strangers who have no payment channel with the node. The old default of 250 could let someone open a large number of connections to a routing node and waste its resources, a form of denial-of-service. The new default of 64 reduces that exposure while still allowing node operators to change the value if they need more for wallet-style services.

AI review queuedFix encoding of channel type TLV in splice_init/splice_ack (#3178)by Fabrice Drouin · 5b4368a6 · Sep 23, 2025 · 2 filesMessage 81 · StrongLow 45Details
Commit message · Fabrice Drouin

Fix encoding of channel type TLV in splice_init/splice_ack (#3178)

Fix encoding of channel type TLV in splice_init/splice_ack

The channel type codec that we use is a "TLV field codec", wrapping it in a tlvField() codec was wrong
and messed up the encoding.

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

This commit fixes a wire-encoding bug in Eclair's Lightning splicing messages. The channel type field was being wrapped twice, which produced an incorrect byte layout. The fix removes the extra wrapper so the messages encode and decode correctly. It is a protocol-compatibility bug rather than a direct theft-of-funds vulnerability, but it could cause peers to reject or misinterpret splice messages.

Lower-priorityAdd "phoenix zero reserve" feature bit (#3176)by Fabrice Drouin · ad8b2e3b · Sep 23, 2025 · 6 filesMessage 76 · AdequateInformational 19Details
Commit message · Fabrice Drouin

Add "phoenix zero reserve" feature bit (#3176)

* Add PhoenixZeroReserve feature bit

Add a feature bit for zero-reserve channel. It is used by phoenix wallets and different from the feature bit proposed in https://github.com/lightning/bolts/pull/1140.

* Simplify SimpleTaprootChannelsPhoenix channel type

It does not make sense to have versions with/without scid-alias and zero-conf.

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

This commit adds a new Lightning protocol feature bit called 'phoenix_zero_reserve' and simplifies how Eclair handles a Phoenix-specific taproot channel type. It is a feature addition and refactoring change, not a fix for a known security bug. There is no evidence in the commit or supplied references that this resolves an active vulnerability.

AI review queuedReject offers with some fields present but empty (#3175)by Thomas HUET · abe2cc9c · Sep 22, 2025 · 6 filesMessage 81 · StrongModerate 52Details
Commit message · Thomas HUET

Reject offers with some fields present but empty (#3175)

Offers or invoices where the fields `offer_chains`, `offer_paths`, `invoice_paths`, `invoice_blindedpay` are present but empty are considered invalid.
While the spec does not necessarily rejects them explicitly, they can't be paid.

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

This commit tightens validation of Bitcoin Lightning 'Bolt 12' offers and invoices. Previously, an offer or invoice could include certain list fields (such as payment paths or supported chains) that were technically present but contained zero entries. The code now rejects these empty-but-present fields during parsing. The change prevents malformed or unpayable offers/invoices from being accepted, which could otherwise confuse wallets, break routing, or be used to probe implementations.

Lower-priorityRemove `PaymentWeightRatios` from the routing config (#3171)by Thomas HUET · fa1b0eef · Sep 19, 2025 · 12 filesMessage 81 · StrongInformational 20Details
Commit message · Thomas HUET

Remove `PaymentWeightRatios` from the routing config (#3171)

The new weights based on success probability estimates have proven superior to the old `PaymentWeightRatios`. Removing `PaymentWeightRatios` makes the configuration simpler.

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

This commit removes an older, less effective way of choosing Lightning payment routes (called PaymentWeightRatios) and switches the code to use a newer route-scoring system based on estimated success probability. It is a routine cleanup/refactoring change, not a security fix. There is no evidence in the commit message or diff of a vulnerability being patched.

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.

Lower-priorityAlways count local CLTV delta in route finding (#3174)by Thomas HUET · 9f00ebf9 · Sep 18, 2025 · 2 filesMessage 73 · AdequateLow 49Details
Commit message · Thomas HUET

Always count local CLTV delta in route finding (#3174)

When paying from our node, we don't pay the fee for the local channel but we still "pay" its CLTV delta.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Low 49/100

This change fixes how Eclair counts time-lock delays when finding payment routes through the Lightning network. Previously, when calculating a route starting from the user's own node, the software ignored the delay on the first local channel. This could lead to choosing routes that look cheaper or faster but actually require longer lock-up times than expected, potentially causing payments to fail or funds to be locked longer than the user intended. The fix now always includes that first-channel delay in route calculations.

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.

Lower-priorityIncrease timeout for flaky onion message tests (#3167)by Thomas HUET · e3513205 · Sep 16, 2025 · 2 filesMessage 91 · StrongInformational 15Details
Commit message · Thomas HUET

Increase timeout for flaky onion message tests (#3167)

The previous timeout of 100ms was creating a lot of tests failures.
This fixes flaky tests in `PostmanSpec` and maybe some other places.

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

This commit only changes test configuration and test code. It increases the timeout used in automated tests for onion message handling from milliseconds to seconds, and adds a way for one specific test to keep using a very short timeout. There is no change to production code, no security fix, and no vulnerability.

AI review queuedResign next remote commit on reconnection (#3157)by Bastien Teinturier · 379abc55 · Sep 12, 2025 · 11 filesMessage 88 · StrongModerate 60Details
Commit message · Bastien Teinturier

Resign next remote commit on reconnection (#3157)

We previously retransmitted our last `commit_sig` on reconnection if it
hadn't been received by our peer, without changing it. This can be an
issue for taproot channels when remote nodes don't use deterministic
nonce derivation, because their nonce may be different on reconnection
and our previous `commit_sig` would thus not be valid anymore.

We now re-sign the next commitment on reconnection, using the latest
nonces we receive from `channel_reestablish`.

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

This commit fixes a bug in Eclair's Lightning payment channels that use the newer taproot format. When two nodes reconnect after a temporary network interruption, the local node used to resend the exact same cryptographic signature it had sent before. For taproot channels, the remote peer may choose a fresh random 'nonce' after reconnecting, which makes the old signature invalid. The fix makes the local node re-sign the next commitment using the latest nonces received during reconnection, preventing the channel from getting stuck or failing to advance after reconnect.

Lower-priorityFix flaky test in `OfferPaymentSpec` (#3165)by Thomas HUET · c13d530f · Sep 11, 2025 · 1 fileMessage 63 · AdequateInformational 15Details
Commit message · Thomas HUET

Fix flaky test in `OfferPaymentSpec` (#3165)

63/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only adds extra checks to a test file to make an existing integration test more reliable. It does not change production code, user-facing behavior, or any security mechanism. There is no security issue here.

Lower-priorityFix flaky `ReputationRecorder` test (#3166)by Thomas HUET · d3ac75df · Sep 11, 2025 · 2 filesMessage 98 · StrongInformational 11Details
Commit message · Thomas HUET

Fix flaky `ReputationRecorder` test (#3166)

Sometimes, the test publishes events to the `EventStream` before the `ReputationRecorder` has subscribed, which leads to dropped events.
We fix this by bypassing the `EventStream` in tests.
We also subscribe to `OutgoingHtlcSettled` before subscribing to `OutgoingHtlcAdded` to prevent the unlikely edge case where a HTLC stays pending forever because it settled before `ReputationRecorder` subscribed to `OutgoingHtlcSettled`.

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

This commit fixes a flaky automated test and makes a tiny production-code ordering change. The main code now subscribes to 'HTLC settled' events before 'HTLC added' events, so a very brief race during startup cannot leave a payment stuck. The rest of the change only alters test code to avoid using the event bus in tests, which removes test flakiness. There is no direct evidence this is a security vulnerability or that it was exploited.

AI review queuedUpdate taproot commit weight to match `lnd` (#3158)by Bastien Teinturier · a7e57ea7 · Sep 11, 2025 · 1 fileMessage 81 · StrongLow 33Details
Commit message · Bastien Teinturier

Update taproot commit weight to match `lnd` (#3158)

`lnd` uses a pessimistic weight estimate, assuming that varints take
5 bytes instead of 1 (when encoding the number of inputs and outputs
of the transaction).

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

This commit adjusts the estimated transaction size (weight) Eclair reserves when closing or updating Taproot Lightning channels. It makes Eclair's estimate match lnd's more pessimistic assumption about how many bytes are needed to count transaction inputs and outputs. If the estimate is too low, a channel partner could be forced to pay unexpectedly high on-chain fees or a cooperative close could fail; if too high, funds get locked up longer than necessary. The change is a small numeric tweak from 960 to 968, not a clear-cut vulnerability fix.

AI review queuedRemove legacy channel codecs and DB migrations (#3150)by Bastien Teinturier · ae3e44be · Sep 11, 2025 · 100 filesMessage 100 · StrongLow 26Details
Commit message · Bastien Teinturier

Remove legacy channel codecs and DB migrations (#3150)

* Remove legacy channel codecs

We remove legacy channel codecs (versions earlier than v5). We also
remove the corresponding DB migrations: if node operators try to
upgrade from a version of eclair that is older than v0.13, we tell
them to first run the v0.13 version to migrate their channel data.

We regenerate serialization backwards-compatibility test vectors
based on anchor outputs or taproot channel types.

* Check channels DB version early

We check the channels DB version before running any DB migration, to
ensure that node operators can safely run the v0.13 release first.
Otherwise we may have started migrating an unrelated table to a newer
version that isn't included in the v0.13 release, which would thus
fail at start-up.

* Remove migration from `sqlite` to `postgres`

We now expect users to directly use `postgres` if they expect their node
to become large. The `sqlite` option should only be used for small nodes
for individuals, where it is performant enough.

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
fuzzing or regression evidencesigning or wallet pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Low 26/100

This commit is a large cleanup of old code in the Eclair Lightning node software. It removes support for reading very old channel data formats (before version 0.13) and removes the built-in tool that migrated data from SQLite to PostgreSQL. The change is intentional and documented: users on versions older than 0.13 must first upgrade to 0.13, which will convert their data, before installing this newer version. There is no evidence of a security vulnerability being introduced; the main risk is that an unprepared operator could accidentally make their node fail to start by skipping the required intermediate upgrade.

Lower-priorityUpdate Bitcoin Core to v29.1 (#3153)by Bastien Teinturier · f0295846 · Sep 10, 2025 · 7 filesMessage 76 · AdequateInformational 15Details
Commit message · Bastien Teinturier

Update Bitcoin Core to v29.1 (#3153)

Update Bitcoin Core to v29.1. This release doesn't contain any breaking
change. It contains the following interesting features that we want to
leverage in future eclair versions:

- orphan handling improvements which lead to better propagation of
force-close transactions
- support for ephemeral dust, which we'll need for 0-fee commitments
(v3 transactions)

See release notes here: https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-29.0.md

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 updates Eclair's required Bitcoin Core version from 28.1 to 29.1. It changes download URLs, version checks, documentation, and adjusts a couple of test expectations to match Bitcoin Core 29.1's behavior. There is no security vulnerability in this change.

AI review queuedBack to dev (#3155)by Bastien Teinturier · 3abc17f9 · Sep 10, 2025 · 7 filesMessage 36 · OpaqueInformational 15Details
Commit message · Bastien Teinturier

Back to dev (#3155)

After the v0.13.0 release.

36/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit is a routine post-release housekeeping change. It bumps the project version from 0.13.0 to 0.14.0-SNAPSHOT, re-enables a Maven trusted-checksum feature used for build verification, creates a placeholder release notes file, and adds a safety guard in the startup code that refuses to run development snapshot builds unless a special override flag is set. None of these changes fix or introduce a security vulnerability; the startup guard is a deliberate safety measure, not a bug.

Lower-priorityEclair v0.13.0 release (#3154)by Bastien Teinturier · 992ec8cc · Sep 10, 2025 · 8 filesMessage 53 · ThinInformational 15Details
Commit message · Bastien Teinturier

Eclair v0.13.0 release (#3154)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
AI analysis · Informational 15/100

This commit is a routine version-bump release for Eclair v0.13.0. It updates Maven project versions from 0.13.0-SNAPSHOT to 0.13.0, removes a temporary startup safety guard that blocked the previous development build from running, adds the release notes, and disables Maven's trusted-checksum post-processor (with a note on how to re-enable recording). There is no security patch or vulnerability fix in the diff itself.

Lower-priorityFix flaky `OfferPaymentSpec` (#3164)by Thomas HUET · f32e0b68 · Sep 10, 2025 · 1 fileMessage 43 · ThinInformational 15Details
Commit message · Thomas HUET

Fix flaky `OfferPaymentSpec` (#3164)

43/100 · ThinMessage clarity
✓ Descriptive subject✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
AI analysis · Informational 15/100

This commit fixes a flaky test, not a security issue. The test simulates three Lightning nodes (Alice, Bob, Carol) and previously did not give all nodes complete knowledge of each other's funding transactions. The change makes the test setup more consistent so the test passes reliably. There is no production code change and no security impact.

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.

AI review queuedRelax taproot feature dependency (#3161)by Bastien Teinturier · 60751962 · Sep 10, 2025 · 1 fileMessage 76 · AdequateInformational 24Details
Commit message · Bastien Teinturier

Relax taproot feature dependency (#3161)

It appears that `lnd` nodes don't always set `option_simple_close`
when setting `taproot_staging`, which creates disconnection issues.

We will enforce this for the official taproot feature bit, but we
should relax it for the staging bit.

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
second-pass: broader security terminology
AI analysis · Informational 24/100

This commit removes a technical rule that required a specific Lightning feature flag (simple close) to be enabled whenever another experimental taproot feature flag (taproot staging) was enabled. Some lnd nodes were setting taproot staging without also setting simple close, causing Eclair nodes to disconnect from them. The change makes Eclair more tolerant of this behavior for the staging feature bit, while keeping the stricter rule for the final taproot feature bit. It is a compatibility/interoperability fix, not a security patch.

Lower-priorityFix comparison of utxos in the balance (#3160)by pm47 · 2a5b0f14 · Sep 9, 2025 · 1 fileMessage 68 · AdequateInformational 21Details
Commit message · pm47

Fix comparison of utxos in the balance (#3160)

The `Utxo` case class has many fields, for comparison we must use the
`outPoint`.

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

This commit fixes how the Eclair Lightning node compares its on-chain Bitcoin funds (UTXOs) when computing balance changes. Previously, it compared entire UTXO objects, which include fields that can change even when the same coin is still owned (for example, confirmation count). This could cause the node to incorrectly think UTXOs were added or removed, producing noisy or misleading balance logs and metrics. The fix compares UTXOs only by their unique identifier (outPoint), which is the correct way to tell whether the same coin is still present. There is no direct evidence in the commit that this is exploitable by an attacker or that it causes loss of funds.

AI review queuedCatch close commands in `Offline(WaitForDualFundingSigned)` (#3159)by pm47 · c9ff5019 · Sep 9, 2025 · 2 filesMessage 85 · StrongLow 43Details
Commit message · pm47

Catch close commands in `Offline(WaitForDualFundingSigned)` (#3159)

They were previously ignored because we don't yet have a commitment.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 43/100

This patch fixes a state-handling bug in Eclair, a Bitcoin Lightning Network node implementation. When a new dual-funded channel was stuck waiting for both parties to sign, and the node went offline, a force-close command was silently ignored. The fix makes the node properly abort the channel and roll back the funding transaction attempt, preventing funds from being left in limbo.