闪电网络(三):建立闪电通道+利用闪电通道转账

我们仔细想想,为什么比特币转账这么慢?
还不是因为每笔交易都要广播到全网,然后被区块打包,接受所有节点的验证。一句话来说,就是交易要上链,所以才慢。

如果A和B两人有业务往来,相互之间经常要转账,假如每一笔转账交易都上链的话,那肯定是既慢又耗手续费。他们就想,这比特币反正就在我俩之间转来转去,没必要每次转账都记录到区块链(其实,上一篇里有两笔交易就没上链,还记得是哪两笔吗?),只要把最终咱俩结束合作时的金额,用一笔交易上链就可以了啊!

比如,A和B经过长时间的合作后,转账了100笔,但100笔的效果,其实就是A转了1个比特币给B,那中间的100笔交易其实没必要上链,只要最后构造一笔交易,让A转1个比特币给B,就OK了。

这就是闪电通道要做的事,A和B可以在闪电通道里用不上链的交易实现闪电般地转账。

今天我们就来看看如何建立一个闪电通道。咱们上个图,慢慢撸:

为了后面叙述的流畅,先对此图做几个说明:

1、沿用上篇我们构建的资金池:A1B1多重地址,里面有4个比特币,A和B各转了2个,这是这个闪电通道的启动资金;

2、建立闪电通道的双方是A和B两个人,其中A1、A2、A3等是A的普通比特币地址,同样,B1、B2、B3等是B的普通比特币地址;

3、建立通道的过程以及后面转账的过程,会建立很多个多重签名地址,比如,A1和B2的公钥建立的A1B2多重地址,B1和A2建立的B1A2多重地址。

好,接下来就看具体的步骤:

第一步:A构造一笔交易①,发起地址正是A1B1多重地址,目的地址有2个,一个是A1B2多重地址,另一个是A1,各转2BTC。

第二步:A再构造交易②,发起地址是A1B2多重地址,目的地址是B1,但这笔交易如果播布出去,需要经过1000个区块的时间才能打包。

第三步:A对交易①和交易②用A1的私钥签名后,发给B。

第四步:B收到交易①和交易②后,会在自己电脑上用B1、B2的私钥,在A1已签名的交易①和②上进行签名测试,以验证A的签名是否有效。

第五步:B按照A在第一到三步的做法,也构造类似的交易③和④,同样A也有如第四步的回应。操作是对称的,具体过程就不说了,大家对着看图应该能看明白。

这里写图片描述

我们来看看这一系列交易的玄机。

以A构造的交易①和②为例,首先在交易①里,这4个初始比特币,转了2个给A1,转了2个给A和B控制的另一个多重地址,这明显是有利于A的,再看交易②,虽然是把A1B2多重地址的2个比特币转给A1,但是中间要经过1000个区块的时间,以10分钟一个区块来算,那就是差不多7天时间。如果A发现B有什么不当行为,也完全有足够的时间去应对。最关键的是,A自己那2个比特币通过交易①就可以马上回流,也不怕B搞什么幺蛾子。

所以,A发起的交易①和②是明显有利于A的,所以B不会签名发回给A。但B还是会验证A的签名是否有效,因为不管怎么说,如果执行这两笔交易,自己至少还是可以拿回那2个比特币,所以,验证一下以备不时之需。

于是,情况就变得有点微妙了:
1、A构造了有利于自己的交易①和②,但B掌控了①和②的主动权;
2、B构造了有利于自己的交易③和④,但A掌控了③和④的主动权。

在这种情况下,交易①②③④肯定都不会广播到比特币网络,全部都悬在这里,僵持着,不上链。正是这些看似很玄乎的交易,搭建起了A和B之间的闪电通道,下一篇,我们来看看他们如何利用这个通道进行快速转账。

现在我们就来看看A和B如何实现闪电般地转账。
接下来,就以A转1个比特币给 B为例,来看看具体过程。如图:

