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
Plugin validation of interactive transactions (#3258)
We add a new `ValidateInteractiveTxPlugin` trait that can be extended by plugins that want to perform custom validation of remote inputs and outputs added to interactive transactions. This can be used for example to reject transactions that send to specific addresses or use specific UTXOs.
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
defensive validation
AI analysis · Informational 21/100
This commit adds a new optional plugin hook that lets Eclair node operators write custom checks for Bitcoin transactions used in Lightning channel funding or splicing. It is a defensive feature, not a vulnerability fix. The same change also improves error messages when a transaction is rejected and slightly refactors how input confirmation checks are run. There is no evidence in the commit of an active security bug being patched.
Lower-priorityAuto-refresh relay fees from conf can be disabled (#3260)by pm47 · 0a9853bf · Mar 2, 2026 · 7 filesMessage 81 · StrongInformational 18Details
Commit message · pm47
Auto-refresh relay fees from conf can be disabled (#3260)
There is a performance hit on restart if there is a large number (>100s) of channels, so it can be disabled with a new `eclair.relay.fees.reset-existing-channels` setting.
The default behavior is unchanged.
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 18/100
This commit adds an optional setting that lets node operators disable an automatic fee refresh for existing payment channels when Eclair restarts. By default, the old behavior is preserved (fees are still refreshed). The change is framed as a performance improvement for operators with hundreds of channels, not as a security fix. There is no direct evidence in the commit that this resolves a vulnerability or that an attacker can exploit the old behavior.
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.
This avoids a herd effect when restarting the node.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 18/100
This commit changes how Eclair (a Bitcoin Lightning node) loads stored peer data when the node restarts. Previously, every peer's stored data was read from the database immediately at startup. Now it is loaded only when the peer first reconnects. The stated goal is to avoid a 'herd effect'—a large burst of database reads all at once after a restart. There is no direct security vulnerability in the diff; it is a performance and reliability improvement. The change does not alter who can request data or what data is stored.
Lower-priorityDon't automatically use `scid_alias` for public channels (#3255)by Bastien Teinturier · 546028fd · Feb 27, 2026 · 3 filesMessage 81 · StrongLow 37Details
Commit message · Bastien Teinturier
Don't automatically use `scid_alias` for public channels (#3255)
In #3250 we started implicitly choosing the best channel type based on activated features when not explicitly specified by the node operator. However, we automatically used `scid_alias` if it was supported by both peers, but it is only allowed for unannounced channels. We now restrict this to follow the BOLTs.
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 37/100
This commit fixes a bug where Eclair would automatically enable a feature called `scid_alias` for public Lightning Network channels, even though the Lightning protocol rules (BOLTs) only allow that feature for unannounced (private) channels. Public channels with `scid_alias` could violate protocol rules and cause interoperability or routing problems, though it is not a direct theft-of-funds vulnerability.
This was generated using Opus 4.6 with the `/init` command. It provides overall context about the codebase to every Claude session, to avoid repeating work to build that context (consume less token whenever using Claude for a task).
88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
documentation-only discount
AI analysis · Informational 15/100
This commit adds a documentation file called CLAUDE.md that gives the Claude AI coding assistant general context about the Eclair Lightning Network project. It contains no code changes, no configuration changes, and nothing that affects how the software runs or processes data. It is purely informational for AI-assisted development.
We fix a few flaky tests in our channel FSM that test scenarios where errors are received while creating funding transactions. The issue was that we used a dummy wallet that could complete its call before our calls to `awaitCond(alice.stateName == WAIT_FOR_FUNDING_INTERNAL)`.
We use a new dummy on-chain wallet that never responds to transaction funding calls to allow tests to inject failure events.
86/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100
This commit only changes test code. It fixes flaky automated tests in the Eclair Lightning node by introducing a fake wallet that never completes funding transactions, so tests can reliably simulate error events during channel funding. There is no change to production code and no security vulnerability is being fixed or introduced.
Lower-priorityAdd claude files to `.gitignore` (#3252)by pm47 · 11a86046 · Feb 20, 2026 · 1 fileMessage 76 · AdequateInformational 15Details
Commit message · pm47
Add claude files to `.gitignore` (#3252)
Claude adds a `.claude` dir at the root of the project. In a sandboxing setup we may want to use other custom claude-related directories, hence the wildcard.
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100
This commit simply adds a new pattern to the project's .gitignore file so that files and folders created by the Claude AI assistant are not accidentally committed to the repository. It has no security relevance to the Eclair Lightning node software itself.
Select `channel_type` for automatic channel creation (#3250)
When creating channels automatically, we don't necessarily have access to our peer's features. It is useful to automatically select the channel type based on local and remote features. We now allow this behavior in the `OpenChannelInterceptor`.
Note that when we add official support for taproot channels and 0-fee commitments, we will hard-code in `eclair` which type of channels we think is best. If node operators want to override this order, they will need to explicitly provide the `channel_type` parameter (which can be done when using the API).
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 18/100
This commit changes how Eclair selects a Lightning channel type when opening a channel automatically. Previously, the caller had to explicitly provide a channel type. Now, if no type is provided, Eclair will automatically pick a preferred type based on what both the local node and the remote peer support. If no compatible type can be found, the channel opening is rejected. This is a feature improvement, not a security fix, and the commit message does not describe it as fixing a vulnerability.
Those tests started randomly failing after moving to anchor outputs. The reason is that anchor outputs have a bigger commit weight than non anchor channels, and with our initial balance allocation we sometimes reached a point where the *remote* had exhausted all of its balance to pay commit fees (when the feerate was around 10 000 sat/kw), so the *local* couldn't send HTLCs (`RemoteCannotAffordFeesForNewHtlc`). This is an expected situation where we cannot do anything except wait for pending HTLCs to resolve before sending other HTLCs.
We simply increase the initial balance to avoid running into this case. We also remove the `skip` case (which wasn't working at all, we should have used the `cancel` scalatest helper if we wanted to interrupt the test without failing it) and allow failures during the initial HTLC setup (which can happen if HTLCs are larger than the available balance).
98/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100
This commit only changes test code. It fixes flaky balance fuzz tests in Eclair by giving simulated channels more starting money so they can afford higher transaction fees under anchor outputs. There is no change to production code, no real-world security fix, and no vulnerability being patched.
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 23/100
This commit updates the PostgreSQL JDBC driver used by the Eclair Lightning node software from version 42.6.0 to 42.7.8, and also bumps the embedded PostgreSQL test library from 2.0.1 to 2.2.0. The accompanying checksum file is updated to match the new library versions and their transitive dependencies. The commit message frames this as a routine minor library upgrade. There is no direct code change in Eclair itself, and no explicit security advisory or CVE is referenced in the commit materials.
Lower-priorityAdd type to local/remote error metrics (#3249)by pm47 · 5c5b9f90 · Feb 11, 2026 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · pm47
Add type to local/remote error metrics (#3249)
We were only splitting by origin (local/remote).
This compensates for #3236.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100
This commit only improves monitoring/observability. It adds a new label ('error-type') to internal error-counting metrics so developers can see what kind of channel errors are happening, in addition to whether they came from the local node or a remote peer. There is no user-facing behavior change, no bug fix in business logic, and no security fix.
Prioritize private channels when relaying payments (#3248)
When relaying payments, we want to select private channels first and keep as much liquidity available as possible in public channels, to ensure that we don't send a `channel_update` that would otherwise disable the public channel (and thus make the private channels also unusable since they aren't visible by path-finding algorithms) or limit the `htlc_maximum_msat` of this public channel (which also indirectly applies to private channels).
We also change the order in which we select channels that have the same visibility: we prioritize channels with smaller balances, to ensure that we keep our larger balances for larger payments. When balances are equal, we prioritize the largest channel, which creates a larger inbound liquidity to allow receiving larger payments.
93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Low 32/100
This commit changes how Eclair lightning nodes pick which outgoing channel to use when forwarding payments. The new logic prefers private (unannounced) channels first, then smaller public channels, to avoid draining or disabling the larger public channels that other nodes rely on for routing. It is a routing-optimization and operational-hardening change rather than a fix for a known exploit. The commit message explicitly frames the change as avoiding public-channel exhaustion and disabled channel_updates, which has indirect security relevance for node availability and routing reputation.
AI review queuedImprove channel and payment events (#3246)by Bastien Teinturier · d735e0b5 · Feb 11, 2026 · 19 filesMessage 76 · AdequateInformational 19Details
Commit message · Bastien Teinturier
Improve channel and payment events (#3246)
We improve the following events:
- `TransactionPublished` includes more details about mining fees and an optional liquidity purchase - all channel events include the latest `channel_type` - `PaymentRelayed` exposes the `relayFee` earned
76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 19/100
This commit is a routine refactoring of internal event definitions in the Eclair Lightning node. It changes how channel and payment events are structured so they carry more detailed information (such as splitting mining fees into local and remote portions, adding timestamps, and exposing relay fees). There is no direct evidence in the commit that these changes fix a security vulnerability; they appear to be observability and accounting improvements.
We add an event when a payment could not be relayed and indicates that we may need to add liquidity towards the next node. It is really hard to figure it out in the context of a single payment though, so this event does not by itself mean that liquidity should be allocated. The listeners should collect several events and regularly query the state of existing channels with our peers, and network graph data for remote nodes, to create good heuristics for allocating liquidity. Otherwise, it would be trivial for malicious senders to game routing nodes into allocating liquidity "for free" towards them, which could result in financial loss.
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 · Informational 20/100
This commit adds new internal event notifications when a Lightning payment cannot be relayed through a node. It is a defensive, observability-only change: it does not alter payment handling logic, but gives node operators signals they can use to decide where to allocate channel liquidity. The commit message explicitly warns that the events can be gamed by malicious senders and should not be acted on blindly.
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.
Security candidateAdd duration information to payment events (#3241)by Bastien Teinturier · 9856db85 · Jan 20, 2026 · 32 filesMessage 81 · StrongInformational 19Details
Commit message · Bastien Teinturier
Add duration information to payment events (#3241)
We now record start and end time for payment events, and for remote failures, which lets us easily identify slower paths and faulty nodes. We properly track the settlement of each individual payment now.
We also clean-up field names and harmonize those events. Note that we don't update the DB schema at that point: this will be done in another PR that batches all DB schema changes.
81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathseed or entropy path
AI analysis · Informational 19/100
This commit is a refactoring and observability improvement for the Eclair Lightning node. It adds start/end timestamps to payment events and failures, renames some timestamp fields for consistency, and updates how payment hashes are derived from preimages. There is no direct security vulnerability visible in the diff; the changes are primarily for monitoring, metrics, and database/event-stream hygiene. A few places now use the current time instead of a previously stored request time when recording relay settlement, which is a behavioral change but not an obvious exploit.
Lower-priorityAdd test vector for Bolt12 invalid bech32 padding (#3242)by Bastien Teinturier · 632713a6 · Jan 19, 2026 · 1 fileMessage 83 · StrongInformational 12Details
Commit message · Bastien Teinturier
Add test vector for Bolt12 invalid bech32 padding (#3242)
See https://github.com/lightning/bolts/pull/1312 for more details.
83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 12/100
This commit only adds a new test case to a JSON test file. It checks that Eclair correctly rejects a specific malformed BOLT 12 offer string whose Bech32 padding bits are invalid. There is no code change, no fix, and no behavior change in the application itself.
AI review queuedMore tests for accountability (#3240)by Thomas HUET · 0214a1e7 · Jan 8, 2026 · 4 filesMessage 78 · AdequateInformational 15Details
Commit message · Thomas HUET
More tests for accountability (#3240)
These tests are also added to lightning-kmp (https://github.com/ACINQ/lightning-kmp/pull/846) to check compatibility.
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100
This commit only adds new test cases for an existing feature called 'accountability' in the Eclair Lightning node software. It does not change any production code, so it cannot introduce a new security vulnerability or directly fix one. The tests verify that invoice and payment onion data containing an 'UpgradeAccountability' marker are encoded and decoded correctly.
When using testnet3 or testnet4, Bitcoin Core may fail to estimate fees because there isn't enough block data. We now use the configured default feerates when that happens to make it easier to run on testnets.
We also update the default feerates to better match current values.
Fixes #3105
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 · Informational 19/100
This change makes Eclair easier to run on Bitcoin test networks by using configured default transaction fee rates when Bitcoin Core cannot estimate fees due to limited block data. It also lowers the default fee rates to match current network conditions. This is a usability and operational improvement, not a security fix.
AI review queuedCI: fix test with latest bitcoind (#3239)by Fabrice Drouin · 3ac122b9 · Jan 8, 2026 · 1 fileMessage 98 · StrongInformational 15Details
Commit message · Fabrice Drouin
CI: fix test with latest bitcoind (#3239)
Add flag to build without multiprocess architecture which we don't use and requires and additional dependency (capnproto).
98/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
This is a routine GitHub Actions CI workflow change. It adds a build flag to disable an optional Bitcoin Core multiprocess feature that the project does not use, so that automated tests against the latest bitcoind version can compile without needing an extra dependency (capnproto). There is no change to Eclair's production code, no user-facing behavior change, and no security relevance.
We emit several events during the channel lifecycle, which have become a bit of a mess over the years, especially with the addition of 0-conf, splicing and on-the-fly funding.
We now use the following events:
- `ChannelCreated` once the funding transaction is created - `ChannelFundingConfirmed` once the funding transaction is confirmed, which is also emitted for splice transactions - `ChannelReadyForPayments` once the channel is ready for payments, after exchanging `channel_ready` for the channel creation or `splice_locked` for splice transactions
The order between `ChannelFundingConfirmed` and `ChannelReadyForPayments` depends on whether 0-conf is used or not.
We remove `ChannelOpened`, which was actually a subset of the existing `ChannelReadyForPayments` event (which was added afterwards).
We add a few fields to existing channel events, which we don't yet store in the DB to avoid modifying it, but will store later when we modify the schema of the `AuditDb`.
We now store an entry in the `AuditDb` whenever a splice transaction confirms, which allows tracking the full history of a channel's changes.
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: unusually broad change
AI analysis · Informational 20/100
This commit is a routine internal refactoring of Eclair's channel-lifecycle event system. It renames and splits events (for example replacing 'channel-opened' with 'channel-confirmed' and 'channel-ready') so the software can correctly track normal channels, zero-confirmation channels, and splice transactions. It also records more details in the audit database, such as the funding transaction ID for each splice. There is no direct security vulnerability in the diff; it is a maintainability and observability improvement.
We stop storing every `ChannelErrorOccured` event in the `AuditDb`. This is very spammy because there are a lot of non-fatal events, and they turned out to be unnecessary for auditing (they make more sense in the logs for debugging).
Such events include for example notifying that we tried to relay a payment to a channel that didn't have enough balance, or commands sent to channels that are offline, closing or reconnecting.
Note that we stop creating the corresponding table, but we don't delete old data: it is up to node operators to decide whether they want to keep it or not. We still support migrating older databases including data from this table.
We also remove tests from very old migrations (more than 2 years old) which are spammy but not very interesting anymore.
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 18/100
This commit removes a database table that was used to store routine, mostly non-serious channel error events. It is a cleanup change: the events are still logged to normal log files, but they are no longer written to the audit database. There is no indication this fixes a security vulnerability; it is described by the project as a way to reduce database noise and storage use.
Don't rebroadcast announcements for spent channels (#3235)
* Don't rebroadcast spent channels
We introduced a mechanism to keep spent channels in the `Router` until the spending transaction has enough confirmations to avoid removing spliced channels from our graph too eagerly. An unwanted side-effect is that while we're waiting for confirmations, we may broadcast channel announcements for these spent channels, which looks like spam to our peers.
We now filter out channels that have been spent for which we're waiting for confirmations when sending out gossip.
* Notify front nodes immediately when channel is spent
Another side-effect of the splice change is that we didn't notify front nodes that the channel was spent before it reached enough confirmations so we kept sending channel gossip to our peers.
We now immediately notify the front nodes so that they stop sending this channel to our peers.
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 41/100
This commit fixes a bug where Eclair would keep advertising Lightning channels that had already been spent (for example, as part of a splice operation) while waiting for the spending transaction to be confirmed. This caused the node to send stale or misleading routing information to its peers, which looks like network spam and could confuse other nodes' routing decisions. The fix filters those spent-but-pending channels out of gossip broadcasts and immediately tells front-end nodes to stop relaying them.
AI review queuedAccountable HTLCs (#3217)by Thomas HUET · e3fd1867 · Jan 5, 2026 · 68 filesMessage 58 · ThinLow 37Details
Commit message · Thomas HUET
Accountable HTLCs (#3217)
Add accountability signal for HTLCs, it replaces endorsement. See https://github.com/lightning/bolts/pull/1280
58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathparser or protocol pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Low 37/100
This commit replaces an older 'endorsement' anti-jamming signal with a new 'accountable' signal for Lightning HTLCs, following a draft specification update. It changes how invoices, payment onions, and channel messages carry and propagate this signal. Importantly, the release notes state the protections are not yet enforced: the node only collects data and logs what it would have rejected. The change is a protocol update and data-collection feature, not an active enforcement that directly blocks payments today.