跳转到正文
buybitcoinsmart

术语表 /闪电网络与 Layer 2

最大在途 HTLC 价值

最大在途 HTLC 价值是什么?
最大在途 HTLC 价值是闪电网络每个节点对另一方可同时挂起的付款总价值所设的上限。

该上限是一个单独的字段 max_htlc_value_in_flight_msat,在通道开启时约定,此后对每笔付款强制执行。Eclair 的默认值为5,000,000,000毫聪或通道容量的45%,以较小者为准,因此60 mBTC 的通道得到27 mBTC。您的大额闪电网络付款可能在一个明显有足够资金的通道上失败,这往往就是原因。

运作方式

最大在途 HTLC 价值是协商得出的,而非强加:每一方声明自己希望对方遵守的上限。

该字段随open_channel(消息类型32)发送,并在accept_channel(类型33)中返回;双方共同出资的通道则在open_channel2(64)和accept_channel2(65)中携带它。BOLT 2将其描述为 "a cap on total value of outstanding HTLCs offered by the remote node, which allows the local node to limit its exposure to HTLCs"(对远端节点所提供的未结 HTLC 总价值的上限,使本地节点得以限制其在 HTLC 上的风险敞口)。请注意方向:您发送的数值约束的是对方,而不是您自己,因此一个通道带有两个上限,二者不必相同。

两端的执行都很直接。发送节点如果在已提供的总价值之上再添加一笔付款会超过远端的上限,则不得添加该笔付款;对方违反规则时,接收节点应发出警告并断开连接,或直接使通道失败。与之并列的 max_accepted_htlcs 统计的是挂起付款的数量,而不是衡量其价值,规范对其设定了483的硬性上限,在通道使用零手续费承诺时降至114。价值上限则没有对应的最高限制:它纯属节点策略,规范仅有的保障是,接收方可以拒绝数值看起来过小的通道。

静止的资金不受影响。一个通道可以持有数倍于上限的已结算余额,因为该限制只计算处于流动中的付款,也就是通道若被不当关闭、需要在链上理清的那些付款。

在哪里会遇到它

最大在途 HTLC 价值从不出现在公开的闪电网络图中,因此任何通道浏览器都不会向您显示它。

它只通过一种特定方式泄露。BOLT 7要求发布channel_update的节点将htlc_maximum_msat(它将转发的最大单笔付款)设为不超过从对方收到的max_htlc_value_in_flight_msat。因此,一个私有数值为公开数值设定了硬性上限:谨慎的对方会迫使对外公布的数字下调,不过节点可以自由地公布低于对方允许值的数字。

不同实现之间的默认值差异大到足以产生影响。Eclair 的参考配置将max-htlc-value-in-flight-msat设为5,000,000,000,将max-htlc-value-in-flight-percent设为45,取其中较小者,并注明该设置按方向分别计算,因此两个方向合计可达该数字的两倍。Eclair 还将max-accepted-htlcs设为30,而 LND 示例配置将default-remote-max-htlcs设为483,即规范的最大值。两个都沿用未改动默认值的运营者,仅在数量上就可能相差十六倍。

对购买者而言,症状是付款失败却没有任何解释。当各部分走同一个通道时,把金额拆成多份并不能解决问题,因为该上限会把它们加在一起。发布上述 eclair 默认值的 ACINQ 同时提供 Phoenix,即本站评测的手机钱包;任何替您开启通道的钱包,都会代您选定这些数值。

最大在途 HTLC 价值 vs 通道容量

通道容量是锁定在通道出资输出中的金额,而最大在途 HTLC 价值决定该金额中有多少可以在任一时刻处于付款过程中。

容量是公开信息,由出资交易确定并向全网公布。在途上限则是私有的,只在两个对等节点之间交换,按每个方向分别设置,并按策略而非算术来选定。Eclair 的百分比默认值让这一差距变得具体:45%分别适用于每个方向,因此一次只能向一个方向流动的部分不到容量的一半,其余超过一半被禁止流动。一个在您这一侧显示出充足空间的通道,仍可能拒绝一笔付款,而拒绝它的那个数值,您无从查询。

请勿混淆

常见问题

通道余额足够,为什么我的闪电网络付款仍然失败?

通常是因为该通道上已挂起的付款加上新的这笔,会超过 max_htlc_value_in_flight_msat,即对方在通道开启时设定的上限。该上限限制的是流动中的资金,而不是静止的资金,因此一个通道看起来资金充裕,仍可能拒绝您的付款。

最大在途 HTLC 价值与 max_accepted_htlcs 是一回事吗?

不是,一个限制价值,另一个限制数量。BOLT 2将 max_accepted_htlcs 的上限定为483,在使用零手续费承诺的通道上为114,而价值上限在规范中没有最高限制,纯粹由节点策略设定。

把一笔付款拆成多份可以绕过该上限吗?

各部分经由同一通道传输时不能,因为该上限会把该方向上所有未完成的支付合计在一起。将各部分分散到不同通道可能会有帮助,因为每个通道都有各自单独协商的限额。

接着阅读

相关术语

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

阅读本页英文版