BOLT proposal #863 · Eclair · CLN · LDK · Phoenix

Splicing
Lightning channels をクローズせずにリサイズする

従来の Lightning channel は open → operate → close という固定的なライフサイクルを持ち、capacity を変更するには毎回 on-chain TX 2 本(close + reopen)と down-time を強いていた。 Splicing はこれを変える: 1 つの on-chain TX で channel state を維持したまま capacity を増減(splice-in / splice-out)できる。 2024–2026 に Eclair / CLN / LDK / Phoenix で実装が成熟し、Lightning UX を最も大きく変えた upgrade のひとつ。

SpecBOLT PR #863 (draft)
First proposalRusty Russell, 2018-10
First mainnetEclair / Phoenix v2.2 (2024-03)
Quiescencestfu / qack negotiation
1 TX
close + reopen → splice 1 本
0 down-time
channel 継続稼働
3 modes
in / out / rebalance
RBF対応
2024+ 各実装で対応
§ 1 · The Problem

固定 capacity の Lightning channel が抱える経済的非効率

Lightning channel の capacity は open 時点で固定。流入超過で受信不能になっても、追加資金を入れたい場合も、毎回 channel を close → reopen する必要がある。これは:

Before / After 比較

⛔ 従来Close → Reopen
# 1. Cooperative close broadcast(close_tx) # on-chain TX #1 wait_for_confirmation() # 10–60 分 channel.state = CLOSED # 2. New funding broadcast(new_funding_tx) # on-chain TX #2 wait_for_confirmation() # 10–60 分 channel.state = OPEN # Total: 2 TX, 20–120 分の down-time, scid 変わる
✨ Splicing1 atomic operation
# Splice in (capacity 追加) quiescence_negotiation() # stfu / qack build_splice_tx( # 1 つの TX が: inputs=[old_funding, # - 旧 funding を消費 new_utxo], # - 追加 UTXO を投入 outputs=[new_funding] # - 新 funding output を作る ) broadcast(splice_tx) # on-chain TX #1 (and only) # channel は continue operating # confirmation 中も支払い可能 # Total: 1 TX, 0 分 down-time, scid 継続

💡 Splicing の本質

新 funding TX を作りつつ、旧 commitment TX を新 funding output を spend する形に再構成する。これにより、splice TX が confirm する前から 新 capacity に基づく支払いが可能になる (旧 channel state の security によって safety が保たれる)。

§ 2 · Three Splice Modes

Splice-In / Splice-Out / Splice-Rebalance

splicing は 3 種類のシナリオを同じプロトコルで実現する。インタラクティブに切り替えて確認できる。

Splice-In: Alice が個人 wallet から追加資金を channel に投入。capacity が増える。受信能力(inbound)も同時に増える。

Channel capacity の変化

Alice (local)Bob (remote)
0.5 BTC
0.5 BTC
↓ Splice operation ↓
1.5 BTC
0.5 BTC
Total: 2.0 BTC (+ 1.0 BTC spliced in)

UTXO の流れ

Old funding (1 BTC) 2-of-2 multisig Add UTXO (1 BTC) Alice's onchain wallet Splice TX replaces channel funding in: 2 outputs out: variable (mode-dependent) New funding (2 BTC) 2-of-2 multisig Splice-out (0.5 BTC) to wallet
§ 3 · Protocol — Step by Step

splice TX の 6-step 構築シーケンス

BOLT PR #863 が定義する splice negotiation。quiescence → splice_init → tx_add_input/output → tx_complete → commitment_signed → splice_locked の流れ。

Step 0 / 6
Alice (initiator) Bob (counterparty) ① stfu (please be silent) quiescence request ② stfu (qack) channel quiesced; HTLC 停止 ③ splice_init (relative_funding_delta) +1 BTC to channel ④ splice_ack interactive tx construction開始 ⑤ tx_add_input × N + tx_add_output × M + tx_complete interactive funding (BOLT proto) ⑥ commitment_signed × 2 → splice_locked channel resumes operation immediately
Press Play to walk through the 6-step splice protocol.

プロトコルの本質的な工夫

① 旧 commitment の lift

splice TX が confirm されるまでは旧 funding が有効。新 commitment はあらかじめ「新 funding を spend する」形で構築され、splice TX confirm 後に有効化される。

② Continuous operation

quiescence が解けた後、新 capacity に基づく支払いが即可能(unconfirmed splice TX 上で)。security は新旧 commitment の二重 signing で保たれる。

③ Channel ID は変わらない

scid_alias による channel 識別が維持されるため、routing reputation や route hints が継続

④ Multi-input / Multi-output

splice TX は 複数の入力・複数の出力を持てる。CLN は multi-channel splice もサポート(複数 channel を同時に splice)。

§ 4 · Quiescence Protocol

「splice 中は HTLC を凍結する」必須前置プロトコル

Splicing は 新 commitment TX への移行を必要とする。その間に新規 HTLC が in-flight だと state inconsistency を起こすため、quiescence(いったん channel を「静粛」状態にする)が必要。 これは stfu("shut the f* up", 公式メッセージ名)と qack の交換で行う。

Alice Bob HTLC #42 in-flight stfu (initiator=Alice) Bob: ⏳ HTLC #42 を resolve 待ち update_fulfill_htlc #42 stfu (initiator=Bob, qack) → Channel quiesced. Now safe to splice.

quiescence の重要な性質

§ 5 · RBF Splicing

splice TX の手数料を後から bump する

Splice TX が低 fee で stuck した場合、RBF (Replace-By-Fee) で fee を上げて再 broadcast できる。 ただし、splice TX には commitment TX が依存しているため、新たな fee で再構築 + 再署名が必要。

