术语表 /闪电网络与 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%加挖矿手续费。如果付款失败而发送方坚称路由已解析成功,请先检查容量,再责怪发票。