閃電網路 BOLTs 規範完全指南

深入解析閃電網路的核心技術規範,包括 BOLT 11 支付請求格式、BOLT 2 通道建立、BOLT 3 HTLC 機制、BOLT 4 路由協議、BOLT 5 狀態管理等完整技術細節。

閃電網路 BOLTs 規範完全指南

概述

閃電網路(Lightning Network)是比特幣最重要的第二層擴展解決方案,而支撐其運作的核心正是 BOLT 規範。BOLT 是「Basis of Lightning Technology」的縮寫,這一系列技術規範定義了閃電網路的協議設計、訊息格式、通道管理與路由機制。本文將深入解析 BOLTs 規範的完整內容,幫助讀者理解閃電網路的技術基礎與設計原理。

BOLTs 規範的架構

規範的層級結構

BOLTs 規範採用分層設計,不同的 BOLT 負責不同的功能領域。目前主要的 BOLTs 包括:

每一個 BOLT 都有其特定的角色,共同構成完整的閃電網路協議棧。

規範的演進

BOLTs 規範是開放且持續演進的。隨著閃電網路的實際部署經驗累積,規範也在不斷更新。主要的閃電網路實現——包括 LND、c-lightning、Eclair 和 Core Lightning——都遵循這些規範,確保彼此之間的互操作性。

BOLT 11:支付請求格式

請求格式詳解

BOLT 11 定義了閃電支付請求的標準格式,這是使用者進行閃電支付時最常接觸的部分。一個典型的閃電網路支付請求看起來像這樣:

lnbc100n1p0testn...

這個字串包含了所有必要的支付資訊:金額、節點識別碼、過期時間、支付雜湊等。

編碼結構

閃電支付請求使用 Bech32 編碼,這與比特幣的隔離見證地址使用相同的編碼方式。解碼後的資料包含以下欄位:

支付請求解析
═══════════════════════════════════════════════════════════════════════════════

lnbc100n1p0testn...
├─ lnbc: 閃電網路 Bech32 前綴
├─ 100n: 金額 100 毫比特幣 (0.000001 BTC)
├─ p0: 時間戳記和支付雜湊編碼
└─ ...: 其他可選欄位和校驗和

金額表示

BOLT 11 使用特別的金額表示法:

金額字首使用小寫字母表示:

BOLT 2:點對點訊息協定

通道建立流程

BOLT 2 定義了閃電通道的建立過程。這是閃電網路最核心的協議之一,包含了複雜的密碼學交互。

通道建立流程
═══════════════════════════════════════════════════════════════════════════════

┌─────────┐                              ┌─────────┐
│  Alice  │                              │   Bob   │
└────┬────┘                              └────┬────┘
     │                                        │
     │─────── Open Channel ──────────────────▶│
     │                                        │
     │◀────── Accept Channel ───────────────│
     │                                        │
     │────── Funding Created (Tx) ──────────▶│
     │                                        │
     │◀───── Funding Signed ──────────────────│
     │                                        │
     │───── Funding Locked ─────────────────▶│
     │                                        │
     │◀───── Channel Ready ──────────────────│
     │                                        │
     │         通道已建立完成                  │
     └────────────────────────────────────────┘

訊息類型

通道建立過程中交換的訊息包括:

  1. open_channel:發起者發送,包含通道參數
  2. accept_channel:接收者回應,接受通道參數
  3. funding_created:發起者創建資助交易
  4. funding_signed:接收者簽署資助交易
  5. funding_locked:雙方確認資助交易已確認
  6. channel_ready:通道可以開始使用

通道參數

每個閃電通道都有以下關鍵參數:

BOLT 3:比特幣交易與 HTLC

HTLC 機制詳解

Hash Time Locked Contract(HTLC)是閃電網路的核心技術元件。BOLT 3 詳細定義了 HTLC 的比特幣腳本實現。

HTLC 的基本邏輯是:

HTLC 輸出腳本範例
═══════════════════════════════════════════════════════════════════════════════

# 收款方取款條件
OP_HASH160 <ripemd160(sha256(preimage))> OP_EQUALVERIFY
OP_DUP OP_HASH160 <receiver_pubkey> OP_EQUALVERIFY OP_CHECKSIG

