閃電網路通道技術詳解
閃電網路通道的技術原理與實現
閃電網路 Channels 詳解
閃電網路 Channels(通道)是閃電網路的核心概念,允許兩個參與者在鏈下進行多次交易,實現比特幣的即時、低費用支付。本文深入解析通道的技術細節,特別是 Commitment Transaction 的狀態機制與實際數值範例。
Channel 基本概念
什麼是通道?
通道就像在比特幣區塊鏈上建立的一個「支付管道」。建立通道後,雙方可以在鏈下進行無限次交易,最後再將最終餘額廣播到區塊鏈。
通道生命週期
- 建立(Funding):雙方在主鏈鎖定資金
- 運作(State Updates):鏈下多次轉帳
- 關閉(Settlement):最終餘額回到主鏈
通道建立過程
Funding Transaction
通道的建立始於一筆 Funding Transaction,這是保存在比特幣區塊鏈上的 2-of-2 多籤交易:
Funding Transaction 結構:
- 輸入:A 的 BTC + B 的 BTC
- 輸出:2-of-2 多籤,需要雙方簽名才能解鎖
- 鎖定時間:可選的絕對時間鎖(CLTV)
實際數值範例
假設 Alice 和 Bob 建立通道:
| 參數 | 數值 |
|---|---|
| Alice 出資 | 0.5 BTC |
| Bob 出資 | 0.3 BTC |
| 通道總容量 | 0.8 BTC |
| 通道類型 | P2WSH(Native SegWit) |
| 多籤腳本 | OP2 <AlicePubKey> <BobPubKey> OP2 OP_CHECKMULTISIG |
Commitment Transaction 結構
在 Funding Transaction 確認後,雙方會交換初始的 Commitment Transaction。每個 Commitment Transaction 包含多個輸出:
承諾交易輸出類型
- 本地延遲輸出(to_local)
- 支付給通道創建者
- 附加 OP_CSV(相對時間鎖)
- 延遲時間:例如 144 區塊(約 1 天)
- 遠端延遲輸出(to_remote)
- 支付給通道對手方
- 同樣附加 OP_CSV
- 延遲時間:同上
- HTLC 輸出( Offered HTLCs / Received HTLCs)
- 處理中的 HTLC 支付
- 附加兩種解鎖條件:
- 預圖像(preimage)解鎖
- 時間鎖過期解鎖
Commitment Transaction 具體範例
假設 Alice-Bob 通道在一次交易後的狀態:
Commitment Transaction #5(Alice 視角)
輸入:
- Funding Transaction 輸出(引用)
輸出 0(to_local):
- 金額:0.35 BTC
- 腳本:OP_IF <Alice_延遲公鑰> OP_ELSE <Bob_贖回腳本> OP_ENDIF
OP_CHECKSEQUENCEVERIFY OP_DROP <Alice_公鑰> OP_CHECKSIG
輸出 1(to_remote):
- 金額:0.30 BTC
- 腳本:同上(延遲後歸 Bob)
輸出 2( Offered HTLC #1):
- 金額:0.05 BTC
- 腳本:OP_HASH160 <HTLC哈希> OP_EQUAL
OP_IF
<Bob_預圖像公鑰>
OP_ELSE
<Alice_延遲公鑰> OP_CHECKSEQUENCEVERIFY OP_DROP
<Bob_過期退款公鑰> OP_CHECKSIG
OP_ENDIF
輸出 3(Received HTLC #1):
- 金額:0.03 BTC
- 腳本:OP_HASH160 <HTLC哈希> OP_EQUAL
OP_IF
<Alice_預圖像公鑰>
OP_ELSE
<Bob_延遲公鑰> OP_CHECKSEQUENCEVERIFY OP_DROP
<Alice_過期退款公鑰> OP_CHECKSIG
OP_ENDIF
Commitment Number(狀態編號)
每個 Commitment Transaction 都有一個唯一的編號,從 0 開始遞增。這個編號在雙方的視角中是互補的:
- Alice 的 Commitment #5 = Bob 的 Commitment #495(總數 - 1 - 5)
- 確保雙方不會對同一個狀態產生衝突
Commitment Transaction 狀態解析
狀態機制
閃電網路使用「局部」更新機制,每次支付都會產生新的 Commitment Transaction:
- 狀態 N:雙方各自持有對方的簽名
- 狀態 N+1:雙方交換新簽名,舊狀態失效
- 狀態 N+2:再更新...
輸出詳細解析
to_local 輸出
格式:
OP_IF
<延遲公鑰>
OP_CHECKSEQUENCEVERIFY
OP_DROP
<本地公鑰>
OP_CHECKSIG
OP_ELSE
<對手延遲公鑰>
OP_CHECKSEQUENCEVERIFY
OP_DROP
<對手公鑰>
OP_CHECKSIG
OP_ENDIF
解讀:
- 默認路徑:經過 CSV 延遲後,創建者可立即提取資金
- 欺詐路徑:如果對手試圖欺騙,創建者可以在延遲期內使用 penalty key 盜取資金
HTLC 輸出
HTLC 輸出有兩種狀態,視 HTLC 是否已被解決:
狀態 A:HTLC 進行中
條件 1(正確預圖像):<收款方公鑰> OP_CHECKSIG
條件 2(過期):<付款方延遲公鑰> OP_CSV OP_DROP <付款方退款公鑰> OP_CHECKSIG
狀態 B:HTLC 已解決
- 收款方出示預圖像,資金直接支付給收款方
- 原有的 HTLC 輸出被替換為普通輸出
CSV(Check Sequence Verify)
OP_CSV 是Commitment Transaction 安全性的關鍵:
- 相對時間鎖:從該輸出被區塊鏈確認開始計算
- 常用值:
- 144 區塊(約 1 天):標準延遲
- 1008 區塊(約 1 週):長期通道
- 目的:提供足夠時間讓誠實方響應欺詐行為
懲罰機制詳解
為什麼需要懲罰?
閃電網路的「非同步」特性帶來了雙花風險:
- Alice 和 Bob 可以同時广播不同的 Commitment Transaction
- 區塊鏈會接受其中一筆,導致另一方損失
Revocable Contract
每個 Commitment Transaction 都包含「可撤銷」的組件:
- 延遲輸出:使用 penalty key
- HTLC:在過期前可以被提取
欺詐場景
假設 Bob 試圖欺騙 Alice:
時間線:
T+0:雙方同意 Commitment #10
T+1:Alice 發現 Bob 广播了 Commitment #10(但已過時)
T+2:Alice 使用 penalty key,盜取 Bob 在 to_local 和 HTLC 輸出中的全部資金
T+3:Bob 損失資金,Alice 獲得獎勵
實際數值:Penalty 計算
假設通道狀態(Bob 的欺詐):
| 輸出 | 金額 | Penalty 後果 |
|---|---|---|
| to_local(Bob) | 0.20 BTC | Alice 盜走 |
| to_remote(Alice) | 0.30 BTC | Alice 獲得 |
| Offered HTLC #1 | 0.05 BTC | Alice 盜走 |
| Received HTLC #2 | 0.08 BTC | Alice 盜走 |
| 總計 | 0.63 BTC | Alice 獲得 |
Bob 原本只能獲得 0.30 BTC(to_remote),但因為欺詐,損失了全部 0.63 BTC。
HTLC 深入解析
HTLC 結構
HTLC(Hash Time Locked Contract)是閃電網路實現跨節點支付的基礎:
HTLC 輸出腳本:
OP_HASH160 <R-Hash> OP_EQUAL
OP_IF
<收款方預圖像路徑>
OP_ELSE
OP_SWAP <付款方公鑰> OP_CHECKSIG
OP_IF
<延遲路徑>
OP_ENDIF
OP_ENDIF
預圖像(Preimage)
預圖像是 HTLC 機制的核心:
- 長度:32 bytes(SHA-256 輸出)
- 生成:收款方隨機生成
- 保密:在支付完成前不公開
- 哈希:收款方提供 R = SHA-256(preimage)
HTLC 數值範例
假設 Alice 通過 Bob 向 Carol 支付 0.01 BTC:
流程:
1. Alice -> Bob:建立 HTLC
- HTLC 金額:0.01 BTC
- R-Hash:SHA-256(Carol的預圖像)
- 過期:10 區塊後
2. Bob -> Carol:轉發 HTLC
- 金額:0.01 BTC(加上 Bob 的費用)
- R-Hash:同上
- 過期:5 區塊後(更短)
3. Carol -> Bob:揭示預圖像
- Carol 揭示預圖像 R
- Bob 獲得款項
4. Bob -> Alice:揭示預圖像
- Bob 向 Alice 揭示 R
- Alice 確認支付成功
HTLC 過期參數
過期時間的設置需要平衡:
| 參數 | 典型值 | 考量 |
|---|---|---|
| cltv_expiry | 144-1008 區塊 | 給收款方足夠時間響應 |
| incoming CLTV | 比 outgoing 短 | 確保時間 buffer |
| 最小 HTLC | 1 satoshi | 灰塵限制 |
| 最大 HTLC | 通道容量 | 單筆支付上限 |
通道關閉機制
協商關閉(Mutual Close)
正常情況下,雙方協商關閉通道:
Mutual Close Transaction:
- 創建費用:預設 250 satoshi
- 剩餘餘額:按最新 Commitment 分配
- 延遲:0(立即可花費)
單方面關閉(Unilateral Close)
任何一方可以單方面广播最新的 Commitment Transaction:
Unilateral Close Timeline:
- T+0:广播 Commitment Transaction
- T+1:等待區塊確認
- T+2~N:to_local/ to_remote 輸出進入 CSV 延遲
- T+N+1:資金解鎖,可提取
- T+N+2+penalty window:penalty key 失效
違約關閉(Devised Close)
當一方無法響應時(如離線),另一方可以啟動違約關閉:
- 使用對方的延遲輸出
- 等待較長的 CSV 延遲
- 期間無法使用 penalty
流動性管理
問題分析
通道餘額是「單向」的:
- 如果你要付款,你需要輸出流動性
- 如果你要收款,你需要輸入流動性
流動性範例
假設 Alice -> Bob 通道:
| 狀態 | Alice 餘額 | Bob 餘額 | 流動性限制 |
|---|---|---|---|
| 初始 | 0.50 BTC | 0.30 BTC | Alice 可付款,Bob 可收款 |
| Alice 付 0.10 BTC | 0.40 BTC | 0.40 BTC | Alice 仍可付款 |
| Alice 付 0.40 BTC | 0.10 BTC | 0.70 BTC | Alice 流動性耗盡 |
解決方案
- Submarine Swaps:鏈上換成鏈下流動性
- 將鏈上 BTC 交換為通道內的流動性
- 費用:約 0.5-1%
- Rebalancing:調整通道餘額
- 通過循環支付重新分配餘額
- 需要路由節點配合
- Loop:從通道抽出資金
- 將通道餘額導出到鏈上地址
- Lightning Labs Loop 服務
- Dual Funding:雙方共同增資
- 在通道運作時增加容量
- 需要雙方同意
相關文章:
本文包含
相關文章
- 閃電網路路由機制完全指南 — 深入解析閃電網路的路由演算法、費用計算、流動性管理與隱私保護機制。
- Eltoo 通道機制 — 理解 Eltoo 協議設計與閃電網路升級機制。
- 通道工廠 (Channel Factories) — 理解多參與者通道聚合,提升閃電網路擴展性。
- 閃電網路流動性管理策略 — 深入解析閃電網路通道流動性管理、通道餘額優化與再平衡技術。
- Taproot Channels 閃電升級 — Taproot 如何提升閃電網路的隱私與效率。
延伸閱讀與來源
- BOLT 規範 閃電網路技術規範
- Route Finding 路徑查找機制
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!