跳至主要內容
進階

發票格式 (BOLT-11)

閃電發票是支付請求的編碼格式,包含收款所需的所有信息。

12 分鐘

什麼是閃電發票?

閃電發票(Lightning Invoice)是 BOLT-11 規範定義的支付請求格式。 它使用 Bech32 編碼,包含收款人、金額、過期時間等信息。

發票示例

lnbc1500n1pjlg3z5pp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdq5xysxxatsyp3k7enxv4jsxqzpusp5zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zs9qypqsqsp5zyg3zyg3...

發票結構

發票由以下部分組成:

部分 內容 示例
前綴 網路標識 lnbc (主網) / lntb (測試網)
金額 可選,帶單位 1500n = 1500 msat
時間戳 創建時間 Unix 時間戳
標籤數據 各種欄位 payment_hash, 描述等
簽章 收款人簽章 65 bytes

金額單位

閃電網路使用毫聰(millisatoshi, msat)作為最小單位。發票金額可使用以下後綴:

後綴 乘數 示例
m 0.001 BTC lnbc1m = 100,000 sats
u 0.000001 BTC lnbc1u = 100 sats
n 0.000000001 BTC lnbc1500n = 150 sats
p 0.000000000001 BTC lnbc1000p = 1 msat

常見標籤

p: Payment Hash

必填欄位,32 bytes 的 payment_hash。收款人創建 preimage,計算其 SHA256 哈希。 這是 HTLC 的核心。

d: Description

UTF-8 描述字符串,說明支付用途。錢包通常會顯示給用戶確認。

h: Description Hash

如果描述太長,可以只包含描述的哈希值。完整描述需要通過其他方式傳遞。

x: Expiry

發票過期時間(秒)。默認 3600 秒(1 小時)。過期後發票無效。

r: Route Hints

私有通道的路由提示,幫助發送者找到到達接收者的路徑。

n: Node ID

收款人的節點公鑰(33 bytes)。通常可以從簽章中恢復,但某些情況下需要明確指定。

解碼發票

使用命令行工具解碼發票:

# lnd
lncli decodepayreq lnbc1500n1p...

# c-lightning
lightning-cli decode lnbc1500n1p...

# 輸出示例
{
  "currency": "bc",
  "timestamp": 1234567890,
  "expiry": 3600,
  "payee": "02abcd...",
  "payment_hash": "abc123...",
  "description": "Coffee",
  "amount_msat": 150000
}

無金額發票

發票可以不包含金額,讓付款人自行決定。這常用於:

  • • 捐款
  • • 小費
  • • 可變價格的服務

注意: 無金額發票讓付款人控制金額,收款人應確保這符合預期。 某些錢包會警告用戶這類發票。

BOLT-12 Offers

BOLT-12 是新一代發票標準,解決了 BOLT-11 的一些限制:

特性 BOLT-11 BOLT-12
可重用 否(每次一個 payment_hash)
隱私 暴露節點 ID 盲化路徑
退款 不支援 支援
訂閱 不支援 支援

Offer 示例

lno1qgsqvgnwgcg35z6ee2h3yczraddm72xrfua9uve2rlrm9deu7xyfzrc2q...

LNURL

LNURL 是一套補充協議,提供更好的用戶體驗:

  • LNURL-pay:可重用的支付連結
  • LNURL-withdraw:提款連結
  • LNURL-auth:閃電登入
  • Lightning Address:email 風格地址 ([email protected])

最佳實踐

  • 設置合理的過期時間(太短用戶來不及支付,太長增加風險)
  • 添加清晰的描述讓用戶知道支付什麼
  • 如果使用私有通道,確保包含路由提示
  • 考慮使用 LNURL 或 BOLT-12 提供更好的體驗

延伸閱讀: 查看 BOLT-11 規範 了解完整的技術細節。

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