传统公链如 BTC、ETH 的平均 TPS(每秒可处理交易笔数)太低,难以满足 web3 当前以及未来经济活动的需求;
为了满足用户的使用需求,21 年初开始兴起了高性能公链的探索;提高 TPS 的方法主要有两种:
- 一是通过增加区块的大小,使得单个区块可以容纳更多的交易,比如 BCH 将区块大小从 1MB 提升至 32MB,BSV 则是更激进地取消了区块大小上限,允许无限多的信息融入一个区块。这样做会导致区块链的体积快速膨胀,参与验证的机器性能要求越来越高,提高了参与门槛,导致区块链网络的去中心化程度和安全性降低。
- 二是通过降低出块时间,提高单位时间内的出块数量,来提高 TPS。这样对节点的网络条件提出了更高的要求,提高了参与的门槛,并且因为物理距离较远的节点群容易对于最新区块产生分歧,导致了区块链的分叉。分叉后的区块链必须等待区块确认竞争出最长的一条支链,抛弃其他的支链,这就导致了一段时间内的大量交易记录被重写,如 Polygon 在 2023 年发生过 157 个区块的重组事件。
区块链的三角悖论,去中心化程度、安全性与可拓展性(即性能)三者之间的矛盾。为了追求任意两者的提升,往往会让第三者做出牺牲。如 Polygon 为了保证去中心化程度采用了复杂的验证机制,为了追求性能提高出块的速度,结果导致了容易出现大规模的区块重组事件和全网宕机事故,牺牲了安全性。而更多高性能公链为了保证性能和安全性,提高了节点的门槛,导致了一条公链仅有数十个超级节点参与验证。这些做法虽然让 TPS 得到的切实的提升,但与区块链的去中心化特性相比是不是显得有点「变味」了呢?
Layer 2 概念的兴起与发展
几乎在高性能公链兴起的同一时间,由 OP 提出的 optimism,就是运用了 Layer 2 的概念。
Layer 2 指二层网络,是在一层网络的基础上搭建的,用各种技术手段帮助底层公链扩容的解决方案。传统互联网也采用了增加层级的方式来实现业务的解耦,降低层级负担。同样的可以利用技术在区块链一层网络(Layer 1)的基础上增加 Layer 2,来分摊 Layer 1 的负担,达到扩容提升性能的目的。
Layer 2 的原型:状态通道。状态通道使用了多签技术,允许两个个体之间提前存入一笔资金锁定在智能合约中,建立一个内部通道,然后双方可以在通道内进行多笔小额转账,速度极快,成本极低,再在一段时间后用转账证明一次性提款。这就是比特币的闪电网络和以太坊的雷电网络背后的底层技术。
雷电网络的局限性:
- 用户必须提前锁定资金;
- 只能实现简单的转账交易,无法实现更复杂的交易需求;
- 无法给不参与雷电网络的用户转账。
侧链方案
为了解决状态通道无法执行复杂交易的问题,侧链方案进入人们视野。侧链可以理解为一条相对独立的区块链,它们往往采用与主链(一般是以太坊)类似的架构,方便主链上的项目迁移至侧链。我们可以在主链的智能合约内锁定一定量的资产,然后在侧链上铸造等量资产,实现“原子交换”。用这种方式将资产存入侧链,在侧链上进行各种交易,然后在必要时转移回主链。
侧链为了分担主链的交易压力,往往会采用与主链不一样的共识机制,大幅提高出块的速度,或是用少量的超级节点进行通信。这使得侧链的安全性相比以太坊主链大大地降低。侧链的安全性由自身的节点负责,如果侧链的安全出现问题,比如用户的资金存入侧链后出现问题无法转移回主链等,那么整个以太坊生态都会受到影响。所以,侧链是否属于 Layer 2 存在一定的争议。
Plasma 方案
随着状态通道和侧链方案在实践中暴露出不足,Plasma 方案被提出并得到重视,它解决了前面两者暴露出的两个问题:
- 无法给未参与的个体发送资金:未加入 Plasma 链的账户也可以收到资金,然后自行提取到 Layer 1。
- 无法继承 Layer 1 安全性:Plasma 定期向主链提交信息,以继承 Layer 1 安全性。
Plasma 会在 Layer 1 用智能合约锁住一笔资金,然后依赖一个节点运营商在 Layer 2 进行交易。运营商以默克尔树(Merkle Tree,又名:哈希树)的形式保存一个小账本,记录了 Layer 2 账户的状态信息,同时负责保存并公开所有的交易记录。
Plasma 运营商需要定期向 Layer 1 上传默克尔树的根证明,即「状态根」(State Root),这样所有人都能检查 Layer 2 的账本是否被篡改。
Plasma 还支持链中链的特性,即不向 Layer 1 定期提交根证明,而是向另一条 Plasma 链定期提交根证明,如此一层叠一层,形成“巢状区块链”(Nested Blockchain)的形态。这种特性也为其进行规模性扩容提供了可能,一度被认为是非常有前景的解决方案。
Plasma 的局限性:用户从 Plasma 链上提取资产时,要经历漫长的挑战期(一般为 7 天),是为了确定交易的合法性,如果挑战期内有人质疑节点运营商作恶,可以自行检查交易记录,并提交欺诈证明,挑战期内未被挑战的提款在挑战期结束后才会生效。但 Plasma 节点运营商是一个中心化的节点,第三方不容易获得交易数据进行监督,如果节点运营商作恶失去可信性,可能会发生用户大规模退出 Plasma 的情况,短时间内产生巨量的提款请求,提交大量的欺诈证明,导致以太坊主网长时间堵塞。
由于 Plasma 因为数据可用性的问题导致其最终未能被大规模使用,但它的一些理念在后续的 Layer 2 方案中被吸收和发展。
Rollup 技术的发展
Rollup 方案 Layer 2 的技术特点:Rollup 意为“打包”,也就是将一段时间内发生的交易先进行压缩,再进行打包,然后周期性地上传至主网。目前主流的 Rollup 方案分为两大路线,分别为 Optimistic Rollup(乐观的 Rollup)与 Zero-knowledge Rollup(零知识证明的 Rollup)。
Optimistic Rollup:OP-Rollup 是将一段时间内的所有交易细节全部压缩打包,定期发送至 Layer 1。这种机制乐观地相信大部分交易者都是诚实的,继承了 Plasma 挑战期和欺诈证明机制。
Zero-knowledge Rollup:ZK-Rollup 一般是将一段时间内的交易计算完成后,将状态变化的结果压缩打包,并附上交易已经在 Layer2 被正确执行的零知识证明,定期发送至 Layer 1。用零知识证明代替监督者,依赖数学而非验证者(Rely on Math,not Validators)。
Rollup 的二层解决方案,略微降低了去中心化程度,但获得了以下优点:
- 大幅分担了 Layer 1 层的计算负担,有效实现扩容;
- 压缩交易数据,节省了 Layer1 的存储资源;
- 向 Layer 1 上传必要的关键信息,且一层对二层的状态有最终裁决权,从而最大程度地继承了 Layer 1 的安全性。
Rollup 的压缩打包方法
以 OP-Rollup 为例,一笔常见的转账交易,他的原数交易数据可能是这样的:
4232f4610000000000000000000000007ea2be2df7ba6e54b1a9c70676f668455e329d29000000000000000000000000d548a5e31de2b4c2681a58a3be5302abcae4bc5700000000000000000000000000000000000000000000000000000000000186a0(Method ID / 填充的 0 / 代币合约地址 / 填充的 0 / 收款的账户地址 / 填充的 0 / 提币数量)
- Layer 2 通过科学计数法,删除原数据中不必要的 0(数量精度略微下降,实践中几乎无影响);
- 删除所调用的 Method ID(调用方法很常见,可以通过交易内容的特征推测);
- 为常用的行为设置一个绿色通道,例如“发送”动作以及发送的代币类型为“USDC”这两个信息设置一个更短的 HelperID 来直接调用;
- 登记一个“电话本”,记录常用收款人的地址,将长地址压缩为第 X 页中的第 X 个地址;
- 如果发送的是 ETH,省略 HelperID;
- 经过上面一些列操作,最终上传到 Layer1 的数据就压缩成了 059c570186a0(收款账户“电话簿”编号 / 提币数量)。
在原数交易数据经过定制化压缩后,还有很多压缩算法帮助进一步压缩,已经上线的 Layer 2 Rollup 方案中,很多都有自己的算法帮助打包,以下对比中可以看出,这些方案对比于以太坊主网,都取得了不错的效果。
Optimistic Rollup
Optimistic Rollup 是「乐观的打包」,它假设绝大部分的参与者都是诚实的,允许一批数量较少的验证者节点(Validator),对交易进行收集、排序、验证。同时还设置了挑战者的角色(Challenger),其职责是监督验证者提交的信息是否诚实。
OP-Rollup 会定期向主网上传两种数据:
- 状态根(State Root): 状态根可以快速确认 Layer 2 小账本的内容是否被篡改。
- 压缩后的全部交易数据:包含各种交易细节,比如交易附带的“用户签名”。
虽然上传了近段时间的全部交易详情,但以太坊主网并不负责直接验证这些交易,只起到一个公示的作用。
与 Plasma 类似,OP-Rollup 也使用默克尔树的形式保存了一个「小账本」,记录了全体账户的所有状态(账户余额)。如果我们相信目前的交易验证者(Validator)都是诚实的,那么状态根能快速确认当前 Layer 2 的小账本记录的内容是否被篡改,确保安全性。
反之,假如我们对目前的交易合法性产生质疑,任何第三方都可以在主网获取最近一段时间内所有交易的副本,重新验证之后,将自己验证的结果与 Layer2 的小账本的记录做对比,确认小账本上的记录均为合法。如果发现作恶,挑战者就可以在以太坊一层提交欺诈证明来改写二层的状态。挑战成功后,不诚实的验证者将受到惩罚,挑战者将获得奖励。同时,受影响的交易将被回滚,进行重新验证。
这个过程中,负责监督的挑战者(Challenger)是直接与 Layer1 的智能合约交互的,一层对二层的状态有着最终裁决权。
这种设计之下,即使只有一个诚实的挑战者,也足以确保整个 Layer2 的交易安全。不过代价是 OP-Rollup 必须提供一个退出窗口期,让挑战者有时间去检验并提交欺诈证明,因此使用官方桥从 OP-Rollup 网络提款往往需要 7 – 14 天的等待期。
OP-Rollup 的逻辑简单易懂,而且上传了全部交易细节,因此对 EVM (以太坊虚拟机)的兼容性也非常好,很有利于落地实施。但还是难以避免漫长的挑战期。
ZK Rollup(Zero-Knowledge Rollup):零知识证明 Rollup。
依赖于数学算法的一种非交互式证明,让在 Layer2 诚实执行交易的验证者能生成一个证明,而不诚实的验证者无法得到正确的证明,并且 Layer1 验证这个证明的代价极低,Layer1 确认了证明之后,就能认可一整个批次的交易为真。如果证明无法通过,则拒绝整个批次的打包。
比方说,一个 NFT 在一段时间内在 ABCD 多次反复转手,但最终的结果是 A 的手里减少了一个 NFT,D 的手里增加了一个 NFT,这叫做状态变化的结果。Layer 2 只需要把这个状态结果上传到 Layer 1,以及一个 ZK 证明去证明中间这些过程已经正确地被执行即可,如果通过 Layer 1 的验算通过,则这一批次的交易得到确认,否则这一批次的交易全部被打回,而不需要一个挑战者去监督交易的安全性。交易如果是不合法的,甚至无法被压缩打包。
ZK-Rollup 会周期性向主网上传 3 种数据:
- 状态根:状态根可以快速确认 Layer 2 小账本的内容是否被篡改。
- 交易数据:经过压缩和聚合的交易数据,例如将多个交易合并为一批次的状态变化结果。通过使用零知识证明保证交易的安全性,可以舍弃一些不必要的信息,例如前面提到的“用户签名”。
- 有效性证明:即零知识证明,让 Layer 1 的智能合约在经过简单验证后,就能确认交易已经被正确执行。
ZK-Rollup 与 OP-Rollup 的区别:
ZK-Rollup 方案依靠 Layer 1 上的智能合约,用很小的代价检验 ZK Proof 的有效性,如果检验通过则表示这批交易已经被正确执行,那就更新状态。如果检验不通过,则拒绝这一批次的交易。
OP-Rollup 则完全将 Layer 1 当成了解决数据可用性的公告板,依赖挑战者的监督,两者的安全性和交易确认速度都会产生明显差异。
ZK-Rollup 的优点:
依靠数学而非验证者,安全性更有保障,并且确认时间更短。
更高的压缩率,让 Layer 2 的扩容上限更高。
ZK-Rollup 的两个技术路线 STARK vs SNARK
SNARK:Succinct Non-Interactive Argument of Knowledge 的特点:
- 简洁(Succinct):验证速度快于计算证明。
- 非交互式(Non-Interactive):无需证明者与验证者之间进行交互。如比特币的公私钥对也是一种零知识证明,但它要求私钥拥有者对一段文字进行签名才能证明自己拥有私钥,这需要发生一次交互。
- 统计学上的可靠(Argument):相对于数学上绝对的证明 ( 即 100% 可靠 ),实现了统计学上的可靠(如 99.99999999%)。
- 包含信息(Knowledge):可将某些信息编码进零知识证明中,如一笔交易已被正确执行。
STARK:Scalable Transparent Argument of Knowledge 的特点:
- 可扩展的(Scalable):在进行大规模交易的证明时,验证时间仍然较短。
- 透明的(Transparent):随机数公开可验证,无需像 SNARK 一样设置初始可信环境。
- 统计学上的可靠(Argument):相对于数学上绝对的证明 ( 即 100% 可靠 ),实现了统计学上的可靠(如 99.99999999%)。
- 包含信息(Knowledge):可将某些信息编码进零知识证明中,如一笔交易已被正确执行。
STARK 的优势:处理大量交易时,零知识证明生成速度和验证速度更快,具有抗量子性,无需初识可信环境,安全性更高,且发展时间更久更成熟。
SNARK 的优势:证明体积更小,交易成本比 STARK 更低,随着技术发展,安全性不显著弱于 STRAK,拥有更大的潜力。
ZK 发展路线 ZK-VM vs ZK-EVM
- ZK-VM:从零知识证明的角度出发,专门开发适用于零知识证明的算法,从而构建一个 ZK-VM(零知识虚拟机),而不是原生兼容 EVM 的 ZK-EVM(零知识以太坊虚拟机),在此基础上尽可能实现 EVM 兼容。这种路线的优点是能够充分发挥零知识证明的潜力,实现最大化的扩展性。
- ZK-EVM:从 EVM 兼容性的角度出发,将 EVM 的交易在操作码层面切割成更小的步骤,对每个步骤去找对应的零知识证明算法,力求实现完全的 EVM 兼容。这样做可以使开发者几乎无感地切换到二层网络,方便现有项目迁移,最大程度地保留目前的 EVM 生态成果。
复盘 Layer 2 的发展历程以及 Layer2 的未来展望
侧链,数据对主链来说不可用,无法继承主链安全性。
Plasma,状态根可以保障链下账本的不被篡改,但具体交易数据对一层网络来说也不可用,导致资金退出困难。
OP-Rollup,上传所有交易的详细数据以及状态根到 Layer 1 上,确保了全部交易数据的可用性,从而确保 Layer2 的安全。
ZK-Rollup,上传关键交易数据以及能证明链下交易已经被正确执行的零知识证明,实现安全性的同时,还能一定程度保证隐私性。
未来:数据可用性问题能否由 Layer2 解决。
Validium,仅向主网上传状态根和零知识证明,交易数据交由 Layer 2 保存。
Volition是 Validium 方案的改进版本,允许用户可以自行选择其交易数据是否在 Layer1 可用。少量资金交易可以选择交易数据储存在 Layer2,提高交易速度,降低交易成本,大量资金交易可以选择保存在 Layer1,提高安全性。
以太坊的 Deneb 更新,是以太坊扩容路线 DankSharding 的前置步骤,旨在保证以太坊信标链安全性的前提下,为 Layer 2 扩容提供更大的储存资源。
Deneb 更新添加了一种新的交易:Blob 交易(大型二进制对象 Binary Large Object)。在主链上只留存指针,指针指向一个 Blob 块,上面可以储存约 128KB 的二进制数据。
以太坊矿工只负责在一段时间内(如一个月)保存 Blob 上的数据,通过随机抽样的方式确保 Blob 上二进制数据的真实性,但不验证存在 Blob 上的交易。
Blob 交易看起来对常规交易的扩容没有帮助,但这对于 Layer 2 打包的交易数据来说简直是完美契合 Layer2 原先定期上传给 Layer 1 上的打包交易数据本来就不会执行,只是起到保障数据可用性的作用。
而 Blob 本身就相当于一个公示板,消息在公示板上的存续时间超过了 OP-Rollup 的挑战期,实践上完全够用,存储成本却降低了许多,这将促使 Layer 2 的交易成本进一步降低。
Blob 增加的唯一缺憾是超过保存期之后,Layer 2 如果想保存自己的全部历史交易数据,需要用另外的方案自行解决这些数据的可用性问题。
总体来说,Deneb 更新之后,Layer 2 将可以在保证安全性的同时进一步降低交易成本,变得更具实用价值。
ZK 系与 OP 系未来将会走向相互融合发展的方向。
账户抽象与大规模应用。Web3 想要得到大规模应用,需要完善区块链的账户体系,用私钥对掌握的账户体系(EOA 账户),对普通大众非常不友好,账户抽象是未来的重要趋势。Layer 2 可以帮助建立账户抽象,通过智能合约账户进行交易,手续费和交易速度都比 EOA 账户更加优化,Layer 2 为区块链最终的普及提出了更大的可能性。
(声明:请读者严格遵守所在地法律法规,本文不代表任何投资建议)