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.
Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.
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
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)
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…
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
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
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 …
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
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
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
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
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
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
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
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 <)
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
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
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)
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
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.
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
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
AI analysis · Low 45/100
This commit is the packaging of Eclair v0.14.1. It mostly changes version numbers and release notes, plus two operational tweaks: it turns off Maven's trusted-checksum post-processor and removes a startup guard that previously refused to run. The release notes describe the release as a routine patch with bug fixes and performance improvements, but also mention a Bolt12 fee-discount feature that was disabled because it could put nodes 'at risk' if used with custom plugins. No CVE or independent security report is referenced in the materials.
In https://github.com/ACINQ/eclair/pull/2993, we introduced a mechanism in the default Bolt12 offer handler to let the recipient pay the fees of the blinded paths they include in their Bolt12 invoices, instead of the payer having to pay fees for privacy chosen by the recipient (when the recipient decides to use a "real" blinded path with external nodes they don't control).
This wasn't correctly taking MPP into account: payers could split the payment in many tiny parts such that each part used the whole path fee discount. As a result, the payer would have still paid the whole amount but most of it would be collected by intermediate nodes inside the path instead of the recipient, which isn't the goal.
We're thus disabling this feature: we'll need a cleaner protocol to correctly account for MPP with base fees. Bolt12 isn't used yet by merchants so it's fine: we'll wait for recipients to adopt it before deciding how we introduce a blinded path fee discount feature (if this is something that users request). Note that we also recommend users to implement their own offer handler to customize their blinded paths, if they care about privacy, instead of using the default handler which is mostly there as a reference.
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 60/100
This commit removes a fee-discount feature for a new kind of Lightning payment (Bolt12 offers). The old feature let the seller pay routing fees for the hidden 'blinded' path they chose for privacy. But when a payer split a payment into many tiny pieces, each piece could claim the full discount, so most of the money would go to routing fees instead of the seller. The patch disables the discount to stop that abuse. It is a defensive fix, not an active exploit being patched in deployed code, because Bolt12 merchant use is still rare.
If the first DB write of a channel fails, we want to abort the channel immediately, otherwise our state may be unusable. If for some reason we already have a channel (for example because of a partial restore from a DB backup), we want to avoid overwriting this state as well.
* Add global `channel_id`s collision resistance
We add a global, concurrent map that keeps track of every temporary and final `channel_id` being used. We always add to this map before creating channel actors or transitioning to a final `channel_id` (and thus before storing channel data in the DB).
We only remove from that map when a channel actor dies: no other channel can be associated with the corresponding temporary or final `channel_id` since the channel was created after registering the IDs.
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ 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 · Moderate 60/100
This commit hardens the Eclair Lightning node against two related problems when opening payment channels: it prevents the same channel ID from being reused by two different channels at the same time, and it aborts channel creation if the very first database write fails (for example because a channel with that ID already exists from a backup). Before this change, a colliding or partially-restored channel ID could cause one channel's state to overwrite another's, potentially leading to loss of funds or an inconsistent node state.
Apply RBF limits to remote closing transactions (#3331)
* Apply RBF limits to remote closing transactions
When using `option_simple_close`, we didn't apply explicit rate-limits to remote closing transactions, apart from the fact that the feerate must be higher for each attempt.
There is no good reason to make a large number of RBF attempts when closing a channel cooperatively, so we apply the same rate-limits we use for funding.
* Bound the number of local closing transactions
We apply the BOLTs recommendation for the maximum number of closing transactions we create when using the legacy closing protocol (not `option_simple_close`). We previously restricted remote closing transactions, but we now also apply it to our local transactions.
* Apply the maximum attempts limit to splice RBF
We previously only applied the rate-limit (X attempts every Y blocks) but we didn't apply the maximum attempts limit. The risk is that we may end up with a splice that is stuck unconfirmed, but will eventually confirm, unless the peer is malicious and the feerate was very badly estimated (in which case they would have found a way to prevent the splice from confirming anyway).
93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Moderate 52/100
This commit adds rate limits and maximum attempt caps for Replace-By-Fee (RBF) closing transactions in the Eclair Lightning node. Previously, a peer could repeatedly propose new closing transactions without strict limits, which could waste computing resources, storage, and network bandwidth. The change also applies the same limits to local and splice RBF attempts, aligning with Lightning protocol recommendations and reducing the risk of abuse or accidental resource exhaustion.
``` If batch_size is not strictly greater than 1: - MUST ignore the start_batch message. - SHOULD send a warning. ```
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 25/100
This commit tightens validation of a Lightning network peer message called start_batch. Previously, the software only rejected batch sizes larger than 20. Now it also rejects batch sizes of 0 or 1, which the protocol specification says must be ignored with a warning. The change is a standards-compliance fix; it does not by itself look like a critical vulnerability, but it removes a case where a peer could request a meaningless batch and the node would accept it.
If our peer is buggy, or if we have a bug in our message queue, we may receive duplicate settlement messages for pending HTLCs. It is fine to handle them and relay the settlement downstream (instead of immediately force-closing), but we shouldn't store the duplicate settlement in the remote changes, otherwise it will trigger a force-close when exchanging `commit_sig`.
88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Moderate 60/100
This patch fixes a bug in Eclair's Lightning payment channel code. If a buggy peer (or internal message queue bug) sent the same HTLC settlement message twice, Eclair would store the duplicate in its list of pending remote changes. Later, when signing the next commitment, that duplicate would be treated as a conflicting update and trigger an unnecessary force-close of the channel. The fix ignores duplicate settlement messages instead of storing them again, while still allowing the first one to be relayed downstream. It also still force-closes if a conflicting (different) settlement arrives for the same HTLC.
We previously rejected Bolt12 invoices when a reply path was provided in the onion message. This wasn't in the spec, and it could make sense to provide a specific reply path with an invoice in case the payer considers the invoice invalid and wants to send back an invoice_error to inform the recipient.
This created compatibility issues with LDK.
Fixes #3322
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Low 30/100
This commit loosens Eclair's validation of BOLT12 invoice onion messages so that invoices may now include a reply path. Previously, Eclair rejected invoices that carried a reply path, which caused compatibility problems with LDK nodes. The change is framed as an interoperability fix, not a security fix, and it tightens some related validation rules at the same time.
When our peer sends us an invalid `tx_signatures`, we processed it and ignored the failure when we've already sent our own `tx_signatures`, because the transaction may be broadcast and may confirm anyway.
We now stop processing those invalid `tx_signatures` repeatedly: if our peer sends us more than 3 invalid `tx_signatures` for a given funding transaction, they're definitely buggy so we'll just wait for the transaction to confirm without trying to obtain the fully signed one locally.
We also now avoid unnecessary DB writes on `shutdown`. We don't need to write to the DB every time we receive `shutdown` from our peer, since the BOLTs require `shutdown` to be retransmitted on reconnection.
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
signing boundary
AI analysis · Low 47/100
This update changes how the Eclair Lightning node handles repeated bad 'tx_signatures' messages from a peer during dual-funded channel opens and splices. Previously, every bad signature was processed and logged, which could waste CPU and disk writes and might be abused to keep a node busy. Now, after three bad signatures for the same funding transaction, the node stops processing them and just waits for the on-chain confirmation. The patch also removes unnecessary database writes when receiving repeated 'shutdown' messages. The commit message frames this as a robustness improvement against buggy or malicious peers, not as a critical vulnerability fix.
This release contains a new index which we need for #3279.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100
This commit simply updates Eclair's required Bitcoin Core version from 30.x to 31.1. It changes download URLs, SHA-256 checksums, documentation, a runtime version check, and a test path. There is no security vulnerability in this change itself.
Reject `temporary_channel_id` duplicates early (#3324)
We previously rejected duplicate `temporary_channel_id` immediately, but we didn't immediately reject `temporary_channel_id`s that conflict with a *final* `channel_id` with the same peer: the rejection would happen later in the flow when transitioning from temporary to final IDs, which made debugging harder.
Since the channel interceptor step isn't atomic, we must check for duplicate channel IDs *after* rate-limiting, to ensure that we don't try inserting an entry in the channels map that is already there.
93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Low 37/100
This change tightens how Eclair handles incoming Lightning channel requests. It now rejects a new channel's temporary ID if it collides with an existing final channel ID for the same peer, and it re-checks for collisions after rate-limiting. Previously, some collisions were caught only later, which could make the node misbehave or make problems harder to diagnose. The patch is defensive hardening rather than a clear exploit fix.
Lower-priorityReject incoming HTLCs with a high `cltv_expiry` (#3323)by Bastien Teinturier · 7fb94601 · Jul 8, 2026 · 4 filesMessage 93 · StrongModerate 52Details
Commit message · Bastien Teinturier
Reject incoming HTLCs with a high `cltv_expiry` (#3323)
We currently reject HTLCs with a `cltv_expiry` higher than 2 weeks in the future when sending them (in the `sendAdd` method). That's because they would lock up our funds for a long period of time if our peer decided to force-close. Also, a large `cltv_expiry` makes slow jamming easier.
We now apply the same limits to incoming HTLCs for consistency (since they may differ by `cltv_expiry_delta`). Note that we don't do it in the `receiveAdd` function, which would trigger a force-close. We just accept those HTLCs and then fail them, since it is harmless to have them only temporarily in our commitment as long as we don't relay.
93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Moderate 52/100
This change tightens a safety limit on the Bitcoin Lightning Network node Eclair. Previously, Eclair already refused to send outgoing payments whose refund deadline (the 'cltv_expiry') was more than about two weeks in the future, because that would lock up funds for too long and make certain spam/jamming attacks easier. Now it also rejects incoming payments with similarly distant deadlines, but it does so gracefully by accepting the payment into the channel and then immediately failing it, rather than force-closing the channel. This is a defensive hardening patch, not a fix for an active exploit, and it reduces the risk of funds being locked up or the node being used for 'slow jamming' of the network.
✓ 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 pathsigning or wallet path
AI analysis · Informational 22/100
This commit updates Eclair's underlying Bitcoin library from version 0.47 to 0.48 and makes small code adjustments to match the new library's API. The changes touch how private keys are derived and how test data is converted. There is no direct evidence in the commit that this fixes a security vulnerability, but library updates can include bug fixes or improvements that affect cryptographic handling.
We refactor the attribution data code to make it more consistent with the rest of the Sphinx-related code. We add comments and intermediate variables to make it more readable. We introduce intermediate classes to hold data and add better symmetry between the success and failure cases.
This will make it easier to implement trampoline attribution and add fulfillment data (https://github.com/lightning/bolts/pull/1344).
* Refactor trampoline attribution data
We correctly extract shared secrets (including trampoline shared secrets) and detect when we're inside a blinded path to avoid including attribution data. Note that we don't use the trampoline shared secret yet, since full trampoline isn't implemented (see https://github.com/ACINQ/eclair/pull/2819 for the full changes).
We add tests for attribution data with blinded paths and trampoline payments.
88/100 · StrongMessage clarity
✓ Descriptive subject✓ 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 path
AI analysis · Low 34/100
This commit is a code refactor of how Eclair handles 'attribution data'—extra encrypted timing and accountability information attached to Lightning payment success and failure messages. It restructures the code to support future trampoline payments and blinded routes, and adds tests. The commit itself does not claim to fix a security bug; it is described as making later features easier to implement. However, the refactor changes how shared secrets are extracted and how attribution data is included or omitted for blinded and trampoline payments, which touches privacy-sensitive logic.
Lower-priorityRemove deprecated `bip125 replaceable` field in mempool transaction class (#3319)by Fabrice Drouin · cfe47a8c · Jun 17, 2026 · 2 filesMessage 81 · StrongInformational 20Details
Commit message · Fabrice Drouin
Remove deprecated `bip125 replaceable` field in mempool transaction class (#3319)
`bip125-replaceable` field in Bitcoin Core RPC had been deprecated since v29 and has now been removed. Full RBF has been the default policy since v28.
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 support for a deprecated Bitcoin Core RPC field called `bip125-replaceable` from Eclair's internal mempool transaction model. Bitcoin Core stopped providing this field, so Eclair is updating its code to keep working with newer Bitcoin Core versions. It is a compatibility/maintenance change, not a fix for an active security vulnerability.
Lower-prioritySend `splice_locked` if necessary while reconnecting (#3318)by Bastien Teinturier · 7fb62fc5 · Jun 11, 2026 · 2 filesMessage 81 · StrongModerate 55Details
Commit message · Bastien Teinturier
Send `splice_locked` if necessary while reconnecting (#3318)
When we lock a commitment while reconnecting, we currently have a bug where if we've sent our `channel_reestablish` but we haven't received the remote `channel_reestablish`, we will not send `splice_locked` which results in a mismatch in the expected number of `commit_sig` messages for our peer, triggering a force-close.
We now send `splice_locked` when we are in the `SYNCING` state when that makes sense. The logic is very similar to the `NORMAL` state, but we don't emit events that are meant to be used when the channel is ready to handle payments.
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 55/100
This commit fixes a bug in Eclair, a Bitcoin Lightning Network node implementation. During reconnection after a splice (a way to resize a payment channel), if a funding transaction became confirmed at a specific moment, the node would fail to notify its peer. That missing notification caused the peer to expect a different number of signature messages, leading both sides to force-close the channel and settle on the blockchain. The fix makes the node send the required `splice_locked` message even while it is still synchronizing with the peer. It is a bug fix, not an exploit by an attacker, but it could be triggered by normal network timing.
AI review queuedBack to dev (#3313)by Bastien Teinturier · 2dda7946 · May 21, 2026 · 8 filesMessage 36 · OpaqueInformational 15Details
Commit message · Bastien Teinturier
Back to dev (#3313)
After the 0.14.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 software version from 0.14.0 to 0.15.0-SNAPSHOT across build files, creates a placeholder for future release notes, re-enables a Maven trusted-checksum feature used for build verification, and adds an explicit safety guard that refuses to start the node unless a special override flag is set. There is no vulnerability fix or security flaw introduced in the diff itself.
✓ 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 tag for Eclair v0.14.0. It updates Maven project versions from 0.14.0-SNAPSHOT to 0.14.0, removes a temporary 'unsafe startup' guard that was only meant for pre-release builds, renames the release notes file, and disables Maven's trusted-checksum post-processor for the release build. There is no security patch or vulnerability fix in this commit itself.
When using blinded paths in our Bolt12 invoices, we may use a feature where instead of making the payer pay the fees for the blinded path, we deduce them from the amount we wish to receive (the recipient pays for the privacy it gains from using blinded paths, instead of making the payer pay for something that they didn't opt into). See #2993 for more details.
The constraint on path fees was wrong in some rounding cases, so we fix that, otherwise we would unnecessarily reject some payments. This was found by testing blinded trampoline payments.
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 · Low 32/100
This commit fixes a rounding bug in Eclair's handling of Bolt12 (a newer Lightning Network invoice format) blinded-path fees. When a recipient hides their real node behind a private payment path, they can choose to pay those path fees themselves rather than charging the payer. The code that computed the maximum such fee used the wrong amount in some rounding cases, causing Eclair to reject valid incoming payments unnecessarily. The fix uses the larger of the invoice amount and the actual received amount when computing the fee limit, and adjusts default/test settings accordingly.
Security candidateAdd support for zero-fee commitment format (#3192)by Bastien Teinturier · 35403401 · May 20, 2026 · 42 filesMessage 100 · StrongLow 34Details
Commit message · Bastien Teinturier
Add support for zero-fee commitment format (#3192)
* Add support for zero-fee commitment format
We add support for the zero-fee commitment format specified in https://github.com/lightning/bolts/pull/1228.
Channels using this commitment format benefit from better protection against pinning attacks (thanks to TRUC/v3 transactions), don't need the `update_fee` mechanism, have less dust exposure risk, and use an overall simpler state machine.
In this commit, we simply introduce the commitment format and create the corresponding transactions.
* Rename `ClaimRemoteDelayedOutputTx`
It isn't delayed anymore for v3 transactions. We could use static wallet public key, but in most cases it wouldn't work and adds extra complexity so we don't do it. We add a comment in the documentation of this class to explain why we're always making a 2nd-stage transaction.
* Validate channel parameters
We apply slightly different validation for zero-fee commitments:
- the commit feerate must be `0 sat/byte` - the max number of accepted HTLCs must be at most 114 - `update_fee` cannot be used
We verify those requirements during channel creation and add tests for normal channel operation.
* Handle force-closing zero-fee channels
We add support for force-close zero-fee channels. When publishing the local commit, this works mostly the same way as other channel types. The only difference is that we don't even attempt to publish the commit tx individually: we always bundle it with the anchor transaction.
When we detect the remote commit though, we're able to introduce some new behavior:
- if we have a large enough main output, we use that to pay the fees of the remote commit tx (unless it is already confirmed), which avoids using a wallet input - otherwise, we spend the anchor output, which competes with the remote peer package
Since we're only using the anchor transaction or our main output to spend the ephemeral anchor, we cannot publish HTLC txs until the commit tx is confirmed. We will in the future make *all* transactions go through the `ReplaceableTxPublisher`, and at the point we'll be able to simplify this, but it's too early for this refactoring, so for now we simply wait for the commit tx to be confirmed before publishing HTLC txs.
* Don't force-close on remote `error`
When using zero-fee commitments, we don't force-close when receiving an `error` from our peer: if they want to force-close the channel, they can publish their commitment instead of forcing us to publish ours. It is especially true when the commit tx doesn't pay any fees, because the publisher will pay the entire fees for the force-close.
Note that for wallet peers, we could introduce a mechanism where they send us their signed commit tx in the error message if they don't have any wallet input to pay the fees, and we could be nice and publish it while paying the fees from our main output (which isn't delayed since it is the remote commit from our point of view).
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
explicit security languagedefensive validationsigning or wallet path
AI analysis · Low 34/100
This commit adds an experimental new Lightning channel type to Eclair called 'zero-fee commitments.' It is a large feature patch implementing a draft BOLT specification (PR 1228), not a fix for a known vulnerability. The change introduces new transaction formats, validation rules, and force-close behavior. Because it is experimental, disabled by default, and extensively tested, it is unlikely to be an immediate security issue, but any large change to consensus-sensitive transaction code carries risk of subtle bugs.
Lower-priorityChange RBF feerate bump rule to match BIP125 (#3298)by Bastien Teinturier · 06538ada · May 19, 2026 · 1 fileMessage 81 · StrongLow 37Details
Commit message · Bastien Teinturier
Change RBF feerate bump rule to match BIP125 (#3298)
The 25/24 multiplicative feerate bump for `tx_init_rbf` can produce increments too small for Bitcoin Core to relay the replacement transaction under BIP125's minimum relay fee policy (default `incrementalRelayFee` of 0.1 sat/vB since Bitcoin Core v30.0). Add a minimum additive increment of 25 sat/kw alongside the existing multiplicative rule, using whichever produces a higher feerate.
See https://github.com/lightning/bolts/pull/1327
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 37/100
This commit fixes how Eclair increases transaction fees when replacing a funding transaction via RBF (Replace-By-Fee). Previously, Eclair only required the new fee rate to be 25/24 (about 4.17%) higher than the old one. Under recent Bitcoin Core defaults, that small bump can be too low for the network to accept the replacement. The fix adds a minimum flat bump of 25 sat/kw and uses whichever is larger. This is a protocol correctness / liveness fix rather than a theft-of-funds bug, but it can prevent channel funding from getting stuck.
Lower-priorityUpdate features early on reconnection (#3310)by pm47 · 8876ef18 · May 12, 2026 · 2 filesMessage 65 · AdequateLow 34Details
Commit message · pm47
Update features early on reconnection (#3310)
Otherwise some upgrade paths may fail.
65/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
AI analysis · Low 34/100
This patch fixes the order in which Eclair updates Lightning protocol feature flags when a channel reconnects. Previously, the code built the reconnection message using stale feature information and only updated features afterward. Now features are refreshed first, so the reconnection handshake uses the correct, current capabilities. The commit message says this prevents some upgrade paths from failing. There is no direct evidence this is exploitable for theft or denial of service, but using stale feature data during a protocol handshake can cause compatibility or state-mismatch problems.
Lower-priorityFix edge case in `availableBalanceForSend/Receive` (#3308)by Bastien Teinturier · befdcd54 · May 12, 2026 · 1 fileMessage 91 · StrongLow 36Details
Commit message · Bastien Teinturier
Fix edge case in `availableBalanceForSend/Receive` (#3308)
There was a small discrepancy between `availableBalanceForSend/Receive` and `canSendAdd/canReceiveAdd` when the sender is not paying the commit tx fees. In `canSendAdd/canReceiveAdd`, we verify that the receiver (who pays the commit fees) can still pay those fees after adding the new HTLC to the commit tx. In `availableBalanceForSend/Receive`, we did not verify that.
This only happens in very rare cases where the receiver is paying the commit fees and is very close this its channel reserve, so it should rarely happen in practice, but it sometimes makes our fuzz tests fail.
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
Why it was queued
fuzzing or regression evidence
AI analysis · Low 36/100
This patch fixes a mismatch in how Eclair calculates how much Bitcoin can be sent or received through a Lightning channel. Previously, the balance estimate could say a payment was possible, but the actual safety check would later reject it because the other party couldn't afford the on-chain transaction fees. This could cause payment attempts to fail unexpectedly, especially in edge cases where one side is nearly out of funds. It is a consistency bug rather than a direct theft-of-funds vulnerability.
Lower-priorityCompute channel keys once on on startup (#3306)by Bastien Teinturier · e1330154 · May 7, 2026 · 10 filesMessage 86 · StrongInformational 17Details
Commit message · Bastien Teinturier
Compute channel keys once on on startup (#3306)
We compute channel keys when we load and verify channels from our database, and pass them along instead of re-computing them later (which can be expensive when done at scale).
Implemented by @sstone, with small modifications by @t-bast.
86/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 17/100
This commit is a performance optimization, not a security fix. It changes Eclair so that cryptographic channel keys are computed once when channels are loaded from the database at startup, then passed around with the channel data, instead of being recomputed every time they are needed. This reduces CPU work when many channels are active. There is no indication in the commit that it fixes a vulnerability or changes security behavior.
Security candidateBump org.postgresql:postgresql version (#3305)by Bastien Teinturier · 76da19f1 · May 7, 2026 · 2 filesMessage 81 · StrongLow 36Details
Commit message · Bastien Teinturier
Bump org.postgresql:postgresql version (#3305)
This fixes a vulnerability, which doesn't apply to eclair in known deployements, but is worth fixing in case some nodes use untrusted database hosts which could lead to DoS attacks.
81/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
This commit updates the PostgreSQL database driver used by the Eclair Lightning node software from version 42.7.8 to 42.7.11. The commit message says this fixes a vulnerability that could allow denial-of-service (DoS) attacks if a node connects to an untrusted database host. The developers state it does not affect known Eclair deployments, but they are patching it as a precaution.
Otherwhile the build will wait for a user input and eventually fail.
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 · Informational 15/100
This commit fixes a Docker build problem by adding the '-y' flag to an apt-get install command. Without this flag, the build would pause waiting for a human to confirm installation, causing automated builds to time out and fail. It is a build reliability fix, not a security fix.