支付通道能够经过特殊类型的智能合同进一步扩展,以容许参与 者将资金用于可赎回的具备到期时间的秘密(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