你大概听过这句话:“区块链有个不可能三角,去中心化、安全、可扩展只能三选二。”
它被当成一条定律引用,用来解释为什么某条链慢、或者证明某条链的宣传是吹牛。
但它不是定律。 它没有形式化定义,没有证明,也没有人能指出那条"三选二"的边界具体在哪。
一、先说结论
可扩展性三难困境(Scalability Trilemma):一条链无法同时做到去中心化、安全、可扩展,最多三选二。
这个说法由 Vitalik Buterin 在 2017 年前后提出并推广。它非常有用,但有一件事必须先讲清楚:
⚠️ 它不是定理。 没有形式化定义,没有证明,也不存在"三选二"的严格边界。它是一个工程经验的概括,在某一类特定架构下成立。
⭐ 这件事之所以重要,是因为它被两种人同时滥用:一种拿它当挡箭牌(“这是数学定律,我们做不到”),另一种拿它当营销(“我们打破了不可能三角”)。两边都不给定义。
⚠️ 说它"不是定理",容易被读成"所以它是错的、可以不管"。不是这个意思。 它描述的约束在现实中非常硬——只是这个硬度来自一个具体的架构假设(每个全节点都验证每一笔交易),而不是来自数学。
这个区别很实际:定理没法绕过,架构假设可以换。 后面 L2 那一组(第 26–29 讲)讲的就是换掉那个假设之后会发生什么——它们不是"打破了不可能三角",是不再在那个三角所描述的架构里。
这一讲就做一件事:把三个维度定义清楚,然后你会发现绝大多数争论会自动消失。
二、给三个维度下定义
去中心化:用验证成本定义
“有多少个节点"是个没用的指标——节点可以是同一个人开的(女巫攻击,第 1 讲)。有用的定义是:
去中心化程度 ≈ 一个普通人用消费级硬件独立验证全链的可行性。
为什么是"验证"而不是"出块”?因为验证者才是安全的最后一道防线。
如果所有矿工/验证者串通改规则(比如凭空增发):
⟹ 全世界都在跑全节点:他们的区块被自动拒绝,攻击失败
⟹ 全世界都在用别人的 RPC:没有人能发现,攻击成功
打个比方
想象一份公开的账本,任何人都可以查。
它到底算不算"公开",取决的不是有多少人抄了副本,而是一个普通人有没有能力自己核对一遍。如果核对这份账本需要一间机房和三天时间,那么实际上只有少数几家机构能核对——剩下所有人只能"听说它是对的"。
这时候账本在形式上是公开的,在效果上是托管的。
⭐ 这就是为什么"你能不能自己验证"是去中心化的核心指标,而不是节点数量。 节点数量可以是同一个人开的(女巫攻击,第 1 讲),而"普通硬件跑不跑得动"骗不了人。
具体可测的量:同步全链需要多少小时?需要多大硬盘?需要多少带宽?跑得起来的人有多少?
安全性:用攻击成本定义
安全性 ≈ 攻破系统的成本,相对于攻破后能拿走的价值。
注意两点:
- 它是一个比值,不是绝对数。一条锁着 10 亿美元的链,攻击成本 1 亿就是不安全的。
- 它是经济命题(第 1 讲第五节)。会随币价、算力、质押率变化。同一条链在牛市和熊市的安全性可以差一个数量级。
可扩展性:吞吐 + 状态增长
可扩展性 ≈ 单位时间能处理的交易数(吞吐),以及状态增长的速度。
⚠️ 第二项经常被漏掉,但它才是长期更致命的那个。 带宽不够可以升级,但状态是只增不减的:每一个新账户、每一个新合约 slot 都要永久保存在每个全节点的磁盘里。第 12、13 讲会专门讲状态膨胀。
三、真正的约束在哪
有了定义,就能写出那个"三角"的真实来源。
在每个全节点都要验证每一笔交易的架构下(比特币、以太坊 L1、以及绝大多数单链):
设:吞吐 = T(笔/秒),每笔交易的验证开销 = c(带宽 + CPU + 磁盘)
普通人的机器能承受的上限 = R
则:全节点的负担 = T × c
要让普通人跑得起:T × c ≤ R
⟹ T ≤ R / c
⭐ 这就是全部。 在这个架构下,吞吐 T 的上限被"普通人机器的能力 R"锁死。想突破 T,只有三条路:
① 降低 c —— 优化,但空间有限(常数级)
② 提高 R —— ⚠️ 等于要求更贵的硬件 = 降低去中心化
③ 打破"每个节点验证每笔交易"这个前提 ← 唯一的真出路
“三角"的实质就是 ② 和 ③ 之间的选择。 而绝大多数号称高 TPS 的链,选的是 ②。
四、算一算这个约束有多硬
⭐ 这一节就是在量那份账本:一个普通人核对它,要花多少小时、多大硬盘、多少带宽。 这几个数字一旦超过普通硬件,“公开"就退化成了"只有机构能核对”。
抽象的式子不够直观,代入真实数字。
现状
比特币
区块 1 MB / 10 分钟,一笔交易约 250 字节
⟹ 1,000,000 ÷ 250 = 4,000 笔/块
⟹ 4,000 ÷ 600 秒 ≈ 6.7 笔/秒
以太坊
区块 Gas 上限取 3,000 万(⚠️ 该值由出块者投票调整,会漂移),
一笔简单转账 21,000 Gas,出块 12 秒
⟹ 30,000,000 ÷ 21,000 ≈ 1,428 笔/块
⟹ 1,428 ÷ 12 ≈ 119 笔/秒 ← ⚠️ 这是纯转账的理论上限
实际约 15–20 笔/秒,因为绝大多数交易是合约调用,Gas 消耗高得多
如果要 100,000 TPS
假设一笔交易 250 字节(已经很乐观了,合约调用远大于此)
带宽:100,000 × 250 B = 25 MB/s = 200 Mbps ⚠️ 持续、不间断
存储:25 MB/s × 86,400 = 2.16 TB / 天
× 365 ≈ 788 TB / 年
⚠️ 一年 788 TB。 这还只是原始交易数据,不含索引、状态、收据。
结论很清楚:在 100,000 TPS 下,能跑全节点的只剩数据中心。 于是第二节那个问题变成了现实:普通人无法验证 ⟹ 你只能相信运营商告诉你的余额。
⭐ 所以"高 TPS 链"并没有违反物理定律,它们只是把 R 提高了——而这在定义上就是降低去中心化。 这不一定是错的选择,但它是一个选择,应该被明说。
五、什么是真正的突破方向
回到第三节的第 ③ 条:打破"每个节点验证每笔交易"这个前提。这听起来像作弊——不验证怎么保证正确?
有三种办法能在不牺牲安全性的前提下做到,它们是这门课后半程的主线。
① 有效性证明(ZK)——最彻底的一条
如果有一种密码学证明,能让你在不重新执行的前提下确认"这批交易被正确执行了”,而且验证证明的开销与交易数量无关:
传统:验证 N 笔交易的成本 = O(N)
ZK: 验证一个证明的成本 = O(1) ⚠️ 或 O(log N),但与 N 几乎无关
⭐ 这在数学上真的成立(第 28、32 讲)。它是唯一有可能真正"打破三角"的方向——因为它直接砍断了吞吐和验证成本之间的联系。
代价:生成证明的成本很高(远高于直接执行),且证明系统本身复杂、难以审计。
② 数据可用性采样(DAS)
即使有了有效性证明,还剩一个问题:你怎么知道数据没被藏起来?(第 29 讲会说明为什么这是 Rollup 安全的真正瓶颈。)
DAS 的思路:每个节点只随机抽查一小部分数据,但通过纠删码使得"藏起一部分数据"必然会被高概率发现。
每个轻节点只下载全部数据的 1%
但只要藏起超过 50% 的数据,
被 30 次独立随机采样全部漏过的概率 ≈ 0.5³⁰ ≈ 10⁻⁹
⭐ 于是"验证数据可用性"的成本从 O(N) 降到了 O(√N) 甚至 O(log N)。
③ Rollup:把执行搬走,把数据留下
把交易执行放到 L2,L1 只做两件事:保证数据可得 + 裁决争议或验证证明。L1 全节点不需要执行 L2 的每一笔交易。
但注意:数据仍然要发到 L1。所以 Rollup 缓解的是"执行"瓶颈,不是"数据"瓶颈——这正是 EIP-4844 blob 和第 29 讲存在的原因。
六、四个可以直接用的检验问题
看到任何"我们又快又去中心化又安全"的宣称,问这四句:
| 问题 | 为什么问 |
|---|---|
| ① 跑一个全节点需要什么配置?同步一次要多久? | 直接测量第二节的定义。如果答案是"64 核 / 512 GB 内存 / NVMe",那它选了提高 R |
| ② 有多少个实体能出块?停掉其中几个链会停? | 21 个验证者的链和 100 万个验证者的链,不该用同一个词描述 |
| ③ 那个 TPS 是怎么测的? | 峰值还是持续?纯转账还是真实负载?测试网还是主网?投票交易算不算进去? |
| ④ 状态增长多快?满了怎么办? | 最常被回避的一题。吞吐可以靠带宽解决,状态膨胀无解——它只增不减 |
常见的伪突破
⚠️ 下面每一种在技术上都成立,但它们改的是定义而不是约束:
❌ 提高硬件门槛 → 改的是"去中心化"的定义(提高了 R)
❌ 减少验证者到 21 个 → 同上,且顺便改了"安全性"的定义
❌ 只报乐观路径的性能 → 攻击时的性能才是安全性
❌ 把共识投票算进 TPS → 分母掺水
❌ 不谈状态增长 → 把长期成本挪到未来
⭐ 判断方法很简单:看它是把 T 提上去了,还是把 R 提上去了。 前者才是突破,后者只是换了一台更贵的机器。
七、一个更准确的表述
三难困境真正想说的其实是这句话,它没有"三角"那么好记,但准确得多:
⭐ 在每个全节点都必须处理每一笔交易的架构下,吞吐量的上限由"你希望多少人能自己验证"决定。
要绕过它,只能让节点不再需要处理每一笔交易——而这必须由密码学(有效性证明)或概率保证(数据可用性采样)来补偿,否则就是在牺牲安全性。
这个表述的好处是:它可证伪。任何一条链的宣称,都可以拿它去对照。
八、本讲小结
- ⚠️ “不可能三角"不是定理:没有形式化定义,没有证明。它是特定架构下的工程经验概括,被两边同时滥用。
- ⭐ 去中心化应该用"验证成本"定义,不是节点数量。 因为如果所有出块者串通改规则,只有自己跑全节点的人能发现并拒绝。
- 安全性是一个比值(攻击成本 ÷ 可窃取价值),且是经济命题,会随币价和算力变化。
- 可扩展性包含吞吐和状态增长两项,第二项更致命——状态只增不减。
- 真正的约束:在"每节点验证每笔交易"的架构下,
T ≤ R / c。吞吐上限被普通人机器的能力锁死。 - 算一下就很清楚:100,000 TPS 意味着 200 Mbps 持续带宽、788 TB/年的原始数据。能跑全节点的只剩数据中心。
- 三条出路只有第三条是真的:降低 c(空间有限)、提高 R(等于降低去中心化)、打破"每节点验证每交易”(ZK 有效性证明 / 数据可用性采样 / Rollup)。
- 有效性证明是唯一可能真正打破三角的方向,因为它把验证成本从 O(N) 变成与 N 无关。
- 四个检验问题:全节点配置多少?多少实体能出块?TPS 怎么测的?状态增长多快?
- 判断真伪的一句话:看它是把 T 提上去了,还是把 R 提上去了。
思考题
- 为什么"节点数量"不是去中心化的好指标?给出一个节点数很多但实际高度中心化的例子。
- 如果全世界没有人跑全节点,只用交易所和 RPC 服务,矿工串通增发会被发现吗?会在什么时候、以什么方式被发现?
- 用第四节的方法,估算一条"5,000 TPS、平均交易 500 字节"的链一年产生多少原始数据。它的全节点还能放在家用机器上吗?
- 为什么说状态增长比带宽更难解决?举一个具体的例子说明状态为什么"只增不减"。
- 有效性证明把验证成本变成 O(1)。那它为什么没有让所有链立刻变成百万 TPS?瓶颈转移到了哪里?
- 数据可用性采样中,如果攻击者只藏起 10% 的数据(而不是 50%),采样还能发现吗?纠删码在这里起了什么作用?(可先给出猜测,第 29 讲会验证)
- 找一条你听说过的"高性能公链",用第六节的四个问题逐条检验它,并判断它是提高了 T 还是提高了 R。