这里写图片描述

这幅图在昨天的基础上增加了转账部分,即虚线右边的部分:交易⑤⑥⑦⑧。而虚线左边的,就是我们昨天讲的建立通道的部分。我们看看,用于转账的交易⑤⑥⑦⑧其实跟建立通道的交易①②③④很像,但具体细节还是不同的,如下:

第一步:A构造交易⑤,发起地址为A1B1多重签名地址,目的地址是A1B3多重地址和A1地址,给A1B3多重地址3个比特币,给A1地址1个比特币。

第二步:A继续构造交易⑥,发起地址为A1B3多重地址,目的地址是给B1,转账3个比特币,当然,这笔交易如果广播后要生效,也是要等待1000个区块才行。

第三步:A将交易⑤和⑥签名发给B。

第四步:B对A在⑤和⑥上签名进行验证。

第五步:B按同样原理进行操作。

以上五步与上篇中建立闪电通道前五步完全雷同。接下来,就是最关键的不同点了。

第六步:A把自己的A2地址的私钥发给B!

等等!我们之前不是说过私钥绝对不能泄露吗?因为谁拥有私钥谁就拥有该地址的比特币!现在,竟然要主动把自己的私钥告诉给别人,这不是疯了吗?这闪电网络靠谱吗?

别着急,我们好好来分析一下,看A把A2的私钥发给B之后,到底能会发生一些什么事。

B拿到A2的私钥后,首先可以拿到A2地址上的比特币,所以只要A不在A2地址上另存比特币,只把A2用于该闪电通道,那就没啥事。其次,B还可以完成交易④,因为交易④之前的状态就是A2未签名,B1已签名。但我们仔细看看,交易④的发起地址是B1A2多重地址,这个地址的比特币来源于交易③,但关键是交易③因为A1并未签名而没有生效,一环扣一环,绕了一圈,发现控制闸门的还是A。所以,即使B拿到A2的私钥,也捞不到啥好处。

那A把A2的私钥给B有什么用呢?

其实就是A向B表示:那个向A1和B1地址各转2个比特币的交易①②③④组合作废,当前通道状态,由转给A1地址1个比特币和转给B1地址3个比特币的交易⑤⑥⑦⑧补上。换句话来说,就是原来各有2个比特币,现在我只有1个,你有3个。这不就是A转1个比特币给B的意思嘛!当然,这作废不作废不是光口头喊别人就信的,而是因为如果不作废对A反而不利。

我们来看看,假如A执意要发起交易③和④,会发生什么。

首先,A用A1对交易③签名,交易③在区块链广播并被打包后,B马上就可获得2个比特币。这至少保证了B没有损失。对于B来说,更美妙的是,B还可以用A2私钥和自己的B1私钥,对B1A2多重地址发起转账,把交易③里转给该地址的2个比特币也转给自己。就算A马上发起交易④也于事无补,因为交易④的执行要等待1000个区块,这会,B早就把比特币转走了。

所以,当B收到A2的私钥后,其实就意味着这笔转账完成了,因为所有这些交易(交易①到⑧)全部都没有上链,只涉及A与B之间的点对点交互,所以,跟原始的链上交易比起来,确实快如闪电。

最后,如果A和B现在要结束这个闪电通道,该怎么做?

其实很简单,如果两人和平分手,可以一起发起一笔链上交易,按当前各自的余额分配资金池里的比特币。如果两人闹掰了,任何一个人都可以单独结束这个通道,要做的是就是将自己控制的交易签名广播出去,比如A将交易⑦和⑧签名广播,两个交易执行后各自会得到各自应得的比特币,不过B可以马上得到,而A需要等待一段时间才行。也就是说,谁强制发起结束,谁就会受到延迟拿币的惩罚。这一点,也鼓励大家有商有量,好聚好散。

猜你喜欢

转载自blog.csdn.net/lianquan_cn/article/details/81736392