深度 | 制约比特币闪电网络发展的五个局限

星球日报

    本文来自bitcoinmagazine,原文作者:Shinobi,由 Odaily星球日报译者 Katie 辜编译。
    说句真话,我对闪电网络挺有信心的,这是比特币协议堆栈里我最喜欢的部分,多年来我一直密切关注它。如果闪电网络不存在了,我会继续持有比特币,但对比特币的未来潜力则不会那么乐观了。
    
    
Odaily 星球日报注:闪电网络的产生源于解决比特币网络的拥堵问题,比特币开发团队为此萌生了一个想法——在比特币主链上建立第二层交易网络,即闪电网络。具体原理为:交易双方都抵押一部分资金到一个多重签名的地址上,资金需要双方同时出具私钥才能提出。在闪电网络里,双方的交易过程不会被记录在链上,只有最终的结果即一笔交易会记录在主链,这相当于只需要一次排队,大大减少了链上记账的流程和手续费。

    原理上,闪电通道其实很简单:
    
  • 两个人将资金锁在一个 2 对 2 的多重签名地址中。
  • 双方安排一项预先签署的交易。
  • 为了更新余额,如果有人试图使用旧的预签名交易,双方用更新后的余额签署新的交易并交换「惩罚密钥」,让对方拿走多重签名地址中的所有钱。

    但是闪电网络不仅仅只是双方之间的一些直接的联系。这些单通道可以与其它单通道连接在一起,形成一个巨大的相互连接的支付网络。这是一个非常灵活的系统,可以在其它无关的当事人之间进行支付。话虽如此,我看到有很多缺点和局限性,但除了开发团队和一些技术用户之外并没有得到广泛的认可或讨论。
    状态管理问题
    闪电通道实际上只是一组预先签署的交易。我没有涉及到的是允许它工作的激励模型。交易一旦签署,你将永远无法收回。它将永远存在,并且始终是有效的比特币交易,除非你将该比特币用于不同的交易(你不能将比特币花费两次;一旦交易花费了一些比特币,任何其它尝试对这些代币采取行动的交易都将无效)。现在,因为闪电通道是 2 对 2 多重签名,任何一方都不能在没有另一方合作的情况下签署新的交易。这意味着没有另一方的合作,你无法使你在链上进行的所有其它预签名交易无效。好比你们两个一起开了这个通道,所以你们必须一起更新。如果任何一方可以单方面采取行动,那么你们中的一个人就可以窃取所有资金。
    每次双方在他们的闪电通道交换资金时,Bob 向 Alice 发送 1000 个比特币,他们生成一个新的预签名交易,反映他们更新的余额。如果各方都表现得友好,他们将只保留最新的预先签署的交易,因为之前的交易将不再反映正确的余额。如果双方都想兑现,他们可以使用最新的预先签署的交易,以链上比特币的形式向双方支付当前余额。
    但如果另一方不友好呢?如果 Bob 通过将资金发送给 Alice 而花掉了他的那部分资金,但现在想要使用先前的预先签名交易将其兑现,该交易仍然显示了其通道的所有资金 ? 我们用「惩罚密钥」来解决这个问题。这允许你有效地使所有之前的预签名交易无效,而实际上不必每次都真正使它们在链上无效。
    一旦双方用更新余额的新交易取代了旧的预先签名交易,他们也会交换惩罚密钥。该系统的设计是这样的,如果其中一方试图执行旧的交易,另一方的罚款密钥是启用的,并可用于索取通道中 100% 的资金。至关重要的是,预先签名的交易有一个内置的时间锁,所以在交易可以在比特币区块确认之前,另一方总有机会使用惩罚密钥。实际上,你并没有使现有的预签名交易无效,你只是在鼓励另一方不要使用它们。如果他们想偷,而你抓住了他们,你就能拿走他们所有的钱。
    这引入了一种扩展动态,我认为对技术不熟悉的用户不太了解这种动态。每次你们中的任何一个花费一个比特币,你都会用一个新的交易替换一个预先签署的交易。但是你仍然需要保留每笔旧交易的一些信息,以及与该特定交易相关的惩罚密钥。以防你不得不使用它来惩罚不诚实的通道对手。没有办法避免这种情况,因为如果通道交易对手要尝试关闭旧交易的通道,你需要该交易的惩罚密钥才能停止和惩罚他们。这意味着你必须保留与他们进行的每笔交易的所有相关数据。
    我相信很多读者都在翻白眼,「这没什么大不了的,硬盘很便宜。」让我们看看这种动态可能导致的问题的所有不同方式。不过在此之前,我想提醒大家闪电网络的一个核心假设:开通通道的想法是尽可能长时间地保持开放,以便在产生链上费用之前最大化从中获得的价值。因此,理想情况下,用户希望打开一个通道并保持很长时间的开放。
    让我们以移动用户为例:比特币钱包并不是人们手机上唯一存储的东西。人们会用手机拍照、下载音乐、视频、应用程序和游戏等。我相信你们大多数人都很熟悉因为空间不够而不得不从存储库中删除一堆东西的情况。只要你在交易,你的闪电钱包必须存储的数据就会一直增长 (直到你关闭你的通道)。最终,这将与你想要存储在手机上的其它东西发生冲突,在那之后,最终会达到你手机的存储上限。记住,必须保留 100% 的数据,否则你的闪电通道要保持开放可能不安全。
    现在让我们考虑路由节点。这个名字说明了一切。这些节点被设置为闪电网络的高速公路,积极通过精心管理的通道进行大量地支付。同样的基本逻辑,尽管在这种情况下,很有可能有人为了运行他们的闪电节点而购买了设备。但是当然,路由节点会更频繁地更新通道余额,因此如果它是一个成功的路由节点,其增长率将远远超过移动钱包的增长率。请注意,你必须存储的关键任务数据越多,冗余存储的成本就越高,这样设备故障就不会导致亏损。
    最后,我认为这种动态确实会导致一些问题的出现,即瞭望塔(watchtower)。大多数人将无法 24 小时全天候在线以确保他们的同道对手不会试图欺骗他们。这就是瞭望塔的用武之地,他们会为你看守东西。但是为了做到这一点,他们需要存储你所做的所有相同数据,以便在他们作弊时能够惩罚你的交易对手。瞭望塔还没有开发或部署,但从长远来看,它们是人们安全使用闪电网络的绝对关键基础设施。
    瞭望塔可以通过三种方式工作。首先,一个无私的瞭望塔,为你盯着链上情况而得不到任何回报。其次,只有在你的交易对手作弊并且他们必须对其进行惩罚时才能获得报酬的瞭望塔。最后,一个靠存储数据和观察链上情况而获得报酬的瞭望塔。考虑到每个用户的数据将永远持续增长,直到通道关闭,你看到了问题了吗?在第二个和第三个模型中,通道打开的时间越长,用户的费用将开始增加以支付瞭望塔的数据存储成本。这将是用户必须支付的一种隐藏费用,可能会增长到疯狂的水平。
    对于那些仍然认为这根本不是一个实质性的规模问题的怀疑论者,在一个闪电网络仅仅用于适度的日常交易的世界里,比如咖啡和晚餐,那我同意你说的不实质性。但在这个世界中,闪电网络的主要用例是通过整个互动实时完成的微交易和流媒体支付,例如每分钟甚至每秒钟向广播者发送流支付,在这种情况下我认为不实质性是不成立的。
    值得庆幸的是,这个问题将通过提议的比特币协议升级解决,称为 ANYPREVOUT 和基于 eltoo 的闪电通道,这将允许单个固定大小的数据块完成与惩罚密匙目前相同的抑制机制。但是直到该功能进入比特币,当前的闪电通道都存在这个扩展问题。
    HTLC (哈希时间锁定合约)问题
    接下来的两个主要问题围绕着 HTLC (哈希时间锁定合约)。这些是添加到预先签名交易中的新输出,表示「如果你知道一个秘密,你可以要求付款,否则发送方可以在等待一段时间后收回它。」它们使用哈希锁和时间锁。这就是支付如何通过闪电网络在多个跳间可靠地转发,最后的接收者要么公布秘密,每个通过他们的通道转发付款的人可以索赔他们的欠款,要么接收者不公布秘密,在等待一段时间后,每个人都得到退款。
    这种结构对扩展有两种影响:
    
  1. 一个通道可以在任何时间转发多少个 HTLC。
  2. HTLC 的最小值,因为如果转发中断,它们最终必须在费用上经济地在链上解决。

    一个闪电通道一次只能转发如此多的 HTLC,因为每个 HTLC 都必须由最近的预签名交易中的实际输出表示。这不是信用系统,我们不会在比特币或闪电网络中进行再抵押。你只能转发最终由你的通道具有可证明声明的特定链上输出支持的索赔。并且因为比特币交易本身有最大大小限制,所以交易可以拥有的 HTLC 数量也有限制。如果一笔交易有更多的 HTLC,那么它就不是有效的比特币交易,因此会使通道处于一种奇怪的状态,在这种状态下,每个有效的预签名交易(在达到 483 限制之前构建的交易)都将允许其他人窃取你的钱,并且当前的任何预签名交易(在 483 限制之后构建的交易)都不能用于诚实地关闭通道。除非找到此问题的解决方案,否则它会显示一次可能通过一个闪电节点的 HTLC 数量上限,这最终会导致整个闪电网络在任何给定条件下可以转发多少 HTLC 的上限不均匀。
    链上动态也将 HTLC 的价值考虑在内。如果一个 HTLC 只转发 10 个比特币,但添加 HTLC 输出将花费 100 个比特币的链上费用,如果有必要,你真的能在链上强制执行吗?答案是否定的。因为在链上执行它实际上会损失你的钱,没有经济动机去执行它,而且在高收费的环境中,确实没有一个合理的点来首先创建 HTLC。从长期来看,费用很可能会持续上涨,因此这将影响 HTLC 通过闪电网络合理路由的价值。
    这个问题确实存在一个解决方案,但它有自己的权衡和缺点:即打包支付。这个想法不是一次性使用一连串 HTLC 路由支付,而是将其分解为多个不使用 HTLC 的单独支付。这使你可以一遍又一遍地将一小部分付款推送给预期的接收者,直到完成为止。但是因为没有 HTLC,你的任何小额付款数据包都可能被完全扯掉。如果有任何一条支付失败,你可以停止使用当前的路线并寻找另一条路。问题是,如果部分支付失败,你不知道路由链上应该找谁负责。因此,你必须从头开始重建一条新路线,不要信任先前路线中的任何人。
    支付延迟
    每次闪电支付通过网络传输时,所有涉及的节点都必须签署从路由开始到结束的其通道的更新两次。一旦使用 HTLC 设置支付,并再次当 HTLC 被清除和结算。这就引入了一种「最弱环节」的动态,即支付实际清除的速度。如果你是闪电的频繁用户,你可能会注意到这一点;有时钱包需要几秒钟(或者差的情况下需要几秒钟)才能真正通过并更新余额。我唯一熟悉的高清钱包(light wallet)是 Breez,根据我的经验,它可能需要 5-20 秒的时间,在点击发送后才能真正完成。
    目前,这只不过是一个轻微的用户体验小问题,与不得不尴尬地站在收银机前等待信用卡购买获得授权没有什么不同。但是回想一下上面提到的分组支付的建议,以解决金额太小而无法使用 HTLC 的问题。作为一个非常小的、不断增长的网络,使用 HTLC 推动非小额支付金额,这种延迟是一个明显的问题。现在想象一下,如果不是单个 HTLC 的两轮签名,而是有数百轮签名来将相同的支付分成单个微支付大小的金额。
    就用户体验而言,这是一个更大的问题,同时也是路由节点的扩展瓶颈。加密签名操作非常快速和便宜,但在一个同时构建闪电以促进各种小额支付和流支付用例以及更传统的大额支付的世界中,也必须分解成小额支付大小的比特币,这也成为路由节点的一大瓶颈。从长远来看,这种动态很可能会扼杀在廉价硬件(例如 Raspberry Pi 或其它单板计算机)上运行有利可图(甚至足够可靠以被广泛使用)的路由节点的想法。
    通道数量的可行性
    HTLC 并不是闪电网络中受到链上费用的波动或稳定上升的严重影响的唯一东西。闪电通道本身也成为了这种动态的受害者。假设你想打开一个容量为 10 美元的 BTC 的闪电通道,但这笔交易的连锁费用将为 1 美元。该通道一开始就要收取 10% 的费用。然而,如果你资助一个通道为 100 美元,你的实际收费只有 1%。这为试图直接与闪电网络互动的人们创造了一个非常真实的市场层。如果开通一个通道的有效收费过高,他们就不会开通该通道了。
    对这种动态的唯一真正的权衡或解决方案是时间。如果你只有 10 美元而不是 100 美元,并且不想支付 10% 的费用,那么你就会以较低的费用提交你的通道开放交易。你继续等待。等待时间将取决于实时比特币收费市场和内存池(mempool)的积压情况(比特币矿工从内存池中选择费用最高的交易,直到他们的候选区块装满)。在好的情况下,等待可能只会多花几个小时。在糟糕的情况下,你可能不得不等几天或几周。在极端交易需求的时候,内存池甚至可以清除费用最低的交易,以确保你的通道永远不会打开。根据目前闪电通道的工作方式,这个等待游戏真的是解决这个问题的唯一解决方案。
    高有效费率还有另一个含义 : 对于不想支付高有效费率的低价值通道来说,用来保证某人可以惩罚旧的预先签名交易的时间锁(timelock)必须要长得多。时间锁的全部意义在于,你可以有效地跳过队列,并击败你的通道合作伙伴来申请资金。但是,如果你不愿意或不能为你的声明支付可能很高的费用以快速执行,那么你需要将缓慢的低费用交易的额外等待时间编码到你的预签名交易中。随着时间的推移,这可能会导致低价值通道在链上打开和关闭的等待时间更长,并需要更长的时间锁定时间,以确保这些低价值通道所有者在恶意通道的情况下不会因盗窃而损失金钱。
    取决于 Tor 网络
    即使是非技术用户也应该知道闪电网络的主要缺点之一:你必须在线才能使用它,因为发送和接收是一个交互过程。这意味着对等方需要 IP 地址才能相互通信。必须将你的 IP 地址公开给你的频道对等方是一个很大的隐私问题,如果互联网服务提供商(ISP)想要窥探彼此通信的 IP 地址,则还可能还要面临审查问题。
    Tor 几乎是目前解决这个问题的首选解决方案。问题是 Tor 本身自己就有很多问题。它依赖于一个由志愿者运营的完全基于信任的声誉权威机构。这些「目录服务器」由项目成员运行,Tor 节点可以在这里找到网络上的所有其它节点来构建 Tor 电路。这些实体的可信度是允许你通过 Tor 节点的基础,这些节点并不知道你的信息在网络中的整个路径。
    Tor 还受到许多攻击漏洞的影响。分布式拒绝服务 (DDoS) 攻击在 Tor 中比在更广泛的互联网上更难处理。有一些专业服务可以处理常规互联网上的大量流量高峰。也可以拒绝来自未屏蔽互联网上的恶意端点的流量。但在 Tor 网络中,根据设计,你不知道流量来自哪里,因此 DDoS 攻击更难处理。这实际上是一个系统性问题,Tor 开发人员目前正在考虑集成匿名代币或工作量证明(如哈希现金 hashcash)以应对这些攻击向量。由于网络如此容易受到这些类型的攻击,因此对在 Tor 上运行的闪电节点的可靠性提出了质疑。
    Tor 与闪电网络交互的最根本的弱点甚至比网络中断或必须信任 Tor 目录当局的风险更大。Tor 连接是很容易识别的,所以你的互联网服务提供商或政府可以完全阻断连接 Tor 的能力。显然,在世界上大多数地方,这种情况不会发生,但很容易发生。可悲的是,最有可能发生这种情况的地方是那些最需要保护个人隐私的威权国家。伊朗也曾试图封锁 Tor 网络,但被 Tor 网络开发商成功否决。在过去十年左右的时间里,俄罗斯和法国都出于不同的原因提出了封锁 Tor 网络的话题 : 俄罗斯和法国针对的是儿童色情,以应对恐怖袭击。
    更多的技术读者可能会知道 Tor 上的桥接节点(bridge nodes)。这些有点像特殊的 Tor 节点,它们不像普通节点那样公开宣传自己,允许无法直接访问 Tor 的用户通过这些桥节点进行连接。但是桥接节点也不能幸免于受到攻击、识别和屏蔽。最终,如果国家或互联网服务提供商想要对 Tor 网络施加压力,它就会变成一个猫和老鼠游戏,会变成进一步降低 Tor 的可靠性,作为一种私下快速无缝比特币支付的方式。
    总结
    闪电网络对于比特币协议堆栈来说是一个真正惊人的进步飞跃。它是对区块链结算机制的可伸缩性扩展,它创造了区块链的指数吞吐量收益,而不是仅仅依赖区块链本身来处理交易。但就像区块链本身一样,它也有其局限性。这不是一颗灵丹妙药,也不是解决每个问题的办法,也不是没有自己的缺点,但没关系。
    在闪电网络在主网上上线之前,比特币已经存在了 9 年,存在各种开放式或未解决的存在问题和扩展问题。但它仍然存在,仍在被使用。比特币并不仅仅因为问题是开放式的或未解决就消失。开放式问题意味着我们没有对自己撒谎。这意味着比特币开发者正在承认事物的现实缺点并寻找解决方案。这不是心理战术或攻击,这是一件好事。这就是事物变得更强大和进化的方式,承认其当前的局限性并寻找超越它们的方法。