作者:Shinobi

来源:https://bitcoinmagazine.com/technical/why-the-bitcoin-lightning-network-doesnt-work

我猜我应该先发一个声明:我真的很爱闪电网络。它是我在比特币协议栈中最喜欢的一部分,而且我密切追踪它的进度好几年了。如果闪电网络不存在,我可能依然持有比特币,但对它的未来就不是那么乐观了。对于财富光谱上较贫穷一边的人来说,许多其他的扩容方案,最终都会走向托管、信任和个人主权的消亡。

概要来说,闪电网络通道的原理很简单:

  • 两人在一个 2-of-2 的多签名地址中锁入资金
  • 双方都安排了一笔预先签好名的交易,可以在注资后将两人的资金原样返回。
  • 每次要更新双方的余额之时,双方各签名一笔造成余额更新的交易,并交换 “惩罚密钥”;当某一方尝试使用旧的预签名交易时,对方可使用惩罚密钥来拿走多签名地址中所有的钱

但闪电网络可不仅仅是两方之间的直接连接而已。这些单条的通道可以串联起来,形成广阔的、相互连接的支付网络。这就成了一个可以让不直接相连的各方相互支付的灵活系统。但是,它有许多的缺点和限制。在我看来,这些局限还没有在开发者群体和懂技术的用户之外被广泛知晓和讨论。

状态管理问题

闪电通道实际上就是一组预先签名的交易 —— 我在这里就不展开让它得以成立的激励模型了。交易签名之后,就回不去了:它就在那里了,而且永远是一笔有效的比特币交易,除非你用另一笔交易先花掉这笔交易要花费的资金(你没法重复花费一笔比特币;某笔交易花费了某比特币款项之后,其它花费同一款项的交易就是无效的了)。现在,因为闪电通道是一个 2-of-2 的多签名地址,没有任何一方可以单独签出一笔新的有效交易。这意味着,没有对方的合作,你就没法让自己预先签名的所有交易作废。这个通道是你俩开启的,你们就必须一起才能更新它。要是只需一方就能行动,那任何一方都会选择偷走所有资金。

每次双方交换闪电通道中的资金 —— 比如 Bob 给 Alice 发送 1000 聪 —— 时,他们就各自创建一笔新的、反映更新后余额的交易。如果双方都遵守规则,他们就都只需要保留最新的一笔预签名的交易,因为之前那些预签名的交易已不再能反映正确的余额。而且,如果双方都想离开通道、拿回现金,他们可以使用最新的一笔预先签名的交易,在链上给双方支付最新的余额。

但要是某一方不遵守规则呢?要是 Bob 先给 Alice 支付了一些资金,现在又想用更早的预签名交易来退出通道(这会撤销 Bob 给 Alice 的支付,也就是欺诈)呢?我们用惩罚密钥来解决这个问题。惩罚密钥使你实质上作废前一笔预签名的交易,而不需要每次都在链上发起交易来作废它们。

这个思路是:一旦双方都使用新的一笔交易(更新了余额的交易)替换了旧的预签名交易,他们也交换对各自上一笔预签名交易的惩罚密钥。如果某一方想在链上执行一笔旧的预签名交易,另一方所持有的该交易的惩罚密钥就可以动用、让 TA 可以拿走通道中所有的资金。至关重要的是,这些预签名的交易都有一个内置的时间锁,所以总是有机会让另一方可以在欺诈成功之前动用惩罚密钥。所以,本质上,你并不是让现有的预签名交易作废,而是让交出了惩罚密钥的一方不敢再使用该密钥对应的预签名交易。要是他们敢以身试法,你就反将一军,把所有钱都拿走。

我认为,普通用户还没有充分理解这样的扩容机制(以及它的问题)。每次你要花费一些比特币的时候,你就用新的一笔预签名交易替换旧的一笔。但是,你依然需要保留关于每一笔(对方签发给你的)旧交易的一些信息 —— 以及它们的惩罚密钥 —— 以备你的对手行为不轨之时惩罚对方。这是你无法逃避的,因为,假使你的通道对手真的使用某一笔旧交易来关闭通道,你只有使用与该交易对应的惩罚密钥才能保护自己。这意味着你要保存每一次资金交换的所有相关数据。

我很确定,有些读者会想当然地说,“这有什么,硬盘很便宜啊”。我们来看看这个机制可能在那些方面造成问题。在开始之前,我想提醒读者,闪电网络有一个核心假设:开设通道是为了节约手续费;通道开启的时间越长,从中获得利益也就越大。所以,理想情况下,你如果开启了通道,肯定希望它能保持很长时间。

