闪电网络(Lightning
Network)是解决比特币主链转账速度慢、成本高等问题的链下交易网络,是主链扩容、跨链交换最有前景的技术方案。由于设计复杂,闪电网络的原理较难理解,同时也存在一些实用方面的问题,本文通过生活化的案例从设计层面上解释了闪电网络的原理,同时对闪电网络现存的问题进行了分析和解决建议。

一、两块 pizza 的故事

2010 年 5 月 22 日是值得纪念的一天,程序员小哥 Laszlo 在这天用 10000 枚比特币买了两块 pizza,并在 bitcointalk 论坛上炫耀。对就是下面这俩:

1

PIZZA / BTC : 10000

后来的事大家都知道了,比特币价值一路狂飙,这两块 pizza 的「身价」也不断上升,国外有好事者专门开了个 Twitter 来记录它们每天的价值(并对小哥造成一万点伤害)。目前这对 pizza 大概值 6 亿人民币,每块 3 亿,咬一大口差不多一千万吧。

2

Twitter @bitcoin_pizza

大家先替小哥默哀 3 秒——好了,我们都知道比特币所有转账记录都能查到,所谓可追溯,对比时间和金额之后基本可以锁定这笔伟 (che) 大 (huo) 交 (xian) 易 (chang) 就是下面这条:

3

bitcoin pizza 交易记录

想围观的 →
传送门

除了喜闻乐见的交易金额之外,还有一个数据抓住了我的眼球:手续费是 0.99 BTC。这也太——便宜了!

- 啥?6 万多的手续费还便宜?看来知县大人没少捞啊!

这这…本官可是清…清官,多说无益,咱们上数据:

彼时彼刻,10000 个比特币价值 40 美金左右,手续费 0.99 BTC 值差不多 0.4 美分;

此时此刻,全网推荐手续费是 0.0001125 BTC (下图),约为 1.125 美金,也就是 112.5 美分。

4

推荐的比特币转账手续费(2018-04-25 上午 10 点左右),来源:bitcoinfees.earn.com

1125 : 4,现在是以前的几百倍,当年是不是很便宜?

这还没完,17 年底比特币转账太贵逼走很多人后,手续费已经大幅回落了。回落之前呢?有段时间平均手续费超过了 30 美金,比买 pizza 时涨了将近万倍。

你说当年便宜不便宜?你说知县大人是不是清官?

- 好好好你是清官,不过就算按照现在来算,一笔交易手续费要 7 块多钱,我买个煎饼才 5 块,抢劫啊?

对,用比特币进行小额支付就是贵,而且服务还不好。根据代码的设定,每秒钟比特币全网只能处理大约 7 笔交易,这速度基本是恒定的。矿工肯定先为手续费高的「土豪交易」进行确认,没那么土豪的交易很可能要等几十分钟甚至几小时才能到账,这当口煎饼摊有没有被城管端了都难说。

- 那比特币是不是没救了?

当然不是。之所以这么贵、这么慢,根本原因是你买煎饼这笔交易需要全球所有比特币结点进行验证和记录,这样才能保证交易的一致性、可追溯和不可篡改,这对大额交易是非常重要的,转几百万的大佬也不在乎多几十块手续费和等上个把小时。

- 买个煎饼而已,能不能降低点要求,比如不求追溯,也不用大家都知道,然后便宜点?

可以啊,那就不要麻烦矿工大佬了,来笔「链下 (off-chain) 交易」就成了,既快又便宜,还能保证跟链上差不多的安全性。

- 还有这种操作??

二、闪电网络

闪电网络就是这样一种链下交易「骚操作」,也是目前主链扩容最有前景的方案。

闪电网络是基于 BOLT (Basic of Lightning)协议实现的链下交易网络,主要由 RSMC (Revocable Sequence Maturity
Contract)和 HTLC (Hashed TimeLock Contract)两个智能合约组成,翻译过来分别是
「序列到期可撤销合约」和「哈希时间锁定合约」

…嗯我知道,聪慧如知县也记不住这些全称,但是我能记住缩写,因为更加聪慧的知县夫人给它们起了昵称——「肉丝冒菜(RSMC)」
「火腿腊肠(HTLC)」。这吃…哦不智商,我反正是跪了。

这两个合约设计得非常精巧:资金通道用坚实的密码学技术进行限定,资金流向又用精巧的博弈论策略进行引导,跟比特币一样都是跨学科设计的典范。BOLT 协议细节很多,实现复杂,秉着说人话的原则,咱们简单描述一下它们的工作原理就好。

