跳至主要內容
進階

BOLT 規範概覽

了解閃電網路的 BOLT(Basis of Lightning Technology)規範體系,這是所有閃電網路實現的標準基礎。

12 分鐘

什麼是 BOLT?

BOLT(Basis of Lightning Technology)是閃電網路的協議規範集合。 它定義了節點之間如何通訊、如何建立通道、如何路由支付等所有細節, 確保不同實現(LND、Core Lightning、Eclair 等)能夠互操作。

為什麼重要: BOLT 規範就像閃電網路的「憲法」,所有節點軟體都必須遵守這些規則才能參與網路。 理解 BOLT 是深入閃電網路開發的必經之路。

BOLT 規範列表

BOLT #1

Base Protocol

定義基礎訊息格式、傳輸層、功能位和 TLV 擴展格式。所有訊息的共同基礎。

BOLT #2

Peer Protocol

定義通道建立、正常運作和關閉的訊息協議。包括 open_channel、update_add_htlc、shutdown 等。

BOLT #3

Bitcoin Transaction

定義所有鏈上交易的格式,包括 funding transaction、commitment transaction、HTLC 交易。

BOLT #4

Onion Routing

定義洋蔥路由的封包格式,確保中間節點無法得知完整支付路徑。

BOLT #5

On-chain Handling

定義如何處理鏈上事件,包括發現通道關閉、HTLC 超時、懲罰交易等。

BOLT #7

P2P Node Discovery

定義網路拓撲廣播,包括 node_announcement、channel_announcement、channel_update。

BOLT #8

Transport Encryption

定義 Noise_XK 加密握手和訊息加密,確保節點間通訊的機密性和認證。

BOLT #9

Feature Flags

定義功能位的分配和使用,允許節點表明支援哪些可選功能。

BOLT #10

DNS Bootstrap

定義如何通過 DNS 發現初始節點,讓新節點能夠加入網路。

BOLT #11

Invoice Protocol

定義支付請求(Invoice)的格式,包括 Bech32 編碼和必要的支付資訊。

BOLT #12

Offers (草案)

新一代支付協議,支持可重複使用的支付請求、退款和訂閱等功能。

功能位系統

BOLT #9 定義了功能位(Feature Bits),讓節點可以表明支援哪些功能:

功能位類型:

奇數位 = 可選(optional)
偶數位 = 必須(required/compulsory)

例如:
bit 0/1: option_data_loss_protect
bit 4/5: option_upfront_shutdown_script
bit 8/9: var_onion_optin (TLV onion)
bit 12/13: option_static_remotekey
bit 14/15: payment_secret
bit 16/17: basic_mpp (多路徑支付)
bit 24/25: option_anchors
bit 44/45: option_route_blinding

功能位出現位置:
- init 訊息(連線時)
- node_announcement(廣播)
- channel_announcement(通道宣告)
- invoice(支付請求)

TLV 格式

BOLT #1 引入了 TLV(Type-Length-Value)格式,允許向後兼容的擴展:

TLV 結構:

┌──────────┬──────────┬──────────────────┐
│   Type   │  Length  │      Value       │
│ (bigsize)│ (bigsize)│   (Length bytes) │
└──────────┴──────────┴──────────────────┘

規則:
- Type 必須嚴格遞增
- 奇數 Type:可忽略(不認識就跳過)
- 偶數 Type:必須理解(不認識就失敗)

BigSize 編碼:
0-252:       1 byte
253-65535:   3 bytes (0xFD + 2 bytes)
65536-2^32:  5 bytes (0xFE + 4 bytes)
2^32-2^64:   9 bytes (0xFF + 8 bytes)

訊息格式

Lightning 訊息結構:

┌────────────┬─────────────────────────────┐
│  Type (2)  │         Payload             │
└────────────┴─────────────────────────────┘

訊息類型範圍:
0-999:      保留給 BOLT
1000-32767: 應用特定
32768-65535: 實驗性

常見訊息類型:
16:   init
17:   error
18:   ping
19:   pong
32:   open_channel
33:   accept_channel
34:   funding_created
128:  update_add_htlc
132:  commitment_signed
256:  channel_announcement

重要更新和改進

Anchor Outputs

允許在廣播時動態調整手續費,解決預估手續費的問題。

Static Remote Key

簡化備份恢復,對方的輸出使用固定密鑰。

Multi-Path Payments

將大額支付拆分成多個小額支付,提高成功率。

Route Blinding

隱藏接收方的最後幾跳,增強接收方隱私。

規範制定流程

BOLT 更新流程:

1. 提案
   - 在 lightning-rfc 倉庫開 issue 或 PR
   - 詳細說明動機和設計

2. 討論
   - 社群評審
   - IRC/mailing list 討論
   - 規範會議

3. 實驗
   - 至少一個實現
   - 互操作性測試

4. 採納
   - 多個實現支持
   - 合併到規範

倉庫:github.com/lightning/bolts

相關資源

下一步: 深入了解 訊息協議 的具體訊息格式和交互流程。

已複製連結
已複製到剪貼簿