BOLT 規範概覽
了解閃電網路的 BOLT(Basis of Lightning Technology)規範體系,這是所有閃電網路實現的標準基礎。
什麼是 BOLT?
BOLT(Basis of Lightning Technology)是閃電網路的協議規範集合。 它定義了節點之間如何通訊、如何建立通道、如何路由支付等所有細節, 確保不同實現(LND、Core Lightning、Eclair 等)能夠互操作。
為什麼重要: BOLT 規範就像閃電網路的「憲法」,所有節點軟體都必須遵守這些規則才能參與網路。 理解 BOLT 是深入閃電網路開發的必經之路。
BOLT 規範列表
Base Protocol
定義基礎訊息格式、傳輸層、功能位和 TLV 擴展格式。所有訊息的共同基礎。
Peer Protocol
定義通道建立、正常運作和關閉的訊息協議。包括 open_channel、update_add_htlc、shutdown 等。
Bitcoin Transaction
定義所有鏈上交易的格式,包括 funding transaction、commitment transaction、HTLC 交易。
Onion Routing
定義洋蔥路由的封包格式,確保中間節點無法得知完整支付路徑。
On-chain Handling
定義如何處理鏈上事件,包括發現通道關閉、HTLC 超時、懲罰交易等。
P2P Node Discovery
定義網路拓撲廣播,包括 node_announcement、channel_announcement、channel_update。
Transport Encryption
定義 Noise_XK 加密握手和訊息加密,確保節點間通訊的機密性和認證。
Feature Flags
定義功能位的分配和使用,允許節點表明支援哪些可選功能。
DNS Bootstrap
定義如何通過 DNS 發現初始節點,讓新節點能夠加入網路。
Invoice Protocol
定義支付請求(Invoice)的格式,包括 Bech32 編碼和必要的支付資訊。
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
相關資源
- • BOLT 規範倉庫
- • Lightning Dev Kit - Rust 閃電網路庫
- • 精通閃電網路
下一步: 深入了解 訊息協議 的具體訊息格式和交互流程。