肉丝冒菜( RSMC)有点像两个人记私账,而且谁也不敢作恶,否则血本无归。

举个例子。张三和李四相约去澳门的一家游乐设施里打牌,设施规定:

「现金不能进场,要在柜台托管,转账提现每次手续费 100 块,而且必须跑回柜台按手印确认」

俩人傻眼了,每人也就带了 5000 块,多打几局还不够交手续费的?每局都跑回来,这一下午也打不了几局啊…柜台妹子看这俩人玩的小,给了另一个方案:

「两人花 100 块开一个共同账户,按照张三 :5000/ 李四 :5000 放钱进去,并得到一沓票据。每张票据记录一次资金划分,比如张三 :6000/ 李四 :4000,两人都按手印,票据就生效了。任意一人拿生效的票据去柜台交 100 块,就能按票据比例自动打钱到各自的账户。另外,每张票据都有递增的编号,用完了可以免费加。」

这么一来,就算一下午打了 100 局,额外费用也就 200 块,还省了每局跑去柜台划账的时间,有这好事儿?张三马上就要掏钱,却被李四拦住了:

「等下,假设我先输了 3000,记了张三 :8000/ 李四 :2000 的票据,后来我追平还赢了 3000,又记了张三 :2000/ 李四 :8000 的票据,但是这小子趁我上厕所拿前一张票据提现,我不亏惨了?」

柜台妹子白了一眼:

「你当我们傻啊,你俩一起来提现,钱当然马上就打给你们;但是如果只有张三来,我会先把你的钱打了,他的钱扣一个小时。你收到短信发现到账只有 2000,就拿最新的那张有效票据给我,如果这张比张三的编号大,我就认定张三作恶,剩下的 8000 都打给你,张三净身出场」

俩人愉快地交钱开打了。

以上就是肉丝冒菜(RSMC)的基本原理,实现了任意两人链下交易(票据记录金额划分),链上确认(领票据
& 提现),通过数字签名(按手印)和时间戳(票据编号),以及「先提现后到账」和「作恶罚没」等规则设计,让链下交易做到了安全、快速、低成本。

其中,两人「开设共同账户」对应闪电网络里的「开通道」,「提现」则对应「关通道」,这两个操作实际上是在比特币主网提交了两笔特殊的交易,因此会产生手续费和等待时间,也就是去柜台交 100 块。承载所有规则的「柜台妹子」其实就是代码写就的智能合约,公开、透明、可执行。

火腿腊肠(HTLC)又是做什么的?上面提到开 / 关通道是要花钱的,10 个人两两交易需要开 C(10,2) =
45 条通道,100 人是 4450 条,1000 人就是 44 万多条…呈平方级增长,这是非常恐怖的。

实际上,张三也不可能认全其他 999 人,比如小区门口新开张的煎饼摊摊主王五,跟张三不认识,但跟李四是小学同学。话说这天早上张三来买煎饼:

张三:俩果子俩鸡蛋不放香菜,能比特币付吗?

王五:好嘞一共 7 块,能啊,主链不值当,闪电呗?扫这个码就行。张三:

咱俩没通道啊,不还得去主链开?是不是想着我通道钱都花了,就会多买几次煎饼摊低成本?你这小算盘打得不错啊,啧啧…

王五:哈哈哈,机智如您,其实还有个办法,你不是跟李四有通道吗?我跟他也有。你付 7 块付给他,让他转给我,这不就省了咱们开通道了嘛?

张三:对啊,这么好的点子我咋没…等下,李四最近出国了,操作不了啊!

王五:好吧,要不你问问其他跟你开了通道的「闪电好友」,要是恰好有人也是我好友,或者是我好友的好友,不就能帮忙转钱了?

张三:行是行…但是麻烦啊,要层层传话,还要经过很多人,中间要是谁卷款跑路了咋办?

王五:(7 块还「款」…)那…那要不这样吧,我给你发个链接,点开后有个密码框,输入密码后会提示对错,现在密码只有我知道。你把链接转发给所有好友,承诺「谁能找到正确的密码,我就给谁 7 块钱」,他们都没密码啊,就也转发链接给他们的好友并承诺。这样层层转发下去,直到比如赵六转给了我,我给他密码,他验证后垫付给我 7 块钱,再拿密码找他上家要钱,层层要账,最后就找到你头上啦。