我们考虑一下手机用户:比特币钱包可不是唯一要用到存储的应用。用户还要存照片、音乐、视频、其它应用和游戏。我很确定,大部分用户都很熟悉在手机上删掉一大堆东西的经历,因为你的手机存储空间会用光。只要你还在交易,你的闪电网络钱包要存储的数据就会继续增长(除非你关闭你的通道)。最终,你会先遇到它跟其它应用争抢存储空间的情形,然后发现存储空间佣金。请记住,你必须 100% 存储这些数据,不然你的闪电网络就不能安全地保持开启状态。

现在,再来考虑一下路由节点。顾名思义,这种节点是为了成为闪电网络上的高速路、通过精心管理的通道来路由成千上万笔支付。同样的逻辑在路由节点上也成立,只不过,节点运营者更有可能会买一块新硬盘。但是,路由节点更新余额的频率会笔普通用户高得多,所以数据的增长速度也会比手机钱包用户快得多(只要这是一个成功的路由节点)。同样要指出的是,你存储的任务关键数据越多,为了应对设备出错而造成资金损失的冗余存储的成本也就越高。

最后,还有一类会被这个机制影响的节点:瞭望塔。大部分用户都没有能力 7 * 24 小时在线,来监控其通道对手。这就是瞭望塔的角色:他们帮助你监察区块链网络。但是,为了这么做,他们也要存储你为了防止通道对手欺诈而需存储的所有数据。瞭望塔依然很少开发和部署,但长期来看,这绝对是人们安全使用闪电网络的基础设施的关键部分。

瞭望塔有三种运营模式。第一种是完全利他,不要求任何回报。第二种,是仅在你的对手尝试欺诈、他们执行了惩罚时才能获得支付。最后一种,是根据存储数据的数量以及监察区块链的服务收费。给定每个用户存储的数据都会不断增长直至通道被关闭,你有没有看出问题?在第二种和第三种模式中,通道保持开启的时间越长,用户要付出的费用就越高,直至能够补偿瞭望塔的数据存储成本。这将是用户必须支付的一种隐形费用,可能会增长到很高的水平。

怀疑主义者可能依然不认为这是一个实质上的扩容问题,因为闪电网络只会被用在咖啡和晚饭这样的日常交易中。要是如此,我同意你的观点。但如今,闪电网络的主要用途是所谓的 “微支付” 和 “川流式支付”,也就是在整个交互过程中实时支付(例如,每分钟甚至每秒钟给你收听的播客主支付),那我就不同意了。

幸运的是,有一个叫做 ANYPREVOUT 的比特币协议升级提案可以解决这个问题;那时候,闪电网络通道将建立在 eltoo 的基础上,它将只需要为一个通道保持常量的数据,就足以实现当前的惩罚密钥可以实现的负激励机制。但在这个特性登陆比特币中之前,闪电网络通道将持续面临这种扩容问题。

HTLC 问题

接下来的两个主要问题都跟 HTLC(哈希时间锁合约)有关。这是一种添加在预签名交易中的输出,大意是 “如果你知道某个秘密值,你就可以拿走这个输出里的钱,不然这笔钱的发送者将可以在一段时间后收回这些钱”。它同时用到了哈希锁和时间锁。它也是支付何以能够免信任地在闪电网络中多跳送达的原因;最终的接收者要么公开秘密值,从而每个(利用自己的通道)帮助交易送达的人都可以在通道中申领属于自己的资金,又或者,接收者不公开秘密值,一段时间后,每个人都拿回自己的资金。

这个结构会在两方面影响扩容效果:(1)一条通道能同时路由多少个 HTLC?(2)HTLC 的最小价值,因为如果出错了,要在链上解决,HTLC 必须有一定的价值,不然在链上解决就不经济。

一条通道能同时路由的 HTLC 数量是有限的,因为每一个 HTLC 都要在最新一笔预签名交易中表现为真实的输出。这不是一个信用系统,比特币和闪电网络中也没有再抵押;你只能用你的通道可以证明的链上资金来为你的支付背书。而且,因为比特币交易自身都有体积最大限制,所以一笔交易能容纳的 HTLC 数量也是有限的(483 个)。如果一笔交易带有的 HTLC 数量超过了这个限制,它就不是一笔有效的比特币交易了,会让通道进入一个奇怪的状态:如果你广播有效的预签名交易(也就是 HTLC 数量未达到 483 个的交易),你的对手就能偷走你的钱;而现有的预签名交易(也就是 HTLC 数量超过 483 个的交易)都不能被用来关闭通道。除非这种情况有某种解决方案,不然这就成了一条通道可以同时路由的 HTLC 数量的上限,最终决定整个网络在给定时刻所能路由的 HTLC 数量上限。