# Eclair / LDK が 2024+ で実装 if splice_tx.confirmed_age > threshold and mempool.feerate > old_feerate * 1.5: new_splice_tx = rebuild_splice_tx( old_inputs=splice_tx.inputs, new_feerate=mempool.feerate * 1.2, bump_with_change=true # 余り output を fee に転用 ) new_commitment = sign_new_commit_referencing(new_splice_tx) broadcast(new_splice_tx) # 旧 splice TX を replace # channel state 自体は不変。splice TX の identity だけが変わる

RBF Splicing の制約

  • 新旧 commitment 両方の signing が必要
  • BIP-125 rule(絶対 fee 増加)に従う
  • locked 後は RBF 不可 — confirm 済み splice は変更不能
  • Multi-input splice では全 input owner の cooperation 必要

実装サポート(2024–2026)

  • Eclair #2925(2024-10): RBF for splicing
  • LDK #4427(2026-03): negotiated splice の RBF
  • CLN: 議論中
§ 6 · Implementation Status (2018 → 2026)

各 LN 実装の splicing サポート状況

実装Splice-InSplice-OutQuiescenceRBFMulti-channelMainnet 投入
Eclair✓ (#2925)部分2023
Phoenixv2.2 (2024-03)
Core Lightning (CLN)✓ (#6253)議論中✓ (#8450)2023
LDK✓ (#3979)✓ (#4427)2025-08
LND議論中議論中✓ (#8270)未投入

系譜タイムライン

2018-10 Rusty Russell & Rene Pickhardt が lightning-dev ML で提案 2023-02 Eclair #2540 backend 準備 2023-04 Eclair #2584 splice-in / splice-out 実装 2023-07 Phoenix wallet が splicing を採用 2023-08 CLN #6253, #5675 experimental implementation 2024-02 v3-tx と zero-conf channel との相互作用問題が議論 2024-03 Phoenix v2.2 quiescence protocol で splicing 2024-10 Eclair #2925 RBF for splicing 2024-10 Eclair #2861 liquidity ads + splicing 統合 2024-11 CLN #7719 ↔ Eclair interop 達成 2024-12 LND #8270 channel quiescence 実装 2025-02 Eclair #2968 public channel splicing 2025-03 LDK #3624 funding key rotation after splice 2025-05 CLN #8021 ↔ Eclair interop 完成 2025-08 Eclair #3103 dual funding + splicing in taproot channels 2025-08 LDK #3979 splice-out support, LDK splicing 完成 2026-03 LDK #4427 RBF of negotiated splice funding TXs 2026-03 CLN #8856/8857 splicein/spliceout RPC commands 2026-03 CLN #8450 multi-channel splices
§ 7 · Splicing vs Submarine Swap

「on-chain ↔ LN 流動性移動」の 2 つのアプローチを比較

Splicing

Channel 自体の capacity を変更する。on-chain output と channel が同一エンティティの所有である必要。

  • 同一 party が両側の rebalancing
  • 1 on-chain TX で完結
  • channel の counterparty も同意必須
  • scid 不変
  • 新規開設より cost-effective
Submarine Swap

third-party との on-chain ↔ LN swap。Loop / Boltz が provider。channel balance は変わるが capacity は不変。

  • 第三者 (Loop, Boltz) が counterparty
  • HTLC + on-chain TX
  • swap fee(典型 0.1–0.5%)
  • provider への信頼最小(atomic)
  • capacity 変更は不可

使い分け

シナリオ推奨理由
routing node の capacity 拡大Splicingcost minimum, scid 維持
mobile wallet が on-chain 受取Splice-out (LSP)JIT channel との組み合わせ
On-chain → LN 流動性確保(自分以外と)Submarine swapsplice には counterparty の同意が必要
Privacy 重視の rebalancingSubmarine swap (Loop)splice は on-chain footprint を残す
大口の channel 戦略変更Splicing1 TX で完結
§ 8 · Open Problems

2026 時点の splicing 関連未解決課題

★★★

LND の本格 splicing 未投入

2026 時点で LND は quiescence のみ実装。splice-in/out の本格サポートは依然議論中。LN ecosystem の最大シェアを持つ実装の対応が遅れている。

★★

v3-tx (TRUC) との相互作用

2024-02 に zero-conf channel と v3-transactions の相互作用問題が議論された。新 mempool policy 下での splicing の robust 設計が課題。

★★

Multi-channel splicing の標準化

CLN が multi-channel splice を実装したが、他実装との interop は未確立。複数 channel を 1 TX で splice する仕様が未標準化。

★★

Splicing × Liquidity Ads の統合

Eclair #2861 が on-the-fly funding を統合したが、ecosystem 全体で「splice + liquidity market」 の standard pattern が確立していない。

★★

Privacy 含意

Splicing は on-chain TX に「同じ参加者の resize」を残す。cross-layer deanonymization の研究は splicing pattern まで未拡張。研究機会あり。

Splicing 自動化 policy

「いつ splice すべきか」の意思決定は manual。流動性 utilization・mempool 状況・期待 routing 収益から最適 splice timing を導出する研究は未着手。

§ 9 · Resources & Related Pages

関連する HTML / wiki / spec

本サイト内のビジュアル解説

主要リファレンス

  • 📜 BOLT PR #863 — Splicing specification (draft)
  • 📰 Bitcoin Optech — Splicing topic page
  • 📰 Rusty Russell — lightning-dev ML proposal (2018-10)
  • 📰 Rene Pickhardt — alternative proposal (2018-10)
  • 🔧 Eclair #2540, #2584, #2925 — initial impl + RBF
  • 🔧 CLN #6253, #5675, #8021, #8856 — interop + RPC
  • 🔧 LDK #3979, #4427 — splice-out + RBF
  • 🔧 LND #8270 — channel quiescence