闪电网络当前的主要局限分析

转载
2033 天前
14393
火星财经

来源:火星财经    作者:ConfluxFans 


引言

我在推特上发起了一次调查,发现大家似乎对闪电网络的局限性都很感兴趣——究竟闪电网络能做些什么,又或做不到什么。今天我就来和大家理清一下闪电网络的能力范围。

通道配置问题

从我一开始接触闪电网络,我就在思考闪电网络的目标究竟是什么。

我突然灵光乍现—— 假如全世界的交易都是闪电交易那会怎么样?(当然这不切实际,因为全世界范围的交易种类太多了。)

我想要以此假设为切入点,讨论如何使得闪电网络兼容所有的交易。

首先我们要明确闪电网络的定义——闪电网络指的是基于余额锁定的状态通道所构建的系统。

在系统中你我各自持有一些钱,然后我们使用闪电网络实现 “从我这儿转钱到你那儿” 或 “从你那儿转钱到我这儿”。我们还能使用 HTLCs 扩展以上功能,比如实现 “我转钱给你,然后你再转钱给某某”。

上述行为的前提是我们具备这些余额锁定的状态通道,这也是闪电网络的基本功能界限。

现在的问题是,这些通道有固定的容量与参与者集合,如果我们临时需要发送一笔大额交易,而在此之前你从未与收款方有过任何交互,就会面临通道还未正确设置的问题;你可以自行更改设置,但要求用户去做这样的操作就违背了我们设计闪电网络的初衷。

这可能是使用闪电网络会遇到的主要问题,不过除此之外,还有一些问题大家可能会有兴趣。

1

闪电网络是崭新的生态系统、首创的平台,需要大家学习如何使用它,同时还需要有人进行协议开发、软件开发、建立路由节点、担保资金等等。

构建闪电网络生态系统,也是种建设市场的过程,没有这些人做出贡献,闪电网络将一文不值,因此生态系统的建立也是制约闪电网络的因素之一。

2

Layer-1 是决定闪电网络能否运作的关键因素。 

即使能够在链下做许多事,我们仍需要保证这些操作都是基于去中心化的 Layer-1 ,而且链下的交易最终能够上链。

就目前情况来看,比特币网络是最有可能成为第二层网络(闪电网络)底层支持的 Layer-1。

大额交易

从货币的角度来看,我们必须确保比特币是被大众接受的支付工具,因为在推荐其他人使用闪电网络进行支付可能遇到的最大障碍是,该如何说服他们使用这类奇怪的货币(比特币),这对使用者有什么好处?

为什么这是件很酷的事?

这貌似是我们这种闪电网络协议开发者无法控制的事,但这对于闪电网络的发展极为重要。

我只是要强调,如果你要进行低频次、高额、偶发的交易,那么使用闪电网络会遇到诸多限制,这并不适合你。

有很多人问: “什么是大额交易? 5 美元以上算吗?还是 50、500 美元以上呢?” —— 这么问本身就很有问题。

闪电网络是个市场、是个持续进化的生态系统,你可以将其想象为互联网。

这个互联网中还连接者大学的内网和公司的内网,内网里的使用者彼此关联,因此网络带宽非常打,能够快速发送信息。

然而,一旦使用者登录互联网网看视频或做些其他事,他们就会面临计算机的 “最后一公里” 问题:使用者以为服务商能够提供高质量视频,但当他们拨号联网后,却发现(因为网速不够)看不了高清视频;又或是使用者想要上传视频,却发现自己上传网速不够。

我所谓的 “大额交易” 问题,跟这个网速问题意思是一样的。

假如今天有个网络,彼此之间都在余额锁定为 1000 美元的通道中相互连接,那么即使我非常富有,想传输百万美元的价值,我还是会受到系统的容量限制。

所以即便我有大量的钱,我想在一个锁定余额 1000 美元的通道中转钱给某个人,那么上限就是 1000 美元,这就是所谓的大额度。

区块链 vs 闪电网络

你为什么要使用区块链?

区块链技术很棒,但你得忍受大量冗余;而状态通道却恰好能从冗余中获益。

如果你正在操作高价值的交易,那么区块链适合你,因为区块链能够避免资产流动过程中可能出现的问题;同时区块链使用起来也相对简单,如果你需要在一个尽可能安全的地方保存资金,我会说那就用超级冷钱包吧。

区块链网络将部分责任移转给整个区块链社区;而闪电网络将更多责任赋予给使用者,这也意味着使用难度更大,后面我会进一步说明。

托管 vs 闪电网络 

闪电网络的另一个竞争者是托管式清结算网络(如, Liquid 或类似交易所),或是其他使用闪电网络的系统,如 tipping.me 或 我创建的 htlc.me。

相比于闪电网络,托管式工作适合低价值的交易,因为区块链具有一定的上链成本,如果你的交易额度低于这个成本,那就会出现一些问题。

因此,区块链在清算小额交易上的困难也制约了闪电网络。

在发送超大额交易时,闪电网络也会遇到问题。

在区块链发起上千万的交易对你或许不是事儿,但如果是价值数十亿的交易,你就会开始担心区块链的工作量证明是否靠谱,紧接着你就会想念托管式服务或是其他系统的好。

更糟心的是,工作量证明需要耗费很长一段时间,你只能等着。

所以闪电网络能做的事情并非无限多,面对上述这几种情况,闪电网络并不是很好的选择。

如果你能够找到值得信任的托管方、不介意做些妥协、不想把资金的责任揽在身上,那么托管式服务会比闪电网络适用。

