什么是闪电网络

闪电网络(Lightning Network)是一个去中心化的系统。闪电网络的卓越之处在于,无需信任对方以及第三方即可实现实时的、海量的交易网络。

闪电网络起源于比特币的扩容问题。 闪电网络是基于微支付通道演进而来,创造性的设计出了两种类型的交易合约:序列到期可撤销合约RSMC(Revocable Sequence Maturity Contract,哈希时间锁定合约HTLC(Hashed Timelock Contract)。

RSMC解决了通道中币单向流动问题,HTLC解决了币跨节点传递的问题。这两个类型的交易组合构成了闪电网络。

RSMC 创建

我们先来创建一个序列到期可撤销合约(RSMC),爱丽丝和鲍伯是合作方,经常有比特币往来,所以他们决定各拿出0.5BTC放入通道中,便于业务往来。

解释一下下方RSMC交易的结构(图X),左侧为爱丽丝的视角,右侧为鲍伯的视角。中间Funding Tx为共同可见,C1a和RD1a为爱丽丝持有,C1b和RD1b为鲍伯持有。交易图中带有尖括号的签名表示待填入。

RSMC交易的结构图

1、双方各拿出0.5BTC,构建Funding Tx,输出为爱丽丝和鲍伯的2/2多重签名。此时, Funding Tx未签名,更不广播。 2、爱丽丝构造Commitment Tx:C1a和RD1a,并交给鲍伯签名。C1a的第一个输出为多重签名地址,爱丽丝的另一把私钥爱丽丝2和鲍伯的2/2多重签名,第二个输出为鲍伯 0.5BTC。 3、RD1a为C1a第一个输出的花费交易,输出给爱丽丝0.5BTC,但此类型交易带有sequence,作用是阻止当前交易进块,只有前向交易有sequence个确认时才能进块。 4、鲍伯构造Commitment Tx:C1b和RD1b,并交给爱丽丝签名。结构与C1a、RD1a是对称关系。 5、鲍伯对C1a和RD1a进行签名,并将签名给爱丽丝;同理,爱丽丝对C1b和RD1b签名,完成后给鲍伯。此时,由于并未对Funding Tx进行签名,任何一方均无法作恶,任何一方也不会有任何损失。 6、双方均完成对commitment Tx的签名并交换后,各自再对Funding Tx进行签名,并交换。此时,Funding Tx是完整的交易,广播之。

上述过程以及结构图的描述,就是创建RSMC的全部过程。

C1a, C1b两笔交易花费的是同一个输出,故他们两个交易只有一个能进块。若爱丽丝广播C1a,则鲍伯立即拿到0.5BTC(C1a的第二个输出),而爱丽丝需要等C1a得到1000个确认,才能通过RD1a的输出拿到0.5BTC。另一方,若鲍伯广播C1b,则爱丽丝立即拿到0.5BTC,鲍伯等待C1b得到1000个确认,才能通过RD1b拿到0.5BTC。也就是说,单方广播交易终止合约的那一方会延迟拿到币,而另一放则立即拿币。

交易更新

爱丽丝和鲍伯各自0.5BTC的余额,此时爱丽丝从鲍伯处购买了一件商品,价格为0.1BTC,那么余额应该变为爱丽丝 0.4BTC,鲍伯 0.6BTC。于是创建新的Commitment Tx,对于爱丽丝来说是C2a 和RD2a,对于鲍伯来说是C2b和RD2b,过程与上面类似。

交易更新时的交易结构

此时两个状态均是有效的,那么最核心的问题来了,如何才能彻底废弃掉C1a和C1b呢? RSMC采用了一个非常巧妙的方法,在C1a的第一个输出中,采用了爱丽丝2和鲍伯的多重签名,爱丽丝将爱丽丝2 的私钥交给鲍伯,即表示爱丽丝放弃C1a,承认C2a。

交易更新时的多重签名

爱丽丝交出爱丽丝2的私钥给鲍伯,那么鲍伯就可以修改RD1a的输出给他自己,形成新的交易BR1a。若爱丽丝破坏合约存在C2a的情况下依然广播出C1a,那么爱丽丝的惩罚就是失去她全部的币。爱丽丝交出爱丽丝2的私钥,或者对交易BR1a进行签名,两者是等同的,都是对C1a的放弃。

反之亦然,鲍伯交出鲍伯2的私钥给爱丽丝即意味放弃C1b,而仅能认可C2b。

引入sequence的目的是,阻止后续交易进块(RD1a),给出一个实施惩罚窗口期,当发现对方破坏合约时,可以有1000个块确认的时间去实施惩罚交易,即广播BR1a代替RD1a。若错过

1000个块时间窗口,则无法再实施惩罚了(RD1a进块了)。

交易关闭

关闭RSMC,直接按照最终的余额构造出一个Commitment TX即可,例如输出为爱丽丝0.1BTC,鲍伯0.9BTC,无需再设置多重签名,构造惩罚交易等。

中转交易

爱丽丝想要支付0.5BTC给鲍勃,但她并没有一个渠道来和他进行交易。幸运的是,她和查理有一个交易渠道,而查理正好和鲍勃有一个交易渠道。这样爱丽丝就能借助查理的交易渠道,通过哈希时间锁定合约(HTLC)来和鲍勃进行交易了。

image

中转交易示意图

为了完成这次交易,爱丽丝就会给鲍勃发短信说:“嘿!我要给你付笔款。”这时鲍勃自己将收到一个随机数字(R),接着鲍勃便会回一个被哈希的数字(H)(你可以认为被哈希的数字R是随机数字的一种加密形式)给爱丽丝。然后爱丽丝的钱包紧接着就会联系查理说:“嘿,查理。如果你给我生成(H)的未加密值(R),那么我就同意更新我们渠道的支付分配,这样你就可以得到的就会比0.5BTC多一点,我得的比0.5少一点。”尽管查理并不知道R,但他也会同意。之后查理便会去找鲍勃说:“嘿,鲍勃。如果你给我那个能生成H的未加密的值R,我将同意更新我们渠道的支付分配,这样你就可以得到的会比0.5BTC多一点,我得到的比0.5少一点。”

因为R就是从鲍勃这里生成的,所以他肯定知道。接着他马上将R告诉查理,并更新了其渠道的支付分配。然后查理将R告诉给了爱丽丝之后也更新他们的渠道,最后交易完成,爱丽丝以脱链的形式付给鲍勃0.5BTC。

总结

RSMC通过巧妙的设置Commitment TX的多重签名输出,以及sequence的延迟进块形成惩罚窗口期,解决了在微支付通道中的币单向流动问题。

以上节选自——《区块链:从数字货币到信用社会》(中信出版社)