閃電網路 進階
閃電網路
Lightning Network
又稱:LN、Layer 2
閃電網路(Lightning Network)是建立在比特幣之上的第二層(Layer 2)支付協議。它通過建立鏈下的支付通道網路,實現即時、低成本的比特幣交易,同時保持比特幣主鏈的安全性和去中心化特性。
為什麼需要閃電網路?
比特幣主鏈的限制:
| 特性 | 主鏈限制 | 影響 |
|---|---|---|
| 區塊大小 | ~4 MB(含 witness) | 約 7 TPS |
| 區塊時間 | 約 10 分鐘 | 確認慢 |
| 手續費 | 隨網路擁堵浮動 | 小額不划算 |
| 隱私 | 交易公開可查 | 金流可追蹤 |
閃電網路的解決方案:
| 特性 | 閃電網路 | 優勢 |
|---|---|---|
| 容量 | 理論上無限 | 百萬級 TPS |
| 速度 | 毫秒級 | 即時支付 |
| 手續費 | 通常 < 1 sat | 微支付可行 |
| 隱私 | 僅通道參與者知道 | 更好的隱私 |
核心概念
支付通道
兩個用戶之間的雙向支付通道:
開通道流程:
1. Alice 和 Bob 創建 2-of-2 多簽地址
2. Alice 存入 0.1 BTC(鏈上交易)
3. 通道開啟,初始餘額:Alice 0.1 BTC, Bob 0 BTC
鏈下支付:
Alice → Bob 0.01 BTC
新餘額:Alice 0.09 BTC, Bob 0.01 BTC
(無需鏈上交易)
關閉通道:
廣播最終餘額分配到鏈上
承諾交易(Commitment Transaction)
每次鏈下支付都會創建新的承諾交易:
承諾交易結構:
輸入:2-of-2 多簽資金
輸出:
- Alice 的餘額(可能有時間鎖)
- Bob 的餘額
特點:
- 雙方各持有一個版本
- 舊版本被撤銷(透過 revocation key)
- 可隨時廣播,但正常情況下不會
多跳路由
不需要直接通道,可透過中間節點支付:
Alice ←→ Carol ←→ Bob
Alice 想付給 Bob 1000 sat:
1. Bob 生成 preimage,計算 hash
2. Alice 發送 HTLC 給 Carol(鎖定 1001 sat)
3. Carol 發送 HTLC 給 Bob(鎖定 1000 sat)
4. Bob 用 preimage 解鎖從 Carol 收款
5. Carol 用相同 preimage 從 Alice 收款
6. Carol 賺取 1 sat 路由費
HTLC(雜湊時間鎖合約)
確保多跳支付的原子性:
HTLC 腳本邏輯:
IF
# 知道 preimage 可以立即花費
<接收方公鑰> CHECKSIG
HASH160 <hash> EQUAL
ELSE
# 超時後發送方可取回
<超時區塊> CHECKLOCKTIMEVERIFY
<發送方公鑰> CHECKSIG
ENDIF
發票(Invoice)
接收方生成的支付請求,包含:
BOLT 11 發票範例:
lnbc10u1pwsjad...(編碼字串)
解碼後:
{
"amount": 10000 sat,
"payment_hash": "abc123...",
"description": "咖啡",
"expiry": 3600, // 1 小時過期
"routing_hints": [...], // 路由提示
"node_pubkey": "..."
}
BOLT 12 Offers(新標準)
靜態收款碼:
lno1pq...(可重複使用)
優點:
- 不過期
- 可重複使用
- 支援退款
- 更好的隱私
網路拓撲
節點類型
| 類型 | 角色 | 特點 |
|---|---|---|
| 路由節點 | 提供流動性 | 需要大量資金 |
| 商家節點 | 接收支付 | 需要入向流動性 |
| 個人錢包 | 發送支付 | 可用 LSP |
| LSP | 服務提供商 | 代管通道管理 |
通道流動性
┌─────────────────┐
│ Alice ←→ Bob │
│ [0.05] ←→ [0.05]│
└─────────────────┘
本地餘額(Local Balance):可發送金額
遠端餘額(Remote Balance):可接收金額
流動性問題:
- 新通道只有出向流動性
- 需要平衡才能雙向使用
閃電網路統計(2024)
| 指標 | 數值 |
|---|---|
| 公開節點數 | ~15,000+ |
| 公開通道數 | ~60,000+ |
| 網路容量 | ~5,000+ BTC |
| 平均通道大小 | ~0.08 BTC |
使用場景
日常支付
場景:咖啡店購買咖啡 200 sat
主鏈:手續費可能 > 咖啡價格 ❌
閃電:手續費 < 1 sat ✓
串流支付
場景:音樂串流按秒計費
每秒支付 1 sat
連續聽 1 小時 = 3600 sat
主鏈不可能,閃電可行 ✓
跨境支付
場景:從台灣匯款到美國
傳統銀行:3-5 天,高手續費
閃電網路:秒到,極低費用
遊戲內購
場景:購買遊戲道具 100 sat
即時確認,無需等待
適合遊戲內微交易
閃電錢包選擇
託管錢包(適合新手)
| 錢包 | 平台 | 特點 |
|---|---|---|
| Wallet of Satoshi | iOS/Android | 最簡單 |
| Strike | iOS/Android | 法幣整合 |
| Alby | 瀏覽器擴充 | 適合網頁支付 |
非託管錢包(建議)
| 錢包 | 平台 | 特點 |
|---|---|---|
| Phoenix | iOS/Android | 自動通道管理 |
| Breez | iOS/Android | 商家友善 |
| Zeus | iOS/Android | 進階功能 |
| Mutiny | 網頁/PWA | 開源隱私優先 |
自架節點
| 軟體 | 特點 |
|---|---|
| LND | 最普及,文檔完善 |
| CLN | Core Lightning,輕量 |
| Eclair | ACINQ 開發,移動友善 |
| LDK | 開發框架,可嵌入 |
開通道策略
選擇連接對象
好的路由節點特徵:
- 高正常運行時間(uptime)
- 大量通道連接
- 低手續費率
- 足夠的流動性
通道大小建議
| 用途 | 建議大小 |
|---|---|
| 個人小額支付 | 100k-500k sat |
| 頻繁使用 | 1M-5M sat |
| 商家 | 5M+ sat |
| 路由節點 | 10M+ sat |
限制與挑戰
技術限制
| 限制 | 說明 | 解決方案 |
|---|---|---|
| 需要線上 | 接收需在線 | LSP 代收 |
| 通道容量 | 單筆上限 | 多路徑支付(MPP) |
| 入向流動性 | 新用戶難收款 | 購買流動性 |
| 備份複雜 | 需備份通道狀態 | SCB 靜態備份 |
安全考量
風險類型:
1. 強制關閉風險(對方不合作)
2. 過期 HTLC(需要監控)
3. 通道欺詐(需要 watchtower)
4. 流動性攻擊(jamming)
防護措施:
- 使用 watchtower 服務
- 定期備份通道狀態
- 選擇信譽良好的對手方
開發資源
BOLT 規範
BOLT 1-12:閃電網路規範
- BOLT 1: 基礎協議
- BOLT 2: 通道管理
- BOLT 3: 交易格式
- BOLT 4: 洋蔥路由
- BOLT 11: 發票格式
- BOLT 12: Offers
API 和 SDK
| 語言 | 庫 |
|---|---|
| JavaScript | lnbits, lnd-grpc |
| Python | lnd-grpc, pyln-client |
| Rust | LDK, rust-lightning |
| Go | lnd (native) |
測試網路
regtest:本地測試
testnet:公共測試網
signet:受控測試網
工具:
- Polar:本地網路模擬
- Lightning Terminal:節點管理
未來發展
- Taproot Channels:更小的鏈上足跡
- PTLCs:替代 HTLC,更好隱私
- Channel Factories:多方共享通道
- Splicing:不關閉通道調整容量
- Async Payments:離線接收支付