闪电网络(二):构建资金池

闪电网络的原理有点复杂,容易烧到脑,要小心了。

闪电网络由闪电通道构成,闪电通道就是一条条地用于点对点转账的通道,而建立闪电通道的前提是必须先有一个资金池。所以,本篇我们就以A和B之间的闪电通道为例,先拿“构建资金池”来做开胃菜。

所谓的资金池构建,其实就是A和B各将一些比特币(此例是各转2个)转到一个由他俩控制的2-2多重签名地址。可以把这个2-2多重签名地址看做第三方,A和B在这个第三方存一些比特币做保证金,为以后的相互转账提供基础。

如果A和B是互相信任的,那这事就好办,各自将比特币转到那个多重签名地址就可以了。但如果双方不信任,事情就麻烦一些。比如A担心将自己这份比特币转到多重签名地址后,B不转了,而且也不提供签名协助A将多重签名地址上的币转回给A,那这时候,A的这些比特币就永远卡死在那个多重签名地址了。虽然B这么做对自己也没半毛钱好处,但也不排除有人就是要干这种损人不利己的事。

那么,如何在A和B互不信任的情况下,构建起一个资金池呢?
如图:

**这里写图片描述**

第一步:A用A1的公钥和B用B1的公钥生成两个2-2多重签名地址,咱们暂且称它为“A1B1多重地址”(后面都沿用这种格式)和“B1A1多重地址”。多重签名地址咱们上篇详细讲了,稍微复习一下:所谓2-2就是指该多重签名地址是通过2个普通地址的公钥构建的,而且发起交易时需要2方的私钥同时签名才能生效。所以,这个多重地址既然是A和B创建的,自然也只受A和B控制。

注:这两个多重签名地址虽然都是由A1和B1生成,但是在生成的过程中,把A1放在前面,还是把B1放在前面,生成的是完全不一样的地址,所以,我们把A1放在前面生成的多重签名地址称为“A1B1多重地址”,把B1放在前面的称为“B1A1多重地址”。

第二步:A构造一笔交易,转账给B1A1多重地址2个比特币,但A仅仅是构造这笔交易而已,既没有对它签名,更没有广播到比特币网络。

第三步:A再构造一笔交易①,发起地址是B1A1多重地址,目的地址是A自己的比特币地址A1。这笔交易,有个特别设置:Seq=1000,也就是说,如果这笔交易广播出去,也必须要经过1000个区块(可以通过设置交易里的“锁定时间”字段来达到目的,详见0626的文章)的时间才能被打包。

第四步:A将交易①单独发给B,而不是广播到全网。A将交易①发给B的目的,是请B对这笔交易进行签名。

第五步:B收到交易①之后,发现这笔交易只不过是A把自己转到B1A1多重地址的币,再转回给自己。如果B诚心想合作,那就会用B1的私钥签了给A,如果B不签,那就到此为止,谁都没损失。

第六步:A收到B对交易①的签名后,再对B1签名过的交易①用A1签名进行测试,如果成功,说明B1的签名有效。

第七步:此时,A控制着交易①的主动权,而且交易①又是从B1A1多重地址转2个比特币给A。所以,A现在可以放心大胆地把第二步中的那笔交易进行签名广播了。因为即使现在B不合作,A也能拿回自己的比特币,只不过要等待一段时间而已。该步完成后,B1A1多重地址有了A转过来的2个比特币。

第八步:B也用类似的操作,完成对B1A1多重地址的2个比特币的充值。不过,对于B来说,似乎有个风险,因为A拥有B1对交易①的签名,如果B刚把2个比特币转到B1A1多重地址,A马上就发起一笔交易,用B1和A1签名,把这2个比特币转走,那怎么办?其实,仔细看看会发现,A的操作不会成功,因为新发起的这笔交易和交易①的发起地址和目的地址一样,但这两笔交易的“输入”不一样,所以这是两笔不同的交易,而B1的签名仅对交易①生效。

第九步:A和B各将2个比特币转给B1A1多重地址后,理论上来说,就已经完成了资金池的构建,但是,留下了一些隐患,因为A控制着交易①,B控制着交易②,所以最后做一步工作来清除隐患,那就是A和B共同发起一笔交易,将B1A1多重地址的比特币转到A1B1多重地址。此时,B1A1多重地址里没有比特币里,交易①和②也没啥意义了。

最后,A1B1多重地址才是崭新的用于闪电通道的资金池。

猜你喜欢

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