链上的动态也会影响 HTLC 的经济性。如果一个 HTLC 仅路由了 10 聪,但把这个 HTLC 添加到预签名交易中将使该交易的上链费用增加 100 聪,那你真的能在有需要时在链上强制执行这笔交易吗?你不能。因为强制执行它会让你损失金钱,所以你没有这么做的经济激励,所以,在手续费高涨的时期,路由 HTLC 就变成了不经济的事。手续费长期来看是会上涨的,这也会影响使在闪电网络中使用 HTLC 路由支付的经济性。

现在这个问题已经有解决方案了,但这种方案也有自己的问题:封包支付(Packetized Payments)。思路是与其一次性使用一个 HTLC 的链条来路由支付,不如分切成多笔不使用 HTLC 的单笔支付。它使你可以不断向目标接收者发送小额的支付,直到支付的数额达到目标。但因为它不使用 HTLC,你的任何一笔小额支付都可以被完全窃取。如果你发现某一次支付没有送达,你应该立即停止使用当前的路线、尝试一条新的路线。问题在于,当你的某次支付失败时,你不知道该谴责路径上的哪个人。你只能从头找出一条全新的路径,不包含之前路径上的任何人。在一个充满敌意的环境中,这种方法是不太能工作的。

支付时延

每次通过闪电网络来路由支付时,支付的发起者到接收者路径上的每一个节点都必须签名更新通道状态。使用 HTLC 开始支付时要来一遍,HTLC 结算时又来一遍。所以,在支付多快能够完成上,也存在 “木桶效应”—— 取决于速度最慢的那个。如果你是闪电网络的重度用户,可能你也注意到了。有时候钱包在处理支付和更新余额时要花费好几秒(更坏的情况下是许多秒)。我熟悉的唯一轻钱包是 Breez 钱包,从我经验的情形,有时候从点击支付到支付完成要花费 5 秒 ~20 秒。

当前,这只不过是一个轻微的用户体验瑕疵,就像你在地铁现金售票窗口使用信用卡要等一会一样。但请回想一下我们上面替代的封包支付,它是为了解决数额太小、无法使用 HTLC 的情形而提出的方案。不断增长的网络会推高使用 HTLC 的非微支付的数额下限,从而让这个时延变成严重的问题。想象一下,不是签名一个 HTLC 的一来一回,而是一笔支付被打散成许多单体的微支付,要经历几百个来回,那是什么情形。

那时候,这就会成为一个严重得多的用户体验问题,也会成为路由节点的扩容瓶颈。从绝对的意义上讲,密码学签名操作是非常快而且便宜的,但如果闪电网络被同时用于协助所有类型的微支付和川流支付,更传统的更大的支付就不得不打散成更小数额的川流支付,然后变成路由节点的巨大瓶颈。长期来看,这种机制会扼杀在便宜的硬件(比如树莓派和其它单主板计算机)就能运行节点(乃至赚钱和运行可靠服务)的可能性。

通道容量经济性

HTLC 并不是闪电网络唯一会被链上手续费的稳步上涨和波动影响的部分。闪电网络自身也受制于这种机制。假设你想要开启一个容量为 10 美元的通道,但注资交易发到链上就要花掉 1 美元的手续费。那么这个通道从一开始建立就花掉了 10% 的手续费。但是,要是你往通道中注入 100 美元,那你的实质手续费率就是 1%。这就为尝试直接跟闪电网络互动的人们塑造了一个非常真实的市场门槛。如果开启一个通道的实质手续费率太高,那就没人会打开通道。

这个机制的唯一权衡或者解决方案就是时间。如果你只有 10 美元,没有 100 美元,也不希望手续费就花去 10%,你只能用更低的费率发送自己的通道开启交易,然后等待。你要等待多长时间,要看实时的比特币手续费市场以及交易池有无积压(比特币矿工会在交易池中选出费率最高的交易,直到自己的候选区块满载)。情况好的时候可能你只需要多等几个小时。但糟糕的时候你可能要等上几天甚至几个星期。在交易需求极端大的时候,交易池甚至会清除最低手续费的交易,从而保证你的通道永远不会被开启。按照闪电网络的工作原理,等待是你唯一能做的事。

