给区块链扩容难吗?从比特币到以太坊
DeFi 业务的增长从 2020 年起飞,TVL 从 $600M 到 $25B,增长了 40 倍。从一个现象就能直观感受:DEX 去年从每日数千笔到达数十万笔规模,Uniswap 的单日交易量甚至一度超过了老牌中心化交易所 Coinbase。
以太坊上的交易量不断攀升,区块容量却开始吃紧,而矿池选择 GasPrice 竞价排序交易使其利益最大化。同时考虑到 DeFi 业务技术上存在抢跑攻击,用户心理上存在 FOMO 等问题,导致最终大家愿意付出更高的价格让交易跑得飞快。高价矿工费,使我们离普惠金融的初衷渐行渐远。
那么以太坊为什么不选择直接提升区块容量,承载更多交易呢?原因很简单,区块链核心限制在于「每一笔交易都要由网络中每一个节点验证处理」,那么当区块大小扩大几倍时,则会让更多小型节点退出,逐渐走向中心化。
给区块链扩容难吗?
早在 2010 年时中本聪就已经探讨过扩容问题,最初中本聪在比特币源码中设定区块容量为 32M,但后来区块交易量一直很小,就把容量设置为了 1M。他自己也认为如果有扩容需求,那么在代码中设定区块高度自动升级区块容量就好了。
但是后来比特币扩容却不是那么顺利,主要分歧在于是采用「隔离见证和闪电网络」,还是「增加区块容量」。前者认为「区块容量增大要求更高带宽和存储,会使节点逐渐走向中心化」,希望借助隔离见证和闪电网络这两项技术完成扩容,不增加区块容量。
注:这也是为什么 Eth2 希望采用 PoS 降低节点门槛,从而让更多人可以成为验证人,使其完成去中心化世界账本的理想。
当然这最后已经不是技术问题了, 而是上升到了意识形态之战,经历香港共识的出尔反尔与不信任,最终走向硬分叉的道路,形成目前 Bitcoin Core 和 Bitcoin Classic 两条扩容路线。
比特币扩容过程就像一场戏剧,我们可以看到诸如 SegWit、Schnorr Signature、Lightning Network 等扩容技术落地实现,但还未有质的改变。
SegWit:交易数据压缩至 25%;
Schnorr Signature:单签名数据压缩至 50%;多重签名:多笔交易压缩成单笔交易体积;
Lightning Network :缺少点对点小额支付场景,资产规模仅有 1000+ BTC。
后来闪电网络白皮书的作者 Joseph Poon 转战以太坊社区,与 Vitalik 在 2017 年发布 Plasma 白皮书,试图解决以太坊的扩容问题。
Plasma 主张将交易的计算和存储搬到 Layer2,然后将多笔交易压缩成一个区块,并将区块的默克尔根提交到 Layer1 Plasma 合约,从而提高吞吐量和降低交易成本。
Layer2 依赖 Layer1 Plasma 合约作为安全信任和仲裁层,如果 Layer2 出现问题/作恶,那么用户可以借助 Layer1 Plasma 合约退出资金。退出资金要等待约 2 周的挑战期,在此期间任何人都可以提交「欺诈性证明」证明退出无效,从而获得奖励。反之,若无问题则等待挑战期结束,顺利退出。
Vitalik 称 Plasma 是 side chains that have a non-custodial property,究其原因主要是用户需要信任 Side Chain 机制,而无法保障自己资金的所有权,但 Plasma 通过交互式欺诈性证明可以让用户随时申请退出资金,即便 Plasma 子链出现问题/作恶。
Plasma 曾是社区的希望,我们可以看到许多 Plasma 变体实现诸如 OmiseGo、Matic、Loom 等,但因为一些缺陷,它并没有获得社区最终的青睐:
缺少数据可用性,用户不得不依赖 Plasma 可信任节点数据或不断监控网络是否作恶,无法获得同等于 Layer1 的安全性。
提款周期长,依赖长达两周的欺诈性证明挑战期,如果有人作恶,同时挑战期内无人发现并提交作恶 ( 欺诈 ) 证明,那么用户资金存在损失风险。
上面这段话可能有些难以理解,我们来举个数据可用性的例子:
当你去赌场玩德州扑克时,你从柜台 ( Layer1 ) 将美元换取筹码,然后你开始随便找了一张桌子玩了几个小时德州 ( Layer2 交易) ,当你赢到盆满钵满的时候,你准备起身到柜台兑换筹码。此时赌场的坏人给你当头一棒,你失去了记忆 ( 数据不可用 ) ,牌桌上的荷官当作什么事情没有发生过一样,重新开始刚才的牌局,骗走你本应赢到的筹码。
从过去比特币和以太坊扩容情况来看,我们逐渐找到了理想扩容方案应该有的样子
保持区块容量大小,避免走向中心化;
支持数据可用性,用户可以从 L1 上重建交易状态;
随着 2019 年以太坊硬分叉升级 - Istanbul,我们离理想扩容方案越来越近,此次升级包含两个 Layer2 友好的 EIP 提案
EIP - 1108:使 SNARKs 和 STARKs 验证运算更便宜;
EIP - 2028:降低 Calldata Gas 消耗量,以便 L2 数据采用 Calldata 形式低成本上链。
Layer2 Rollup 的现状
什么是 Rollup?
Rollup 有不少中文译名,其中一个打趣的翻译是「春卷」,你可以想象将食物卷起来一口吃下去的感觉。实际上,Rollup 就是将交易数据压缩放到 Layer1 上,从而实现同样的区块容量可以塞下更多交易,将 30 TPS 扩容到 3000 TPS 级别,再搭配上 Eth2 Sharding 扩容,效果可以媲美当下 Visa 的水准。
如何压缩数据?
压缩是 Rollup 的精华,巧妙的压缩技巧可以塞下更多的交易,同时压缩数据上链可以提供「数据可用性」,保障用户资产安全。
一笔简单的以太坊交易 ( 比如发送 ETH ) 通常消耗约 110 字节。然而,在 Rollup 上发送 ETH 仅消耗约 12 字节。我们以收款地址和交易签名举例:
To:使用「索引」来代替 20 字节的地址 ( 例如:一个地址是「状态树」中的第 4,527 个地址,我们就可以用索引 4,527 来表示它 ) ;
Signature:利用零知识证明的特性,将数千笔交易签名转化为零知识证明,通过检查证明的有效性,从而证实数千笔交易有效。
Rollup 方案对比
Rollup 方案主要分为两种 :ZK Rollup 和 Optimistic Rollup。前者采用有效性证明,后者采用欺诈性证明,这两种证明方式背后的理念是不同的:
有效性证明:采用数学的方式保障资金安全、用户体验流畅和隐私,但短期内无法支持通用的 EVM 计算;
欺诈性证明:支持通用 EVM 计算 ( 方便以太坊项目迁移 ) ,但短期内无法采取零知识证明,所以折衷选择欺诈性证明,保障资金安全。
最后,本文为了讲述 Layer2 发展历程提及了一些过往不同的扩容方案,但这并不意味这些方案的思路是失败的。这其中除了技术问题,商业可行性也是值得深思的,正如 Vitalik 对这两种 Rollup 方案的评价:
短期内,Optimitic Rollup 很可能在通用的 EVM 计算中胜出,而 ZK Rollup 则可能在简单的支付、交易和其他特定应用场景中胜出。但从中长期来看,随着 ZK-SNARK 技术的改进,ZK Rollup 最终将在所有场景中胜出。