卷 V · 落地CH 18深度 18/23

省下的不是隐私,是重算

这门技术今天规模最大的应用,和隐私一点关系都没有。它做的是第 1 章那件事:把「所有人都重做一遍」换成「一个人做、其他人抽查」。而它落在区块链上,纯粹因为那是人类造出来的、「同一件事被最多人重复」的地方。2026 年,为一个以太坊区块生成证明的时间从约 16 分钟压到了约 16 秒,成本降了 45 倍。但有一笔账它没有消掉。

16 分钟 → 16 秒10000× → 1×数据没省

◻ 本章先赊三条
第一条。区块链慢和贵的根本原因不是共识算法,是「执行被复制了几万份」。共识只负责定顺序。 第二条。零知识消掉的是执行那一份浪费,没有消掉数据那一份——而后者才是今天 rollup 成本的大头。 第三条。「zk-rollup」这个名字里的 zk 基本是叫顺了嘴:绝大多数 rollup 的交易数据是公开的,谁转给谁一目了然。

先把浪费算清楚

一条公链在做什么?把它剥到最里面:

一笔交易被打包进区块之后,网络上每一个全节点都会:
    1. 把这笔交易从头执行一遍
    2. 检查执行结果和区块里写的一致
    3. 更新自己那份状态

假设有 N 个节点、一个区块里有 T 笔交易,那么全网的执行工作量是
    N × T
而「真正需要被算」的工作量是
    T

N 在以太坊上是几千到上万的量级。也就是说,这套系统在执行这一项上的效率是万分之一。这不是设计失误——那正是它安全性的来源:每个人都亲自算过,所以不需要相信任何人。这就是第 1 章那条「路 B」,被推到了极致。

换成路 C 之后:

每个节点重算 10000 笔交易      10000 次状态转移 × 10000 个节点 = 1 亿次
换成一个证明:每个节点          1 次验证 × 10000 个节点

★ 全网执行工作量的倍数           10000× → 1×

那个 10000 倍的复制,塌缩成了 1 倍。代价是有一台机器要多付第 14 章那笔账(几千到几万倍的证明成本)——但它只付一次,而省下的是几万份。

◆ 第 14 章那笔账,在这里终于划算了

第 14 章给过一个门槛:N 个验证者时,N > 366 才划算。而区块链上 N 是几千到上万。

这就是这门技术为什么先在区块链落地,而不是在别的地方。不是因为区块链的人更聪明或更有钱,是因为那里的 N 是全世界最大的。

同时也解释了它没有先落在哪里:你和一台服务器一对一交互(N = 1),这套东西纯亏。第 14 章那条判据在这里第一次收到了现实的检验。

2026 年的真实数字

以太坊基金会 2026 年公布的 L1-zkEVM 路线图,把这件事从「未来方向」变成了带验收指标的工程项目:

指标状态
为一个主网区块生成证明过去一年从约 16 分钟压到约 16 秒,成本降 45 倍;多数主网区块已能在 10 秒内验完
目标延迟99% 的主网区块 ≤ 10 秒
目标证明大小≤ 300 KB
目标安全性≥ 128 比特(2026 年 5 月前先达到 100 比特)
目标硬件本地证明设备 ≤ 10 万美元,功耗 ≤ 10 kW
协议改动EIP-8025:让验证者可以用证明确认区块,而不必运行完整的执行客户端

最后一行是这一整章的落点。「运行一个以太坊全节点」这件事,将从「重新执行全世界的交易」变成「验一份证明」。如果它落地,那么第 1 章那张对照表里「区块链为什么慢」那一行,就被真的改写了。

那笔没有被消掉的账

现在说这一章最重要的一件事,而它经常被 zk 的宣传盖过去。

证明能让别人相信「这批交易被正确执行了」。但是——别人怎么知道现在的账户余额是多少?

节点不再重算交易了,但它仍然需要知道状态是什么:
    我的余额、合约里的数据、谁欠谁多少。

而状态是由交易一笔笔改出来的。要让任何人都能重建出状态,
交易数据本身就必须被公开发布。

零知识消掉了「所有人都要」,
但没有消掉「所有人都得看见」。

这件事有个名字叫数据可用性(data availability),而它今天是 rollup 成本的大头:

10000 笔交易,压缩后每笔 12–30 字节量级
  → 数据量约 195 KB

这 195 KB 必须被发布到主网上,让所有人都能取到。
而证明只有几十到几百 KB,一次性的。

所以 rollup 的账单结构是:执行成本 ≈ 0(被证明取代),数据成本 ∝ 交易数(省不掉)。这就是以太坊 2024 年 3 月上线 EIP-4844(blob)的全部理由——给「只需要短期可用的数据」开一条便宜的通道,把它和「永久存储的合约数据」分开定价。

◆ 一条可以带走的判据

看到任何「用零知识扩容 N 倍」的说法,先把它拆成两问:

  1. 它消掉的是「重复执行」吗?——如果是,那 N 大概等于原本的验证者数量,是真的。
  2. 它消掉「必须公开的数据」了吗?——没有任何证明系统能做到这一点。数据要么发布(成本 ∝ 数据量),要么托付给某个委员会(那就引入了新的信任假设)。

把这两问用在任何一份 rollup 白皮书上,它宣称的扩容倍数会立刻显出真实的量级。

那个 zk 到底还在不在

最后澄清这个名字。绝大多数 zk-rollup 里,交易数据是完全公开的——它必须公开(见上一节),谁转给谁、转了多少,任何人都能看。

用到了「简洁」吗用到了「零知识」吗
zk-rollup(Scroll、zkSync、Linea 等)是,这是全部意义基本没有——数据公开
隐私币(Zcash、Aztec)是,这是全部意义
L1-zkEVM

第一行那个「zk」纯粹是命名遗留:这类系统在早期借用了 zk-SNARK 这个词,然后名字就固定下来了。业内也有人主张改叫「validity rollup」(有效性 rollup),更准确,但没叫响。

这也正是第 1 章那句话的完整兑现:zk-SNARK 四个部分里,撑起今天最大应用的是「S」,不是「zk」。

⌨ 自己跑一遍

rollup 的账很简单,值得自己算一遍——尤其是「什么时候数据成本开始占大头」:

def rollup_cost(txs, nodes=10000, bytes_per_tx=20,
                proof_kb=100, verify_ops=1_000_000, exec_ops_per_tx=100_000):
    """把「全网总工作量」拆成执行、验证、数据三项"""
    old_exec   = txs * exec_ops_per_tx * nodes         # 每个节点各算一遍
    new_exec   = txs * exec_ops_per_tx                 # 只有一个证明者算
    new_verify = verify_ops * nodes                    # 每个节点验一份证明
    data_bytes = txs * bytes_per_tx                    # 这一项省不掉
    return old_exec, new_exec + new_verify, data_bytes

for txs in (10, 100, 1000, 10000, 100000):
    old, new, data = rollup_cost(txs)
    print('%6d 笔:全网执行 %.2e → %.2e(省 %5.0f×),数据 %7.0f KB'
          % (txs, old, new, old / new, data / 1024))
    10 笔:全网执行 1.00e+10 → 1.00e+10(省     1×),数据       0 KB
   100 笔:全网执行 1.00e+11 → 1.00e+10(省    10×),数据       2 KB
  1000 笔:全网执行 1.00e+12 → 1.01e+10(省    99×),数据      20 KB
 10000 笔:全网执行 1.00e+13 → 1.10e+10(省   909×),数据     195 KB
100000 笔:全网执行 1.00e+14 → 2.00e+10(省  5000×),数据    1953 KB

看第一行:只有 10 笔交易时,一点也没省——因为「每个节点验一份证明」这笔固定开销,和「每个节点算 10 笔交易」差不多大。批次越大越划算,这是 rollup 为什么要「攒一批再提交」的全部原因。

再看最后一列:数据是唯一一列随交易数严格线性增长、且怎么都省不掉的。bytes_per_tx 从 20 改成 5(更狠的压缩),整条曲线会平移——这就是为什么 rollup 团队花大力气做交易数据压缩,而不是继续优化证明。

python3 -c " for t in (10,100,1000,10000): old=t*1e5*10000; new=t*1e5+1e6*10000 print(t, '%.0f×'%(old/new), '%.0f KB'%(t*20/1024))"

在线跑:python.org/shell。真实数据看 L2BEAT 这类公开面板,注意区分「有效性证明」和「欺诈证明」两类 rollup——后者不用这本书里的任何东西。

▸ 在现实里
  • 乐观 rollup 是同一个问题的另一种答案。Arbitrum、Optimism 用的是「先假设它是对的,谁有异议就在七天内提交欺诈证明」。它把「验证」从事前搬到了事后,代价是提款要等七天。而有效性证明(这本书这套)不需要等待期,因为它事前就验完了。这两条路线的对立,本质上是「乐观 + 争议期」和「悲观 + 立刻验证」的对立,在分布式系统里到处都有对应物。
  • 为什么不早点这么做。因为直到最近,为一个以太坊区块生成证明还要几十分钟、成本高到不现实。这门技术从 1985 年的论文到 2026 年的路线图,中间隔着的不是数学,是四十年的常数因子优化。
  • 同一个结构在别处。CDN 的边缘缓存、数据库的物化视图、编译产物的分发——都是「一个人算好,很多人直接用」。区别在于那些场景里你必须信任那个算的人,而这里不必。零知识给「一个人算好」这件事补上了它一直缺的那一半:可验证性。
  • 值得警惕的一点。rollup 今天的安全性并不只靠这本书里的数学。绝大多数系统还有「升级密钥」「安全委员会」「中心化排序器」这些东西。证明系统再完美,也管不住一个能改合约的多签钱包。第 22 章会把这个模式讲透。
✗ 这个直觉是错的

「zk-rollup 是隐私方案,用了它我的交易别人就看不见了。」

恰恰相反:绝大多数 zk-rollup 的交易数据是必须公开的,因为不公开就没人能重建状态。你在 Scroll 或 zkSync 上的每一笔转账,金额和地址都在链上明明白白。

这里那个 zk 指的是证明系统的种类,不是系统提供的性质。用一个类比:一辆车用了「涡轮增压发动机」,不代表它会给你增压;那只是发动机的名字。

真正提供隐私的是另一类系统(Zcash、Aztec、Tornado 一类),而它们要付完全不同的代价——下一章会给出一个数字:一个 1000 人的隐私池,有效匿名集可能只有 1.6 人。

判据是:问「这个系统的数据是公开的吗」。如果是,它就没有隐私,无论名字里有没有 zk。这个问题比读任何白皮书都快。

✓ 结账

这一章的一句话

这门技术今天最大的应用是把「几万个节点各算一遍」压成「一个人算、其他人验一份证明」,和隐私毫无关系;而它消不掉的那一笔——所有人都必须看得见数据——才是今天真正的成本大头。

下一章去看真正做隐私的那一类系统,以及一个让人清醒的数字。零知识能保证协议本身不泄露任何东西(第 7 章那个总变差距离精确为 0),但它管不了你什么时候点的那个按钮、转了多少钱用的哪个 IP。本机模拟:一个 1000 人的混币池,你存完 10 分钟就取——有效匿名集只剩 1.6 人