首页 资讯 正文

区块链研究实验室 | 闪电网络代码简化教程-可撤销交付交易part1

链三丰 2019年07月02日 07:52

闪电网络的基本概念很简单。 为进一步了解,将闪电网络交易流程作为javascript代码参考白皮书。

本篇文章的目标是解读可撤销交付交易,与白皮书的图5相对应。

201907011658521.jpeg

轻量区块与交易结构

区块定义和交易结构如下:

201907011659421.png

区块仅包含先前区块的哈希和交易。 同样Transaction仅包含Inputs和Outputs。

花费可撤销的7个步骤:

我将可撤销交付交易的所有流程分为7个步骤,如下所示。请注意,上面的图片上写有C1A或C1B等。

  1. 多签名资金

  2. 构建C1a和C1b(no sign)

  3. 构建RD1a和RD1b

  4. C1a和C1b的交换签名

  5. 花费C1b

  6. 花费D1b

  7. 花费RD1b

起初,Alice和Bob创建了2 to 2多重签名。 

201907011700111.png

Alice在这个'redeemScriptHash'上存储比特币(这是A地址)。

Alice和Bob已经分别存入0.5比特币作为创世块。 因此,Alice花费0.5比特币到 fund mulisig上。

201907011700421.png

我不能运行比特币操作码,所以我将scriptsig和scriptpubkey定义为JSON格式。 

201907011701081.png 

以同样的方式,Bob为multisig提供资金,现在mulisig持有1比特币

构建C1a和C1b(No sign)

使用Alice和Bob之前创建的两个事务,Alice构建C1A。请注意,C1A witch类型的第一个输出是“RSMS”。确切的名称是可撤销的序列到期合同(Revocable Sequence Maturity Contract)。这需要花费2个签名。由此,一个将创建可撤销的交付,另一个是输出。

Bob还不签字。一旦Bob签名,Alice可以立即花费这笔交易。在Alice恶意和Alice不签署RD1A的情况下,Bob将永远失去0.5比特币,因此Bob不应签署。

201907011701491.png

Json 格式scriptSig和scriptPubKey如下。 请注意,我在scriptSig中包含redeemScript以支付multisig基金。 

201907011702151.png 

在同样的方式下,Bob构建C1b。

构建RD1a和RD1b

RD1A有时间锁。如果Alice想使用C1A,则要在锁定期结束之前,Alice无法收到0.5比特币。我将时间锁定指定为3,以便Alice需要等待3个区块的确认。另一方面,Bob可以立即收到0.5比特币,因为D1A没有时间锁。

顺便说一下,在实际的用例中,时间锁可能是1000s。

请注意,TxIn中的上一个事务是空的。 因为C1a尚未花费,所以无法计算事务哈希值。 为实现这一目标,闪电开发团队提倡新的Opcode为SIGHASH_NOINPUT

请注意,RD1a是由Bob签署的。 Alice需要将RD1a交给Bob并让他签名,以便RD1a需要Bob的签名。

201907011702591.png

Json格式RD scriptSig如下,这包含时间锁定。 

201907011703221.png 

以同样的方式,Bob构建RD1b。

C1A和C1B的交换签名

Alice收到Bob签署的RD1a,以便交换C1a的签名。 Alice将C1a交给Bob让他签名。 现在,Alice可以随时使用C1a。

201907011703471.png

以同样的方式,Bob让Alice签署C1b。

花费C1b

让我们考虑一下Bob花费c1b的情况。Bob自己签署c1b。验证完成后,Bob转移C1B并添加到区块链。

201907011704121.png

花费D1b

Alice可以在没有任何时间锁定的情况下花费D1b,因为multisig fund的比特币被Bob用作C1b交易。 如果Bob是恶意的并且不与Alice合作,Bob可能会在没有Alice协议的情况下花费C1b。 对于这种情况,Bob承担时间锁定。

201907011704431.png

花费RD1b

起初,Bob试图立即花掉RD1B。但由于时间锁定,结果是失败的。

201907011705081.png

在添加了2个区块之后,Bob可以成功地使用RD1B,因为时间锁已经过期。 

201907011705351.png 

好的,本章节到此结束,下一节我们将会继续讲解; 

本文转载公众号:区块链研究实验室,专注区块链技术,产品社群,经济模型等全方位的知识体系输出,为大家带来不一样的社群学习体验。欢迎联系作者微信加入社群:csschan1120