跳至主要內容
高級

HTLC 詳解

深入理解哈希時間鎖定合約(HTLC),閃電網路實現跨通道原子支付的核心機制。

18 分鐘

什麼是 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 佔用通道容量,直到解決

下一步: 了解 承諾交易 的完整結構和撤銷機制。

已複製連結
已複製到剪貼簿