AQ
← All projectsACINQ

Eclair

Scala implementation of a Lightning Network node.

BitcoinLightning NetworkNormal
Repository coverage

167 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

33security candidates40second-pass queue26AI analyses
14commits · 30 days
16commits · 60 days
76commits · 180 days
167commits · 365 days
Backfill bands
Aug 5 → Feb 691 seen11 candidatesComplete
Feb 6 → Jun 660 seen5 candidatesComplete
Jun 6 → Jul 62 seen0 candidatesComplete
Jul 6 → Aug 514 seen0 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

78/100 average clarity
100Strong · 80–100
47Adequate · 60–79
14Thin · 40–59
6Opaque · 0–39
1security candidate with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Bastien Teinturier1132219081
Fabrice Drouin1465077
pm471831067
Thomas HUET1610075
Nishant Bansal211084
rorp200077
ekzyis100058
Rusty Russell100081
Analysis record

Published AI watches

Last scanned 20 minutes ago

Low 47 AI analysisMessage 88 · Strong
AQ ACINQEclair BitcoinLightning Network

Ignore repeated invalid `tx_signatures` (#3328)

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 d…

Rate-limiting of invalid peer messages (tx_signatures) to prevent repeated CPU/disk consumptionRemoval of unnecessary DB writes on shutdown receipt, reducing disk-wear and potential DoS surfaceNo channel force-close on invalid signatures; node remains open and waits for on-chain confirmation
823341e6by Bastien Teinturier+74−402 files
Vendor flagged security relevance
Informational 22 AI analysisMessage 53 · Thin
AQ ACINQEclair BitcoinLightning Network

Use bitcoin-lib 0.48 (#3316)

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 d…

Dependency version bump of cryptographic Bitcoin libraryPrivate key derivation code modifiedTaproot/MuSig2 test vector code adjusted
743dcdd1by Fabrice Drouin+8−44 files
No security note in commit
Low 34 AI analysisMessage 88 · Strong
AQ ACINQEclair BitcoinLightning Network

Refactor attribution data (#3320)

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…

Refactor of cryptographic attribution-data creation/verificationNew shared-secret extraction path parses trampoline onion and path-key/blinded-path stateAttribution data now explicitly suppressed for blinded-route intermediate nodes
4b9ba010by Bastien Teinturier+228−1096 files
No security note in commit
Low 34 AI analysisMessage 100 · Strong
AQ ACINQEclair BitcoinLightning Network

Add support for zero-fee commitment format (#3192)

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 …

Large feature addition (+1618/-276 across 42 files) touching consensus-sensitive transaction construction and signingNew experimental channel type disabled by default; requires explicit opt-in via eclair.confImplements draft BOLT specification (lightning/bolts#1228), not a finalized standard
35403401by Bastien Teinturier+1618−27642 files
No security note in commit
Low 36 AI analysisMessage 81 · Strong
AQ ACINQEclair BitcoinLightning Network

Bump org.postgresql:postgresql version (#3305)

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 con…

Dependency version bump for security fixVendor-disclosed potential DoS vector via untrusted database hostChecksum file updated for reproducible builds
76da19f1by Bastien Teinturier+4−42 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 100 · Strong
AQ ACINQEclair BitcoinLightning Network

Fix flaky DER signature weight test (#3299)

This commit only adjusts a flaky unit test that checks transaction weight estimates. It widens the allowed tolerance for variable-length ECDSA signatures when two signatures are involved instead of one. There is no change to production cod…

0f5d4b89by Bastien Teinturier+4−51 file
No security note in commit
Low 35 AI analysisMessage 93 · Strong
AQ ACINQEclair BitcoinLightning Network

Add support for the official splicing protocol (#2887)

This commit adds official Lightning channel splicing support to Eclair and replaces an experimental protocol. It includes backwards-compatibility shims for older Phoenix wallets, changes how reconnection messages request retransmission of …

Protocol state machine changes for interactive transaction signing and reconnection retransmissionBackwards-compatibility shim that multiplexes two protocol versions based on peer feature bitsTLV type-number collision handling between official and experimental splicing protocols
68b0096aby Bastien Teinturier+867−30524 files
No security note in commit
Low 32 AI analysisMessage 96 · Strong
AQ ACINQEclair BitcoinLightning Network

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

This commit changes how Eclair (a Bitcoin Lightning node) remembers its own closing signatures during a mutual channel close. Previously, the code re-generated signing nonces and re-signed closing transactions when the peer's signature arr…

MuSig2 nonce handling changed: local partial signatures are now stored and reused instead of regeneratedEarly signature validation added for peer's partial signature before final transaction aggregationRemoved CloserNonces helper that generated three random nonces per closing attempt
da7cd962by Fabrice Drouin+24−384 files
No security note in commit
Low 35 AI analysisMessage 86 · Strong
AQ ACINQEclair BitcoinLightning Network

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

This commit updates the Eclair Lightning node software to support a new, backwards-compatible draft of the official Bitcoin Lightning 'splicing' protocol. It adds a funding transaction identifier to commitment signatures and introduces a '…

Adds disambiguation of commitment signatures by funding transaction ID, reducing risk of applying a signature to the wrong commitment during multi-funding splicingIntroduces a new odd-length message (start_batch) and odd TLV (FundingTx), which unknown peers should ignore per Lightning spec conventionsMaintains legacy experimental batch TLV for backwards compatibility
129df369by Bastien Teinturier+309−5112 files
No security note in commit
Informational 15 AI analysisMessage 76 · Adequate
AQ ACINQEclair BitcoinLightning Network

Add fuzzing infrastructure (#3276)

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

New test-only fuzzing module addedNo production code changesNo network-facing or cryptographic logic modified
e6c3d6efby Nishant Bansal+363−08 files
No security note in commit
Informational 22 AI analysisMessage 76 · Adequate
AQ ACINQEclair BitcoinLightning Network

Use bitcoin-lib 0.47 (#3268)

This commit updates Eclair to use a newer version of its underlying Bitcoin library (bitcoin-lib 0.47). Most changes are mechanical: replacing local helper functions with new library-provided equivalents for encoding signatures and signing…

Dependency version bump for bitcoin-lib and secp256k1-kmpRefactor of ECDSA signature encoding/signing code pathsRemoval of local DER conversion helpers in favor of library-provided methods
5e741b1aby Fabrice Drouin+66−676 files
No security note in commit
Informational 19 AI analysisMessage 81 · Strong
AQ ACINQEclair BitcoinLightning Network

Add duration information to payment events (#3241)

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 derive…

Refactoring of payment event data model with new timestamp fieldsPayment hash now derived from preimage instead of passed separatelyRemoval of WaitingToRelayPayment from JSON type hints
9856db85by Bastien Teinturier+407−35532 files
No security note in commit
Low 27 AI analysisMessage 81 · Strong
AQ ACINQEclair BitcoinLightning Network

Use bitcoin-lib 0.46 (taproot tweak refactor) (#3225)

This commit updates Eclair to use a newer version of its underlying Bitcoin library (bitcoin-lib 0.46). The main change is a code refactor in how Taproot addresses and scripts are created: instead of passing an optional script tree, caller…

Dependency version bump (bitcoin-lib 0.45.1 -> 0.46)Taproot script construction API refactorNo explicit security claim in commit message or diff
53747cc5by Fabrice Drouin+56−2912 files
No security note in commit
Informational 12 AI analysisMessage 43 · Thin
AQ ACINQEclair BitcoinLightning Network

Update `bitcoin-lib` (#3213)

This is a routine dependency update for Eclair, a Bitcoin Lightning node. It bumps the internal 'bitcoin-lib' library from version 0.45 to 0.45.1 and its related 'bitcoin-kmp-jvm' component from 0.28.0 to 0.28.1. The commit message says th…

Dependency version bump onlyNo source code changes in commitNo security-related wording in commit message or diff
df75ed5aby Bastien Teinturier+5−52 files
No security note in commit
Low 35 AI analysisMessage 100 · Strong
AQ ACINQEclair BitcoinLightning Network

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

This commit adjusts how Eclair estimates the 'weight' (a measure of transaction size used to calculate Bitcoin mining fees) for funding inputs in Lightning channel transactions. It increases the assumed signature size from 72 to 73 bytes, …

Fee-estimation mismatch between implementations could cause interactive-tx negotiation failuresUnder-estimated weight could lead to insufficient fees if a 73-byte high-S signature is accepted by minersChange aligns with BOLT 3 recommendation and LDK behavior
bfe34ab1by Bastien Teinturier+5−32 files
No security note in commit
Low 47 AI analysisMessage 81 · Strong
AQ ACINQEclair BitcoinLightning Network

Allow aborting liquidity purchases after signing (#3206)

This commit fixes a bug in Eclair, a Bitcoin Lightning Network node implementation. When a user tried to buy extra spending capacity (a 'liquidity purchase') and the remote peer backed out after the local node had already signed, Eclair ke…

Fixes a denial-of-service / availability issue where upstream HTLCs were held until near CLTV expiry after a peer-aborted liquidity purchaseAdds explicit handling for tx_abort after local signing in dual-funded opens and splicesIntroduces LiquidityPurchaseAborted event and matching cleanup in Peer
5e1a4882by Bastien Teinturier+137−76 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 26 · Opaque
AQ ACINQEclair BitcoinLightning Network

Nits (#3203)

This commit is a small cleanup pull request titled 'Nits'. It fixes a typo in documentation, corrects a log message to show the right commitment format name, changes a debug log to info level for transaction signing, adds structured loggin…

7ef3c4b2by pm47+7−85 files
No security note in commit
Low 34 AI analysisMessage 98 · Strong
AQ ACINQEclair BitcoinLightning Network

Remove support for non-anchor channels (#3173)

This commit removes support for older Lightning channel types ('static_remotekey' and 'default' channels) from the Eclair node software. It is a deliberate feature-removal change announced in the previous release. The main risk is operatio…

Removal of legacy commitment format support reduces attack surface for fee-manipulation and transaction-malleability issues present in pre-anchor channels.Simplified fee tolerance removes the 'too low' feerate check, relying on anchor/taproot CPFP/RBF behavior.Explicit channel_type requirement prevents silent downgrade to weaker channel types.
9911cb73by Bastien Teinturier+1129−394286 files
No security note in commit
Low 34 AI analysisMessage 100 · Strong
AQ ACINQEclair BitcoinLightning Network

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

This commit updates Eclair's Bitcoin Core integration to use taproot (bech32m) addresses by default and fixes a fee-calculation bug where the anchor output amount was not being counted. The fee bug caused on-chain fees to be undercounted b…

Fee calculation bug fixed in ReplaceableTxFunder.scalaAnchor output amount (330 sats) now included in currentFee computationDefault bitcoind address type changed to bech32m/taproot
9771b2d8by Bastien Teinturier+25−247 files
No security note in commit
Low 29 AI analysisMessage 81 · Strong
AQ ACINQEclair BitcoinLightning Network

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

This commit refactors how Eclair stores closed Lightning channels. Instead of keeping all closed channel data in the same table as active channels, it moves them to a dedicated table with only essential summary information. The main stated…

DoS mitigation: channels that never confirmed or had nothing at stake are no longer persisted in the databaseDatabase schema migration removes foreign key constraint on htlc_infosNew closed-channel data class stores only minimal, stringified fields to avoid future backwards-compatibility issues
16a309e4by Bastien Teinturier+762−20426 files
Vendor flagged security relevance
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

AI review queuedImprove channel and payment events (#3246)by Bastien Teinturier · d735e0b5 · Feb 11, 2026 · 19 filesMessage 76 · AdequateTriage 7Details
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
Lower-priorityAdd event for failed payment relay (#3244)by Bastien Teinturier · 369f042d · Jan 29, 2026 · 8 filesMessage 88 · StrongTriage 0Details
Commit message · Bastien Teinturier

Add event for failed payment relay (#3244)

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 review queuedInclude the `node_id` of channel peers in payment events (#3243)by Bastien Teinturier · ff7a24c5 · Jan 23, 2026 · 40 filesMessage 81 · StrongTriage 0Details
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
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 · StrongTriage 5Details
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 review queuedMore tests for accountability (#3240)by Thomas HUET · 0214a1e7 · Jan 8, 2026 · 4 filesMessage 78 · AdequateTriage 7Details
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
Lower-priorityUse fallback feerates on testnets (#3233)by Bastien Teinturier · 9ed0014a · Jan 8, 2026 · 2 filesMessage 88 · StrongTriage 0Details
Commit message · Bastien Teinturier

Use fallback feerates on testnets (#3233)

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 review queuedCI: fix test with latest bitcoind (#3239)by Fabrice Drouin · 3ac122b9 · Jan 8, 2026 · 1 fileMessage 98 · StrongTriage 0Details
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
Why it was queued
documentation-only discountsecond-pass: broader security terminology
AI review queuedRework channel lifecyle events (#3237)by Bastien Teinturier · 473b46d8 · Jan 7, 2026 · 20 filesMessage 88 · StrongTriage 0Details
Commit message · Bastien Teinturier

Rework channel lifecyle events (#3237)

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
Lower-priorityStop storing channel errors in `AuditDb` (#3236)by Bastien Teinturier · 7137eac2 · Jan 6, 2026 · 5 filesMessage 98 · StrongTriage 0Details
Commit message · Bastien Teinturier

Stop storing channel errors in `AuditDb` (#3236)

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
Lower-priorityDon't rebroadcast announcements for spent channels (#3235)by Bastien Teinturier · c214b075 · Jan 6, 2026 · 3 filesMessage 93 · StrongTriage 0Details
Commit message · Bastien Teinturier

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 review queuedAccountable HTLCs (#3217)by Thomas HUET · e3fd1867 · Jan 5, 2026 · 68 filesMessage 58 · ThinTriage 19Details
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
Lower-priorityValidate Bolt 11 fallback addresses (#3232)by Bastien Teinturier · 1bc09764 · Jan 5, 2026 · 2 filesMessage 86 · StrongTriage 8Details
Commit message · Bastien Teinturier

Validate Bolt 11 fallback addresses (#3232)

Validate fallback addresses when decoding Bolt 11 invoices.
Note that we must remove an existing test that used invalid addresses.

Fixes #3135

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
defensive validation
Lower-priorityAdd `maxCltvExpiryDelta` parameter to `findRoute*` APIs (#3234)by Bastien Teinturier · 3b2bc570 · Jan 5, 2026 · 7 filesMessage 81 · StrongTriage 0Details
Commit message · Bastien Teinturier

Add `maxCltvExpiryDelta` parameter to `findRoute*` APIs (#3234)

We add a parameter to `findroute` API variants to limit the total CLTV
expiry delta of the route(s) returned.

Fixes #2617

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Lower-priorityfixup! Add API methods to spend funds sent to taproot channel addresses (#3220) (#3228)by pm47 · 288c5418 · Jan 2, 2026 · 1 fileMessage 58 · ThinTriage 0Details
Commit message · pm47

fixup! Add API methods to spend funds sent to taproot channel addresses (#3220) (#3228)

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Security candidateUse bitcoin-lib 0.46 (taproot tweak refactor) (#3225)by Fabrice Drouin · 53747cc5 · Dec 18, 2025 · 12 filesMessage 81 · StrongLow 27Details
Commit message · Fabrice Drouin

Use bitcoin-lib 0.46 (taproot tweak refactor) (#3225)

* Use bitcoin-lib 0.46 (taproot tweak refactor)

* Update eclair-core/src/main/scala/fr/acinq/eclair/transactions/Transactions.scala

Co-authored-by: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Low 27/100

This commit updates Eclair to use a newer version of its underlying Bitcoin library (bitcoin-lib 0.46). The main change is a code refactor in how Taproot addresses and scripts are created: instead of passing an optional script tree, callers now explicitly choose between a 'key path' tweak (for simple key-spending) or a 'script path' tweak (for script-spending). The commit also updates related cryptographic checksums and test code. There is no direct evidence in the commit message or diff that this fixes a known security vulnerability; it appears to be a routine dependency and API refactor.

Lower-priorityDon't scan the blockchain for spent external channels (#3226)by Bastien Teinturier · 36822bb6 · Dec 17, 2025 · 8 filesMessage 93 · StrongTriage 0Details
Commit message · Bastien Teinturier

Don't scan the blockchain for spent external channels (#3226)

When an external channel is spent, we don't immediately remove it from
our network graph in case the spending transaction is a splice (see
https://github.com/lightning/bolts/pull/1270 for more details).

A side-effect of this change, introduced in #2936, is that when we
start watching a channel after receiving its `channel_announcement`,
we will scan the blockchain if it is actually already spent. This can
be expensive if peers send us `channel_announcement`s for channels
that have been spent a long time ago since `bitcoind` doesn't provide
an index for spending transactions. It is also misleading, because if
we give up after scanning X blocks of the blockchain, we will create
a log line saying that funds are at risk: they're never at risk since
those are not our channels.

This commit fixes this issue by only checking whether the channel is
already spent by a confirmed transaction or not when setting the watch
(which is an inexpensive and efficient RPC call to `bitcoind`), without
scanning the blockchain to find the spending transaction. If it is
already spent, we immediately remove it from our network graph, even
if the spending transaction was actually a splice. This is fine, since
that channel will be re-added to our graph whenever we receive the
`channel_announcement` for the splice. In the worst case, we will simply
not route through an actually available channels for a few blocks while
its splice transaction is confirming.

Co-authored-by: pm47 <pm.padiou@gmail.com>

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
Lower-priorityAllow remote `dust_limit_satoshis` up to 5000 sats (#3227)by Bastien Teinturier · 5aea5142 · Dec 17, 2025 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · Bastien Teinturier

Allow remote `dust_limit_satoshis` up to 5000 sats (#3227)

Set allow remote `dust_limit_satoshis` up to 5000 sats, which means that
HTLC outputs should be claimable at feerates lower than `25 sat/kw`.

Given that our default `dust-tolerance` is set to 50 000 sats, this
allows at least 10 pending dust HTLCs before we start failing dust HTLCs
back instead of relaying them.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Security candidateIdentify failing node by its index (#3224)by Thomas HUET · 856e236f · Dec 15, 2025 · 16 filesMessage 76 · AdequateTriage 15Details
Commit message · Thomas HUET

Identify failing node by its index (#3224)

When a HTLC is failed remotely, the failing node was previously identified by its node id.
However this is not enough if the same node appears multiple times in the payment route, for instance for circular rebalancing.
We now identify the failing node using its index in the payment route.

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
Lower-priorityUnwatch previous funding tx after splice (#3218)by Bastien Teinturier · 0318fb78 · Dec 15, 2025 · 4 filesMessage 76 · AdequateTriage 0Details
Commit message · Bastien Teinturier

Unwatch previous funding tx after splice (#3218)

After a splice transaction confirms, we don't need to keep watching the
previous funding output: it has been irrevocably spent and needlessly
consumes resources in the `Watcher` actor.

Those watches are cleaned up when the `Channel` actor dies, which does
not happen if the channel isn't closed and the `Peer` actor is kept
alive while disconnected.

Whenever we receive a new block, we log the number of watches we have.
This lets us detect whether we're missing some clean-up of old watches
in edge cases.

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Lower-priorityAdd API methods to spend funds sent to taproot channel addresses (#3220)by Fabrice Drouin · 38dc4072 · Dec 4, 2025 · 4 filesMessage 81 · StrongTriage 0Details
Commit message · Fabrice Drouin

Add API methods to spend funds sent to taproot channel addresses (#3220)

Add API methods to spend funds sent to taproot channel addresses

This PR adds new API calls that extend spendFromChannelAddress* calls to taproot channels.

---------

Co-authored-by: pm47 <pm.padiou@gmail.com>

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Lower-priorityFix links to 'Reaching The Ground With Lightning' (#3219)by ekzyis · e1775eeb · Dec 4, 2025 · 2 filesMessage 58 · ThinTriage 0Details
Commit message · ekzyis

Fix links to 'Reaching The Ground With Lightning' (#3219)

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
documentation-only discount
Lower-priorityMonitor the internal state of `ReputationRecorder` (#3216)by Bastien Teinturier · a87963b1 · Nov 19, 2025 · 2 filesMessage 81 · StrongTriage 0Details
Commit message · Bastien Teinturier

Monitor the internal state of `ReputationRecorder` (#3216)

It is quite hard to reason about the internal state of this actor, and
it tracks every pending HTLC. If for some reason we're not removing
HTLCs correctly, this would create a memory leak.

We log the number of pending HTLCs every 5 minutes to help detect if
clean-up is correctly implemented.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Lower-priorityUpdate default configuration for revoked HTLC clean-up (#3212)by Bastien Teinturier · fa7e2ee3 · Nov 18, 2025 · 2 filesMessage 81 · StrongTriage 0Details
Commit message · Bastien Teinturier

Update default configuration for revoked HTLC clean-up (#3212)

The default configuration for removing old rows containing revoked HTLC
data after a channel close was too slow and inadequate for most nodes.
We update it to use smaller batches without a much shorter interval.

Thanks @DerEwige for providing data about their experiments.

Fixes #3211

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Lower-priorityAllow high remote `dust_limit_satoshis` (#3215)by Bastien Teinturier · f6a5a3ca · Nov 17, 2025 · 1 fileMessage 88 · StrongTriage 0Details
Commit message · Bastien Teinturier

Allow high remote `dust_limit_satoshis` (#3215)

Now that we only accept anchor output channels and beyong, we should
let our peers use high `dust_limit_satoshis` values to ensure that the
transaction outputs are economically spendable.

We can't yet raise our `dust_limit_satoshis`: we must first accept high
values, and in the next release (and once other implementations support
it as well), then we'll be able to increase our default value.

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