互通性與跨鏈

雜湊時間鎖定合約

雜湊時間鎖定合約是支撐原子交換與支付通道路由的、雖小卻強大的基元。它在兩個同時成立的條件下鎖住資金:一個雜湊鎖,意即接收方唯有揭露一個其雜湊已事先指定的秘密值,才能領取資金;以及一個時間鎖,意即若該秘密未在期限前被揭露,發送方便可取回資金。它是一筆附帶內建逃生口的條件式支付。

其巧妙在於:同一個秘密可被重複使用,以協調跨越多個合約或多條鏈的動作。由於領錢這個動作會迫使你公布原像,而該原像接著又能解開別處的第二個 HTLC,你便能把多筆支付鏈接起來,使每一跳要嘛全部完成、要嘛各自安全地逾時退款。閃電網路正是以此在彼此無須信任的中介之間路由一筆支付,跨鏈原子交換也以此綁定兩本各自獨立的帳本。

時間鎖必須謹慎排序:朝目的地的每一跳都需要比下一跳更長的逾時,好讓誠實的一方在下游揭露秘密後,永遠有時間反應。一旦把順序搞錯,對手方就可能在你自己的請求權已過期時向你索取。HTLC 也假設活性——你必須在自己的時間鎖之前上線行動,這正是閃電網路仰賴守望塔的原因,也是過長的時間鎖會鎖住資本的原因。要使這把鎖有意義,雜湊函數必須具備原像抗性。

function withdraw(bytes calldata preimage) external {
  require(sha256(preimage) == hashlock, "bad secret");
  receiver.transfer(address(this).balance);   // reveals preimage on-chain
}
function refund() external {
  require(block.timestamp >= timelock, "too early");
  sender.transfer(address(this).balance);
}

憑秘密領取,或逾時後退款——這兩條路徑使交換成為全有或全無。

又称
HTLC