术语表 /闪电网络与 Layer 2
HTLC
又称哈希时间锁定合约。
- HTLC 是什么?
- HTLC 是一种只有在提供某个秘密值时才会付款的支付,如果该秘密值在双方约定的区块高度之前始终没有出现,则退还给付款方。
哈希时间锁定合约使多跳闪电网络支付可以安全转发。每一跳都把自己的资金锁定在同一个 SHA-256哈希上,一个通道在每个方向上同时最多可承载483个这样的合约。对您而言,这就是闪电网络支付要么完全结算、要么完全失败,而不会让资金滞留在路由中途的原因。
运作方式
HTLC 中的资金受两个条件保护,最终恰好有一个条件会成立。
接收方生成一个随机的32字节秘密值,称为原像,用 SHA-256对其进行哈希,并把结果放进发票。路由上的每个节点随后向下一个节点提供一个可以通过两种方式花费的输出:任何能够出示原像的人可以立即花费;或者在约定的区块高度之后,由提供该输出的节点花费。由于所有跳共用同一个哈希,接收方一旦通过披露原像来领取自己的资金,之前的每一跳都会得知原像并领取各自的资金。没有人会在向前付款之后得不到回款,这正是闪电网络赖以建立的特性。
区块高度沿路由逐级递减。每个通道都会公布一个 cltv_expiry_delta,付款方将这些增量叠加起来,使最靠近接收方的那一跳最先到期,上游的每一跳都留有安全余量。当发票没有另行说明时,BOLT 11要求付款方为最后一跳预留至少18个区块。这种累积的延迟才是 HTLC 的真正代价:如果支付卡住,资金不会丢失,但在各个超时依次解除的过程中,资金可能被冻结数小时。
在链上,这些合约会变成真实的交易。在锚点通道中,HTLC 超时交易的权重为666权重单位,HTLC 成功交易的权重为706权重单位,而在有多笔支付尚在途中时强制关闭通道,意味着要为每一笔支付各广播一笔这样的交易。过小而不值得设置输出的金额根本不会获得输出,而是并入挖矿手续费,因此如果通道在不恰当的时刻关闭,一笔微小的支付可能消失在手续费中。
在哪里会遇到它
从您点按支付到发票变绿的那几秒里,您会遇到 HTLC,在链上交换的手续费计算中也会再次遇到它。
Strike 等以闪电网络为先的服务在每一笔支付中都以这种方式转移资金,闪电网络路由节点则把待处理 HTLC 的数量列为一项运营指标,因为一个塞满卡住合约的通道无法转发任何支付。同样的构造也适用于闪电网络之外:潜艇互换用一个链上 HTLC 与锁定在相同哈希上的闪电网络支付进行交换,跨链原子互换则在两条账本之间做同样的事。在每种情形下,哈希是共同的裁判,超时就是退款。
这个上限比看上去更重要。承诺交易必须始终是一笔有效的比特币交易,因此 BOLT 2禁止每个方向上被接受的合约超过483个,在较新的零手续费承诺格式下则降至114个。大型路由通道在繁忙时段会触及这一上限,这也是一笔支付有时失败、三十秒后又成功的一个正当原因。
HTLC vs PTLC
HTLC 在整条路由上使用同一个哈希,而 PTLC 为每一跳提供一个由椭圆曲线点派生出的不同锁。仅这一个差异就构成隐私漏洞:同一运营者拥有的两个路由节点,位于您路由上的不同位置,会两次看到同一个哈希,从而把您的支付拼接起来。网络实际运行所依赖的是 HTLC。PTLC 是已有规范的替代方案,在其上线之前,请假定任何大型路由运营者都可以关联其所转发的各跳。