区块链/等级 V · 分层扩展/5.1 闪电网络(Lightning)/课程 2
使用HTLC进行路由
一个秘密,多个跳点,以及隐藏路由的洋葱
材料闪电网络浏览器(例如 1ML 或 mempool.space)BOLT #2 和 #4 规范
好奇
- 一笔支付如何做到要么对所有参与者都成功,要么对所有参与者都失败?
- 为什么路由中的每个节点必须只知道其直接前驱和后继?
- 如果最终收款人始终不认领,一笔被转发的支付会怎样?
探索
- Alice 通过 Bob 向 Carol 付款,她与 Carol 之间没有直接通道。每一跳都是一个锁定到同一支付哈希的 HTLC,且时间锁沿路由逐跳递减,使每个转发节点在向下游付款后都有时间向上游领取款项。当 Carol 公开原像以领取付款时,原像会逐跳向回传递,结算每一个 HTLC。
- 发送方根据通过 gossip 传播的通道图选择路由(源路由),并用分层加密包装指令(Sphinx 洋葱路由),因此每个节点只知道其前驱和后继。转发节点收取一笔基础费用,外加一笔按比例计算的费用(以百万分之一为单位)。当某一跳缺乏流动性时,支付会失败并重试;多路径支付则会拆分大额款项。
- HTLC 是承诺交易中的输出,而不是独立存在的实体。如果通道在仍有待处理 HTLC 时关闭,链上交易会为每个活跃合约包含额外的输出。当 HTLC 在通道保持开放期间到期或成功时,新的承诺交易会移除这些输出,以反映稳定的状态。
- 闪电网络的金额以毫聪计算,但链上输出的价值必须高于粉尘限额。那些小到在链上处理不经济的 HTLC 会被“修剪”(trimmed):它们在承诺交易中没有自己的输出,其价值转而计入交易手续费。
- 因此,被修剪的 HTLC 只能依靠对手方的诚实行为来保护:如果通道在它尚未完成时被强制关闭,这笔金额就会归矿工所有。节点会为自己愿意接受的被修剪 HTLC 的总价值设定上限,许多节点还会设定最低 HTLC 金额,以在极小额支付上承担少量风险为代价,换取对这类支付的支持。
- 当通道中存在活跃 HTLC 时进行合作关闭,双方会停止接受新的支付,并等待现有合约结算或到期。这样就可以发布一笔不含 HTLC 相关输出的更轻量的关闭交易,从而降低链上交易手续费,并避免争议性关闭所伴随的强制时间锁等待。
关键事实
- HTLC 是承诺交易中的输出项,可用于实现跨多个通道的无信任路由。
- Sphinx洋葱路由机制确保每个节点仅知晓其直接的前驱节点和后继节点。
- 转发节点收取一笔基础费用,外加一笔以百万分之一为单位计算的比例费用。
- 低于粉尘限额的 HTLC 会被“修剪”:其价值计入手续费,而不是拥有自己的输出。
- 存在活跃 HTLC 时,合作关闭会等待其结算完成,以避免时间锁等待并降低手续费。
- 多路径支付将大额款项分摊到多条路径上,以提高成功率。
练习 九、六、三、一
9收集列出9个闪电网络节点或服务。说明它们的路由策略、费用结构以及通道容量。
6归类按处理 HTLC 的方式将这9个分为6组:高费用/高容量、低费用/低容量、支持多路径、可容忍粉尘以下金额、优先合作关闭,或其他。
3提炼将这6组归纳为节点运营者调整路由策略和费用结构的3个原因。
1凝结写一句话,说明 HTLC 保证了什么,以及是什么让这一保证具有原子性。
事实核查
日期、数字及数据均依据下方列出的已发表资料进行核实。