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 queue33AI 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 Teinturier1132222181
Fabrice Drouin1466077
pm471833067
Thomas HUET1611075
Nishant Bansal211084
rorp200077
ekzyis100058
Rusty Russell100081
Analysis record

Published AI watches

Last scanned 51 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
Moderate 51 AI analysisMessage 88 · Strong
AQ ACINQEclair BitcoinLightning Network

Allow reply-less pings (#3284)

This commit fixes two related bugs in how Eclair handles Lightning network 'ping' messages. First, it corrects an off-by-one error so pings asking for a 65532-byte reply are now ignored (matching the BOLT1 spec), instead of being answered.…

Protocol compliance fix (BOLT1 ping/pong boundary)Off-by-one error correction in length checkDoS/flood-protection logic adjustment
3ae73813by Bastien Teinturier+18−113 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
High 70 AI analysisMessage 93 · Strong
AQ ACINQEclair BitcoinLightning Network

Close connection when receiving malformed messages (#3273)

This patch fixes a bug in Eclair, a Bitcoin Lightning Network node implementation. Previously, if a peer sent a message that Eclair couldn't properly decode (for example, a corrupted or unexpected 'commit_sig' message), Eclair would log a …

state desynchronization risk from ignored deserialization failuresmissing error handling on Attempt.Failure in message codecconnection now closed on malformed messages with a warning
fde8de65by Bastien Teinturier+43−352 files
Vendor flagged security relevance
Informational 23 AI analysisMessage 68 · Adequate
AQ ACINQEclair BitcoinLightning Network

(Minor) Upgrade postgres libs (#3238)

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 …

Dependency upgrade of a network-facing JDBC driver known to have had security advisories in the 42.6.0 → 42.7.8 intervalNo explicit CVE or security rationale in commit messageNo code-level mitigation or behavior change visible in the diff
ea183c35by pm47+35−22 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
Low 35 AI analysisMessage 76 · Adequate
AQ ACINQEclair BitcoinLightning Network

Identify failing node by its index (#3224)

This commit fixes a routing bug in the Eclair Lightning node. When a payment failed somewhere along the path, the software used to identify the failing node only by its public key. That caused confusion when the same node appeared more tha…

Failure attribution ambiguity when a node appears multiple times in a routePotential incorrect hop/channel blacklisting due to node-id-only failure identificationRouting/liquidity learning could be poisoned by misattributed failures
856e236fby Thomas HUET+89−9116 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
Repository ledger

Explore captured commits

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

Lower-priorityAdd `zero-conf` test tag for Phoenix taproot tests (#3181)by Bastien Teinturier · 56a3acdf · Sep 30, 2025 · 2 filesMessage 91 · StrongTriage 0Details
Commit message · Bastien Teinturier

Add `zero-conf` test tag for Phoenix taproot tests (#3181)

We ensure that tests using the Phoenix taproot commitment format
correctly pass on feature branches without conflicts.

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

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Security candidateAdd `DATA_CLOSED` class when active channel is closed (#3170)by Bastien Teinturier · 16a309e4 · Sep 30, 2025 · 26 filesMessage 81 · StrongLow 29Details
Commit message · Bastien Teinturier

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

We introduce a `DATA_CLOSED` class with minimal information about a
past channel that has been fully closed. This will let us deprecate
legacy channels without having backwards-compatibility issues with
very old closed channels inside our DB.

When channels have never been properly opened or used, we don't
bother storing them in our DB, as it would open the door to DoS
attacks.

We create a dedicated table to store `DATA_CLOSED`. We migrate the
existing DB and remove the foreign key constraint on `htlc_infos`.

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
explicit security languagesigning or wallet path
AI analysis · Low 29/100

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 security benefit is preventing denial-of-service (DoS) attacks by not storing channels that were never properly opened or used. It also removes a database foreign-key constraint and changes the API response format for closed channels. The commit is primarily a data-model and migration change, not a fix for an active vulnerability.

Security candidateUpdate `bitcoin-lib` (#3179)by Bastien Teinturier · 2b39bf62 · Sep 30, 2025 · 20 filesMessage 58 · ThinLow 35Details
Commit message · Bastien Teinturier

Update `bitcoin-lib` (#3179)

And simplify musig2 nonce using Scala classes.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
nonce handlingcryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Low 35/100

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 are represented, removing Kotlin-to-Scala conversion helpers, and updating Maven checksums. There is no explicit mention of a security fix in the commit message or diff, and no independent security advisory was supplied. The update could include upstream security fixes, but that is speculation based on the version bump, not direct evidence in this commit.

Lower-priorityDeduplicate closing balance during mutual close (#3182)by Bastien Teinturier · d04ed3dc · Sep 29, 2025 · 2 filesMessage 81 · StrongTriage 0Details
Commit message · Bastien Teinturier

Deduplicate closing balance during mutual close (#3182)

When a mutual close transaction is published or recently confirmed, we
don't include the corresponding channel in our off-chain balance to
avoid counting it twice (which would resolve itself after confirmations
but is misleading).

There are degenerate cases where the channel will actually end up being
force-closed, even though we started with a mutual close, but that will
be very infrequent and will resolve itself after confirmations.

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-prioritySmaller default value for `peer-connection.max-no-channels` (#3180)by Bastien Teinturier · 90778ca4 · Sep 25, 2025 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · Bastien Teinturier

Smaller default value for `peer-connection.max-no-channels` (#3180)

We previously allowed 250 parallel incoming connections from nodes with
whom we don't have any channels yet. While this makes sense for wallet
providers, this is too large for standard routing nodes and exposes them
to more DoS risk. We reduce the default value to 64 instead, which can
of course be overridden by node operators in their `eclair.conf`.

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 review queuedFix encoding of channel type TLV in splice_init/splice_ack (#3178)by Fabrice Drouin · 5b4368a6 · Sep 23, 2025 · 2 filesMessage 81 · StrongTriage 7Details
Commit message · Fabrice Drouin

Fix encoding of channel type TLV in splice_init/splice_ack (#3178)

Fix encoding of channel type TLV in splice_init/splice_ack

The channel type codec that we use is a "TLV field codec", wrapping it in a tlvField() codec was wrong
and messed up the encoding.

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
parser or protocol pathsecond-pass: security-sensitive path
Lower-priorityAdd "phoenix zero reserve" feature bit (#3176)by Fabrice Drouin · ad8b2e3b · Sep 23, 2025 · 6 filesMessage 76 · AdequateTriage 0Details
Commit message · Fabrice Drouin

Add "phoenix zero reserve" feature bit (#3176)

* Add PhoenixZeroReserve feature bit

Add a feature bit for zero-reserve channel. It is used by phoenix wallets and different from the feature bit proposed in https://github.com/lightning/bolts/pull/1140.

* Simplify SimpleTaprootChannelsPhoenix channel type

It does not make sense to have versions with/without scid-alias and zero-conf.

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI review queuedReject offers with some fields present but empty (#3175)by Thomas HUET · abe2cc9c · Sep 22, 2025 · 6 filesMessage 81 · StrongTriage 7Details
Commit message · Thomas HUET

Reject offers with some fields present but empty (#3175)

Offers or invoices where the fields `offer_chains`, `offer_paths`, `invoice_paths`, `invoice_blindedpay` are present but empty are considered invalid.
While the spec does not necessarily rejects them explicitly, they can't be paid.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
Lower-priorityRemove `PaymentWeightRatios` from the routing config (#3171)by Thomas HUET · fa1b0eef · Sep 19, 2025 · 12 filesMessage 81 · StrongTriage 0Details
Commit message · Thomas HUET

Remove `PaymentWeightRatios` from the routing config (#3171)

The new weights based on success probability estimates have proven superior to the old `PaymentWeightRatios`. Removing `PaymentWeightRatios` makes the configuration simpler.

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 candidateKill the connection if a peer sends multiple ping requests in parallel (#3172)by pm47 · 08a1fc66 · Sep 19, 2025 · 2 filesMessage 81 · StrongModerate 64Details
Commit message · pm47

Kill the connection if a peer sends multiple ping requests in parallel (#3172)

We keep track of the number of pings that we have not yet sent a pong for. If there is more than 1, our peer is malicious and we close the connection.

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 path
AI analysis · Moderate 64/100

This update makes Eclair disconnect a Lightning peer if it sends more than one ping message before getting a reply. The goal is to stop a 'ping flood' attack, where a malicious peer could overwhelm the node with many ping requests and possibly cause it to run out of memory or become unresponsive. The change is defensive and includes a test showing the connection is closed when two pings arrive back-to-back.

Lower-priorityAlways count local CLTV delta in route finding (#3174)by Thomas HUET · 9f00ebf9 · Sep 18, 2025 · 2 filesMessage 73 · AdequateTriage 0Details
Commit message · Thomas HUET

Always count local CLTV delta in route finding (#3174)

When paying from our node, we don't pay the fee for the local channel but we still "pay" its CLTV delta.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Security candidateCorrectly fill PSBT for taproot `interactive-tx` (#3169)by Bastien Teinturier · 76f8d53a · Sep 17, 2025 · 14 filesMessage 100 · StrongModerate 60Details
Commit message · Bastien Teinturier

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

When using tapoot for our inputs, our signatures will cover *all* inputs
of the transaction, even those that don't belong to us. If our peer adds
inputs, we must thus fill them in the PSBT we create, otherwise signing
will fail.

This was the reason why we were previously sharing the same dummy wallet
between Alice and Bob in our unit tests, otherwise we were seeing that
kind of failures in unit tests, but we never figured out why before.

Now that this is fixed, we can improve the unit tests by having separate
wallets for Alice and Bob, and remove the unused `NoOpOnChainWallet`.

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 boundarycryptography-sensitive pathsigning or wallet path
AI analysis · Moderate 60/100

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. Previously, the PSBT (a data structure used to pass transaction signing information to the wallet) only included the shared splice input, but omitted the other peer's inputs. That caused the local wallet to fail when signing taproot inputs, because it couldn't compute the signature that covers all inputs. The fix adds all remote inputs to the PSBT before signing. The rest of the diff is mostly test cleanup: separate wallets for Alice and Bob and removal of an unused test helper.

Lower-priorityIncrease timeout for flaky onion message tests (#3167)by Thomas HUET · e3513205 · Sep 16, 2025 · 2 filesMessage 91 · StrongTriage 0Details
Commit message · Thomas HUET

Increase timeout for flaky onion message tests (#3167)

The previous timeout of 100ms was creating a lot of tests failures.
This fixes flaky tests in `PostmanSpec` and maybe some other places.

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
AI review queuedResign next remote commit on reconnection (#3157)by Bastien Teinturier · 379abc55 · Sep 12, 2025 · 11 filesMessage 88 · StrongTriage 0Details
Commit message · Bastien Teinturier

Resign next remote commit on reconnection (#3157)

We previously retransmitted our last `commit_sig` on reconnection if it
hadn't been received by our peer, without changing it. This can be an
issue for taproot channels when remote nodes don't use deterministic
nonce derivation, because their nonce may be different on reconnection
and our previous `commit_sig` would thus not be valid anymore.

We now re-sign the next commitment on reconnection, using the latest
nonces we receive from `channel_reestablish`.

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: broader security terminology
Lower-priorityFix flaky test in `OfferPaymentSpec` (#3165)by Thomas HUET · c13d530f · Sep 11, 2025 · 1 fileMessage 63 · AdequateTriage 0Details
Commit message · Thomas HUET

Fix flaky test in `OfferPaymentSpec` (#3165)

63/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Lower-priorityFix flaky `ReputationRecorder` test (#3166)by Thomas HUET · d3ac75df · Sep 11, 2025 · 2 filesMessage 98 · StrongTriage 0Details
Commit message · Thomas HUET

Fix flaky `ReputationRecorder` test (#3166)

Sometimes, the test publishes events to the `EventStream` before the `ReputationRecorder` has subscribed, which leads to dropped events.
We fix this by bypassing the `EventStream` in tests.
We also subscribe to `OutgoingHtlcSettled` before subscribing to `OutgoingHtlcAdded` to prevent the unlikely edge case where a HTLC stays pending forever because it settled before `ReputationRecorder` subscribed to `OutgoingHtlcSettled`.

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 review queuedUpdate taproot commit weight to match `lnd` (#3158)by Bastien Teinturier · a7e57ea7 · Sep 11, 2025 · 1 fileMessage 81 · StrongTriage 12Details
Commit message · Bastien Teinturier

Update taproot commit weight to match `lnd` (#3158)

`lnd` uses a pessimistic weight estimate, assuming that varints take
5 bytes instead of 1 (when encoding the number of inputs and outputs
of the transaction).

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedRemove legacy channel codecs and DB migrations (#3150)by Bastien Teinturier · ae3e44be · Sep 11, 2025 · 100 filesMessage 100 · StrongTriage 17Details
Commit message · Bastien Teinturier

Remove legacy channel codecs and DB migrations (#3150)

* Remove legacy channel codecs

We remove legacy channel codecs (versions earlier than v5). We also
remove the corresponding DB migrations: if node operators try to
upgrade from a version of eclair that is older than v0.13, we tell
them to first run the v0.13 version to migrate their channel data.

We regenerate serialization backwards-compatibility test vectors
based on anchor outputs or taproot channel types.

* Check channels DB version early

We check the channels DB version before running any DB migration, to
ensure that node operators can safely run the v0.13 release first.
Otherwise we may have started migrating an unrelated table to a newer
version that isn't included in the v0.13 release, which would thus
fail at start-up.

* Remove migration from `sqlite` to `postgres`

We now expect users to directly use `postgres` if they expect their node
to become large. The `sqlite` option should only be used for small nodes
for individuals, where it is performant enough.

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
fuzzing or regression evidencesigning or wallet pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
Lower-priorityUpdate Bitcoin Core to v29.1 (#3153)by Bastien Teinturier · f0295846 · Sep 10, 2025 · 7 filesMessage 76 · AdequateTriage 0Details
Commit message · Bastien Teinturier

Update Bitcoin Core to v29.1 (#3153)

Update Bitcoin Core to v29.1. This release doesn't contain any breaking
change. It contains the following interesting features that we want to
leverage in future eclair versions:

- orphan handling improvements which lead to better propagation of
force-close transactions
- support for ephemeral dust, which we'll need for 0-fee commitments
(v3 transactions)

See release notes here: https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-29.0.md

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI review queuedBack to dev (#3155)by Bastien Teinturier · 3abc17f9 · Sep 10, 2025 · 7 filesMessage 36 · OpaqueTriage 0Details
Commit message · Bastien Teinturier

Back to dev (#3155)

After the v0.13.0 release.

36/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
Lower-priorityEclair v0.13.0 release (#3154)by Bastien Teinturier · 992ec8cc · Sep 10, 2025 · 8 filesMessage 53 · ThinTriage 0Details
Commit message · Bastien Teinturier

Eclair v0.13.0 release (#3154)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Lower-priorityFix flaky `OfferPaymentSpec` (#3164)by Thomas HUET · f32e0b68 · Sep 10, 2025 · 1 fileMessage 43 · ThinTriage 0Details
Commit message · Thomas HUET

Fix flaky `OfferPaymentSpec` (#3164)

43/100 · ThinMessage clarity
✓ Descriptive subject✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Security candidateAdd high-S signature Bolt 11 test vector (#3163)by Bastien Teinturier · e8ec1489 · Sep 10, 2025 · 1 fileMessage 91 · StrongInformational 12Details
Commit message · Bastien Teinturier

Add high-S signature Bolt 11 test vector (#3163)

We must accept both high-S and low-S signatures in Bolt 11 invoices
when performing public key recovery (which matches secp256k1's
behavior).

See https://github.com/lightning/bolts/pull/1284

91/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✓ Names security-relevant behavior explicitly
Why it was queued
signing boundaryfuzzing or regression evidence
AI analysis · Informational 12/100

This commit only adds a new test case to Eclair's invoice parsing tests. It checks that a specific Bitcoin Lightning invoice with a non-standard 'high-S' signature can still be decoded and that the sender's public key is recovered correctly. There is no code change to the actual invoice handling logic.

AI review queuedRelax taproot feature dependency (#3161)by Bastien Teinturier · 60751962 · Sep 10, 2025 · 1 fileMessage 76 · AdequateTriage 0Details
Commit message · Bastien Teinturier

Relax taproot feature dependency (#3161)

It appears that `lnd` nodes don't always set `option_simple_close`
when setting `taproot_staging`, which creates disconnection issues.

We will enforce this for the official taproot feature bit, but we
should relax it for the staging bit.

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
second-pass: broader security terminology
Lower-priorityFix comparison of utxos in the balance (#3160)by pm47 · 2a5b0f14 · Sep 9, 2025 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · pm47

Fix comparison of utxos in the balance (#3160)

The `Utxo` case class has many fields, for comparison we must use the
`outPoint`.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference