原文标题:《小岛美奈子:比特币闪电网络初探》
文章来源:链人 ChainHR

闪电网络落地的场景是微支付和流式支付,要学习和开发闪电网络,有两个非常好的地方:第一个就是闪电网络的白皮书,第二个就是 https://github.com/bcongdon/awesome-lightning-network,这里收集了所有和闪电网络相关的开源 repo,包括闪电网络的五种 protocol 实现,还有若干闪电网络的开源钱包,我们可以看到闪电网络社区是非常开放和繁荣的。

直观了解闪电网络的最好方法,其一是下载和使用支持闪电网络的钱包,例如 bluewallet,其二是查看闪电网络浏览器 https://1ml.com,之所以叫 1ml,也是社区希望有一天闪电网络可以承载 1million btc 支付能力的上限。

下面我结合白皮书,讲解闪电网络的具体实现。关于闪电网络的白皮书,可以在闪电网络实验室的官方网站上找到。链接如下:https://lightning.network/lightning-network-paper.pdf

要理解闪电网络,首先要讲解 BTC Transaction 里面的 2 个关键字段:nLockTime 与 sequence numbe。nLockTime 表示交易是否会被积压;当默认 nLockTime=0 时,代表这笔交易不会积压,节点在收到这笔交易之后,立即会进入 Memory Pool,进行打包。当 nLockTime > 0 时,这笔交易会被节点暂时 Hold,不会被矿工打包。

nLockTime 是 Transaction 级别的,而 Sequence Number 是 Input 级别的,粒度更细。原理和 nLockTime 类似,Sequence Number 的作用也是把交易 Hold 在那,等到该 Input 所引用的交易所在的 Block,其后面跟随了 Sequence Number 个区块之后,该交易才能被打包,被广播进区块链网络。

两者都是关于时间的,但有 1 个很大差别:nLockTime :绝对时间,用的是整个区块链的长度或时间戳来表达的。sequence number: 相对时间,当前交易所引用的 UTXO 所在的块,后面追加了多少个块。

有了这个知识之后,下面就可以来看比特币里面的微支付通道。在比特币闪电网络白皮书中引用了这么一句话:If a tree falls in the forest and no one is around to hear it, does it make a sound? 「如果一棵树落在森林里,周围没有人听到它,它会发出声音吗?」

作用在比特币的世界,如果我们一桌人在打麻将,我们经常一晚上下来可能会互相之间先记账。最后回家的时候在一起结算。因为这笔交易只在小范围内进行着,所以其实没有必要让所有人都知道,这样其实只要参与交易的双方能够达成共识。

这就是我们哲学上说的,唯心主义的观点。中国也有心外无物,心外无理的说法。

回到闪电网络。我们看看,微支付通道是如何做到 off chain 交易的。刚才我们提到了 nLockTime 和 Sequence number 要实现微支付通道,就必须借助这两个属性。

微支付通道建立过程,我来举一个例子。比如我在看一段电影,这个电影按照我观看的时间每分钟收取一定费用。A 是客户,B 是电影提供商,B 需要把 1 段视频播放给 A,整集的价格是 100 元。

A 不是 1 次性把 100 元给 B,而是每观看一分钟,给 B 支付 1 元。现在看一下,微支付通道如何解决这个问题:

阶段一,用户 A 发起 1 笔交易,把 100 元打到 1 个公共账号上面,这个公共账号同时需要 A 和 B 的签名,也就是我们常说的多重签名(Multisig)。这笔钱需要 A,B 同时出具私钥,才能把钱取出来。这笔交易叫做保证金交易(Funding Transaction)。

阶段二,用户 A 同时发起 1 笔退款交易(Refund Transaction)。输入就是上面的那笔,但是这笔交易的 nLockTime 为一个 > 0 的值,所以不会立即生效。具体怎么做呢? 用户 A 先把这笔交易发给 B,B 用自己的私钥进行签名返回给 A,A 把这个 Refund Transaction 攥在手上,这笔交易其实是 A 的一个保底措施,保证前面的 100 元不会永远拿不回来。

阶段三,就是流式交易阶段,每播放一段视频,双方 Update 阶段一发出的保证金交易(Funding Transaction)。使得这个公共账户里的资金分配不断走向 B。这些 Update 只会在 A, B 之间传递,而不会广播到比特币网络上。

阶段四,整个播放过程完成,公共账号里的所有资金都流向 B。双方确认最后的交易,广播到网络上,交易完成。我们看到,整个过程,只有一头一尾两次交易被广播到了比特币网络上。其他步骤都是在 A、B 双方之间达成共识的。

现在我们考虑可能出现的作弊情况。

情况 1,B 跑路,视频根本没有播放完,A 的钱会不会永远锁死在公共账号里面?
情况 2,A 跑路,B 播放了视频,但是 A 撤销了已经付的钱。

先看情况 1,我们前面提到在阶段二的时候,A 发起 1 笔退款交易(Refund Transaction)。如果 B 跑路,就直接把这个广播出去,虽然会有一定延时,但最终不会有损失。

考虑情况 2,我们 remind 阶段三,因为每一次 update 有双方的签名。如果 A 跑路了,B 就把最新的 update Transaction 广播到网络上,该交易被执行,B 就会拿到最新的钱。这个 Update Transaction,就相当于 B 攥在手里的 A 的把柄。

这个 Update Tx 有个特点,就是每次更新,nLockTime 是单调递减的。所以一旦 B 进行广播,就能拿到最新的一次更新。这样微支付通道就被建立了。

但是这个微支付通道距离我们的闪电网络,还有很多距离。微支付通道的缺点:它是单向的,只能用来 A 给 B 转账。nLockTime 的限制。当有一方跑路了,另一方都要等 nLockTime 解锁才能赎回自己的钱。

下面我们介绍的闪电网络就是解决微支付通道的问题。这就要介绍闪电网络白皮书里面的另一个核心概念:RSMC,全称 Revocable Sequence Maturity Contract。中文翻译「可撤销序列成熟度合约」。

下面我们来用 RSMC 来重现上面的例子。这个是白皮书里面有一幅图,

阶段一,和微支付通道一样,生成一笔保证金交易(Funding Transaction)。不过这次是,参与的双方都拿出一部分本金放到公共账户。

阶段二,和微支付通道类似,不过这次,双方都需要生成一笔退款交易(Refund Transaction),以便不时之需。

阶段三:双方开始不断 Update Transaction。重点来了,一旦有一方中断交易,对方可以立即拿回自己的钱,而另一方,则要等待 Sequence Maturity 之后才可以拿回自己的一部分钱。换句话说,违约的一方被惩罚了。

最后阶段四,双方把交易广播,此时 Sequence = 0,双方都拿到了自己钱。

需要注意到,当其中一方拿回钱的时候,这笔钱并没有直接打回自己的账户里。而是达到了一个新产生的公共账户。而在每次 Update Transaction 的时候,双方都会把上一轮自己产生的公共账户的私钥发送给对方,相当于双方不断的交换把柄,让交易得以持续。

这个过程很像古代交战双方交换战俘,具体细节可参见比特币闪电网络白皮书和比特币闪电网络实现规范 BOLT (博尔特)。https://github.com/lightningnetwork/lightning-rfc/blob/master/00-introduction.md

所有的闪电网络 protocol 的实现,以及钱包,都是兼容这份规范的。

目前建立了双向的流式支付通道,但是要形成网络,还需要很多很多人加入这些通道,而最终所有的通道会联系在一起,形成一张 Mesh Network。类似格点网络,使得任意一笔交易,都可以经过若干通道,达到最终的目标。

有一部电影,叫做《六度空间》,说的是现实世界中,你和任何陌生人之间,最多只有不超过 6 个熟人关系,说明通过形成很多支付通道,来建立庞大的支付网络是可能的,这就是闪电 「网络」。

最后推荐一些介绍闪电网络的文章

1.闪电网络「增长」迅猛,比特币正式迈入「支付货币」2.0 时代

2.The Lightning Network: How to install and (hopefully) make money

其中第二篇教你怎么自己建立一个闪电网络的支付通道。最后要想体验闪电网络,可以下载安装一些支持闪电网络的钱包。

我这里推荐 BlueWallet 值得一提的是,这些钱包也是开源的,大家可以应用这些钱包,构建自己的服务,以及设计 Lapp。

最后提一下,「For every complex problem there is an answer that is clear, simple, and wrong.」

我们回顾比特币,扩容这个问题,增大区块可能就是那个 「clear and simple」 的解决方案。闪电网络选择了走隔离见证,是一种短期看激进,长期看保守的策略。其目的就是追求比特币作为 Layer 1 层的稳定。把所有扩展的努力都寄托在 Layer 2 的实现上。

闪电网络还在快速的发展着,现在进场的还是老韭菜。今天的分享就到这里,我们下回再见。

问答环节

问题 1: 目前闪电网络的支付能力怎么样?

答:闪电网络的支付能力目前依然在快速的变化,https://1ml.com/,大家可以用这个实时查询。

问题 2: 以流式支付为例,A 开始是发起 1 笔 100 块钱的交易,1 分钟后 update,这个过程 A 把私钥告诉 B,让 B 通过私钥取 1 块钱吗?钱从公共账户流向 B 是通过合约执行吗?

答:注意,每次更新状态,都会创建一组新的公共账户,这里的私钥指的是这个新的公共账户的零时私钥。这个过程是通过参与交易的双方,都对这个新的公共账户进行签名达到的。

来源链接:mp.weixin.qq.com