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 queue38AI 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 Teinturier1132226181
Fabrice Drouin1466077
pm471833067
Thomas HUET1612075
Nishant Bansal211084
rorp200077
ekzyis100058
Rusty Russell100081
Analysis record

Published AI watches

Last scanned 48 minutes ago

Moderate 60 AI analysisMessage 78 · Adequate
AQ ACINQEclair BitcoinLightning Network

Prevent `channel_id` collisions (#3337)

This commit hardens the Eclair Lightning node against two related problems when opening payment channels: it prevents the same channel ID from being reused by two different channels at the same time, and it aborts channel creation if the v…

State overwrite / collision prevention for channel identifiersAbort-on-first-DB-write-failure to avoid inconsistent persistenceGlobal concurrent map guarding temporary and final channel_id usage
45ea9fbfby Bastien Teinturier+468−19419 files
Vendor flagged security relevance
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 37 AI analysisMessage 81 · Strong
AQ ACINQEclair BitcoinLightning Network

Use official feature bit for `option_simple_taproot` (#3144)

This commit updates the Eclair Lightning node software to use the official protocol feature bit and name for a new kind of Bitcoin payment channel called 'taproot channels.' It turns taproot channel support on by default, but only for priv…

Protocol feature bit migration from staging/experimental to official BOLT specificationDefault activation of a new channel type (taproot) that affects transaction construction and key aggregationAdded explicit guardrails against opening publicly announced taproot channels
872cb663by Bastien Teinturier+587−3614 files
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
Low 35 AI analysisMessage 93 · Strong
AQ ACINQEclair BitcoinLightning Network

Improve support for plugin-defined features (#3264)

This commit fixes a bug where Eclair did not correctly recognize custom features added by plugins when checking if another node supports them. Previously, plugin features were treated as 'unknown' and `hasFeature` always returned false for…

Fixes feature-negotiation correctness for plugin-defined featuresChanges how unknown/even feature bits are validated during compatibility checksRemoves UnknownFeature class and changes JSON serialization shape
a4f4abd9by Bastien Teinturier+317−25942 files
No security note in commit
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 37 AI analysisMessage 58 · Thin
AQ ACINQEclair BitcoinLightning Network

Accountable HTLCs (#3217)

This commit replaces an older 'endorsement' anti-jamming signal with a new 'accountable' signal for Lightning HTLCs, following a draft specification update. It changes how invoices, payment onions, and channel messages carry and propagate …

Protocol-level anti-jamming signal redesign (endorsement -> accountable)New TLVs added to HTLC, payment onion, route blinding, and invoice codecsReputation algorithm simplified to binary accountability and outgoing-only scoring
e3fd1867by Thomas HUET+827−91468 files
Vendor flagged security relevance
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
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 queuedCatch close commands in `Offline(WaitForDualFundingSigned)` (#3159)by pm47 · c9ff5019 · Sep 9, 2025 · 2 filesMessage 85 · StrongTriage 12Details
Commit message · pm47

Catch close commands in `Offline(WaitForDualFundingSigned)` (#3159)

They were previously ignored because we don't yet have a commitment.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedUse helpers for feerates conversions (#3156)by pm47 · 70a2e297 · Sep 9, 2025 · 19 filesMessage 68 · AdequateTriage 7Details
Commit message · pm47

Use helpers for feerates conversions (#3156)

It saves tedious double parentheses: `FeeratePerKw(FeeratePerByte(1 sat))` -> `FeeratePerByte(1 sat).perKw`.

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
parser or protocol pathsecond-pass: security-sensitive path
Lower-priorityRe-encode channel data using v5 codecs (#3149)by Bastien Teinturier · 07c0cfd6 · Sep 9, 2025 · 4 filesMessage 76 · AdequateTriage 0Details
Commit message · Bastien Teinturier

Re-encode channel data using v5 codecs (#3149)

We force a re-encoding of all channel data using v5 codecs when updating
eclair. This will allow us to remove support for previous codecs in a
later release. If users try to directly upgrade to a release that does
not contain the legacy codecs, we'll fail at start-up and tell them to
first update to the release that contains this migration code as an
intermediate step.

We plan to remove support for channels that aren't using anchor outputs,
so we add a warning in the logs and a command to help users close such
existing channels.

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Lower-priorityUse balance estimates from past payments in path-finding (#2308)by Thomas HUET · d4dfb864 · Sep 8, 2025 · 10 filesMessage 81 · StrongTriage 0Details
Commit message · Thomas HUET

Use balance estimates from past payments in path-finding (#2308)

We estimate the probability that a given route can relay a given payment as part of route selection.
Until now this estimate was naively assuming the channel balances to be uniformly distributed.
We will now use data from past payment attempts (both successes and failures) to provide a better estimate, hopefully improving route selection.

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 non-initiator RBF for dual funding (#3021)by Bastien Teinturier · f93d02fb · Sep 5, 2025 · 4 filesMessage 76 · AdequateTriage 0Details
Commit message · Bastien Teinturier

Allow non-initiator RBF for dual funding (#3021)

We previously only allowed the opener to RBF a dual-funded channel.
This is not consistent with splicing, where both peers can initiate
RBF. There is no technical reason to restrict the channel creation,
we can allow the non-initiator to RBF if they wish to do so.

The only subtlety is in the case where there is a liquidity purchase.
In that case we want the opener to be the only one allowed to RBF to
guarantee that we keep the liquidity purchase (since the initiator is
the only one that can purchase liquidity).

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Lower-priorityAllow overriding `max-closing-feerate` with `forceclose` API (#3142)by Bastien Teinturier · d48dd214 · Sep 5, 2025 · 17 filesMessage 81 · StrongTriage 0Details
Commit message · Bastien Teinturier

Allow overriding `max-closing-feerate` with `forceclose` API (#3142)

We introduced a mechanism to limit the feerate used for non-urgent
force-close transactions in #3097. We now provide a way to update
this feerate on a per-channel basis, without restarting the eclair
node, by using the `forceclose` API.

Fixes #3108.

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 `LocalFundingStatus.ConfirmedFundingTx` migration (#3151)by Bastien Teinturier · 18ea3628 · Sep 4, 2025 · 2 filesMessage 93 · StrongTriage 0Details
Commit message · Bastien Teinturier

Fix `LocalFundingStatus.ConfirmedFundingTx` migration (#3151)

We cannot rely on the `shortChannelId` to choose which output of the
funding transaction is the channel output, because in some cases the
`shortChannelId` isn't properly filled (e.g. private channels).

We instead use the commit tx input which should always be correctly
set.

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-priorityAdd `GossipTimestampFilter` buffer during gossip queries to fix flaky tests (#3152)by Thomas HUET · 50f16cbd · Sep 4, 2025 · 1 fileMessage 100 · StrongTriage 0Details
Commit message · Thomas HUET

Add `GossipTimestampFilter` buffer during gossip queries to fix flaky tests (#3152)

In a network Alice -- Bob - Carol, we could have
- Alice creates a channel update, Bob and Carol do not know it yet.
- Carol syncs with Bob and sends a `GossipTimestampFilter` with the current timestamp
- Bob receives the channel update from Alice but does not propagate it to Carol because it is too old for the `GossipTimestampFilter`

To prevent this from happening, we add a buffer of one minute to allow gossip to propagate.

This is unlikely to happen in real life but was making some tests flaky.

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
Lower-priorityAdjust `batch_size` on `commit_sig` retransmission (#3147)by Bastien Teinturier · 012b3828 · Sep 2, 2025 · 2 filesMessage 81 · StrongTriage 0Details
Commit message · Bastien Teinturier

Adjust `batch_size` on `commit_sig` retransmission (#3147)

If we send a batch of `commit_sig` while our peer is sending their
`splice_locked` and we disconnect before receiving `revoke_and_ack`,
we will have less `commit_sig` messages to send on reconnection. But
we were still sending the old `batch_size`, so our peer was expecting
more `commit_sig` messages and waiting indefinitely.

This shows how hacky the `batch_size` mechanism is: fortunately, it was
removed from the official splice spec and replaced by the funding txid
matching the commitment, which gets rid of this edge case entirely.
But for existing phoenix users, while the splice spec isn't finalized,
we need to fix this scenario.

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 minor incompatibilities with feature branches (#3148)by Bastien Teinturier · 3d5fd334 · Sep 1, 2025 · 9 filesMessage 81 · StrongTriage 7Details
Commit message · Bastien Teinturier

Fix minor incompatibilities with feature branches (#3148)

* Fix conflict with custom TLVs for `prevtxout`

We already use TLV types 1107 and 1109 for our experimental
swap-in-potentiam implementation.

* Store spent outpoints for confirmed funding txs

This can be used in feature branches to catch double-spending issues
across interactive-tx sessions early in the flow.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI review queuedSplit commit nonces from funding nonce in `tx_complete` (#3145)by Bastien Teinturier · d7ee6638 · Aug 25, 2025 · 7 filesMessage 81 · StrongTriage 7Details
Commit message · Bastien Teinturier

Split commit nonces from funding nonce in `tx_complete` (#3145)

The commit nonces and funding nonce provided in `tx_complete` are
actually completely orthogonal:

- the commit nonces must be provided whenever the *next* commitment
format is using taproot
- the funding nonce must be provided whenever the *previous* commitment
format is using taproot

It thus makes more sense to split them into separate TLVs.

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: broader security terminologysecond-pass: security-sensitive path
Security candidateAllow omitting `previousTx` for taproot splices (#3143)by Bastien Teinturier · 0e0da422 · Aug 25, 2025 · 5 filesMessage 86 · StrongLow 28Details
Commit message · Bastien Teinturier

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

When splicing a taproot channel, both participants will provide a
signature for a segwit v1 input: this signature will cover every
spent `txOut`, including their amount and script. This ensures
that attackers cannot reuse a signature while replacing a segwit
input with a non-segwit input, which could be used to steal funds.

A side-effect of this change in signature behavior is that we don't
need to provide the entire previous transaction when both channel
participants sign a taproot input. For simplicity, we only allow
this simplification when splicing taproot channels for now. We can
also allow channel creation based on swap-in-potentiam, which also
uses musig2 and has the same non-malleability guarantee (on feature
branches for phoenix users).

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
explicit security languagesigning boundaryparser or protocol path
AI analysis · Low 28/100

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, the commit allows sending only the relevant output details instead, because taproot signatures already protect against a specific malleability trick. The change is framed as a bandwidth optimization and is restricted to taproot splicing to preserve security guarantees.

Security candidateSimple taproot channels (#3103)by Fabrice Drouin · d8ce91b4 · Aug 19, 2025 · 51 filesMessage 71 · AdequateLow 32Details
Commit message · Fabrice Drouin

Simple taproot channels (#3103)

Implement simple taproot channels

We add new commitment formats and TLV extensions to include musig2 nonces. This includes a specific commitment format for phoenix
taproot channels.

The old v1 channel establishment protocol is updated to include nonces and partial signatures.

The v2 channel estalishment protocol, based on the interactive tx constuction protocol, is also updated, and the
interactive tx session now includes:
- an optional funding nonce for the shared input (i.e. the funding tx that is being spent)
- a nonce for the commit tx that is being created, and another nonce that will become the channel's "next remote nonce" once the session completes
The funding nonce is random and its lifecycle is bound to the interactive session.

Side note: the new v2 protocol is both simpler to extend and gives us support for dual-funding and splices.

Since there can be several different commitment transactions that valid at the same time while splices are pending, revoke_and_ack
and channel_restablish are extended to include a list of funding_tx_id -> nonce tuples (one for each active commitment).

channel_restablish also includes as an optional "current commit nonce": if we got disconnected while a splice was in progress
before both nodes exchanged their commit signatures: if that is the case, we need to re-send our peer's current signature
and will use this nonce to compute it.

We also update the simple close protocol to include closing nonces.

We allow upgrading channels to taproot during splices, with an optional channel_type TLV added to splice_init/splice_ack.
This is not part of the BOLT proposal, and upgrading is currently limited to phoenix taproot channels from phoenix anchor channels.

71/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarynonce handlingcryptography-sensitive pathsigning or wallet pathparser or protocol path
AI analysis · Low 32/100

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 primarily a protocol upgrade, not a stated security fix. However, because it touches sensitive signing logic and introduces new nonce handling, there is a moderate risk that mistakes in the new code could affect channel safety or allow a malicious peer to cause problems. The commit message does not describe this as fixing a known vulnerability.

Security candidateExtract `CommitParams` to individual commitments (#3118)by Bastien Teinturier · 49bee72f · Aug 19, 2025 · 73 filesMessage 93 · StrongLow 35Details
Commit message · Bastien Teinturier

Extract `CommitParams` to individual commitments (#3118)

We introduce a new channel codec version where:

- we extract per-commitment parameters (commitment format and params
such as `dust_limit` which we may want to dynamically update in the
future)
- we clean-up the splice iterations on the `Commitments` structure
- we remove the funding transaction from the confirmed local funding
status (once confirmed, we don't need it anymore: it is wasting DB
space for no good reason, we can get it from the blockchain)
- we add a `maxClosingFeerate_opt` to the closing state, to allow
limiting the feerate used in RBF attempts for safe transactions
- we add the commitment format to interactive-tx parameters
- we make channel type feature non permanent

We add a mechanism to prevent the node from starting-up, unless an
override is provided. This provides an opportunity to iterate on codecs
while knowing that node operators won't be affected if we make changes
that are backwards-incompatible. This is meant to be temporary.

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

This is a large internal refactoring of Eclair's Lightning channel data structures. It moves commitment-specific settings (such as dust limits and HTLC limits) from the overall channel parameters into each individual commitment, so future splices can change them. It also removes the full confirmed funding transaction from the local database record, adds a cap on closing fee rates for RBF attempts, and introduces a startup-blocking guard when the database serialization format changes. The commit is not described by the vendor as a security fix; it is a forward-looking infrastructure change with some safety mechanisms.

AI review queuedOffers with currency must set amount. (#3140)by Thomas HUET · b651e5b9 · Aug 19, 2025 · 2 filesMessage 78 · AdequateTriage 7Details
Commit message · Thomas HUET

Offers with currency must set amount. (#3140)

Adds check and corresponding test from lightning/bolts#1279

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 actual CLTV delta for reputation (#3134)by Thomas HUET · 5703cd45 · Aug 18, 2025 · 11 filesMessage 76 · AdequateTriage 0Details
Commit message · Thomas HUET

Use actual CLTV delta for reputation (#3134)

When computing reputation, instead of using a fixed multiplier for pending HTLCs, we now use the CLTV expiry of the HTLC (assuming a new block is mined every 10 minutes).
The reason for the fixed multiplier was that a HTLC with the maximum CLTV delta could stay pending for several orders of magnitude longer than a regular HTLC and would have an oversized impact on the reputation. We mitigate this by increasing the expected settlement time (from a few seconds to a few minutes), using more historical data (increasing the half-life), and counting on the fact that most HTLCs will have a CLTV expiry a lot lower than the maximum.

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 recent invoice spec test vectors (#3137)by Bastien Teinturier · af3cd559 · Aug 18, 2025 · 2 filesMessage 78 · AdequateTriage 5Details
Commit message · Bastien Teinturier

Add recent invoice spec test vectors (#3137)

Add test vectors from https://github.com/lightning/bolts/pull/1276
and https://github.com/lightning/bolts/pull/1264

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
fuzzing or regression evidence