跳转到正文
buybitcoinsmart

术语表 /闪电网络与 Layer 2

路由提示

路由提示是什么?
路由提示(route hint)是闪电网络发票中的一个条目,指明一个公共节点、一个通道及其手续费,使付款方能够到达自身通道未对外公告的收款方。

私有通道从不出现在公共 gossip 图中,因此发票必须自行携带路由的最后一段。当收款方没有公共通道时,BOLT 11要求至少携带一条路由提示,每一跳占51字节:节点 ID、通道 ID、基础费、比例费和 CLTV 增量。向没有已公告通道的手机钱包提币之所以可行,正是因为发票中有这些字节。

运作方式

路由提示通过 BOLT 11中以字符 r 书写的标签字段传递,该字段保存的是一个列表,而不是单个值。

每个条目由首尾相接的五个值组成:264位的 pubkey、64位的 short_channel_id、32位的 fee_base_msat、32位的 fee_proportional_millionths 和16位的 cltv_expiry_delta。合计408位,每一跳正好51字节。各条目构成一条从公共节点到收款方的正向路由,每个 pubkey 指的是其通道起点的节点,而不是终点的节点。

后三个值,是公共节点依据 BOLT 7在 channel_update 中会广播的内容。私有通道不广播任何信息,因此发票是付款方得知该跳收费的唯一途径。

对写入方的规定范围很窄:如果收款方的密钥没有关联任何公共通道,发票必须至少携带一个 r 字段。写入方可以包含多个此类字段以提供备选路由,最优先的排在最前。上限来自标签字段本身,其数据不能超过1023组、每组5位,即639字节,因此单个字段中最多容纳十二跳。

路由提示是建议而不是指令:付款方可以使用所给的通道序列,规范将该字段称为 "limited routing assistance"(有限的路由协助)。BOLT 4中的路由盲化是对同一问题的后续解决方案。收款方不再提供明文的节点 ID 和通道 ID,而是向发送方提供一个引入点,以及经过调整的节点 ID 和针对每一跳加密的数据块,使发送方获得可用路径,却无从得知路径上有哪些节点。

在哪里会遇到它

路由提示就是发票解码器针对私有路由显示的额外路由信息。

规范自带的主网测试向量是一张20毫比特币的发票,经由两个提示跳路由:通道66051x263430x1800,基础费为1毫聪,20 ppm(百万分率),CLTV 增量为3个区块;随后是197637x395016x2314,基础费为2毫聪,30 ppm,4个区块。这两跳占用了发票164个 bech32 字符,比支付哈希和支付密钥加起来还多。

实际中也能见到同样的结构。本站评测的41款钱包之一 Phoenix,其通道建立在 ACINQ 而不是开放图上,在这些通道未公告的情况下,上述规则要求每张发票都指明 ACINQ 的节点。ACINQ 自己的常见问题解答(本站评测中已引用)已承认其知晓您付款的目的地和金额;路由提示则把这种披露向外扩展,因为向您付款的人会得知您使用哪家服务商。通过闪电网络从 Strike 这样的交易所提币时,作为付款方的是交易所,由其支付提示跳的基础费和比例费,费率取自您的钱包所生成的发票。

路由提示 vs 入站流动性

路由提示告诉付款方如何找到您;入站流动性决定付款到达后能否容纳得下。

两者的失败方式从外部看起来完全相同,但只有一种可以通过修改发票来解决。路由提示可以格式完全正确并写明正确的手续费,付款仍可能在最后一跳失败,因为您在该通道上的一侧没有余量。Phoenix 公布了解决此问题的价格:已有入站流动性时接收免费,当钱包必须上链腾出空间时,收取1%加挖矿手续费。如果付款失败而发送方坚称路由已解析成功,请先检查容量,再责怪发票。

请勿混淆

常见问题

路由提示会暴露我的私有通道吗?

会,对任何读取该发票的人都会暴露。r 字段以明文写出您的对等节点的节点 ID 以及您与其之间通道的短通道 ID,这是在您的通道未公告时保持可被找到所要付出的代价。BOLT 4中的路由盲化是较新的做法,可将它们隐藏在引入点之后。

路由提示看起来正确,为什么付款仍会失败?

因为路由提示只是指路,不提供容量。被提示的通道在您的对等节点一侧仍需有足够余额来承载该金额,而发票中的任何字段都无法创造这一点。重写任何内容之前,请先检查您的入站流动性。

一张发票可以携带多个路由提示吗?

可以。BOLT 11允许写入方包含多个 r 字段作为备选路由选项,最优先的排在最前,每个字段还可以串联若干自己的跳。单个字段受标签字段数据639字节上限的限制,最多容纳十二跳。

接着阅读

相关术语

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

阅读本页英文版