数学证明:闪电网络无法成为去中心化的比特币扩容方案
你听过比特币闪电网络吗?这是一个扩容方案:
“通过使用小额支付通道网络,实现比特币扩容,每天将可以处理数十亿美元。”
他们没有告诉你的是,只有使用大型中心化的“银行”中心才能实现这个方案。
比特币社区的很多人错误地认为或者被引导认为,闪电网络(LN)是一个分布式的P2P网。
但是,这个方案是不可行的。事实上,使用一组宽松的假设,我们也可以从数学的角度证明这是不可能的。
我们将本文分为几个部分。第一部分,简单概述闪电网络。第二部分,简单说明为什么闪电网络不能实现去中心化的扩容。第三部分,更为严格的数学证明。
第一部分:闪电网络概述
比特币扩容之战
比特币最初被设计成一个点对点的现金系统,可以直接通过增加区块大小进行扩容。但是,关于网络如何实现扩容的讨论已变得更加复杂和更具有争议。
57名Bitcoin“Core”开发者签署了一份官方的扩容路线图,提倡把闪电网络作为“高度去中心化”的“非带宽扩容机制”(译者注这里的“非带宽”原文是non-bandwidth)。
我们不同意并将证明这是无法做到的。阅读和理解这篇文章后,你可以自己得出你的结论。
闪电网络及其工作原理是什么?
闪电网络(LN)是一种可以提供一系列链下双向支付通道的协议。如果你想了解技术细节,Aaron van Wirdum提供非常棒的一个由三部分组成的系列。
“双向”简单来说就是两个方向,所以Alice和Bob可以打开一个私人通道互相发送比特币(在区块链下):
为了打开通道,一方或双方必须将比特币存到一个指定的比特币地址,随后他们可以在通道里任意进行交易,直到任意一方决定关闭通道,即在比特币主区块链上进行结算(支付最后的余款)。
连接多个通道
更进一步,如果Alice和Bob有一个通道,Bob和Carol也有一个通道,那么Alice可以间接把钱给Carol:Bob将先支付Carol,然后Alice偿还给Bob。
预期的网络
LN传道者提出了这个Alice通过Bob支付Carol的设想,我们可以扩展这个设想来构建一整个支付通道网络,从而能够在链下进行大量的交易。
但是,实际上这实现后并不是一个P2P网络,至少不是一个大规模的P2P网络。
“去中心化”VS“分布式”语义
大多数人每天谈论比特币的时候说的“去中心化”,从技术上是指一种“分布式拓扑”技术。
相反,如果没有单一的中心,拥有中心化中心机构的网络可以从技术上来说是“去中心化的”。
但是,让我们别陷入文字游戏。下面的图表应该可以把事情说清楚:
第二部分:一个给外行人看的解释:为什么闪电网络无法扩容?
我会尽可能简短地对此进行说明:
首先,你必须了解闪电网络不同于其他网络,因为你无法随时链接到另一个用户。
为了发送或是接收比特币,你需要和具体用户建立一个支付通道,或者需要一系列相互连接的通道。(一个“路由”)。
只是为了发送一笔链下交易,就创建一个通道是毫无意义的,因为它要求链上交易打开通道。你倒不如直接在链上发送一笔交易;你不需要LN。
这个设想你可以通过一些链接将交易发送到任何地方。从用户的角度来看,发送交易给其他人的潜在路径就像一个树结构:
它开始像是一个基础的数学问题
我们假设目标是规模扩大到100万用户。
让我们来思考一下:如果你有一棵树,树上有10个树枝,每根树枝有10篇叶子。你可以得到100片叶子。
如果你有1棵长着10根树枝的树,每根树枝有10个小树枝,每个小树枝又10个小树枝等等…你可以进行到第六层“深度”并得到:10 x 10 x 10 x 10 x 10 x 10, 或简单表示即:10⁶,等于一百万。
因为你从树枝跳到树枝,跳6次得到树叶,我们可以说进行了“6跳”。因此,10个树枝6跳,在我们的案例中:10通道6跳。
那么,挑战是什么呢?
你的钱无法同时存在两个地方
如果我们假设,我们需要10个支付通道进行6跳达到这个网络,这意味着你需要把你的比特币分为10份。
但是,可能只有其中一个通道可以在某一特定时间可以到达预期的接收者。这意味着你只能转部分的钱,例如10%。
我们可以创建两个通道,进行20跳来解决这个问题吗?我们稍后会回到这个问题。首先,让我们先了解另一个重要的事实:
每个人都在借钱给另外一个人
想象一下Alice想要通过Bob发送1个比特币给Carol, 像这样:Alice->Bob->Carol
为了发送交易,Bob在与Carol连接通道的时候,余额里必须至少有1BTC。本质上,Alice是借Bob的钱支付给Carol。Bob在[Bob->Carol]通道将自己的1BTC转给Carol。而Alice在[Alice->Bob]通道上将1BTC给Bob。这就是它的工作原理——Alice不能“给”1BTC给Bob,然后传给Carol。
这实际上是贷款,因为网络使用时间锁来消除保管风险:Alice在确认Bob已经支付Carol之前不会偿还Bob。
实际上,在达到目的地的路径中每一跳都必须要有足够的资金来进行每一笔交易。所以,跳数越多,借贷的负担成倍地变得更大。
为什么这是一个大问题?
大量的“跳”意味着交易破坏(Deal-Breaker)
让我们假设所有人使用进行20跳的路由,大多数用户每个月消费1000美金。如果所有人都做完成了自己要完成的部分来帮助发送交易,每个用户每个月路由寻径所需的交易金额为2000美金。
这可能吗?
这取决于很多因素,包括:一个路由寻径的时间和交易数量。
即使我们(可能很宽松的)假设,用户可以路由的交易加载量是正常交易加载量的10倍,并其在通道可用性只减少50%,那么他所需的通道数量将是平时的两倍。
在现实中,甚至更糟糕
至少还有5个额外的问题会使情况变得更糟。
1. 即使我们从基础数学开始:10⁶=1,000,000并不太适用。如果我们假设peers大多是随机链接,并且没有一个中央机构来规划路径,则有一定的成功概率。百万分之一的机会,重复一百万次,只能产生63%的成功率。选择两百万次,成功率增加到84%,这也意味着要增加通道的数量。
2. 当用户花费他们的收入时,可用的路径就会降级,直到存入更多的资金。换句话说,当一个人在网络上收到一笔薪水支付和存款时,他们的通道达到最大值,具备完成路径的能力。但是随着这笔钱被花掉,这个能力也降到了0。平均来看,这种模式将路径的能力砍掉一半,并需要双倍的通道。
3. 你帮人路由了钱也改了当前的通道中的资金分配这会进一步减小可用的通道数量。
4. 在任何群体都会有贫富差距。因此,能够发送资金给任意其他随机用户的用户数量只是网络的一小部分。这个问题将随着跳的数量增加而呈指数级被放大。
5. 这里还一直存在着一个风险:链接的通道变无效(不论是有意地或是无意地)。这个风险也将随着跳的数量增加而呈指数级增加。
简短总结
在大型网络要通过一系列分叉的通道找到某人,你要么需要大量的通道,要么进行大量的跳。
二者都有一个非常大的问题。大量的通道意味着用户必须划分他们的资金,除了接受小额支付什么都做不了。而进行大量跳意味着所有人的钱将都会被占用来路由别人的钱。
结论:一个完全不可用的系统
随着网络规模达到100万个用户,似乎并没有现实可行的方法可以避免这些问题。将资金划分到许多通道上,以及不断将钱借贷出去,二者都将使网络不可用。
唯一能想到的办法是,要么A)每个人都存入远远超过他们所需要转的资金,或者B)系统依靠于一个大型中心化机构。二者都不是一个去中心化的扩容方案,甚至不是其中重要的组成部分。
(还有第三部分,待发)
(如果您觉得好,欢迎关注我的公众号: 闪电HSL,也欢迎加我微信号:13116885)
(如果你想学习比特币和区块链知识,欢迎加入我的小密圈)