区块大小限制 

我从比较抽象的视角讨论闪电网络的局限性,如果你主要想了解闪电网络可扩展性的限制,那我们先来谈谈区块大小的限制。

究竟一个区块能够装进多少交易,大家对这个数字都非常着迷。

我认为观察交易如何被装进区块是件很有趣的事,所以我自制了一张图表来展示一笔普通交易的数据构成,因为开关通道的交易就是一笔普通的交易,所以我们能直接看出一次开关通道需要占据多少数据量。

图例中表示了一个最小通道,字节都映射为虚拟字节;因为使用了隔离见证,所以签名字节数经过压缩。

按照估算,一笔通道交易大小大约是 112 个虚拟字节数。

这是理论上构造一个通道的最小数据量,我们能将其视为单位通道大小,推算一个区块中能容纳多少笔通道交易。

每个区块约有一百万字节的空间,如果我们能够将通道大小降低至 100 字节左右,理应能在区块中放入大量的通道。

但实际上并非如此,要获得精确的单位通道大小,还需要经过更多复杂的考虑。

节约虚拟字节的技巧

有什么方法能够使通道开关交易大小缩减为理论上的最小值?

如果所有交易只有一个输出,便能节省很多空间。

但是当我们关闭一个通道时,可能会有多个输出,因为通道中至少有两方在进行资金转移。

这时候你可以站出来呼吁, “为了降低上链的数据大小,我们在关闭通道前进行一下重整吧” 。

所以我们会以某种方式推出其中一个输出,使得区块链只需要处理一个交易输出。这么做能节省区块空间,同时节省费用。

另一种释放链上空间的做法是, “开启一个通道的同时,关闭另一个通道”。换句话说,因为某些交易输出能作为其他交易的输入,所以我们能将通道合并为一。 这是个非常有用的技巧。

另一种我们当前尚不支持,但是短期内会看到进展的有用技术是多签名形式转化,也就是把多重签名压缩为单个签名的技术。

这一技术极为强大,几乎不存在什么重大缺陷。

通过签名聚合,我们能够将大量的签名合而为一。

如果能用 Schnorr 和 Musig 进行签名整合当然很好,不过以椭圆曲线数字签名(ECDSA)实现也行。

还有一件事需要考虑,很多时候人们会估算上链的成本,并倾向不配合关闭通道。

比如存在这种情况—— “我们要将通道输出广播上链,但是对方掉线了,该怎么办?” 

在示例中,如果有一方选择不配合关闭通道,这并不需要通过什么复杂的脚本来解决,因为我们可以直接将不配合关闭通道的操作视为交易失败条件之一。

我们应该尝试以时间锁或更高昂的费用,通过经济手段激励人们彼此配合关闭通道,比如,如果不合作关闭通道,就得付出更多的费用。

另一个我们已经实现的节省虚拟字节的方案是关于粉尘交易输出的(比如在闪电网络中,可能出现只值半美分的交易输出),因为在上链环节,这种极小额的交易输出会被区块链拒绝,或在对等传输阶段视为垃圾交易。

作为解决方案,软件会将这些极小的输出放进矿工费中,因此,当我们必须以不配合的方式关闭通道时,能够稍微提高交易确认速度。

增加通道成员,减少虚拟字节

改善闪电网络的又一利器则是创建多方,而非仅仅两方参与的通道。 

当然这样的设计并非万全之策,而且这种机制的复杂性限制了它的落地应用。

目前我们最多只能在一个通道中加入两个参与者,而在一个通道中加入更多人其实正是拓展虚拟字节利用率的绝佳手段。

单个通道中加入多个参与者的约束条件在于,究竟输入会被转换为多少个输出?

通道内的交易最终还是要落到区块链上的,即使某一时刻不打算上链打包交易,我们也要具备交易随时上链的能力。

而现在面临的的限制是每个人都想要拿回属于自己的那一份交易输出。

比如说现在到了关闭通道的时候,我想收回属于自己的钱,此时每一个输出都要花费大约 30 个虚拟字节。

其实这时候你还不一定需要耗费这 30 个虚拟字节,但当你在在通道中遇到分歧,没法最终整合到一个输出的情境时,就必须多消耗这 30 个虚拟字节。

必须提醒一点的是,这些多方参与的通道,在建立时只需要一个人进行注资,即仅需要一个人来建立输入并发起交易。

我实际上可以在向通道注资之后广而告之,“来十个人加入我刚刚建立的通道吧,这个通道的注资输入是我一个人的,大家接下来就把我的输入折腾成大家的输出,当然这些输出不会即刻反映到区块链上,除非我们没法继续重整这些输出,只能不情愿地关闭通道,将交易广播上链。”

多方参与的通道,人数可以达到相当高。

基于我之前提到的签名整合技术——将数百个签名整合到一个签名上——理论上我们能在一个通道内加入数以千计的参与者。

在设置输入需要留意:你其实也在设置大家的集体公钥,而集体公钥是由所有人的公钥进行哈希处理整合而成,所以并不需要多大的存储占位空间,就是固定大小的一段。

如果上述想法能落地实现,就意味着我们能够在一个区块中添加成百上千的通道。

不负责任第畅想一下,也许能有数以千计的参与者加入到通道中。即使从现实出发,达到数十成百的参与者也不成问题。

按这样计算,在一周之内我们能处理达到百万量级人次的交易。

如此看来,以增加通道参与方的数量的方式来攫取通道的处理潜力具有相当大的探索空间,并且这种努力的方向并不会改变区块链的属性。