# 付款方退款條件(帶時間鎖)
OP_IF
    OP_DUP OP_HASH160 <sender_pubkey> OP_EQUALVERIFY OP_CHECKSIG
OP_ELSE
    <expiry_blocks> OP_CHECKLOCKTIMEVERIFY OP_DROP
    OP_DUP OP_HASH160 <sender_pubkey> OP_EQUALVERIFY OP_CHECKSIG
OP_ENDIF

櫻桃取樣

BOLT 3 還定義了「櫻桃取樣」(Splicing)機制,這是一種動態調整通道容量的方法:

交易結構

閃電通道使用特殊的兩方交易結構:

  1. 資助交易(Funding Transaction):鎖定通道資金的基礎交易
  2. 承諾交易(Commitment Transaction):記錄通道當前狀態
  3. 結算交易(Settlement Transaction):HTLC 履約時使用
  4. 關閉交易(Closing Transaction):通道正常關閉時使用

每個參與者都需要保存多個簽名的承諾交易,以便在需要時執行正確的通道狀態。

BOLT 4:路由與訊息轉發

路由協議

BOLT 4 定義了閃電網路的訊息轉發機制。節點通過互相公告通道資訊來建立網路拓撲。

路由發現流程
═══════════════════════════════════════════════════════════════════════════════

節點發布的通道公告:
┌─────────────────────────────────────────────────────────────────────────────┐
│  Channel Announcement                                                        │
│  ├── 節點密鑰簽名 1                                                         │
│  ├── 節點密鑰簽名 2                                                         │
│  ├── 節點公鑰 1                                                             │
│  ├── 節點公鑰 2                                                             │
│  ├── 短期通道公鑰 1                                                         │
│  ├── 短期通道公鑰 2                                                         │
│  ├── 比特幣簽名                                                             │
│  ├── 通道 ID                                                                │
│  └── 通道特性                                                               │
└─────────────────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────────────────┐
│  Channel Update (由節點定時更新)                                            │
│  ├── 通道 ID                                                                │
│  ├── 節點簽名                                                               │
│  ├── 時間戳記                                                               │
│  ├── 通道特性位                                                             │
│  ├── 最小 HTLC                                                              │
│  ├── 費用比例 (ppm)                                                         │
│  ├── 基礎費用                                                               │
│  └── HTLC 過期高度差                                                        │
└─────────────────────────────────────────────────────────────────────────────┘

費用計算

閃電網路的手續費由兩部分組成:

  1. 基礎費用(Base Fee):每個 HTLC 固定收取
  2. 比例費用(Proportional Fee):按 HTLC 金額比例收取

費用計算公式:

total_fee = base_fee + (htlc_amount * fee_proportional_millionths / 1000000)

例如,如果基礎費用為 1 毫兆比特幣,比例費用為 100 ppm(即 0.01%),則傳送 100,000 毫兆比特幣的手續費為:

total_fee = 1 + (100000 * 100 / 1000000) = 11 毫兆比特幣

Onion 路由

BOLT 4 使用「洋蔥路由」(Onion Routing)來保護隱私。每個轉發節點只知道:

洋蔥路由封裝
═══════════════════════════════════════════════════════════════════════════════

┌─────────────────────────────────────────────────────────────────────────────┐
│  Route Hint (解密後)                                                       │
│  └── 最終目的地資訊                                                         │
├─────────────────────────────────────────────────────────────────────────────┐
│  Layer 3 (節點 C 可解密)                                                   │
│  └── 節點 C 的下一跳和轉發參數                                             │
├─────────────────────────────────────────────────────────────────────────────┐
│  Layer 2 (節點 B 可解密)                                                   │
│  └── 節點 B 的下一跳和轉發參數                                             │
├─────────────────────────────────────────────────────────────────────────────┐
│  Layer 1 (節點 A 可解密)                                                   │
│  └── 節點 A 的下一跳和轉發參數                                             │
└─────────────────────────────────────────────────────────────────────────────┘

BOLT 5:通道狀態管理

通道狀態機

BOLT 5 定義了通道的生命週期狀態:

通道狀態機
═══════════════════════════════════════════════════════════════════════════════

┌─────────┐    open    ┌──────────┐    funding_created    ┌──────────────┐
│  NULL   │──────────▶│  OPENED  │─────────────────────▶│  FUNDING     │
└─────────┘            └──────────┘                       │  SIGNED      │
                                                           └──────┬───────┘
                                                                  │
                                                    funding_locked │
                                                                  ▼
