進階
LNURL 協議
了解 LNURL 協議套件如何通過 HTTP 服務簡化閃電網路的用戶體驗,包括 LNURL-pay、LNURL-withdraw 和 Lightning Address。
15 分鐘
什麼是 LNURL?
LNURL 是一套建立在 HTTP/HTTPS 之上的協議,旨在改善閃電網路的用戶體驗。 它通過 bech32 編碼的 URL 讓錢包可以與服務進行標準化的互動, 支持支付、提款、登入認證等多種場景。
核心理念: LNURL 將 BOLT 11 發票的「單次使用」模式擴展為可重用的服務端點, 用戶只需掃描一個靜態的 QR 碼就能完成各種操作。
LNURL 編碼
LNURL 編碼格式: 原始 URL: https://example.com/api/lnurl?q=abc123 Bech32 編碼後: LNURL1DP68GURN8GHJ7MRWW4EXCTNXD9SHG6NPVCHXXMMD9AKXUATJDSKHW6T5DPJ8YCTH 特點: - 使用 bech32 編碼(與比特幣地址相同) - 人類可讀部分:LNURL - 內建錯誤檢測 - 不區分大小寫(方便手動輸入) 解碼流程: 1. 識別 LNURL 前綴 2. Bech32 解碼 3. 得到原始 HTTPS URL 4. 錢包請求該 URL
LNURL 子協議
LNURL-pay
允許用戶向靜態端點支付,服務端動態生成發票:
LNURL-pay 流程:
1. 錢包掃描 LNURL
│
▼
2. GET 請求服務端
GET https://example.com/lnurlp/alice
│
▼
3. 服務返回支付參數
{
"callback": "https://example.com/lnurlp/alice/pay",
"tag": "payRequest",
"minSendable": 1000, // 最小 1 sat (毫聰)
"maxSendable": 100000000, // 最大 100,000 sats
"metadata": "[["text/plain","Pay to Alice"]]",
"commentAllowed": 140 // 可選:允許備註
}
│
▼
4. 用戶選擇金額(如 10,000 sats)
│
▼
5. 錢包請求發票
GET callback?amount=10000000&comment=Thanks
│
▼
6. 服務返回發票
{
"pr": "lnbc100u1p...", // BOLT 11 發票
"routes": [],
"successAction": { // 可選:支付成功後的動作
"tag": "message",
"message": "Thank you!"
}
}
│
▼
7. 錢包支付發票 LNURL-withdraw
允許用戶從服務提款(如領取紅包、獎勵等):
LNURL-withdraw 流程:
1. 掃描提款 LNURL
│
▼
2. GET 請求
GET https://example.com/lnurlw/voucher123
│
▼
3. 服務返回提款參數
{
"callback": "https://example.com/lnurlw/voucher123/claim",
"tag": "withdrawRequest",
"k1": "random_challenge",
"minWithdrawable": 1000,
"maxWithdrawable": 50000000,
"defaultDescription": "Withdraw from Example.com"
}
│
▼
4. 用戶選擇金額
│
▼
5. 錢包生成發票,發送給服務
GET callback?k1=...&pr=lnbc500u1p...
│
▼
6. 服務支付發票
{
"status": "OK"
}
│
▼
7. 用戶收到款項! LNURL-auth
使用閃電網路密鑰進行無密碼登入:
LNURL-auth 流程:
1. 網站顯示 LNURL-auth QR
│
▼
2. GET 請求
GET https://example.com/lnurlauth?tag=login&k1=challenge
│
▼
3. 錢包解析登入請求
{
"tag": "login",
"k1": "32_byte_random_challenge"
}
│
▼
4. 錢包派生特定網站的密鑰對
linkingKey = derivePath(domain, walletSeed)
│
▼
5. 簽名挑戰並發送
GET callback?sig=signature&key=linkingPubKey
│
▼
6. 服務驗證簽名
- 驗證 sig 對 k1 有效
- 記錄 linkingPubKey 為用戶身份
│
▼
7. 登入成功!
安全特性:
- 每個網站有唯一的 linkingKey(隱私保護)
- 不洩露真實的節點公鑰
- 無需密碼,不可釣魚 LNURL-channel
請求服務端開設通道給用戶:
LNURL-channel 流程:
1. 掃描通道請求 LNURL
│
▼
2. 服務返回通道參數
{
"tag": "channelRequest",
"uri": "nodeId@host:port",
"callback": "...",
"k1": "..."
}
│
▼
3. 錢包連接到服務節點
│
▼
4. 請求開通道
GET callback?k1=...&remoteid=walletNodeId&private=1
│
▼
5. 服務開設通道給用戶
用途:
- 新用戶快速獲得入站流動性
- 交易所提供通道服務
- LSP 服務 Lightning Address
Lightning Address 是 LNURL-pay 的人類可讀形式,看起來像電子郵件地址:
Lightning Address 格式: 地址:[email protected] 解析流程: 1. 錢包識別 Lightning Address 格式 2. 將地址轉換為 LNURL-pay 端點: https://example.com/.well-known/lnurlp/alice 3. 後續流程與 LNURL-pay 相同 設置要求: - 網站需要在 /.well-known/lnurlp/ 路徑 - 提供標準的 LNURL-pay 響應 - 支援 HTTPS 優勢: - 易於記憶和分享 - 類似電子郵件,用戶熟悉 - 可以印在名片上 - 靜態地址,不需要更換 示例服務: - Wallet of Satoshi - Strike - Alby - 自建 LNbits
Success Actions
LNURL-pay 支持在支付成功後執行動作:
message
顯示純文字訊息,如感謝信。
{"tag": "message", "message": "..."} url
提供連結,如數位商品下載。
{"tag": "url", "url": "..."} aes
AES 加密的數據,使用 preimage 解密。
{"tag": "aes", "ciphertext": "...", "iv": "..."} LNURL vs BOLT 12
| 特性 | LNURL | BOLT 12 |
|---|---|---|
| 傳輸層 | HTTPS (HTTP/TLS) | Onion Messages |
| 依賴 | Web 服務器 | 閃電網路節點 |
| 隱私 | 服務端知道 IP | 洋蔥路由隱私 |
| 離線運作 | 需要服務端在線 | 可完全離線 |
| 採用狀態 | 廣泛採用 | 逐步推進 |
| 額外功能 | 登入、提款 | 退款、訂閱 |
安全考量
風險
- • 服務端可能記錄 IP 和支付資訊
- • DNS 劫持可能導致資金損失
- • 中心化服務有單點故障風險
- • TLS 憑證問題可能被利用
緩解措施
- • 必須使用 HTTPS
- • 驗證域名和憑證
- • 使用 Tor 保護 IP
- • 自建服務保持控制
錢包支援
Zeus Full
Breez Full
Phoenix Partial
Wallet of Satoshi Full
BlueWallet Full
Alby Full
自建 LNURL 服務
常用工具:
1. LNbits
- 完整的 LNURL 插件
- 支援所有子協議
- https://lnbits.com
2. lnurl-node
- Node.js 庫
- 方便集成到現有應用
- npm install lnurl
3. satdress
- Lightning Address 服務
- 自託管
- https://github.com/fiatjaf/satdress
4. LNDhub + BlueWallet
- 託管錢包解決方案
- 支援 LNURL
簡單 LNURL-pay 端點範例(Node.js):
app.get('/.well-known/lnurlp/:username', (req, res) => {
res.json({
callback: `https://${domain}/lnurlp/${req.params.username}/pay`,
tag: 'payRequest',
minSendable: 1000,
maxSendable: 100000000,
metadata: JSON.stringify([['text/plain', `Pay ${req.params.username}`]])
});
}); 相關資源
下一步: 了解 BOLT 規範 深入理解閃電網路的協議標準。
已複製連結