HTLC 詳解
深入理解哈希時間鎖定合約(HTLC),閃電網路實現跨通道原子支付的核心機制。
什麼是 HTLC?
HTLC(Hash Time-Locked Contract,哈希時間鎖定合約)是閃電網路的核心創新。 它允許兩個沒有直接通道的節點,通過中間節點安全地進行支付, 確保支付要麼完全成功,要麼完全失敗,不會有資金卡在中間。
核心概念: HTLC 結合了哈希鎖(只有知道原像才能解鎖)和時間鎖(超時後資金返還), 實現了無需信任中間人的多跳支付。
HTLC 的兩個條件
哈希鎖 (Hashlock)
接收方必須提供一個秘密值(preimage),其哈希值等於預設的哈希。
SHA256(preimage) == hash
時間鎖 (Timelock)
如果在規定時間內沒有提供原像,資金會返還給發送方。
timeout: 144 blocks (~24h)
HTLC 腳本結構
HTLC 腳本(簡化版):
OP_IF
# 成功路徑:接收方提供原像
OP_HASH256 <payment_hash> OP_EQUALVERIFY
<receiver_pubkey> OP_CHECKSIG
OP_ELSE
# 超時路徑:資金返還給發送方
<timeout> OP_CHECKLOCKTIMEVERIFY OP_DROP
<sender_pubkey> OP_CHECKSIG
OP_ENDIF
兩種花費方式:
1. 提供原像 + 接收方簽名 → 接收方取款
2. 等待超時 + 發送方簽名 → 發送方取回 多跳支付流程
假設 Alice 想付款給 Carol,但她們沒有直接通道,需要通過 Bob 轉發:
Payment Path: Alice --> Bob --> Carol
Step 1: Carol generates secret and hash
Carol generates:
preimage (R) = random 32 bytes
hash (H) = SHA256(R)
Carol puts H in invoice for Alice
Step 2: Alice builds HTLC chain
Alice -> Bob: HTLC
Amount: 1000 sats + fees
Condition: provide SHA256 preimage = H
Timeout: 144 blocks
Bob -> Carol: HTLC
Amount: 1000 sats
Condition: provide SHA256 preimage = H
Timeout: 140 blocks (shorter!)
Step 3: Preimage propagates back, unlocking funds
Carol knows R, reveals R to Bob
-> Carol receives 1000 sats
Bob now knows R, reveals R to Alice
-> Bob receives 1000 sats + fees
Payment complete! 時間鎖遞減
每一跳的時間鎖必須遞減,確保中間節點有足夠時間取回資金:
時間鎖設計: Alice → Bob → Carol → Dave 時間鎖分配: Alice → Bob: 500 blocks Bob → Carol: 460 blocks (-40) Carol → Dave: 420 blocks (-40) cltv_expiry_delta = 40 blocks(約 6.7 小時) 為什麼遞減? - Dave 揭示原像給 Carol - Carol 需要時間向 Bob 揭示 - Bob 需要時間向 Alice 揭示 - 每一跳都需要緩衝時間
安全警告: 如果時間鎖設計不當,中間節點可能來不及取回資金。 這就是為什麼節點軟體會自動計算安全的 CLTV delta。
HTLC 在承諾交易中
每個待處理的 HTLC 都會在承諾交易中創建一個額外的輸出:
承諾交易結構(含 HTLC): 輸入: funding_tx:0 (多簽) 輸出: 0: to_local - 550,000 sats (Alice,有延遲) 1: to_remote - 400,000 sats (Bob,無延遲) 2: htlc_output - 50,000 sats (HTLC #1) HTLC 輸出腳本: 如果 Bob 提供原像 → Bob 取得 如果超時 → Alice 取回(通過二級 HTLC-timeout tx)
Offered vs Received HTLC
Offered HTLC
你提供的 HTLC(你是發送方)。對方提供原像可取款,超時你可取回。
Received HTLC
你收到的 HTLC(你是接收方)。你提供原像可取款,超時對方可取回。
HTLC 二級交易
當需要在鏈上解決 HTLC 時,使用二級交易:
HTLC 二級交易類型: 1. HTLC-success transaction - 用於:接收方知道原像 - 輸入:HTLC 輸出 + 原像 + 接收方簽名 - 輸出:接收方地址(有延遲) 2. HTLC-timeout transaction - 用於:超時後發送方取回 - 輸入:HTLC 輸出 + 發送方簽名 - 輸出:發送方地址(有延遲) 兩種交易都需要預先簽署!
原像揭示與隱私
傳統 HTLC 使用相同的 payment_hash,這有隱私問題:
Privacy Issue: Alice -> Bob -> Carol -> Dave H1 H1 H1 All nodes see the same H If Bob and Dave are same person or collude They can infer the payment path Solution: Point Time-Locked Contracts (PTLCs) • Use Schnorr signatures and adaptor signatures • Each hop uses different "point" • Cannot correlate different hops
常見問題
中間節點能偷走資金嗎?
不能。Bob 只有在向 Carol 支付後才能從 Alice 取得資金。 如果 Bob 不轉發,Alice 的 HTLC 會超時返還。
如果中間節點離線怎麼辦?
支付會失敗,所有 HTLC 最終超時返還給發送方。沒有人會損失資金。
為什麼使用 SHA256?
SHA256 是比特幣原生支持的哈希函數,且 32 字節的原像提供足夠的安全性。
HTLC 限制
- • 最小金額:HTLC 需要消耗鏈上空間,太小的 HTLC 不經濟(dust limit)
- • 最大數量:承諾交易大小有限,通常限制 483 個待處理 HTLC
- • 時間鎖限制:太長的路徑會累積太長的時間鎖
- • 在途資金:HTLC 佔用通道容量,直到解決
下一步: 了解 承諾交易 的完整結構和撤銷機制。