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 queue17AI 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 Teinturier1132213081
Fabrice Drouin1464077
pm471830067
Thomas HUET1610075
Nishant Bansal210084
rorp200077
ekzyis100058
Rusty Russell100081
Analysis record

Published AI watches

Last scanned 0 minutes ago

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 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
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
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 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
Low 35 AI analysisMessage 58 · Thin
AQ ACINQEclair BitcoinLightning Network

Update `bitcoin-lib` (#3179)

This commit updates Eclair's underlying bitcoin-lib dependency from version 0.41 to 0.43.2 and adjusts Eclair's code to match the new library's API. The changes are mostly mechanical: switching how Musig2 nonces and Taproot script trees ar…

Dependency version bump of core cryptographic library (bitcoin-lib 0.41 -> 0.43.2, secp256k1-kmp 0.18.0 -> 0.19.0)Refactoring of MuSig2 nonce handling and Taproot script tree constructionRemoval of Kotlin interop conversions around cryptographic types
2b39bf62by Bastien Teinturier+85−9520 files
No security note in commit
Moderate 60 AI analysisMessage 100 · Strong
AQ ACINQEclair BitcoinLightning Network

Correctly fill PSBT for taproot `interactive-tx` (#3169)

This commit fixes a bug in Eclair's dual-funded Lightning channel logic. When opening or splicing a channel using taproot (P2TR) inputs, each participant's wallet needs full details about every input in the transaction, not just its own. P…

Fixes a signing failure in taproot interactive dual-funding/splicingPSBT now includes all remote inputs, satisfying BIP-341 all-inputs signature commitmentPreviously tests hid the bug by sharing a single dummy wallet between both parties
76f8d53aby Bastien Teinturier+95−14414 files
No security note in commit
Low 28 AI analysisMessage 86 · Strong
AQ ACINQEclair BitcoinLightning Network

Allow omitting `previousTx` for taproot splices (#3143)

This commit changes how Eclair handles taproot channel splicing. Normally, when two parties build a shared Bitcoin transaction together, each must send the full previous transaction that created the coins being spent. For taproot channels,…

New wire protocol TLV (PrevTxOut, type 1107) for reduced transaction disclosureValidation gate restricts previousTxOut omission to taproot commitment formatsExplicit defense against non-segwit input substitution / malleability
0e0da422by Bastien Teinturier+72−255 files
Vendor flagged security relevance
Low 32 AI analysisMessage 71 · Adequate
AQ ACINQEclair BitcoinLightning Network

Simple taproot channels (#3103)

This is a large feature commit that adds support for a new kind of Bitcoin Lightning channel using Taproot and MuSig2 signatures. It changes how channels are opened, spliced, re-established after disconnections, and closed. The commit is p…

New cryptographic signing path using MuSig2 partial signatures and noncesNew validation exceptions for missing or invalid commit/funding/closing noncesProtocol message extensions for nonce exchange during channel lifecycle
d8ce91b4by Fabrice Drouin+3465−89651 files
No security note in commit
Repository ledger

Explore captured commits

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

Security candidateIgnore repeated invalid `tx_signatures` (#3328)by Bastien Teinturier · 823341e6 · Jul 17, 2026 · 2 filesMessage 88 · StrongTriage 18Details
Commit message · Bastien Teinturier

Ignore repeated invalid `tx_signatures` (#3328)

When our peer sends us an invalid `tx_signatures`, we processed it and
ignored the failure when we've already sent our own `tx_signatures`,
because the transaction may be broadcast and may confirm anyway.

We now stop processing those invalid `tx_signatures` repeatedly: if our
peer sends us more than 3 invalid `tx_signatures` for a given funding
transaction, they're definitely buggy so we'll just wait for the
transaction to confirm without trying to obtain the fully signed one
locally.

We also now avoid unnecessary DB writes on `shutdown`.
We don't need to write to the DB every time we receive `shutdown` from
our peer, since the BOLTs require `shutdown` to be retransmitted on
reconnection.

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
signing boundary
Security candidateUse bitcoin-lib 0.48 (#3316)by Fabrice Drouin · 743dcdd1 · Jul 8, 2026 · 4 filesMessage 53 · ThinInformational 22Details
Commit message · Fabrice Drouin

Use bitcoin-lib 0.48 (#3316)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 22/100

This commit updates Eclair's underlying Bitcoin library from version 0.47 to 0.48 and makes small code adjustments to match the new library's API. The changes touch how private keys are derived and how test data is converted. There is no direct evidence in the commit that this fixes a security vulnerability, but library updates can include bug fixes or improvements that affect cryptographic handling.

Security candidateRefactor attribution data (#3320)by Bastien Teinturier · 4b9ba010 · Jul 7, 2026 · 6 filesMessage 88 · StrongTriage 15Details
Commit message · Bastien Teinturier

Refactor attribution data (#3320)

* Refactor attribution data

We refactor the attribution data code to make it more consistent with
the rest of the Sphinx-related code. We add comments and intermediate
variables to make it more readable. We introduce intermediate classes
to hold data and add better symmetry between the success and failure
cases.

This will make it easier to implement trampoline attribution and add
fulfillment data (https://github.com/lightning/bolts/pull/1344).

* Refactor trampoline attribution data

We correctly extract shared secrets (including trampoline shared
secrets) and detect when we're inside a blinded path to avoid
including attribution data. Note that we don't use the trampoline
shared secret yet, since full trampoline isn't implemented (see
https://github.com/ACINQ/eclair/pull/2819 for the full changes).

We add tests for attribution data with blinded paths and trampoline
payments.

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
Security candidateAdd support for zero-fee commitment format (#3192)by Bastien Teinturier · 35403401 · May 20, 2026 · 42 filesMessage 100 · StrongLow 34Details
Commit message · Bastien Teinturier

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

* Add support for zero-fee commitment format

We add support for the zero-fee commitment format specified in
https://github.com/lightning/bolts/pull/1228.

Channels using this commitment format benefit from better protection
against pinning attacks (thanks to TRUC/v3 transactions), don't need
the `update_fee` mechanism, have less dust exposure risk, and use an
overall simpler state machine.

In this commit, we simply introduce the commitment format and create
the corresponding transactions.

* Rename `ClaimRemoteDelayedOutputTx`

It isn't delayed anymore for v3 transactions. We could use static wallet
public key, but in most cases it wouldn't work and adds extra complexity
so we don't do it. We add a comment in the documentation of this class
to explain why we're always making a 2nd-stage transaction.

* Validate channel parameters

We apply slightly different validation for zero-fee commitments:

- the commit feerate must be `0 sat/byte`
- the max number of accepted HTLCs must be at most 114
- `update_fee` cannot be used

We verify those requirements during channel creation and add tests
for normal channel operation.

* Handle force-closing zero-fee channels

We add support for force-close zero-fee channels. When publishing the
local commit, this works mostly the same way as other channel types.
The only difference is that we don't even attempt to publish the commit
tx individually: we always bundle it with the anchor transaction.

When we detect the remote commit though, we're able to introduce some
new behavior:

- if we have a large enough main output, we use that to pay the fees
of the remote commit tx (unless it is already confirmed), which avoids
using a wallet input
- otherwise, we spend the anchor output, which competes with the remote
peer package

Since we're only using the anchor transaction or our main output to
spend the ephemeral anchor, we cannot publish HTLC txs until the
commit tx is confirmed. We will in the future make *all* transactions
go through the `ReplaceableTxPublisher`, and at the point we'll be able
to simplify this, but it's too early for this refactoring, so for now
we simply wait for the commit tx to be confirmed before publishing
HTLC txs.

* Don't force-close on remote `error`

When using zero-fee commitments, we don't force-close when receiving an
`error` from our peer: if they want to force-close the channel, they can
publish their commitment instead of forcing us to publish ours. It is
especially true when the commit tx doesn't pay any fees, because the
publisher will pay the entire fees for the force-close.

Note that for wallet peers, we could introduce a mechanism where they
send us their signed commit tx in the error message if they don't have
any wallet input to pay the fees, and we could be nice and publish it
while paying the fees from our main output (which isn't delayed since
it is the remote commit from our point of view).

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
explicit security languagedefensive validationsigning or wallet path
AI analysis · Low 34/100

This commit adds an experimental new Lightning channel type to Eclair called 'zero-fee commitments.' It is a large feature patch implementing a draft BOLT specification (PR 1228), not a fix for a known vulnerability. The change introduces new transaction formats, validation rules, and force-close behavior. Because it is experimental, disabled by default, and extensively tested, it is unlikely to be an immediate security issue, but any large change to consensus-sensitive transaction code carries risk of subtle bugs.

Security candidateBump org.postgresql:postgresql version (#3305)by Bastien Teinturier · 76da19f1 · May 7, 2026 · 2 filesMessage 81 · StrongLow 36Details
Commit message · Bastien Teinturier

Bump org.postgresql:postgresql version (#3305)

This fixes a vulnerability, which doesn't apply to eclair in known
deployements, but is worth fixing in case some nodes use untrusted
database hosts which could lead to DoS attacks.

81/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
explicit security languagecryptography-sensitive path
AI analysis · Low 36/100

This commit updates the PostgreSQL database driver used by the Eclair Lightning node software from version 42.7.8 to 42.7.11. The commit message says this fixes a vulnerability that could allow denial-of-service (DoS) attacks if a node connects to an untrusted database host. The developers state it does not affect known Eclair deployments, but they are patching it as a precaution.

Security candidateFix flaky DER signature weight test (#3299)by Bastien Teinturier · 0f5d4b89 · May 5, 2026 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · Bastien Teinturier

Fix flaky DER signature weight test (#3299)

This test was flaky because for the funding output, we provide two
signatures, which means that we need twice the slack for the variable
DER encoding length.

100/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✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 15/100

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 code, no security fix, and no vulnerability.

Security candidateAdd support for the official splicing protocol (#2887)by Bastien Teinturier · 68b0096a · Apr 30, 2026 · 24 filesMessage 93 · StrongLow 35Details
Commit message · Bastien Teinturier

Add support for the official splicing protocol (#2887)

We replace our experimental version of `splice_init`, `splice_ack` and
`splice_locked` by their official version. If our peer is using the
experimental feature bit, we convert our outgoing messages to use the
experimental encoding and incoming messages to the official messages.

We also change the TLV fields added to `tx_add_input`, `tx_signatures`
and `splice_locked` to match the spec version. We always write both the
official and experimental TLV to updated nodes (because the experimental
one is odd and will be ignored) but we drop the official TLV if our
peer is using the experimental feature, because it won't understand the
even TLV field.

We do the same thing for the `commit_sig` TLV. For peers who support the
official splicing version, we insert the `start_batch` message before
the batch of `commit_sig` messages.

This guarantees backwards-compatibility with peers who only support the
experimental feature.

We introduce a `retransmit_flags` field to `my_current_funding_locked`
and `next_funding` to ask our peer to retransmit `commitment_signed` or
`announcement_signatures` if we're expecting them. With this change, we
don't need to retransmit `splice_locked` on reconnection anymore to
trigger the exchange of `announcement_signatures`. We don't need to
retransmit it to let our peer know that we've seen enough confirmations
for the splice either, since `my_current_funding_locked` implies that.

This allows us to completely remove retransmission of `splice_locked` on
reconnection, and also get rid of the `your_last_funding_locked` TLV,
which greatly simplifies the reconnection logic. We do keep them for
backwards-compatibility with existing Phoenix users though, but we'll
be able to clean it up once they have updated.

Note that this works with taproot channels since we will simply provide
nonces in `channel_reestablish` when we need our peer to send
announcement signatures (not supported yet since taproot channels are
never announced).

We rollback using the `next_commitment_number` to let our peer know that
we haven't received their `commit_sig` and instead use the retransmit
flags added to the `next_funding` TLV, unless our peer is using the
legacy splicing protocol.

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 boundarysigning or wallet pathauthentication pathparser or protocol path
AI analysis · Low 35/100

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 signatures, and renumbers some protocol feature bits. The changes are broad and touch consensus-critical wire protocol and channel state logic, so bugs could affect channel safety, but the commit itself is a feature implementation rather than a clear security fix.

Security candidateStore our closing_complete in the simple close session (#3289)by Fabrice Drouin · da7cd962 · Apr 21, 2026 · 4 filesMessage 96 · StrongLow 32Details
Commit message · Fabrice Drouin

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

In the simple close session, which is never persisted, we just need to remember our closing_complete and
the partial signatures it contains, instead of keeping our musig2 nonces and generating our partial signatures a second time to build the final closing tx when we receive our peer's partial signatures.
We also check our peer's partial signature and fail early if they're not valid, instead of building a fully sign
closing tx and then verify that it is correct.

96/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarynonce handlingsigning or wallet path
AI analysis · Low 32/100

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 arrived. Now it stores the original closing message and reuses its signatures. It also adds an early check that the peer's partial signature is valid before trying to build a final signed transaction. The change is a defensive correctness improvement rather than a clear fix for an active exploit.

Security candidateAllow reply-less pings (#3284)by Bastien Teinturier · 3ae73813 · Apr 7, 2026 · 3 filesMessage 88 · StrongTriage 15Details
Commit message · Bastien Teinturier

Allow reply-less pings (#3284)

BOLT1 says:

```
A node receiving a ping message:
- if num_pong_bytes is less than 65532:
- MUST respond by sending a pong message, with byteslen equal to num_pong_bytes.
- otherwise (num_pong_bytes is not less than 65532):
- MUST ignore the ping.
```

These reply-less pings are used to insert cover traffic to thwart
network-level traffic analysis. We wanted to allow them in #3278
but we missed this ping flood protection that needed to be updated.

We also had an off-by-one in the maximum pong length that
is now fixed.

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
cryptography-sensitive path
Security candidateAdd backwards-compatible parts of the official splicing protocol (#3261)by Bastien Teinturier · 129df369 · Apr 3, 2026 · 12 filesMessage 86 · StrongTriage 25Details
Commit message · Bastien Teinturier

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

* Add `funding_txid` to `commit_sig`

In https://github.com/lightning/bolts/pull/1160 we add a TLV field to
`commit_sig` messages to let the receiver know to which `funding_txid`
this signature applies. This is more resilient than relying on the
order of the `commit_sig` messages in the batch. This is an odd TLV,
so we can start writing it right now without creating compatibility
issues.

We also slightly refactor existing code to make it easier to introduce
a backwards-compat layer when migrating to the official splicing. We
also increase the default number of RBF attempts allowed.

* Insert a `start_batch` message during splices

In https://github.com/lightning/bolts/pull/1160, we introduce a message
to let our peer know how many `commit_sig` messages they will receive
and treat them as a batch. This replaces our previous version that did
something similar, but by adding a batch TLV in every `commit_sig`
message we send.

We currently do both: we keep inserting the experimental batch TLV, and
we start by sending a `start_batch` message (with the same information).
Since it is an odd message (127), it should be safely ignored if our
peer doesn't understand it.

86/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing boundaryparser or protocol path
Security candidateAdd fuzzing infrastructure (#3276)by Nishant Bansal · e6c3d6ef · Mar 31, 2026 · 8 filesMessage 76 · AdequateTriage 27Details
Commit message · Nishant Bansal

Add fuzzing infrastructure (#3276)

Add a fuzzing module based on Jazzer to allow fuzzing parts of eclair.
This commit includes fuzz tests for codecs to be used as examples.
It is a separate module (minimal interaction with the other modules).
We include helper scripts to run many fuzz tests in parallel or generate
reports.

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidencecryptography-sensitive pathparser or protocol path
Security candidateUse bitcoin-lib 0.47 (#3268)by Fabrice Drouin · 5e741b1a · Mar 26, 2026 · 6 filesMessage 76 · AdequateTriage 27Details
Commit message · Fabrice Drouin

Use bitcoin-lib 0.47 (#3268)

* Use bitcoin-lib 0.47

* Add checksums for secp256k1-kmp 0.23.0

* der2compact() and compact2der() methods have been removed, new signInputCompact() method has been added

* Use Transaction.encodeWitnessEcdsaSig() instead of low-level calls

* Replace local der() methode with bitcoin-lib's encodeWitnessEcdsaSig()

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 pathsigning or wallet path
Security candidateClose connection when receiving malformed messages (#3273)by Bastien Teinturier · fde8de65 · Mar 24, 2026 · 2 filesMessage 93 · StrongTriage 15Details
Commit message · Bastien Teinturier

Close connection when receiving malformed messages (#3273)

When receiving a message that we're supposed to be able to decode, for
which decoding fails, we must send a warning and close the connection.
This ensures that the connection state cannot become corrupted, which
may otherwise happen if we fail to deserialize a `commit_sig` message
(for example) and simply ignored it while continuing to process the
next messages.

Fixes #3271

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
cryptography-sensitive path
Security candidate (Minor) Upgrade postgres libs (#3238)by pm47 · ea183c35 · Feb 12, 2026 · 2 filesMessage 68 · AdequateTriage 15Details
Commit message · pm47

(Minor) Upgrade postgres libs (#3238)

Upgrade the jdbc driver to the latest version.

68/100 · AdequateMessage clarity
✓ 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
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.

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.

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
Security candidateUpdate `bitcoin-lib` (#3213)by Bastien Teinturier · df75ed5a · Nov 12, 2025 · 2 filesMessage 43 · ThinInformational 12Details
Commit message · Bastien Teinturier

Update `bitcoin-lib` (#3213)

To add support for P2A PSBTs.

43/100 · ThinMessage clarity
✓ Descriptive subject✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
signing boundarycryptography-sensitive path
AI analysis · Informational 12/100

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 the purpose is to add support for 'P2A PSBTs' (a new Bitcoin transaction format feature). The change only updates version numbers and recorded checksums; no application code is modified in this commit. There is no mention of a security fix, bug, or vulnerability.

Security candidateUse 73 bytes der-encoded signatures in weight estimation (#3210)by Bastien Teinturier · bfe34ab1 · Nov 5, 2025 · 2 filesMessage 100 · StrongLow 35Details
Commit message · Bastien Teinturier

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

While 73 bytes der-encoded signatures aren't standard (they're only
possible with high-S signatures), miners could accept such signatures.

Most of our tests use 72 bytes der-encoded signatures because we will
never generate 73 bytes der-encoded signatures ourselves. But it's more
safe to use a 73 bytes signature in our weight estimation because:

- it's what the BOLTs recommend
- it's what other implementations use (e.g. LDK) which means they may
reject our interactive-tx attempts by thinking we're under-paying
fees

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✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 35/100

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, matching what the Lightning specification recommends and what other implementations like LDK use. The change is defensive: it helps prevent Eclair's interactive transaction proposals from being rejected by peers who think Eclair is under-paying fees, and it avoids edge cases where miners might accept a slightly larger signature than Eclair accounted for.

Security candidateAllow aborting liquidity purchases after signing (#3206)by Bastien Teinturier · 5e1a4882 · Nov 5, 2025 · 6 filesMessage 81 · StrongLow 47Details
Commit message · Bastien Teinturier

Allow aborting liquidity purchases after signing (#3206)

When a liquidity purchase is signed, we eagerly add it to our DB before
receiving the remote `interactive-tx` signatures. If we reach that step,
our peer should always finalize the signing steps, so we didn't bother
handling the case where they would instead send `tx_abort`. When that
happened, we kept the upstream HTLCs pending until they got close to
their expiry, at which point we failed them.

We've seen cases where seemingly non-malicious mobile wallets abort
that kind of liquidity purchases after a disconnection. It is harmful
for an honest sender to keep the HTLCs pending, so we now immediately
fail them in that case.

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 boundarysigning or wallet path
AI analysis · Low 47/100

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 kept the related incoming payments stuck in limbo until they nearly expired. The patch makes Eclair immediately fail those stuck payments when the peer aborts, which is fairer to honest senders and avoids unnecessary delays. It is a correctness/availability improvement rather than a direct theft-of-funds vulnerability.

Security candidateNits (#3203)by pm47 · 7ef3c4b2 · Oct 31, 2025 · 5 filesMessage 26 · OpaqueTriage 22Details
Commit message · pm47

Nits (#3203)

26/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Links an issue, advisory, or supporting reference! Too few words to establish purpose! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive pathparser or protocol path
Security candidateRemove support for non-anchor channels (#3173)by Bastien Teinturier · 9911cb73 · Oct 27, 2025 · 86 filesMessage 98 · StrongLow 34Details
Commit message · Bastien Teinturier

Remove support for non-anchor channels (#3173)

We remove support for `static_remotekey` channels and `default`
channels, as advertised in the v0.13 release. This lets us remove
some code related to feerate management and simplifies the test
matrix.

Node operators that still have such channels must not run this
version of `eclair`, which will otherwise fail to start.

Note that for now, we keep sending `update_fee` whenever necessary.
We could remove that now that package relay allows 1p1c packages to
propagate even when the parent is below the mempool minimum feerate,
but we defer that to a later PR for simplicity.

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
cryptography-sensitive pathsigning or wallet pathauthentication pathparser or protocol path
AI analysis · Low 34/100

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 operational: node operators who still have legacy channels and upgrade to this version will find Eclair fails to start, potentially leaving them unable to manage funds until those channels are closed with an older version. The patch also simplifies fee-rate handling because anchor-style channels handle fees differently, and it removes wallet-public-key caching code that was only needed for the obsolete channel types.

Security candidateConfigure bitcoind test instances to use bech32m addresses (#3195)by Bastien Teinturier · 9771b2d8 · Oct 24, 2025 · 7 filesMessage 100 · StrongTriage 18Details
Commit message · Bastien Teinturier

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

When addres type or change type is not specified, bitcoind will
now start with addresstype=bech32m and changetype=bech32m.

We take this opportunity to fix feerate tests that failed because
of the following reasons:

- first of all, we had a bug where we didn't take into account the
anchor amount in our fee calculation, so we ended up always adding
`330 sats` to the on-chain fees we paid, which was hidden by our
tolerance interval, but started appearing with smaller p2tr inputs
- then we fix the remaining tests that need manual tweaking of the
utxos available in the test wallet, because they end up creating
transactions where we don't have a change output (and overpay fees
slightly, but not enough to make it worth adding a change output),
these tests simply needed to be tweaked to accomodate p2tr weights

Co-authored by @sstone

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing boundary
Security candidateUpdate `bitcoin-lib` (#3193)by Bastien Teinturier · 7372a877 · Oct 24, 2025 · 2 filesMessage 58 · ThinTriage 15Details
Commit message · Bastien Teinturier

Update `bitcoin-lib` (#3193)

We update `bitcoin-lib` to v0.45, which changes our JNI bindings for
`secp256k1` and adds support for P2A outputs.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
Security candidateUse bitcoin-lib 0.44 (#3185)by Fabrice Drouin · 32082666 · Oct 13, 2025 · 2 filesMessage 53 · ThinTriage 15Details
Commit message · Fabrice Drouin

Use bitcoin-lib 0.44 (#3185)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
cryptography-sensitive path