跳转到正文
buybitcoinsmart

术语表 /闪电网络与 Layer 2

BOLT11 发票

又称 BOLT11 invoice、闪电网络发票。

BOLT11 发票是什么?
BOLT11 发票是闪电网络钱包为请求付款而生成的、以 lnbc 开头的一长串字符,其中编码了金额、支付哈希、有效期和签名。

每一笔闪电网络支付都始于这样一张发票。发票包含一个256位的支付哈希,只有收款方才能解锁;除非开票方另有说明,发票在一小时后过期,因此旧二维码的截图毫无用处。在这个意义上,支付发票是安全的:资金要么到达指定节点,要么退回给您。

运作方式

BOLT11 发票是一个 bech32 字符串,由标明网络的前缀和若干带标签的字段组成。

前缀称为人类可读部分,在主网上是 lnbc,在测试网上是 lntb,在 signet 上是 lntbs,在 regtest 上是 lnbcrt。紧随其后的是金额,写作一个数字加一个倍数字母:m 表示千分之一比特币,u 表示百万分之一,n 表示十亿分之一,p 表示万亿分之一。因此 lnbc2500u 请求的是0.0025比特币。完全省略金额则得到开放式发票,由付款方自行填写。

正文是一系列带标签的字段,每个字段由单字符标签、长度和值组成。其中两个字段是必需的:支付哈希(标签 p),256位,以52个 bech32 字符写出;以及支付密钥(标签 s),另有52个字符,付款方必须在最后的洋葱载荷中原样回传。BOLT 11要求写入方恰好各包含一个,并要求读取方在没有有效 s 字段时直接令支付失败。其后是可选字段:描述,或在描述较长时使用描述的哈希;过期时间,默认为3600秒;最小最终 CLTV 过期增量,默认为18个区块,即收款方在最后一跳上要求的安全余量;收款节点 ID;备用的链上地址;以及路由提示,告诉付款方如何到达通道未公开的节点。

整张发票都有签名。签名为520位,即64字节的值加一个恢复字节,因此即使没有节点 ID 字段,钱包也能从发票中推导出支付目的地。末尾有六个字符的 bech32 校验和,因此输错字符会被发现,而不会把资金发往虚无之处。

支付哈希这一机制使发票不只是一个文本文件。收款方生成一个随机原像,对其取哈希,并把哈希写入发票。路由上的每一跳都把转发的金额锁定在同一个哈希上,只有披露原像才能释放资金。因此,支付完成后,付款方手中持有一个其哈希与发票一致的原像,这是任何商家都难以否认的密码学收据。

购买比特币时为何重要

从交易所提币时,发票是几种本可避免的错误的发生之处。

第一是过期时间。交易所的提币流程可能需要几分钟处理,在缓慢流程开始时生成的发票,等到支付时可能已经失效。如果闪电网络提币无故失败,请先在钱包中重新生成发票,再判断是否为交易所出错。默认值为一小时,但预期快速支付的钱包通常把它设为十分钟或十五分钟。

第二是金额。带有金额的发票只能按该金额支付,这正是您所需要的,因为它杜绝了多输入一个零的可能。没有金额的发票,有时称为开放式发票或零金额发票,便于接收捐款,但在提币流程中很危险。请优先选用已写明金额的版本。

第三是重复使用。BOLT11 发票在设计上只能使用一次。把一张发票发布在捐款页面上,意味着第二位捐款人的支付要么失败,要么在构建不当的接收端上再次支付第一位捐款人的哈希。这正是 BOLT12 offers 要解决的问题,因此该规范于2024年9月并入闪电网络标准,这是自2017年以来的第一个新 BOLT。在您的钱包和交易对手都支持 offers 之前,闪电地址是发布可重复使用收款目的地的实用方式。

最后,在围绕闪电网络做计划之前,请先确认交易所确实支持闪电网络。本站评测的 Strike 同时支持通过闪电网络和链上提币。本站交易所对比中的许多平台并不支持,在这些平台上,转移小额资金最便宜的方式就是不要频繁转移。

逐字段解读发票

把一张简短的发票拆开来看,它就不再像是一堆乱码。

以 lnbc1500n 开头的字符串,在您解码之前就告诉了您两件事:这是一张主网发票,请求金额为1500纳比特币,即0.0000015比特币,或150聪。后面是时间戳,然后是带标签的字段。d 字段携带简短描述,例如 "table 4";值为600的 x 字段会把过期时间设为十分钟,而不是默认的一小时;如果收款方想要更大的安全余量,c 字段会覆盖默认的18个区块的最终 CLTV 增量。

如果收款方节点没有公开通道,r 字段会携带路由提示:一个连接良好的对等节点的节点 ID、要使用的短通道 ID,以及该节点的手续费和增量。没有它,您的钱包会查看公开图谱,找不到路径,然后放弃。这就是移动钱包的发票通常明显长于大型公开节点发票的原因。

BOLT11 发票 vs 比特币 URI

BOLT11 发票是闪电网络支付请求;比特币 URI 是链上支付请求。URI 形式为 bitcoin:后接地址和可选参数,指向区块链,可由任何钱包以任何金额、任意多次支付。发票则指向某个节点,会过期,并且只应支付一次。钱包越来越多地显示同时包含两者的统一二维码,以便付款方选择,但这两种载荷是各自独立的标准,各有不同的失败方式。

BOLT11 发票 vs 闪电地址

BOLT11 发票是支付请求本身;闪电地址是获取发票的一种方式。在钱包中输入 you@example.com 这样的地址,会向该域名发出 HTTPS 请求,对方会按您选择的金额回复一张新生成的 BOLT11 发票。该地址可重复使用且便于人类阅读,因为它根本不是支付请求:它是指向某台服务器的指针,该服务器会按需生成发票。

请勿混淆

常见问题

为什么我的闪电网络发票这么快就过期了?

因为发票开具方设置了较短的有效期。BOLT11 的默认有效期为3600秒,即1小时,但钱包和销售终端通常会将其缩短至10分钟或15分钟,以免报价出现偏差。请重新生成一张发票,然后再次支付。

同一张闪电网络发票可以支付两次吗?

不可以。每张发票对应唯一的支付哈希,收款方一旦披露原像,该哈希即告用尽。对同一张发票的第二次支付通常会失败,因此可重复使用的收款目标改用闪电地址或 BOLT12 offer。

lnbc2500u 中的金额是什么意思?

它表示2500个百万分之一比特币,即0.0025 BTC。BOLT11 的金额在数字后使用倍数字母:m 表示千分之一比特币,u 表示百万分之一,n 表示十亿分之一,p 表示万亿分之一。

支付陌生人开具的发票安全吗?

比链上转账更安全,因为付款要么到达发票中指明的节点,要么失败并自动退回。但它无法防止您付款给错误的对象,因此确认之前,请核实钱包显示的描述和金额。

接着阅读

相关术语

闪电网络与 Layer 2中的更多术语

阅读本页英文版