区块链-哈希时间锁合约(Hash Time Lock Contracts,HTLC)

目录:http://www.javashuo.com/article/p-nitsjfvy-ey.html函数

 支付通道能够经过特殊类型的智能合同进一步扩展,以容许参与 者将资金用于可赎回的具备到期时间的秘密(secret)。 此功能称为哈希时间锁 定合约或 HTLC,并用于双向和路由的支付通道。.net

首先咱们来解释 HTLC 的“哈希”部分。 要建立一个 HTLC,预期的收款人将首先创 建一个秘密(secret)R。他们而后计算这个 R 的哈希 H:code

H = Hash\(R\)

这步产生能够包含在输出的锁定脚本中的哈希 H。知道秘密的任何人能够用它来 兑换输出。 秘密 R 也被称为哈希函数的 前 图像 。 前图像就是用做哈希函数输入的数据。blog

HTLC 的第二部分是“时间锁”组件。 若是秘密没有被透露,HTLC 的付款人能够在 一段时间后获得“退款”。 这是经过使用绝对时间锁 CHECKLOCKTIMEVERIFY来实现的。实现 HTLC 的脚本可能以下所示:路由

IF
# Payment if you have the secret R 
HASH160 <H> EQUALVERIFY ELSE 
# Refund after timeout. 
<locktime> CHECKLOCKTIMEVERIFY DROP 
<Payee Pubic Key> CHECKSIG 
ENDIF

任何知道可让哈希等于 H 的对应秘密 R 的人,能够经过行使 IF语句的第一个子句来兑换该输出。get

若是秘密没有被透露,HTLC 中写明了,在必定数量的块以后,收款人可使用 IF 语句中的第二个子句申请退款。
这是 HTLC 的基本实现。 任何拥有秘密 R 的人均可以兑换这种类型的 HTLC。通 过对脚本进行微调,HTLC 能够采用许多不一样的形式。 例如,在第一个子句中添加一个 CHECKSIG 运算符和一个公钥来限制将哈希值兑换成一个指定的收件人, 这我的必须知道秘密 R.class