阅读本文需要具备以下知识储备
➊ 理解区块链的概念
➋ 了解比特币网络的运行原理和架构
➌ 最好阅读《区块链学堂——闪电网络是个什么鬼(故事篇)?》
闪电网络(Lightning Network)这个词乍听起来很酷炫,很深奥,甚至还有点儿邪乎,其实就是在比特币主链以外再架设一个通道,让用户的货币(数字货币)在这个通道上可以进行快速支付,有人会问那不是成了中心化交易所的用户之间收发币吗?虽然很像,但不是,因为闪电网络是去中心化的架构,和传统的交易所有着本质区别。本质上,闪电网络就是一个没有自己发行代币的,依附在比特币主链上的另一个区块链项目。
闪电网络的卓越之处在于,无需信任对方以及第三方即可实现实时的、海量的交易。
闪电网络起源于比特币的扩容问题,它基于微支付通道(双向支付通道)演进而来,创造性的设计出了两种类型的交易合约——序列到期可撤销合约RSMC(Revocable Sequence Maturity Contract)和哈希时间锁定合约HTLC(Hashed Timelock Contract)。
RSMC解决了通道中货币单向流动问题,HTLC解决了货币跨节点传递的问题,这两个类型的交易组合构成了闪电网络。
注:本文图中带<>号的签名表示已经签名成功,不带<>号的签名表示待签名,多重签名只有完成全部签名才能被广播进区块(主链)。
一、建立微(双向)支付通道
➊、双方各拿出1BTC,构建资金池Funding Tx(类比为联名卡),输出为张三和李四的2/2双(多)重签名。此时, Funding Tx未签名,所以不能广播进主链。
➋、张三构造Commitment Tx——C1A和D1A,并交给李四签名。C1A的第一个输出为多重签名地址,张三的另一把私钥张三2和李四的2/2多重签名,第二个输出为李四1BTC。
➌、D1A为C1A第一个输出的交易,输出给张三1BTC,但此类型交易带有sequence,作用是阻止当前交易进块(主链),只有前向交易有sequence个确认时才能进块(sequence值大小由系统设定)。
➍、李四构造Commitment Tx——C1B和D1B,并交给张三签名,结构与C1A、D1A对称。
➎、李四对C1A和D1A进行签名,并将签名给张三;同理,张三对C1B和D1B签名,完成后交给李四。此时,由于并未对Funding Tx进行签名,任何一方均无法作弊(欺诈),任何一方也不会有任何损失。
➏、双方均完成对commitment Tx的签名并交换后,各自再对Funding Tx进行签名,并交换。此时,Funding Tx是完整的交易,可以广播进入主链。
这就是创建序列到期可撤销合约RSMC的全部过程。
RSMC合约具有如下规则——
C1A, C1B两笔交易来自同一个输出,所以这两个交易只有一个能进入主链,否则就会产生双花(双重支付)。
若张三广播C1A,则李四立即拿到1BTC(C1A的第二个输出),而张三需要等C1A得到1000个确认,才能通过D1A的输出拿到1BTC。
同样,若李四广播C1B,则张三立即拿到1BTC,李四等待C1B得到1000个确认,才能通过D1B拿到1BTC。也就是说,单方面广播交易,终止合约的那一方会延迟拿到币,而另一放则立即拿币。
二、转账(交易更新)
张三和李四各自拥有1BTC的余额,此时张三从李四处购买了一件商品,假设价格为0.5BTC,那么余额应该变为张三 0.5BTC、李四1.5BTC。于是创建新的Commitment Tx,对于张三来说是C2A 和D2A,对于李四来说是C2B和D2B,过程与上面类似。
此时两个状态均是有效的,那么最核心的问题来了,因为C1A和C1B已经是处理过的交易了,C2A和C2B才是最新交易状态。怎样才能彻底废弃掉C1A和C1B呢?
RSMC采用了一个非常巧妙的方法,在C1A的第一个输出中,采用了张三2和李四的多重签名,张三将张三2的私钥交给李四,即表示张三放弃C1A,承认C2A。
咦?张三和张三2什么关系?假设一个人可以刻几个印章,有正方形的,有长方形的,有圆形的,有菱形的......,现在张三将张三2这枚正方形的印章交给李四,就代表之前所有需要盖上正方形印章签字的交易都无法再激活,因为张三本人没有这枚印章了,李四手握李四本人的印章和张三2的印章,虽然可以激活这笔交易C1A,但一旦激活张三就会得到1BTC,而李四将损失C2A中的1.5BTC,显然,李四不会这么傻,所以张三交出了张三2的私匙(正方形印章),就表示张三放弃了C1A,承认了C2A。
同样的逻辑,李四交出李四2的私钥给张三即意味废弃了C1B,承认了C2B。
张三交出张三2的私钥给李四,那么李四就可以修改D1A的输出给他自己,形成新的交易F1A。若张三破坏合约存在C2A的情况下依然广播出C1A,那么张三的惩罚就是失去他全部的币。张三交出张三2的私钥,或者对交易F1A进行签名,两者是等同的,都是对C1A的放弃。
引入sequence的目的是,阻止后续交易进块(D1A),给出一个实施惩罚窗口期,当发现对方破坏合约时,可以有1000个块确认的时间去实施惩罚交易,即广播F1A代替D1A。若错过1000个块时间窗口,则无法再实施惩罚了(D1A进块了)。
三、中转交易
张三想要支付0.5BTC给王五,但他并没有一个渠道来和他进行交易。幸运的是,他和李四有一个交易渠道,而王五正好和李四也有一个交易渠道。这样张三就能借助李四的交易渠道,通过哈希时间锁定合约(HTLC)来和王五进行交易了。
具体的交易细节如下:
➊、张三通知王五,我要给你转0.5BTC,然后王五收到张三发来的一个随机数R值;
➋、王五将这个R值进行Hash运算得到H(R)回复给张三;
➌、张三收到回复后,联系李四,告诉李四:如果你找到H(R)的原始R值,我就转给你0.5BTC;
➍、李四得知王五知道R值,便与王五展开了谈判,李四告诉王五,如果你告诉我张三发给你的R值,我就转给你0.5BTC;
➎、王五用R值从李四手中换取了0.5BTC;
➏、接着李四用R值从张三手中换取了0.5BTC。
最后交易完成,张三以脱链的形式付给王五0.5BTC。
四、关闭交易
关闭RSMC逻辑相对简单,直接按照最终的余额,构造出一个Commitment TX即可,例如输出为张三0.5BTC,李四1.5BTC,无需再设置多重签名,构造惩罚交易等。
总结
RSMC通过巧妙的设置Commitment TX的多重签名输出,以及sequence的延迟进块形成惩罚窗口期,解决了在微支付通道中的货币单向流动问题,而哈希锁定合约HTLC则解决了货币跨节点的传递,因此闪电网络成为比特币网络扩容的方案之一。其实闪电网络是一种链下交易,只有关键的环节才会发送到比特币主链,非关键环节则在链下(闪电网络上)进行计算、运行,这样大大降低了主链负荷,从而让主链快如闪电。
理想很丰满,现实很骨感,很多组织和团队对比特币采用闪电网络扩容的方案表示了质疑,他们认为,所谓的闪电网络只是一个假象,而多一层代码,则多一重风险,还是那句话,世界上没有银弹,没有一种技术能搞定所有的问题,闪电网络也不例外。