张三:emmm…也就是说,有密码就等于有收款权,有承诺所以敢层层代付,最后传到我这里,我把钱付了就结了!要是中间有人违反承诺,拿了密码不付钱咋办?

王五:哈哈,别说中间了,你都可能不付钱啊…唉唉别动手,你听说过「智能合约」吗?这东西条款公开,而且能确保按条款执行。做出承诺也就是签订智能合约,这时候你要把你的 7 块等值比特币锁进去的,要不别人怎么敢帮你代付?所有传递承诺的人也都会签合约、锁 7 块,大家才敢玩。最后,这么多人帮你省了通道钱,你不表示表示?所以放 7 块 1 进去吧,多的 1 毛就给他们当辛苦费了,也都没太费劲。

于是,张三花了 1 毛手续费,吃上了热腾腾的煎饼。王五看到自己的想法变成了现实,幸甚至哉,免费给张三的煎饼里夹了火腿和腊肠以咏志,后世遂将王五设计的流程命名为「火腿腊肠(HTLC)」。

先把口水擦一擦,总结一下。
火腿腊肠(HTLC)实现了没有直接通道的两个结点,通过与网络中其他结点间已有再的通道完成链下交易的流程,也就是让一串用肉丝冒菜(RSMC)连接起来的结点作为交易传递的通路。全过程由智能合约保障,结点间无需信任就能代付,速度快、成本低、安全性高。

- 我去,闪电网络太厉害了,秒天秒地秒空气,以后我就是闪电教教徒!

哎陈同学你先坐下,闪电网络的理想确实很丰满,但真要用起来就…

三、现实很骨感

就像老梗「真空中的球形鸡」一样,理论都有前提条件,闪电网络也一样。我们来列一下闪电网络在实用中几处最「骨感」的地方,大家体会一下:

骨感之一,跑不起。
目前在手机上跑闪电网络结点是不可能的,因为还得捎带一个公链的「全节点」。这是什么概念?比特币全节点是 100G 左右,每 10 分钟更新 1M~2M;以太坊即便 fast 模式的全节点也要 100G,每 15 秒更新 2M 左右。一部手机不仅要拿几百 G 来存全节点,还得保证全天候联网实时更新,一旦断更就得把漏掉的数据都同步回来,同步不完不给用…

骨感之二,传不到。
「路由」在闪电网络里指「确定张三到王五交易传递路径」的过程。目前的路由用的是 dijkstra 算法(知县一直叫它乱码算法),时间复杂度可以简单看做 O(n2),说人话,100 万个结点的网络路由一次需要 1 万亿(英文表示是 1
Trillion,也就是常说的 1T)次计算,而且是单点完成。2.0GHz 的 CPU 跑 1T 的计算量需要 500 秒…这还不算,跑完时数据已经过期快 10 分钟了,天知道路径还通不通?路径上的结点掉线了 / 关通道了 / 通道干涸了(后面会讲啥叫干涸)…咋办?现在的设计是——凉办,用最新的数据重新跑 500 秒…

骨感之三,中心化。
摊主王五非常适合做一个「大节点」——因为大家经常跟他交易,所以他的「闪电好友」最多,新人跟他开通道是最优的,因为通过他很容易就能跟另一个人转账,这样比较省钱。极端情况下,当所有人都只跟王五建立通道的时候,就会形成一个大节点带一圈小节点的结构,这就是「中心化」结构。这时候效率非常高,因为任意两人转账至多需要一次中转,但又最危险:如果王五手机丢了 / 没流量了 / 昏迷了…那么大家都无法转账;王五还可能作恶,比如看赵六不顺眼,把赵六通过他转的午饭钱故意拖到晚饭时分…单点故障导致全网瘫痪、单点权力过大容许作恶,这些都是「中心化风险」。

骨感之四,被掏空。
张三经常找王五买煎饼,干脆开了通道,放了 100 块钱。半个月后张三通道里就剩 2 块了,咋办?再往里充 100?错!闪电网络通道一旦建立就无法追加金额,只能花钱关通道再花钱开新的。王五也一样,想把通道里的钱提出来进货,必须挨个关掉再开;通道里有 98,能不能只提 70 呢?对不起,不支持,必须全提。通道:感觉总是被掏空…

