数学证明:闪电网络无法成为去中心化的比特币扩容方案
你听过比特币闪电网络吗?这是一个扩容方案:
“通过使用小额支付通道网络,实现比特币扩容,每天将可以处理数十亿美元。
”
他们没有告诉你的是,只有使用大型中心化的“银行”中心才能实现这个方案。
比特币社区的很多人错误地认为或者被引导认为,闪电网络(
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
美金。
这可能吗?
这取决于很多因素,包括:一个路由寻径的时间和交易数量。
即使我们(可能很宽松的)假设,用户可以路由的交易加载量是正常交易加载量的