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
Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.
AI review queuedBack to dev (#3379)by Fabrice Drouin · bafcf3b6 · Sep 14, 2026 · 8 filesMessage 36 · OpaqueInformational 15Details
Commit message · Fabrice Drouin
Back to dev (#3379)
After the v0.14.3 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.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 release-notes document, and deliberately prevents accidental startup of the new development snapshot by throwing an error unless a special override flag is set. There is no security vulnerability in this commit.
Tor: allow password auth on private networks (#3375)
This is a follow-up to #3354: we allow using a password on private networks. It is useful in cluster deployments.
78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
parser or protocol pathsecond-pass: broader security terminologysecond-pass: security-sensitive path
AI analysis · Low 38/100
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 networks are also treated as local, so password auth is permitted there too. This is intentional for cluster deployments, but it slightly relaxes a security boundary around how Eclair talks to Tor.
AI review queuedBack to dev (#3371)by Bastien Teinturier · 39c5cb27 · Aug 26, 2026 · 8 filesMessage 36 · OpaqueInformational 15Details
Commit message · Bastien Teinturier
Back to dev (#3371)
After the v0.14.2 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.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 deliberately prevents the new development snapshot from starting in production by throwing an error unless a special override flag is set. There is no security vulnerability here; the change is a safety guard, not a flaw.
AI review queuedForce-close on invalid HTLC `cltv_expiry` (#3367)by Bastien Teinturier · b7ebefdb · Aug 26, 2026 · 5 filesMessage 88 · StrongModerate 60Details
Commit message · Bastien Teinturier
Force-close on invalid HTLC `cltv_expiry` (#3367)
Bolt 2 specifies that if tje sending node sets `cltv_expiry` to greater or equal to 500000000, we should send a warning and close the connection or send an error and fail the channel. We never implemented that, which was fine because we already rejected large `cltv_expiry` before that threshold (without force-closing), but it's better to explicitly force close if our peer is sending such invalid values.
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 or wallet pathsecond-pass: security-sensitive path
AI analysis · Moderate 60/100
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 specification because they would be interpreted as a Unix timestamp rather than a Bitcoin block height, which could confuse the node and lead to incorrect fund-locking behavior. Previously Eclair rejected these values without force-closing; now it explicitly closes the channel as the spec recommends.
AI review queuedFix a batch of low-severity issues (#3355)by Bastien Teinturier · 06e0ff71 · Aug 19, 2026 · 9 filesMessage 88 · StrongModerate 52Details
Commit message · Bastien Teinturier
Fix a batch of low-severity issues (#3355)
* Remove explicit cast in channel codec
We used an explicit cast in our channel codec: this is safe for data that we created ourselves, but would throw an exception if our data is corrupted. It's trivial to be safe by removing the cast.
* Require `tls-tcp` when using cluster mode
We require that encryption is used between the front and backend nodes in cluster mode, otherwise private data would be exposed. This protects node from messing up their deployment configuration without realizing it.
* Remove exception details from failed RPCs
We don't return the exception message anymore for failed RPC calls, to avoid potentially leaking private information. This guarantees that only the node operator, with access to the logs, can see why RPC calls fail.
* Don't decode unknown onion message TLVs
We don't support any TLV for onion messages yet. Since onion messages can be spammy, we don't need to waste any ressources trying to decode unknown TLVs that we'll throw away anyway.
* Limit the number of onion messages self-hops
We only include ourselves multiple times in an onion message path when using dummy hops. If we're included too many times in a path, that's most likely a remote node messing with us: we just drop the message.
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
parser or protocol pathsecond-pass: broader security terminologysecond-pass: security-sensitive path
AI analysis · Moderate 52/100
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 data exposure, stops API error messages from leaking internal details, and makes onion message handling more resistant to spam by ignoring unknown data fields and limiting how many times a node can be inserted into a message path.
We improve the performance of the liquidity ads codec by ignoring unknown payment types, and simply checking whether the payment types we support are activated or not.
* Reject node_announcement with invalid liquidity TLV
If the liquidity ads TLVs is present but with empty fields, we fail to correctly re-encode it. We must reject it immediately instead.
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 · Moderate 50/100
This commit fixes a bug in how Eclair handles 'liquidity ads' data embedded in Lightning node announcements. Previously, if a peer broadcast a node_announcement containing a liquidity-ads field with empty funding rates or empty payment types, the node could not re-encode the message correctly, which could cause it to relay or store invalid gossip. The patch now rejects such malformed announcements immediately. It also improves codec performance by storing the raw payment-type bitfield instead of eagerly decoding unknown payment types.
AI review queuedBack to dev (#3339)by Bastien Teinturier · ee7d9f6d · Jul 29, 2026 · 8 filesMessage 36 · OpaqueInformational 15Details
Commit message · Bastien Teinturier
Back to dev (#3339)
After the v0.14.1 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.14.1 to 0.15.0-SNAPSHOT, re-enables a Maven trusted-checksum feature used for build verification, adds a placeholder release-notes file, and includes a safety guard that refuses to start the development snapshot unless a special override flag is set. There is no security vulnerability in the diff itself; the startup guard is an intentional protective measure, not an exploit.
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.
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.
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.
AI review queuedUse official feature bit for `option_simple_taproot` (#3144)by Bastien Teinturier · 872cb663 · May 5, 2026 · 14 filesMessage 81 · StrongLow 37Details
Commit message · Bastien Teinturier
Use official feature bit for `option_simple_taproot` (#3144)
Use the official feature bit and name for taproot channels and the corresponding channel types. Activate taproot channels support by default (without support for announcing such channels yet).
See https://github.com/lightning/bolts/pull/995
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 pathparser or protocol pathsecond-pass: security-sensitive path
AI analysis · Low 37/100
This commit updates the Eclair Lightning node software to use the official protocol feature bit and name for a new kind of Bitcoin payment channel called 'taproot channels.' It turns taproot channel support on by default, but only for private (unannounced) channels, because the public-announcement rules are not finalized. The change is mostly a rename and feature-bit swap from an earlier experimental/staging version, plus adding guards so users cannot accidentally open a public taproot channel. It is a protocol-alignment change, not a fix for an active security bug.
There's a race condition between Bob and Carol's router states, which aren't updated exactly at the same time. Retrying the condition should fix this race condition.
86/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100
This commit only changes a test file to make an integration test less flaky by retrying a condition until two nodes' routing data match. It does not modify production code, so it has no direct security impact on real Eclair users.
AI review queuedAdd fuzz tests for onion, route blinding and lightning message codecs (#3282)by Nishant Bansal · 0778eafa · Apr 13, 2026 · 4 filesMessage 91 · StrongInformational 15Details
Commit message · Nishant Bansal
Add fuzz tests for onion, route blinding and lightning message codecs (#3282)
- Expand LightningMessageCodecs fuzz tests to cover all message types - Add fuzz tests for payment and message onion payload codecs - Add fuzz tests for route blinding codecs - Add fuzz tests for onion failure message codecs
✓ 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 evidenceparser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100
This commit only adds new automated fuzz tests for Lightning Network message and onion-payload codecs. It does not change any production code, so it cannot introduce a runtime vulnerability by itself. The tests are designed to catch crashes or inconsistent encoding/decoding in existing codec code by feeding them random bytes.
If the test runs too quickly and the message is processed in less than 1 millisecond, there is a race condition since reading from the database excludes the upper timestamp bound (`timestamp < now`).
We also remove our usage of the `BETWEEN` keyword for postgres. The `BETWEEN` keyword is inclusive of both bounds, while we want to exclude the upper bound to allow pagination.
86/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 18/100
This commit fixes a flaky automated test and, as a side effect, changes several PostgreSQL database queries to exclude the upper time bound instead of including it. The change is described by the author as a correctness fix for pagination, not a security fix. There is no direct evidence of an exploitable vulnerability.
We create a new set of actors that keep track of payment statistics across our peers and rank them to identify the top profit earners. Based on those statistics, the actors issue recommendations to:
- allocate more liquidity towards nodes that are generating revenue and may run out of liquidity in the next few days - reclaim liquidity from inactive channels - change our relay fees to optimize increases or decreases in outgoing flow and volume
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 34/100
This commit adds a new optional 'peer profit scoring' feature to the Eclair Lightning node. When enabled, it automatically tracks payment statistics, ranks peers by profitability, and can automatically open channels, close idle channels, and adjust relay fees. By default all automatic actions are disabled, so the change is primarily an operational automation feature rather than an immediate security patch or vulnerability. The main security consideration is that enabling the automatic actions gives the node software control over on-chain funds and channel pricing, which could in theory be abused or misconfigured, but the commit itself does not introduce a known exploit.
AI review queuedFix race condition in `Postman` causing flaky `OfferPayment` tests (#3270)by Bastien Teinturier · 8c5f39f4 · Mar 19, 2026 · 1 fileMessage 100 · StrongLow 33Details
Commit message · Bastien Teinturier
Fix race condition in `Postman` causing flaky `OfferPayment` tests (#3270)
The integration test "send blinded multi-part payment a->b->c (single channel a->b)" in `OfferPaymentSpec` fails intermittently. The root cause is a race condition in `Postman` where the subscription for an onion message reply is registered after the message is sent, allowing the reply to arrive and be silently dropped before the subscription exists.
In integration tests where all 3 nodes run on the same JVM, the onion message round-trip (Alice -> Bob -> Carol -> creates invoice -> Carol -> Bob -> Alice) can complete in just a few milliseconds - fast enough to beat the `Subscribe` message to the `Postman`'s mailbox.
This explains why the test is flaky: it usually works (round-trip slower than subscribe), but occasionally fails (round-trip faster than subscribe, reply dropped).
We simply move the subscription registration to *before* the message is sent to the network.
100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: broader security terminology
AI analysis · Low 33/100
This commit fixes a timing bug in Eclair's message-delivery component called Postman. When sending an onion message that expects a reply, the code used to register for the reply *after* sending the message. In fast local tests (and potentially fast real networks), the reply could arrive before the registration completed, causing the reply to be lost. The fix registers the subscription *before* sending the message. The commit describes this as a test flakiness issue, not a security vulnerability.
AI review queuedAdd bitcoin rpc call to check if an address belongs to our wallet (#3267)by Fabrice Drouin · a4d66adc · Mar 18, 2026 · 4 filesMessage 73 · AdequateInformational 17Details
Commit message · Fabrice Drouin
Add bitcoin rpc call to check if an address belongs to our wallet (#3267)
We use the "ismine" property that is returned by the "getaddressinfo" RPC call.
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 17/100
This commit adds a new helper function that lets Eclair ask Bitcoin Core whether a given bitcoin address belongs to the user's own wallet. It is a feature addition with no visible bug fix or security patch. There is no indication in the commit that it fixes a vulnerability.
AI review queuedImprove support for plugin-defined features (#3264)by Bastien Teinturier · a4f4abd9 · Mar 17, 2026 · 42 filesMessage 93 · StrongLow 35Details
Commit message · Bastien Teinturier
Improve support for plugin-defined features (#3264)
We allow injecting non-official features via plugins, by extending the `CustomFeaturePlugin` trait. However, we previously added those features to a set of unknown features: we can do better and add them to the known features map, which provides pretty-printing in logs and simplifies debugging.
We also had an issue where `hasFeature` would always return `false` for plugin features, even when they were supported by both nodes, because we only looked at our `activated` features map which only contains official features.
We get rid of the `UnknownFeature` class entirely and keep the encoded feature bits after deserializing them. We take those feature bits into account in `hasFeature`, which fixes the issue.
This creates a slightly weird asymmetry because our local features, which are created based on our `eclair.conf`, will not have this field set while features that are read from network messages or the DB will have this field set. A better architecture would be to remove the `activated` map entirely and directly wrap the feature bits, while providing helper functions to interact with features without having to directly read a `BitVector`. This is a larger refactoring though, because we'd need to add support for filtering `init` / `node` features using bitmasks, which isn't entirely trivial to handle and requires careful management of plugin features.
93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathparser or protocol pathsecond-pass: broader security terminologysecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Low 35/100
This commit fixes a bug where Eclair did not correctly recognize custom features added by plugins when checking if another node supports them. Previously, plugin features were treated as 'unknown' and `hasFeature` always returned false for them, even when both nodes supported the same plugin feature. The change stores the raw feature bits after decoding and uses them in feature checks, while removing the old 'UnknownFeature' class. It is a correctness and compatibility improvement rather than a critical security patch, but it could affect whether nodes agree on required features during connection.
AI review queuedFix flaky onion message test (#3266)by Bastien Teinturier · 1543e7ca · Mar 17, 2026 · 1 fileMessage 98 · StrongInformational 15Details
Commit message · Bastien Teinturier
Fix flaky onion message test (#3266)
The "automatically connect to known nodes" test was flaky, because there is a race with our code that lazily removes node announcements from our DB after channels close (in `handleChannelSpent` in `Validation.scala`).
We now explicitly wait for gossip to ensure that we cannot run into this race condition, which should fix the flakyness during CI.
98/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100
This commit fixes a flaky automated test in the Eclair Lightning node software. It adds a wait step so that test nodes have time to learn about network channels before the test proceeds. There is no security issue here—only a test reliability improvement.
AI review queuedReject offers with amount set to `0` (#3265)by Bastien Teinturier · 16ebf01a · Mar 17, 2026 · 2 filesMessage 76 · AdequateLow 28Details
Commit message · Bastien Teinturier
Reject offers with amount set to `0` (#3265)
This doesn't make any sense, the field should be omitted if any amount is acceptable: setting it to `0` is confusing.
See https://github.com/lightning/bolts/pull/1316
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Low 28/100
This commit tightens validation of Lightning Network 'offers' (a way for a merchant to publish a payment request). Previously, an offer could include an amount field set to zero, which the protocol designers consider invalid and confusing. The change makes Eclair reject such offers. The main risk is that an attacker or buggy peer could send a zero-amount offer and, before this patch, Eclair might have accepted or processed it in an unintended way. The commit itself is a straightforward validation fix and does not show an active exploit.
AI review queuedRemove support for zlib encoding for channel queries (#3263)by Bastien Teinturier · eef7c326 · Mar 11, 2026 · 8 filesMessage 81 · StrongLow 28Details
Commit message · Bastien Teinturier
Remove support for zlib encoding for channel queries (#3263)
We removed support for sending compressed data when it was removed from the spec (see https://github.com/ACINQ/eclair/pull/2244). We meant to remove support for receiving compressed data as well as a follow-up, but it slipped for a long time! There's no reason to keep supporting it now.
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Low 28/100
This commit removes the ability of the Eclair Lightning node to receive zlib-compressed channel-query data from peers. The Lightning protocol spec dropped zlib compression for these messages some time ago, and this change catches up by rejecting or ignoring compressed encodings. It is a hardening/cleanup change rather than a fix for an active vulnerability, though keeping a deprecated decompression path could in theory expose a node to memory or CPU issues if a peer sent malicious compressed data.
We add a `ChannelFundingCreated` event that is emitted when the funding transaction or a splice transaction has been signed and can now be published, either by us or by our peer (depending on who funds).
This can be handy to detect peers that are using black-listed inputs and immediately close the channel before it confirms and can be used.
66/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 20/100
This commit adds a new notification event called ChannelFundingCreated to the Eclair Lightning node. It tells external listeners when a channel funding or splice transaction has been signed and is ready to be published. The change is purely additive: it emits an event at existing points in the code and exposes it over the WebSocket API. It does not alter security-critical logic such as transaction signing, validation, or channel state transitions. The release notes explicitly say the event is handy for detecting peers that use black-listed inputs so operators can close the channel early, but that is a monitoring/operational use case, not a vulnerability fix.
We fix a few flaky tests in our channel FSM that test scenarios where errors are received while creating funding transactions. The issue was that we used a dummy wallet that could complete its call before our calls to `awaitCond(alice.stateName == WAIT_FOR_FUNDING_INTERNAL)`.
We use a new dummy on-chain wallet that never responds to transaction funding calls to allow tests to inject failure events.
86/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100
This commit only changes test code. It fixes flaky automated tests in the Eclair Lightning node by introducing a fake wallet that never completes funding transactions, so tests can reliably simulate error events during channel funding. There is no change to production code and no security vulnerability is being fixed or introduced.
AI review queuedImprove channel and payment events (#3246)by Bastien Teinturier · d735e0b5 · Feb 11, 2026 · 19 filesMessage 76 · AdequateInformational 19Details
Commit message · Bastien Teinturier
Improve channel and payment events (#3246)
We improve the following events:
- `TransactionPublished` includes more details about mining fees and an optional liquidity purchase - all channel events include the latest `channel_type` - `PaymentRelayed` exposes the `relayFee` earned
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 19/100
This commit is a routine refactoring of internal event definitions in the Eclair Lightning node. It changes how channel and payment events are structured so they carry more detailed information (such as splitting mining fees into local and remote portions, adding timestamps, and exposing relay fees). There is no direct evidence in the commit that these changes fix a security vulnerability; they appear to be observability and accounting improvements.
AI review queuedInclude the `node_id` of channel peers in payment events (#3243)by Bastien Teinturier · ff7a24c5 · Jan 23, 2026 · 40 filesMessage 81 · StrongInformational 19Details
Commit message · Bastien Teinturier
Include the `node_id` of channel peers in payment events (#3243)
When scoring peers, we don't really care about individual channels but rather about the peer itself, who is identified by its `node_id`. We update payment events to include the `node_id` of our channel peer, to make it easier to compute statistics about each of our peers.
We also rework the events in `PaymentEvents.scala` to be more consistent now that we've added support for trampoline, splicing, liquidity ads and on-the-fly funding, which are all the features we had planned that can impact peer scoring.
Note that we don't yet update the schema of the `AuditDb`, which means that some of the data isn't stored and is currently filled with a dummy value. We will include *all* updates to the DB schema in a future PR and will fix this.
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: unusually broad change
AI analysis · Informational 19/100
This commit is a refactoring and observability improvement for the Eclair Lightning node. It adds the node identifier (node_id) of channel peers to various payment events and restructures how payment events are represented in code. It does not fix a security vulnerability, nor does it introduce obvious new attack surface. The database schema is intentionally not yet updated, so some stored data uses a placeholder node_id. The change touches many files but is mostly internal plumbing for metrics and audit logging.