跳转到正文
buybitcoinsmart

术语表 /闪电网络与 Layer 2

发票过期时间

发票过期时间是什么?
发票过期时间是 BOLT11 支付请求中的 x 字段,是从发票自身时间戳起算的秒数,超过该时间后,付款方和收款方都应拒绝这张发票。

每张闪电网络发票都带有一个截止时间,倒计时从发票签名的那一刻开始,而不是从发票送达您手中的那一刻开始。没有 x 字段时,默认值为3600秒,即一小时。因此,一张在聊天记录中搁置了该小时大部分时间的发票,可能在送达您手中几分钟后就失效,且没有任何可见的原因。

运作方式

发票过期时间以类型为6的标记字段传递,写作字母 x,内容为以大端序表示的秒数。

一个 BOLT11 字符串以35位时间戳开头,该时间戳记录自 UTC 1970年1月1日起的秒数,随后是各标记字段,最后是签名。过期时间是其中一个字段,且是相对值:截止时间等于该时间戳加上过期时间,因此发票中没有任何可直接读取的时钟时间。BOLT11 要求付款方在该时间之后不要尝试付款,也要求收款方不要接受付款。

这两条要求都是 SHOULD 而不是 MUST,因此过期的发票在密码学上并未失效。支付哈希依然有效;阻止付款的是双方的策略,而不是某种锁。您的钱包会拒绝尝试付款,而已丢弃原像的节点无论如何也无法完成结算。

该数值按每五位一组打包,且必须使用能容纳它的最短长度,不得有前导零组。规范自带的示例展示了取值范围:60秒占两组,写作 pu;604800秒占四组,写作 jw5q。对字段做填充的编码器不仅不规范:规范要求读取方将 x、c 或9字段非最短编码的发票视为无效。

发票一经签发,任何人都无法延长其有效期。签名覆盖了人类可读前缀和整个数据部分,因此修改过期时间中的一个字符就会使签名失效。商家若想给您更长的时间,必须签发一个新的请求并重新签名。

一小时的默认值并非随意选定:规范的设计说明指出,这样可以留出时间改用链上支付,即通过 f 字段可携带的备用地址付款。

在哪里会遇到它

发票过期时间会以二维码周围的倒计时圆环、任何解码器中标有 expiry 的一行,以及您粘贴过期内容时钱包给出的拒绝提示等形式出现。

规范的测试向量展示了取值范围的两端。一张金额为2500微比特币、描述为1 cup coffee 的发票,将过期时间设为60秒,因为它要在柜台锁定三美元的价格。Blockstream Store 的一张发票,商品价值88.85美元,其中包括一台 Ledger Nano S,将过期时间设为604800秒,即七天,因为订单确认是一张账单,而不是柜台上的现场付款。

发票在哪里生成,决定了由谁选定这个数值。本站评测的 Phoenix 在手机上运行真正的闪电网络节点,而不是服务器上的账户,因此收款请求中的过期时间是其自身节点的设置。使用托管型应用时,该数值由运营方决定,解码其发票通常是了解该数值的唯一办法。

发票过期时间 vs CLTV 过期增量

发票过期时间和 CLTV 过期增量都是闪电网络支付上的时钟,二者使用不同的单位,作用于问题的不同部分。

发票过期时间是从发票时间戳起算的挂钟秒数,决定该笔付款是否还可以尝试。CLTV 过期增量以区块数计量,同一张发票的 c 字段携带收款方对最后一跳的最低要求;该字段缺失时,付款方必须将其视为至少18个区块。前者告诉您是否应当开始付款;后者告诉您开始之后,您的资金可能在 HTLC 中被锁定多久。

请勿混淆

常见问题

已过期的闪电网络发票还能支付吗?

有时可以,因为 BOLT11 规定双方在截止时间后应当拒绝(SHOULD),而不是必须拒绝(MUST)。没有任何密码学机制阻止迟到的付款,因此仍持有原像的收款节点,如果其策略允许,可以完成结算。遵循规范的钱包不会尝试支付,所以请将已过期的发票视为失效。

我可以延长已发送发票的过期时间吗?

不可以,因为过期时间位于发票中被签名覆盖的部分。修改一个字符就会使签名失效。请改为生成一张重新签名的新发票,并丢弃旧发票。

没有过期字段的闪电网络发票是否永不过期?

不是,它会在3600秒后过期。BOLT11 将 x 字段设为可选,并把默认值定为一小时,因此未提及过期时间的发票是一张一小时有效的发票,而不是永久有效的发票。

接着阅读

来源

最近审阅:2026年9月6日。

相关术语

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

阅读本页英文版