哈希时间锁定合约

文章正文
发布时间:2024-07-17 03:02

哈希时间锁定合约最典型的代表就是比特币的闪电网络,闪电网络提供一个可扩展的微支付通,用以提升链外的交易处理能力,使用哈希锁定将发起方的交易代币进行锁定,并通过时间锁定让接收方在某个约定的时刻前生成支付的密码学证明,并与先前约定的哈希值一致,则可完成交易。

hash 时间锁定合约(HTLC)是一种脚本,允许指定方(“卖方”)通过公开 hash 的原始信息来花费资金。

在退款情况下,它还允许第二方(“买方”)在超时达到后花费这笔资金。

该脚本采用以下形式:

OP_IF

[HASHOP] OP_EQUALVERIFY OP_DUP OP_HASH160

OP_ELSE

[TIMEOUTOP] OP_DROP OP_DUP OP_HASH160

OP_ENDIF

OP_EQUALVERIFY

OP_CHECKSIG

其中:

- [HASHOP] 代表 OP_SHA256 或 OP_HASH160.

- [TIMEOUTOP] 代表 OP_CHECKSEQUENCEVERIFY 或 OP_CHECKLOCKTIMEVERIFY

相关简介

哈希(散列) 

哈希又称作“散列”,是一种数学计算机程序,它接收任何一组任意长度的输入信息, 通过哈希算法变换成固定长度的数据指纹输出形式,如字母和数字的组合,该输出就是“哈希值”。哈希使存储和查找信息速度更快,因为哈希值通常更短所以更容易被找到。 同时哈希能够对信息进行加密,一个好的哈希函数在输入域中很少出现哈希冲突,哈希 一个特定文档的结果总是一样的,但找到具有相同哈希值的两个文件在计算上是计算上不可行的。

闪电网络

假设A想给C转1个BTC,但是A和C之间没有双向转支付通道,但是B和A、C都有通道,那么A可以直接在链上给C转1个BTC,也可以和C建议通道以后再转,也可以拜托B帮忙转1BTC。A通过双向支付通道 经由B给C转1BTC的过程,就是闪电网络的应用。在不可信的情况下,转账过程中使用哈希时间锁定合约(HTLC)!

为了完成这次交易,A会先给C发一个随机数字R,接着C会对R进行签名,生成一个哈希H,并返回给A。

然后A就找到B,如果B能够给出生成签名H的key,那么A就同意更新渠道的支付分配,为B转1个BTC。实际上,A和B会先更新Commitment Tx,A生成三个交易,C1a,RD1a和HTLC(a),C1a和RD1a的内容同上面的RSMC,HTLC(a)的内容为,如果B找到可签名H的key,B可以直接拿走HTLC中的1BTC,否则HTLC(a)中的1BTC在一定的锁定期之后,A可以重新花掉。

之后B会拿着H去找C,用1个BTC来换签名key,同时更新B和C的支付分配。更新过程同A和B之间一样,基于HTLC。因为签名的key就是从C这里生成的,所以他肯定知道,而且理论上也只有他才知道。接着C将签名用的key告诉B,并更新了其渠道的支付分配。

同理,B使用key从A那里也拿到了1BTC,A以脱链的形式付给C一个BTC。

这里有两个需要注意的问题,A和B之间以及B和C之间的支付分配都会重新创建Commitment Tx,而每个Commitment Tx带有锁定时间(如之间的1000个确认),A和B之间的锁定时间需要长于B和C之间的锁定时间,防止在B拿到key之后,A和B之间的锁定时间已经到期,B会拿不到币。

第二个问题是:在B找C拿key的过程中,A和B之间的通道可以随时断开,B不需要信任A在此期间会关闭通道,因为即使A作恶,故意关闭通道,HTLC(a)中的币,A还需要等到一定的锁定期以后才能花掉,只要B在这个锁定期内拿到签名所用的key,就可以从HTLC(a)中拿走1BTC。

B作为中间人,可以收取少量的费用。

通道之间的交易,实际上无需确认等待,瞬时完成的,对于比特币的TPS有大量的提升。1

本词条内容贡献者为:

李嘉骞 - 博士 - 同济大学