高昂的实质手续费率还会有另一个影响:预签名交易所用的时间锁必须为不想支付高手续费的小额通道设置得更长。时间锁的全部意义在于你可以惩罚行为不端的通道对手、拿走所有资金。但如果你不能够或者不愿意为快速取走资金而支付可能较高的手续费,你就要增加额外的时间,好让你有机会等到链上手续费较低的时期取走资金。长期来看,这可能导致低价值的通道需要更长的时间来等待开启和等待关闭,也需要更长的时间锁来保证这些低价值通道的所有者不会因为通道对手尝试欺诈而损失资金。

依赖于 TOR

闪电网络的一个主要缺点,甚至已经为绝大多数不懂技术的用户所知:你要在线才能使用它,因为发送支付和接收支付都是一个需要在线交互的过程。这意味着,对等节点们需要 IP 地址才能相互通信。但向你的通道对等节点暴露自己的 IP 地址是一个很大的隐私问题,而且如果互联网服务提供商想要嗅探哪些 IP 地址在相互通信,可能会导致网络审查。

Tor(洋葱网络)几乎是当下解决这个问题的首选方案。问题只是,Tor 自身也有许多问题。它依赖于一个完全基于信任的、由志愿者管理的声誉权威机构。这些 “目录服务器” 是由项目成员运营的,你的 Tor 节点可以借此找到网络中的所有 Tor 对等节点并建立连接。这些实体的可信度,是你可以在 Tor 节点间路由消息、它们又不知道你的消息所采用的完整路径的基础。

Tor 还有许许多多的弱点。分布式的拒绝服务式攻击(DDoS)在 Tor 网络中比在广域的互联网中更难处理。许多专业的服务可以处理常规互联网上的大量流量洪峰。而且,在没有屏蔽的互联网上,来自恶意端点的流量也可以被拒绝。但在 Tor 网络上,从设计上来说,你就不知道流量到底来自哪里,所以 DDoS 攻击更难防御。正是这个系统性的原因,使得 Tor 的开发者正在考虑集成一种匿名的 token,或者像 hascash 的工作量证明 token,来解决这些攻击界面。Tor 对 DDoS 如此脆弱,让闪电节点在 Tor 上运行的可靠性也打上了问号。

Tor 跟闪电网络最基础的缺陷,比网络崩溃和不得不信任 Tor 目录权威还要大。Tor 的连接是非常容易辨识出来的,所以你的互联网服务提供商和政府可以完全屏蔽你跟 Tor 网络的连接。显然,世界上的大部分地区都没有出现这种情况,但这很容易做到。令人难过的是,最容易发生这种事情的地方,恰好就是人们最需要技术来保护个人隐私的威权国家。中国屏蔽了 Tor;伊朗曾经尝试过这样做,但被 Tor 开发者击败;俄罗斯和法国在过去数十年里都提出过各种理由要屏蔽 Tor:在俄罗斯是儿童色情,在法国是恐怖主义袭击

更懂技术的读者可能还知道所谓的桥节点。他们像是特殊类型的 Tor 节点,不会像普通的 Tor 节点那样公开宣传自己是 Tor ,但他们允许不能直接访问 Tor 网络的用户借助他们来访问。桥节点就没有上面说的容易被攻击、识别和屏蔽的问题。最终来说,如果国家或 ISP 想要给 Tor 网络施加压力,当然可以这么做,这会变成一个猫和老鼠的游戏,进一步降低 Tor 作为一种快捷、无缝、隐私地发起比特币交易的方式的可靠性。

结论

闪电网络是比特币协议栈的一个大胆的飞跃。它是比特币的结算机制的一个扩容插件,相比仅仅依赖于区块链来处理交易,它可以产生指数级的吞吐量增益。但就像区块链一样,它也有自身的局限性。它不是魔法,也不是万灵丹,它有自己的缺点,而且这是可以接受的。

在闪电网络在主网上出现之前,比特币存在了 9 年,所有根本的问题和扩容问题都是开放的、未解决的。但它依然存在,依然一直在工作。比特币没有因为这些问题尚未解决而崩溃或消失。开放的问题意味着我们没有自欺,意味着 bitcoiner 知晓它在现实中的种种缺点并一直在寻找解决方案。不搞阴谋论,也不恶意攻击比特币,这就很好。我们的系统可以变得更加强壮并不断演化,正是靠着这样了解事物当前的局限,并想出超越它们的办法。

(完)