那串以 lnbc 开头的“乱码”是什么
在闪电网络里收款,商家给你的多半是一长串字符,手机扫码就完成支付。这串字符叫 BOLT 11 付款请求,本质是一段用 Bech32 编码(与比特币隔离见证地址同一套编码)写成的结构化文本。它以 ln 开头,后面接网络前缀:主网是 lnbc,测试网 lntb,签名测试网 lntbs,本地回归测试 lnbcrt。规范建议二维码里用大写字母,以减少扫码误读,但编码规则本身大小写等价,小写同样有效。闪电发票通常远超 Bech32 原先为手抄设计的九十字符上限,规范明确允许超出,因为这张“地址”几乎总是机器扫码而非人眼誊抄。
金额是怎么塞进前缀里的
前缀后面紧跟一段可选的金额与倍率字母。计价单位约定是比特币本身而不是聪,倍率字母有四种:m 千分之一、u 百万分之一、n 十亿分之一、p 万亿分之一。例如以 u 结尾的金额,读取方要乘百万分之一换算成比特币。p 是特例:闪电结算的最小单位是毫秒聪,万亿分之一聪无法在网络上实际划转,所以规范要求使用 p 时金额末位必须是零,保证换算回毫秒聪没有余数。金额也可以整个省略,表示“收款方不预设数额”,常见于随喜捐赠。读端解析时若发现倍率组合出不来合法毫秒聪,应直接拒付。
时间戳、有效期与创建时间
发票的数据段以创建时间戳开头,单位秒;随后是一串标签字段。其中 x 字段给出有效期,以创建时刻起算的秒数,未写明时默认三千六百秒,也就是一个小时。要注意这只是“商家愿意按这张票的条件收款”的时间窗口,与比特币链上没有任何关系——过期不产生任何费用或链上动作,重新生成一张发票即可。
标签字段这锅“字母汤”
发票的正文是一组带标签的字段,最关键的几个:p 是支付哈希,必填且唯一,收款完成时对方给出的支付前像必须哈希成它,它是整笔付款的“合同编号”;s 是二百五十六位支付密文,同样必填,作用是防止中间节点探测付款终点,细节见本专题 payment_secret 篇;d 或 h 二选一必填,前者是 UTF-8 短描述,后者是描述的哈希,用于超过六百三十九字节的长说明;c 规定最后一跳的绝对时间锁增量,未写时默认十八;n 可以钉住收款节点公钥,让扫码者无法替换收款人;f 是回退链上地址,闪电路径走不通时可退回普通比特币转账;r 出现一次或多次,携带通往私有节点的路线提示,供收款方不公开身份时使用。整张发票末尾有收款节点签名,改动任何一个字符——哪怕只换一位金额——都会让校验和或签名失效,钱包应当立即报错而不是“尽力解析”。
普通用户核对什么
扫码付款前值得核对三件事:前缀是否是你资产所在网络的(主网发票一定是 lnbc 开头,收到 lntb 说明对方环境不对);金额段是否与商品价一致,尤其是小数点位与倍率字母的组合;描述字段是不是你在商家页面上看到的内容。发票不写明金额时,务必先在商家订单页确认数额再手动填写,不要“扫了直接付”。闪电付款一经路由成功即不可撤回,这与链上交易确认前的可替换空间是两套规则。本文只讲编码与格式机制,不构成任何支付或投资建议。
三个容易读错的角落
第一是“地址”与“发票”的关系。发票里的回退地址字段是可选的,它的含义是“如果闪电路径走不通,可以退回普通链上转账”,而不是“这张发票同时支持两种方式自动择优”。把回退地址当主路径使用,会绕开闪电的即时性,还要自己承担链上手续费与确认等待。第二是过期时间与安全性的混淆:一张过期发票只是商家不再接受它,签名与校验和依然合法,攻击者无法靠“等到过期”拿到什么,但复用旧发票会导致付款被拒而不是被盗。第三是描述字段的可信度:短描述字段由收款方自填,与订单系统没有任何密码学绑定,它是给人看的提示而非可验证承诺。想验证内容而非仅展示,用描述哈希字段的形式,或干脆把订单号写进金额与一次性发票的组合里,用钱包界面与商家页面的双重显示互为校验。
一个把字段读成风险清单的用法
把发票当结构文本来读,能帮你把“扫了就付”变成有依据的动作:前缀决定网络,金额段决定数额,x 决定还剩多久过期,n 决定收款人能否被换掉,r 决定付款要走哪条私有路线。个人用户最实用的一条是过期时间——在拥挤时段生成发票后拖很久才付款,往往不是网络问题而是发票已到期,重新生成一张的成本是零。商家侧的常规做法是给每笔订单现开一张带金额与短描述的发票,并把有效期设得略长于结账流程,避免用户在付款最后一步撞上过期;把有效期设得过短会制造无谓失败,设得过长得接受重复使用带来的对账混乱,两种偏差都可以从失败率曲线里读出来。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。