问题在资金流向上。理论预期是有来有往的,通道很长时间都不用关,就像张三李四打牌各有输赢,打 100 局通道两边都还有钱;但实际应用里,高频场景是消费支付,资金总是从消费者流向商户的,付钱的一端就容易被
「掏空」
——虽然通道大小还是 100,但是张三已经无法支付超过 2 块的金额了。那这个通道还能用吗?理论上能,王五可以向张三付钱啊,但这种情况非常少,所以事实上失去了使用价值,这就是
「通道干涸」。这使得闪电网络通道经常是一次性的,很不经济。

还有…

- 大人,别说了,我刚刚建立起的闪电网络信仰已经闪电般崩塌了…你不要走动,我去买几个橘子压压惊…

呔,真当本官不上 B 站?不过陈同学你不要灰心,闪电网络才刚刚起步,有问题是正常的,需要大家一起想办法来解决不是?通道不能追加金额,我们想办法让它能啊;通道没法部分提现,我们想办法让它有啊;什么轻结点、轻钱包、分布式快速路由、中心化抑制策略…有啥问题就解决啥问题才能不断进步不是?

- 你说的这些真的都能实现!?

你还是先坐下…当然能,而且马上就能踏出第一个脚印了!

四、协议层崛起

让我们重新审视一下闪电网络在区块链领域所处的位置。

首先,闪电网络没有区块链结构;

其次,闪电网络不依赖某个公链,不是 Dapp。只要能实现 BOLT 协议,无论比特币、以太坊还是莱特币(LTC),都可以用上闪电网络;

第三,闪电网络支持代币原子互换(Atomic Swap),也就是「跨链(cross-chain)」操作
(跨链是个大话题,咱们择日再聊),比如 BTC 和 LTC 就成功进行了原子互换。

不是链,也不是 Dapp,纯粹依靠规则组成的协议(Protocol)完成链下(off-chain)交易、跨链(cross-chain)互换等操作,促进价值传递(Exchange of Value),欢迎来到协议层。

在主流公链齐 (xiang) 头 (ai) 并 (xiang) 进 (sha),各路「神」链雨后春笋的时候,人们开始关注链外的世界。懂的人心知肚明,区块链这种重量级、专用型技术架构,适用场景非常有限,怎么可能像「互联网+」一样,随便一个行业都能「区块链+」?这个行业的数据能可信地记录到链上?绝大多数目前做不到。(可信数据源也是个大话题,有专门领域叫「预言机(Oracle)」,也择日再聊)

公链技术需要完善的地方还很多,比如拥堵问题,很多人寄希望于优化主链效率,但在区块链这种全部节点×全量存储的架构下,安全、效率、可用、一致这些指标不可能同时满足。比特币变成 10M 区块、10 秒出块不就不堵了?确实,但这也导致对网络、存储的要求提高,能 hold 住的节点大幅减少,「去中心化」名存实亡,攻击也变得更加容易,影响了安全性——这是比特币最重要的特性。大红大紫的「次世代」公链 EOS 采用的 DPOS 共识机制,本质上也是牺牲了去中心化程度来提升处理速度,只能说各取所需。

协议层则是换个角度处理问题:把主链不适合做的事情放到链下,用技术+博弈设计来满足特定场景的需求。

还拿拥堵问题来说,金额大、手续费高的「土豪交易」是感受不到拥堵的,增量迅速的小微支付(micropayment)才是拥堵的制造者和受害者。买个煎饼 7 块,手续费 10 块,肯定不行;手续费 1 毛,第二天到账,那也不行啊!这种「既要矿工跑,又要矿工不吃草」的需求肯定无法满足,把它们挪到链下才是治本之道,这也是协议层解决问题的方向。

区块链能给人类生产关系带来巨大的变革,比特币作为完全自组织的系统成功运行了 9 年,承载了几千亿美金的价值,足以给我们坚持下去的信心。这个过程中,协议层必将会发挥重要的作用,希望更多人能够关注、加入协议层的建设,一起打造更加高效稳定的区块链世界。


作者介绍
知县,北大计算机本硕,LITEX Lab 核心成员。LITEX Lab
将于近期发布对 BOLT 协议的重要改进,并将持续输出多个协议层贡献,包括分布式快速路由、轻结点、生态型网络结构,以及 DST 轻量框架等。相关信息可以关注官网
litex.io 以及微信公众号 LITEX_OFFICIAL。

作者:知县
编辑:野比大雄
稿源:巴比特资讯(http://www.8btc.com/lightning-network-and-pizza-2) 版权声明: [
by
nc"
sa
](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/)
作者保留权利。文章为作者独立观点,不代表巴比特立场。

来源链接:www.8btc.com