闪电网络学习5:闪电通道运行流程(上)
前一篇文章分析了闪电通道防止和惩治作恶的原理,即通过一系列相互依赖的交易,包括退款交易,承诺交易,交付交易,可撤销的交付交易,违约惩罚交易等,把它们结合起来实现了可撤销按序到期合约 RSMC 的功能,这个功能就是帮助闪电通道作废了通道中所有过时交易的余额状态,并以奖惩机制一方面确保广播过时交易进行结算的欺骗行为都会受到罚没资金的惩罚,另一方面确保在作恶发生时没有作恶的一方会受到奖励,那就是获得对方的所有资金。
对RSMC的作用总结成一句话,就是让闪电通道实现以经济惩罚的机制而不是物理阻隔的方式来防止和惩治欺诈交易的作恶行为,最终实现了一个免信任的支付通道。
今天这篇文章的主题就是闪电通道的运行流程,重点是闪电通道中这些交易是如何构建出来的,他们又是如何结合起来实现RSMC合约的功能的。
本文主要内容如下
1. 开启通道
1)构建注资交易
2)构建退款交易(0#承诺交易)的两个版本
3)签名和广播注资交易,完成充值和通道开启
4)构建0#交付交易的两个版本
5)构建0#可撤销交付交易的两个版本
2. 通道交易
1)通道交易的流程
2)通道交易的构建
(1)构建1#承诺交易的两个版本
(2)构建1#交付交易的两个版本
(3)构建1#可撤销交付交易的两个版本
(4)交换0#承诺交易的撤销私钥
(5)构建1#违约惩罚交易的两个版本
进入正文,我们先从通道的开启开始。
1. 开启通道
在新建一个闪电通道时,需要提前准备好三个交易:一个注资(充值)交易,一对退款交易(两个版本)。
1)构建注资交易FT
注资交易就是充值交易Funding Transaction,简称FT。
它的作用是用来创建通道,即在比特币链上创建共管账号(即多签地址)并向这个地址充值资金,完成支付通道的开启。
跟所有比特币交易一样,注资交易也是由两个部分组成,即交易输入和交易输出。
第一:构建交易输入 Input
交易输入是用来表达当前交易所要操作的这笔资金来源和资金所有权归属的构造,主要内容包括引用的交易ID和未花费的交易输出即UTXO的序号,所涉及资金的金额,以及如何解锁这笔资金的方法(就是指解锁脚本)几个部分。其中引用的交易编号(TXid)和UTXO序号确定了资金的来源,解锁脚本中需要提供的数字签名则负责验证资金的所有权。
注资交易的资金来源于通道双方,因此需要引用的TXid和UTXO序号至少要有两个,即需要有两个或者以上的Input,分别代表两方提供的资金来源。
比如小艾(用A代表)和小笨(用B代表)各自向通道提供5个BTC的资金,那么他们需要分别提供一个(或多个)UTXO,每一个UTXO及其所在的交易就是需要引用的资金来源,它们构成一个输入;每方提供的UTXO所包含的资金合计必须要稍微大于5BTC,因为除了留在通道中的5BTC,开启和关闭通道时都需要发起BTC链上交易,要支付一些交易费用。
下面用小艾和小笨开启通道作为案例,来看FT交易的两个交易输入(Inputs)如何构建。
输入1:0# Input
交易ID:xxxxxx
UTXO序号:xxxxxx
金额:5.001BTC
解锁脚本:用小艾的私钥KA签名
输入2:1# Input
交易ID:xxxxxx
UTXO序号:xxxxxx
金额:5.001BTC
解锁脚本:用小笨的私钥KB签名
上例的两个Input中,0# Input 是小艾提供的,因此解锁脚本要用小艾的私钥KA提供签名,1# Input 是小笨提供的,因此解锁脚本要用小笨的私钥KB提供签名。每一方都要在自己提供的UTXO使用匹配的私钥进行签名来验证这笔资金的所有权,证明自己是这笔资金的所有者。
第二:构建交易输出 Output
交易输出是表达这笔交易的资金和所有权归属去向的构造,主要内容包括金额和锁定脚本。其中锁定脚本规定了这笔资金的花费条款,即哪个私钥能够解锁这笔资金,以及哪个地址拥有资金所有权。注资交易的锁定脚本中设置的是一个多签的公钥地址,表示这笔资金的去向就是这个多签地址,所有权则由锁定脚本中双方的公钥哈希进行锁定封印。
还是来看小艾和小笨开启通道的案例
0# Output
金额:10BTC
锁定脚本:A B 的FT多签地址
注资交易的资金去向是一个共管的账号,即由一个2-2多签地址来接收注资交易的资金,所以必须生成一个由2-2 双方多签地址控制的交易输出(Output),由双方的密钥共同控制,充值的时候双方的10个BTC会全部进入并锁定在这个Output 里面。FT交易多签 Output 中用来锁定资金的密钥由双方分别提供,而且这个密钥只能用于注资交易,不能复用在其他地方。比如小艾在FT交易的专用公钥是 PAFT,小笨是 PBFT。
注资交易只需要创建一笔交易,双方的资金都放在一个Output 里面,因此必须通过双方合作来构建和花费,即需要双方在各自提供的 Input 里面签名之后才能广播出去经过矿工的处理,任意一方发起广播都可以。
但是现在只需要把交易构建出来,还不用签名和广播,需要完成了下一步的退款交易之后再返回来完成操作。
2)构建退款交易
之所以要构建退款交易是因为充值到注资交易的资金进入了共管账号,需要双方合作才能解锁和转移,万一一方不配合就会导致资金被锁,造成充值者的损失。
所以退款交易的作用是按照FT交易的初始状态分配双方的资金,也就是把充值到FT交易2-2共管账号的资金按照充值金额退回给双方。
退款交易这部分的主要内容包括
(1)退款交易= 0#承诺交易
(2)0#承诺交易的构建原则
(3)0#承诺交易的两个版本
(4)0#承诺交易的两部分结构
(5)0#承诺交易的脚本
(1)第一笔承诺交易0#CT
退款交易 = 0#承诺交易
退款交易其实也是一笔承诺交易,因为它也是发生在链下,没有广播到链上进行验证和公证,是双方在链下向对方保证能够按照原样进行退款的承诺,因此也被认为是一笔承诺交易,即Commitment Transaction, 以下简称CT。我们可以把退款交易当作是第一笔承诺交易。
承诺交易(CT)要解决的第一个问题是要确定通道中的哪一方主动向比特币区块链发起了广播承诺交易的结算申请,这是在通道交易中要区分作恶者并给予惩罚的前提。其本质是要让区块链能辨别主动发起交易广播的是哪一方。
实现这一目标的方案就是把承诺交易构建为两个版本。
(2)0#承诺交易的构建原则
第一,承诺交易要构建为两个版本。退款交易是第一笔承诺交易,因此也需要要构建成两个版本,每方各构建一个版本,签名之后发给对方,由对方持有。
第二,承诺交易的结构跟比特币交易一样。也是由交易输入和输出两个部分构成,因此退款交易也是通过构建输入和输出两个部分进行构建。
第三,承诺交易代表的是通道中的状态。第一笔承诺交易代表的是通道的初始状态,即双方之间还没有发生交易时的状态。我们把初始状态设为状态0,所以第一笔承诺交易代表的就是状态0,交易序号设为0#,交易编号就是CT00,两个版本分别为CT00a和CT00b,小艾手中持有的是CT00a,小笨手中的是CT00b。
在这样的原则之下,我们来构建第一笔承诺交易,也就是退款交易。
(3)0#承诺交易的两个版本
小艾和小笨需要各自构建一个版本,签名之后发给对方持有。
小笨构建A版CT交易CT00a,签名之后发给小艾,由小艾持有
A版(CT00a)
交易输入(Input)
所引用的交易及UTXO:FT交易(ID),0#输出
金额:10BTC
解锁脚本:B的FT交易私钥KBFT 签名
交易输出(Output)
0# Output:(远程)
金额:5BTC
锁定脚本:B的DT公钥PBDT
1# Output:(本地)
金额:5BTC
花费路径1:
锁定脚本:PA && 1000 区块
花费路径2:
锁定脚本:双方的撤销公钥,即PARSMC0 && PB
CT00a 由小艾持有,小艾想要单方面发起结算时只能广播A版的CT交易。
小艾构建B版CT交易CT00b,签名之后发给小笨,由小笨持有
B版(CT00b)
交易输入(Input)
所引用交易及UTXO:FT交易(ID),0#输出
金额:10BTC
解锁脚本:A的FT交易私钥KAFT签名
交易输出(Output)
0# Output:(远程)
金额:5BTC
锁定脚本:A的DT公钥PADT
1# Output:(本地)
金额:5BTC
花费路径1: 锁定脚本:PB && 1000 区块
花费路径2: 锁定脚本:双方的撤销公钥,即PBRSMC0 && PA
小艾构建好CT00b,签名之后发给小笨持有,小笨想要单方面发起结算时只能广播B版CT交易。
(4)0#承诺交易结构的两个部分
承诺交易是完全按照比特币交易的结构进行构建的,只不过在构建完成以后没有广播到比特币链上去,而是保存在链下双方自己的设备中。所以第一笔承诺交易的构建跟注资交易一样,也是通过交易输入和交易输出两个部分进行构建。
第一部分:交易输入
交易输入包括的主要内容是资金来源,金额,和解锁脚本。
资金来源:FT 交易, 0# Output
退款交易要分配的是注资交易(FT)多签Output中的资金,因此它的资金来源只有一个,即只有一个交易输入,就是 FT 交易的 0# Output 也就是2-2多签地址控制的 Output。
金额:10BTC。
解锁脚本: KAFT签名 KBFT 签名
解锁脚本是用来验证资金所有权的一个脚本,因为FT交易创建 2-2 Output 时在锁定脚本中使用了双方的FT交易多签地址进行锁定,所以这里解锁时需要双方各自提供自己专用于FT交易的私钥 KAFT 和 KBFT 签名进行验证。
在示例中两个版本的输入部分都只有一方的签名,是因为都是对方创建的交易发给另一方持有,比如A版交易CT00a是由小笨构建,签名之后发给小艾持有,因此只有小笨的签名,小艾可以随时添加自己的签名构成完整的多签签名去广播;同理B版交易CT00b是由小艾构建,签名之后发给小笨持有,因此只有小艾的签名,小笨也可以随时添加自己的签名去广播。
第二部分:交易输出
理解向双方分配资金的两个Output
承诺交易需要向两方分配资金,所以在表达资金去向的交易输出部分至少要创建两个 Output,用来给两方支付余额。一个叫做本地Output,是分配给持有方的;一个叫做远程Output,是分配给非持有方的。这是针对持有方来讲。
但是CT交易是由非持有方构建好之后发给持有方的,因此对非持有方即构建方来讲,在构建的时候远程Output 是用来分配给自己的,而本地Output是分配给对方的。
我们以小艾持有的A版承诺交易,即 CT00a 为例来看0#CT交易的交易输出。
CT交易中的两个输出,序号按照0开始向后编号。比如可以把远程 Output 设为0#,把本地 Output 设为1#。由于退款交易分配的是双方的初始余额状态,即两方向通道充值的金额比例,所以两个Output中的资金都是5BTC。
0# 远程 Output
远程 Output 的基本内容很简单,就是金额和锁定脚本。CT00a 的远程 Output 金额为5BTC,锁定脚本是小笨的公钥PBDT。
金额:5BTC
锁定脚本:小笨的公钥哈希PBDT
远程Output中的锁定公钥
关于这个公钥需要解释一下,因为它是专用于交付交易即DT中的公钥(小笨的公钥为PBDT),原因如下
闪电通道在承诺交易的设计中,Output 的花费不是在广播CT交易时把资金直接支付到 Output 锁定脚本中的地址,而是需要再发起一笔子交易才能完成对 Output 中资金的转移。
用来转移远程 Output 资金的子交易就叫做交付交易Delivery Transaction,简称为DT。它要完成的是CT交易对非持有方资金的交付。
闪电网络的白皮书中关于交付交易的内容中提到了PAliceD 和 PBobD 这一对公钥 ,就我的理解这个公钥就是专门用来指代交付公钥的,D是指Delivery,所以这两个公钥是指 Alice 和 Bob 在花费远程Output 时,资金交付所使用的公钥。
因此在案例中构建远程Output的时候,锁定脚本里用的是小笨的交付公钥PBDT。但是也看到很多地方的解释中这个锁定脚本里面用的就是通用的密钥,而非专用于交付交易的密钥。我是按照闪电网络白皮书中的内容来进行理解和解释。
1# 本地 Output
本地 Output 基本内容也只有两个部分:金额为5BTC,另一个部分是关于花费条件。
这里的花费条件就是由RSMC合约规定的两个花费路径。
第一个路径是由持有方解锁和花费。
因此本地Output 的锁定脚本就是持有方的公钥,CT00a 的持有人为小艾,因此锁定脚本为小艾的公钥PA。
但是这个路径对本地Output 的解锁有时间限制,因为这个路径是在持有方主动广播了承诺交易时,由持有方发起的子交易,它想要做的是转移持有方在承诺交易中的资金。为了避免主动广播交易的一方进行欺骗,就会限制这一笔交易解锁本地Output的时间。
因此这个路径中需要增加一个时间锁的设定,CT00a的例子中设置了1000个区块的相对时间锁。
所以整理路径1的锁定脚本为:小艾的公钥PA 1000区块
第二个路径是用一笔子交易取代第一个路径,即替代路径。
这个替代路径的子交易就是违约惩罚交易,因为它的作用是取代第一个路径并拿走持有方在通道中的资金,因此只有在持有方广播了过时的承诺交易即进行欺骗时才会被执行。
通过违约惩罚交易花费本地Output需要双方的配合,即要提供双方的签名才能解锁,因此在它对应的锁定脚本中使用的是双方的公钥进行锁定,类似于2-2的多签Output,不过这里用来锁定资金的密钥是一个专用密钥,叫做撤销密钥。每一笔CT交易的本地 Output 在替代路径中使用的撤销密钥都是专用的,不能复用于其他交易。
撤销密钥由双方的密钥合起来构成。
在实际案例中,CT00a 本地 Output 的替代路径中使用的是小艾的RSMC专用密钥和小笨的通用密钥,即PARSMC0 PB,它们一起构成了一个完整的撤销密钥。
这里只有CT交易的持有方用的是专用的撤销密钥,而非持有方用的却是通用密钥。这样设置是为了简化密钥管理,具体逻辑这里就不展开,后面打算再整理一篇闪电通道的整体逻辑,在RSMC 撤销密钥的运行原理那部分再详细解释。
就案例中来说,每个版本CT交易中,持有方的撤销密钥,比如A版的PARSMC0 是由小艾预先创建的撤销密钥,在小笨构建0#承诺交易之前小艾需要把这个撤销密钥的公钥发给小笨,因为A版CT交易是由小笨构建的,而A版的本地Output中在替代路径中使用的是小艾的撤销公钥加上小笨的通用公钥。有了小艾的PARSMC0 加上自己的公钥PB,小笨才能构建出CT00a,签名之后他会把CT00a 发给小艾持有和保管。在后面第二笔CT交易发生后要撤销这一笔承诺交易的状态,也是通过这个撤销密钥来实现的。那里小艾需要把 PARSMC0 的私钥即撤销私钥KARSMC0 发给小笨,由小笨构建违约惩罚交易来实现作废过时CT交易的目的。
同理,小笨也会提前生成自己的撤销密钥,并且把公钥PBRSMC0发给小艾,让小艾构建承诺交易的B版,签名之后发给小笨持有。以后要撤销这一笔承诺交易的时候,小笨也需要把 PBRSMC0 的私钥KBRSMC发给小艾,由小艾构建违约惩罚交易来实现作废过时CT交易的目的。
(5)0#承诺交易的脚本
关于第一笔承诺交易的构建,我从《精通比特币》中找到了交易的脚本,复制如下:
Input:2-of-2 funding Output, signed by Bob
Output 0 <5 bitcoins>:
<Bob's Public Key> CHECKSIG
Output 1<5 bitcoins>:
IF
# Revocation penalty output
<Revocation Public Key>
ELSE
<1000 blocks>
CHECKSEQUENCEVERIFY
DROP
<Alice's Public Key>
ENDIF
CHECKSIG
这是A版CT交易的脚本,由Alice持有且只有Alice能广播。但是这个版本是由Bob构建,签名之后发给Alice的,因此Input中目前只有Bob一方的签名。
在两个交易输出中,
Output 0为远程Output,金额为5BTC,是分配给Bob的,因此由Bob的公钥进行锁定<Bob's Public Key>。如果Alice广播了这笔交易,到时候这个Output需要Bob发起一笔交付交易DT,并用Bob在这个Output中使用的锁定公钥对应的私钥进行签名才能解锁和花费。
Output 1 是本地Ouput,金额也是5BTC,理论上是分配给Alice的,但是RSMC合约为其设置了两个花费路径(IF……ELSE,如果……就,如果不…….就……)。
两个花费路径的顺序说明
需要说明一下,《精通比特币》中这两个路径的设置顺序,跟闪电网络白皮书的作者之一Tadge Dryja在视频中讲解的不一样。视频中讲解的路径1是由持有方单方花费,路径2是由撤销密钥花费。而《精通比特币》这个脚本中刚好相反,路径1是撤销密钥花费,而路径2是持有方单方花费。
因此在《精通比特币》脚本中的交易,路径1是由撤销公钥进行锁定,而撤销公钥就是双方在替代路径中所使用的公钥,需要双方合作即提供双方的对应私钥才能解锁,解锁之后资金会支付到撤销公钥对应的地址;路径2则是由Alice单方的公钥进行锁定,但是脚本中设置了1000个区块的时间锁,需要等CT00a 上链之后经过1000个区块确认之后,路径2的交易才能被打包进入区块,然后执行Alice的签名验证并完成资金所有权转移。
两个花费路径是按照顺序进行执行,如果IF后面的第一个条件成立就会这个条件下的指令进行操作,即把钱支付到撤销公钥对应的地址。如果第一个条件不成立,就按照ELSE后面的指令执行,即在1000个区块确认之后把钱支付到Alice的公钥地址中。这个路径设置所表达的意思是这笔钱虽然理论上是分配给Alice的,但是要真正支付给她是有一定条件的,要在IF后的第一个条件不成立的时候,而且要等1000个区块之后,这两个条件都满足的前提下,Alice才能真正拿到这笔钱。
下面图片中显示的是闪电网络作者Tadge Dryja在视频中提供的脚本,脚本的右半部分是针对CT交易A版的两个Output,上面2个Coins 的是本地Output,下面8个Coins是远程Output。
Tadge Dryja 讲解闪电网络的视频地址如下:
youtube.com/watch?v=Hzv9WuqI…
就我理解这个顺序应该没有那么重要,所以我在前面构建0#承诺交易的两个版本那里用了闪电网络视频中的顺序,而这里的脚本还是直接用了《精通比特币》的顺序。
以上是对退款交易即第一笔承诺交易的构建过程和关于交易原则,交易版本,交易结构以及交易脚本的解释。
3)完成充值和通道开启
在双方为对方构建好退款交易并签名之后,他们就都不用担心对方玩消失了,因为即使对方不配合,自己也可以广播退款交易来赎回自己向多签地址充值的资金。
所以这时候双方就可以回去在注资交易上签名,并把FT交易广播出去,双方提供的资金就会被打进链上的多签地址,通道就创建好了。
但是在通道交易正式开始之前,还有两对交易需要构建,就是交付交易和可撤销的交付交易。因为承诺交易的两个Output 在向两方分配余额的时候不会直接把资金支付到Output 脚本中的公钥地址,而是需要双方各发起一笔子交易来转移资金。
在退款交易即 0#CT交易的情况中,如果一方真跑路了,另一方广播了 0#CT交易想要赎回自己的资金,也需要通过广播可撤销交付交易才能把充值的资金拿回来,而且需要等待时间锁到期才拿得到退回来的钱。只不过这两笔交易都不需要对方的签名,用自己的密钥就可以构建,所以在充值之后构建也没有关系,甚至是在它所在的承诺交易被广播,确实需要用到交付交易和可撤销交付交易的时候再构建也不迟。当然在构建好了0#CT交易还没有完成注资交易就构建也没有问题。
接下来我们要来完成构建0#承诺交易的两对子交易。
4)构建交付交易
承诺交易向通道两方分配余额的这两个Output 都不是直接把钱打到Output中的地址,而是分别要通过一笔子交易来把Output 中的资金转移到子交易的Output中。
所以接下来还要针对交易输出中的两个Output 分别构建转移其中资金的子交易。
(1)交付交易 Delivery Transaction(DT)
简单介绍
交付交易DT是用来花费远程 Output 的交易,而远程 Output 是CT交易给非持有方分配资金的交易输出,因此DT交易就是CT交易的非持有方用来花费自己在CT交易中资金(即转移资金)的交易。
交易结构和构建
承诺交易的子交易,结构上也是一笔比特币交易,所以交付交易也是由交易输入和交易输出两部分构建而成。因为承诺交易有两个版本,每一个版本都有一个远程Output,因此交付交易也要构建为两个版本。
还是以A版的DT交易DT00a为例,即CT00a的交付交易。
A版CT交易由小艾持有,因此远程 Output是分配给小笨的。交付交易 DT00a 由小笨发起去解锁远程Output,因此这笔子交易由小笨构建。
第一部分:交易输入
资金来源:来源中引用的交易就是CT00a,0#UTXO(即远程Outout)。
金额:5BTC。
解锁脚本:需要提供小笨的DT交易私钥KBDT进行签名。如果交易被提交,签名验证通过之后,这笔Output中的资金就会转移到交易输出中锁定脚本设置的公钥地址中。
第二部分:交易输出
DT交易只有一个交易输出,因此只需要生成一个0#Output。金额为输入中的那 5个BTC。
锁定脚本就是小笨自己的公钥PB。
这个交易比较简单,A版构建好之后由小笨自己持有就行了。
B版由小艾构建,只需要把签名和锁定公钥换成小艾就可以了,金额不用改变,因为双方都是5BTC。
(2)可撤销交付交易 Revocable Delivery Transaction(RDT)
简单介绍
可撤销交付交易RDT是用来花费另一个Output也就是本地Output的子交易,由持有方发起,对自己在通道中的余额按照承诺交易的分配比例进行花费。
可撤销交付交易也是交付交易的一种,英文是Revocable Delivery Transaction,简写为RDT。被叫做可撤销交付交易是因为它对本地Output的花费能力是有可能被撤销的,被撤销的原因是持有方广播了过时的承诺交易进行结算,就是持有方在结算时企图进行欺骗。因此这笔交易的花费能力或者说是持有方转移自己在通道中的资金的能力被设计为可撤销的机制,是为了阻止持有方在申请结算时广播过时的交易企图进行欺骗。这是避免通道作恶的一个重要环节。
持有方花费能力的撤销机制
撤销RDT交易对本地 Output 的花费能力是通过两个机制的设计来实现的,第一是时间锁,第二是一笔替代交易。
替代交易就是上面提到的违约惩罚交易BRT,可撤销交付交易RDT和违约惩罚交易BRT就是本地 Output的两个花费路径,它们花费的是同一个本地 Output,即同一笔资金,因此只能有一个路径能够花费成功。其中可撤销交付交易RDT由持有方单方进行解锁和花费,但是解锁的时间有限制。而违约惩罚交易BRT解锁时间没有限制,但是需要双方合作才能花费成功,并且由能够提供双方撤销私钥的一方进行花费。
交易的结构和构建
RDT交易同样也是通过交易输入和交易输出两个部分进行构建。我们还是以CT00a的可撤销交付交易RDT00a为例进行说明。
A版承诺交易CT00a由小艾持有,因此本地 Output是分配给小艾自己的。可撤销交付交易 RDT00a 是由持有方即小艾发起去解锁本地Output,因此这笔子交易由小艾构建。
第一部分:交易输入
RDT交易的交易输入,内容有这样几个部分:
资金来源:CT00a,1#UTXO。
来源中引用的交易也是CT00a,不过UTXO序号是1#,即本地 Outout,因为这笔交易要花费的是本地Output。
金额:5BTC。
解锁脚本:A的私钥KA签名
RDT交易是由持有方对本地Output 发起的花费交易,因此需要提供小艾的私钥KA进行签名。
时间锁:1000区块
这笔交易被广播和执行的条件是,第一小艾主动广播了承诺交易CT00a,第二CT00a是通道中最新的承诺交易,即CT00a的状态没有过时。在这种情况下,RDT00a 被提交,等待时间锁到期之后,如果签名验证通过,Output中的资金就会转移到交易输出中锁定脚本设置的公钥地址即小艾的地址中。
第二部分:交易输出
RDT交易也只有一个交易输出,因此只需要生成一个0#Output。金额为交易输入中的5个BTC。
锁定脚本就是小艾自己的公钥PA。
RDT交易A版就构建好了,由小艾自己持有。
B版可撤销交付交易RDT00b 由小笨构建,金额也不用改变,只需要把签名和锁定公钥换成小笨就可以了。
到这里前面的准备工作就完成了,双方可以在没有任何后顾之忧的情况下开始通道交易。
所以下一篇文章的内容就是闪电通道交易的过程。
相关阅读
Nervos Fiber Network 轻皮书学习(1):闪电网络介绍
x.com/xueblock/status/182838……
Nervos 闪电网络轻皮书学习(2):单向支付通道
x.com/xueblock/status/183206……
闪电网络学习3:支付通道的演化
x.com/xueblock/status/183593……
Nervos 闪电网络学习4:双向支付通道
x.com/xueblock/status/183855…
参考资料
闪电网络白皮书:
lightning.network/lightning-……
Tadge Dryja的视频《Payment Channels and Lightning Network》:
youtube.com/watch?v=Hzv9WuqI…
精通比特币:
github.com/bitcoinbook/bitco……
播客《Lightning Network 技术演化史》:
xiaoyuzhoufm.com/episode/5e2……
Jan 带你细数八种支付通道方案:
mp.weixin.qq.com/s/v6NR68fDw…