闪电网络发票全解析:开发者与用户的实用指南

·

闪电网络发票(Lightning Invoice)是比特币二层扩容方案——闪电网络(Lightning Network)中最核心的支付凭证。它遵循 BOLT 11 标准,确保任何兼容的钱包或节点都能识别并完成支付。本文将用通俗易懂的语言拆解发票结构、字段含义、常见场景,并穿插 FAQ 与实战案例,帮助你快速上手。

闪电网络发票长什么样?

下面是一段真实的闪电网络发票示例:

lnbc20m1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqhp58yjmdan79s6qqdhdzgynm4zwqd5d7xmw5fk98klysy043l2ahrqsfpp3qjmp7lwpagxun9pygexvgpjdc4jdj85fr9yq20q82gphp2nflc7jtzrcazrra7wwgzxqc8u7754cdlpfrmccae92qgzqvzq2ps8pqqqqqqpqqqqq9qqqvpeuqafqxu92d8lr6fvg0r5gv0heeeqgcrqlnm6jhphu9y00rrhy4grqszsvpcgpy9qqqqqqgqqqqq7qqzqj9n4evl6mr5aj9f58zp6fyjzup6ywn3x6sk8akg5v4tgn2q8g4fhx05wf6juaxu9760yp46454gpg5mtzgerlzezqcqvjnhjh8z3g2qqdhhwkj

虽然看似乱码,但它其实由 人类可读前缀数据段 两部分组成,下文会逐层拆解。

URI 方案:让浏览器识别闪电支付

为了让网页或 App 能直接唤起钱包,闪电网络发票可加上 lightning: 前缀,形成类似 lightning:lnbc20m1p... 的 URI。未来,当你在网页点击这样的链接,系统会弹出钱包让你一键付款,体验接近支付宝扫码。

👉 想立即体验闪电支付?点这里模拟一次零成本转账。

发票结构逐字段拆解

1. 前缀(Prefix)

2. 时间戳(Timestamp)

Unix 时间戳,记录发票创建时间,用于计算有效期。

3. 标签字段(Tagged Fields)

标签名称作用
ppayment_hash支付哈希,收款方最终需揭示原像以证明收款
spayment_secret防止中间节点探测收款人身份
ddescription简短支付说明,如“一杯咖啡”
npayee_pub_key收款节点公钥
hdescription_hash长描述的哈希,当 d 放不下时使用
xexpiry发票过期秒数,默认 3600 秒
cmin_final_cltv_expiry最后一跳 HTLC 的 CLTV 最小值
ffallback_address闪电支付失败时退回的链上地址
rroute_hints私有通道路由提示,帮助付款方找到路径
9features位图,声明节点支持的特性

4. 签名(Signature)

收款方用私钥对整个发票签名,付款方可用 n 字段中的公钥验证,确保发票未被篡改。

大小写与二维码优化

闪电网络发票采用 Bech32 编码,理论上应全小写。但全大写字符在二维码中占更少空间,因此你常看到大写版本。钱包解码时会自动忽略大小写差异。

LNURL:超越一次性发票

LNURL 是一种更灵活的交互协议,把 URL 编码成 lnurl... 字符串。钱包解码后向服务器请求 JSON,获取可复用的收款码、提现链接或登录会话。它解决了 BOLT 11 发票“一次性”痛点,让商家可张贴静态二维码长期收款。

👉 深入了解 LNURL 如何打造丝滑的闪电网络体验。

实战:如何解码发票

使用 lncli decodepayreq <invoice> 即可把发票还原成 JSON。以上文示例为例,关键字段如下:

{
  "destination": "03e7156ae33b0a208d0744199163177e909e80176e55d97a2f221ede0f934dd9ad",
  "payment_hash": "0001020304050607080900010203040506070809000102030405060708090102",
  "num_satoshis": "2000000",
  "timestamp": "1496314658",
  "expiry": "3600",
  "description": "",
  "fallback_addr": "1RustyRX2oai4EYYDpQGWvEL62BBGqN9T"
}

常见问题 FAQ

Q1:发票里没有写金额,可以随便填吗?
A:可以。这种“零金额发票”允许付款方自行输入任意数额,常用于打赏或捐赠场景。

Q2:发票过期了还能付款吗?
A:不能。节点会拒绝过期发票,需让收款方重新生成。

Q3:为什么有的发票扫出来是大写字母?
A:为了节省二维码空间,钱包会自动转换成大写,解码时大小写不敏感。

Q4:LNURL 与 BOLT 11 发票冲突吗?
A:不冲突。LNURL 更像“前置交互协议”,最终仍会返回一张 BOLT 11 发票完成支付。

Q5:如何验证发票真伪?
A:用任意支持闪电网络的钱包或命令行工具解码,核对 destinationsignature 即可。

Q6:可以手动修改发票金额吗?
A:不行。任何改动都会破坏签名,导致节点拒绝支付。

小结

闪电网络发票是闪电支付的核心载体,其严谨的 BOLT 11 标准保证了跨钱包、跨实现的兼容性。理解前缀、标签字段与 LNURL 的互补关系,能让你在开发或日常支付中游刃有余。下一步,不妨动手生成一张测试网发票,体验毫秒级到账的魅力。