┌─────────┐    close    ┌──────────┐    mutual_close    ┌──────────────┐
│ CLOSING │◀───────────│  NORMAL  │◀───────────────────│   NORMAL     │
└────┬────┘            └────┬─────┘                       └──────────────┘
     │                      │
     │ unilateral_close      │ revoke_and_ack
     ▼                      ▼
┌──────────┐          ┌──────────┐
│  WAIT    │◀─────────│  NORMAL  │
│  ONION   │          └──────────┘
│  UNKNOWN │
└──────────┘

承諾交易更新

通道狀態的每一次變化——無論是新增 HTLC、履行 HTLC 還是更新通道餘額——都需要雙方簽署新的承諾交易。

BOLT 5 定義了以下訊息:

通道關閉

通道可以通過三種方式關閉:

  1. 協商關閉(Mutual Close):雙方同意正常關閉
  2. 單邊關閉(Unilateral Close):一方直接廣播承諾交易
  3. 違約關閉(Breach Close):檢測到對方違約後的關閉

協商關閉是最經濟的選項,因為它不需要等待時間鎖到期。單邊關閉需要等待時間鎖到期才能完成資金分配。

BOLT 8:加密傳輸

Noise Protocol Framework

BOLT 8 使用 Noise Protocol Framework 作為傳輸層加密的基礎。這是一個輕量級的密碼學協議框架,提供了:

Noise Protocol 的三次握手(Handshake)過程:

Noise 握手流程
═══════════════════════════════════════════════════════════════════════════════

┌─────────┐                                            ┌─────────┐
│  Alice  │                                            │   Bob   │
└────┬────┘                                            └────┬────┘
     │                                                      │
     │───────────→  NE (Alice's ephemeral) ────────────────▶│
     │                                                      │
     │◀────────  NE, ENC(Bob's static), MAC(Bob) ─────────│
     │                                                      │
     │──────────  ENC(Alice's static), MAC(Alice) ─────────▶│
     │                                                      │
     │     雙方建立加密隧道,可傳輸應用數據                  │
     └──────────────────────────────────────────────────────┘

加密方案

閃電網路使用的加密方案:

BOLT 9:功能協商

特性位

BOLT 9 定義了節點之間協商功能的機制。每個節點在連接建立時公告自己支持的功能。

重要的特性位包括:

特性位名稱描述
option_anchors錨點輸出支持改進的承諾交易格式
optionanchorszerofeehtlc_tx零費用 HTLC 交易支持零費用的 HTLC 結算交易
optionrouteblinding路由盲化支持隱藏路由節點的機制
optionscidaliasID 別SC名支持通道 SCID 別名
option_keysend金鑰發送支持無請求的支付
option_zeroconf零確認支持零確認通道

功能協商流程

節點連接時會比較雙方的特性位,選擇雙方都支持的功能集合。如果某個必要功能不被支持,連接可能會失敗。

BOLT 10:本地資料儲存

節點資料管理

BOLT 10 定義了節點本地資料的儲存格式和原則。這包括:

節點需要能夠從本地資料中恢復完整的通道狀態,這是實現備份和災難復原的基礎。

備份考量

閃電節點的備份比比特幣全節點更複雜:

規範的未來演進

正在進行的工作

閃電網路社群持續在多個方向推進規範的演進:

  1. 通道工廠(Channel Factories):批量建立通道
  2. PTLC(Point Time Locked Contract):替代 HTLC 的新機制
  3. 路由盲化:增強隱私
  4. Wumbo 通道:更大容量的通道
  5. 原子多路徑支付:分割支付的原子性

與 Taproot 的整合

Taproot 升級為閃電網路帶來了新的可能性:

結論

BOLTs 規範是理解閃電網路技術的關鍵。從支付請求格式(BOLT 11)到通道建立(BOLT 2)、從 HTLC 機制(BOLT 3)到路由協議(BOLT 4),每一個 BOLT 都代表著閃電網路的一個重要組成部分。

這些規範的設計體現了比特幣社群對安全、隱私和可擴展性的持續追求。隨著規範的不斷演進和実装的成熟,閃電網路將繼續在比特幣的支付基礎設施中扮演關鍵角色。

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!