在密码学货币行业,每当牛市开启,就会有铺天盖地的虚假消息。许多侧链项目会误导用户相信它们是名正言顺的 Layer 2 可扩展性解决方案。本文旨在向初学者说明什么样的区块链才是 Layer2。因此,为便于读者理解,完整性和严谨度不免有所牺牲。
通常来说,Layer 1 区块链具有更高的安全性和流动性,Layer 2 区块链则依赖 Layer 1 区块链为其提供安全性和流动性。
如果你是初学者,尤其是刚入行的小白,请先跟我看一个简单的例子。
假设你在以太坊区块链上有 100 Dai,你的 Metamask 上也显示如此。但是,Metamask 是怎么知道的?因为它通过 Infura(以太坊节点即服务提供商)与以太坊点对点网络进行通信。但是,拥有 100 Dai 究竟意味着什么?它意味着,Dai 合约(运行在以太坊区块链上的、由代码和数据组成的软件)有你的地址(如你在 Metamask 中所见的那样),地址旁边显示的数值是 100。
再回到如何辨别新的区块链是否是 Layer 2 这个问题上。假设有条新的区块链叫作 Macau。出于某种原因(想要买某个东西,以更低的 gas 价格交易或获得某种体验),你想将你自己的 100 Dai 从以太坊转移到 Macau 链上。
你会如何将这 100 Dai 转移到 Macau 上?发送一封邮件给 Vitalik 的 Masternode,让他帮你转移吗?当然不是,你其实是将你的 100 Dai 发送到以太坊区块链上的另一个合约,也就是通常所说的 “存款” 合约(好比赌场的存款窗口)(译者注:实际上是在 Dai 合约内将 100 Dai 从你的账户中转出、然后转入另一个账户;但正如作者所说,这是为了便于理解)。
第一步:将 100 Dai 发送到Macau 在以太坊区块链上的存款合约。
Macau 链的验证者/矿工可以看到你的存款,因为他们一直在监控以太坊区块链,尤其是 Macau 的存款合约。这时,其中一位验证者/矿工告诉其他人:“嘿!大家快来看啊!有客户上门了!快干活!” 接着又对你说:“欢迎你,很高兴你能加入我们。这是你的 100 个合成 Dai,是我刚刚挖出/验证的 Macau 区块里的,希望你玩得开心。”
第二步:你已经从 Macau 获得了 100 张借据(好比是赌场筹码)。凭这些借据,你可以取回你在以太坊上的存款合约中锁定的 Dai。我们称这些借据为合成 Dai(简称 sDai)。
所谓的 “进入 Macau”,实际上是你所在的某个网站上的一些 Javascript 脚本在与 Macau 的点对点网络通信。这就好比,当你在 Aave 网站上借贷或 Uniswap 网站上交易时,你 “进入了以太坊”:这些前端上的 Javascript 脚本为你创建了借贷/兑换交易,然后通知你的 Metamask。看到 gas 费之后,你嘤嘤嘤了 5 分钟,才点击 “确认” 来签署并广播你的交易。你很熟悉这个流程。
Macau 也是一样。如果 Macau 是以太坊的分叉(就像币安的BSC ? 或 Avalanche 的 C-Chain ?),那么整个流程实际上也差不多,因为你只需要使用 Metamask,不需要使用专属钱包来签署创建好的交易(因为以太坊/BSC 等区块链均采用相同的地址格式和密码学签名机制)。
第三步:将 Macau 上的 100 sDai 用于交易、流动性挖矿、投资等。
假设你玩德州,将 100 sDai 的本金翻倍变成了 200 sDai(这多出的 100 sDai 是你从对手那里赢来的,他们也在以太坊上的 Macau 存款合约中锁仓了一笔 Dai)。
注意了,现在是最关键的部分?:
这时,考虑到安全性和流动性(或者不在乎那千把块美元的 gas 费),你想取回本息并放到以太坊上。如果你随时随地都能从 Macau 存款合约(再强调一次,这个合约在以太坊区块链上)中取回 200 Dai,且没人能阻止你(只有当满足这两个条件时),Macau 就是 Layer 2 区块链??。
如果从理论上来说 Macau 的验证者可以阻止你取回 200 Dai,或直接偷走它们(自己取走),Macau 就不是 Layer 2 区块链,而是侧链?。
如果从理论上来说你可以取走更多资金(如 300 Dai),Macau 就不是 Layer 2 区块链。
当我们提及可扩展性方案时,最终总会回到 “谁控制出口” 这一问题上?
如何将以太坊上的存款合约变得更加智能,来防止你、其他 Macau 用户以及 Macau 的矿工/验证者/运营方作弊呢?
可以想象得到,这并非一件容易的事,因为这需要存款合约能够实时了解 Macau 上的资金流向:假设 1 小时前你在 Macau 上玩德扑赢了 100 sDai,你就可以提取 100 Dai 到以太坊上,但是你可能在下一局就把这笔钱输掉了!因此,合约要能了解所有这些情况,以及 Macau 的最新状态。
状态通道和 plasma 等早期解决方案的做法是:将欺诈声明和争议解决逻辑编程到 Layer 1 上的存/取款合约中。但是,它们都给用户造成了沉重的负担,例如:
用户必须时刻在线监控以太坊上的 Layer 1 合约,以便挑战/制止/惩罚威胁其资产的恶意取款行为。
用户必须存储提出争议所必需的数据。在状态通道 1 方案中,这个数据通常是对手方的签名,用来证明通道中的状态变化(例如,“Alice:我保证向 Bob 支付 10 Dai” 或 “Charlie:我保证将车移动到棋盘上的 H5” )。
只针对 plasma:用户容易受到两方面影响(a)需要存储的数据大量增加,因为用户所需数据是 plasma 链全局状态的一部分,而不只是状态通道的对手方的数据 2 ,(b)数据扣留攻击(data withholding attack),即,plasma 运营者(区块生产者)试图进行恶意取款,同时扣留用户发起挑战所需的数据。这进一步提高了 Layer 1 上取款安全性逻辑的复杂性。
直到 rollup 方案出现,才真正解决了这些棘手的问题。rollup 要求用户退出时所需的一切数据都能在 Layer 1 上获得。每当 Layer 2 上的状态变化时,rollup 运营者都会在 Layer-1 上披露导致本次状态变化的事务数据。因此,Layer 2上的执行和 Layer 1 上的数据更新是同步的。如果你想要了解更多关于 rollup 的信息,请阅读这些文章:入门、进阶、高阶(zk-rollup)和高阶(optimistic rollup)。
rollup 方案通过数学方法(ZKRU)或密码学货币经济(ORU)保障来确保所有相关参与方都是诚实的。如果 rollup 运营者消失或开始捣乱【滥发信息、审查或(在 optimistic rollup 方案中)实施欺诈】,用户总是可以使用 Layer 1 上的数据来安全地取走资金。这些数据都存储在以太坊 Layer 1 上的 rollup 合约中,因此用户唯一需要信任的就是 Layer 1 会诚实地执行这些合约(其它 Layer 1 合约也采用同样的信任假设,如 MakerDao MCD 和 Aave 等)。
备注 1:
其它 Layer 1 链,如 NEAR、Polkadot 和 CosmosHub 等,也可以成为以太坊的 rollup。它们只需要创建一个遵守 rollup 设计模式的桥梁,并将必要的数据发布到以太坊上,就像其它 rollup 所做的那样。
备注 2:
ZK Rollup 方案采用有效性证明来证明 rollup 状态更新的正确性。每当 rollup 状态更新,有效性证明都会在 Layer 1 上验证。因此,这类方案可以杜绝欺诈行为。但是,数据还是要发布到链上。这样一来,如果 rollup 运营者消失,用户依然能够使用数据来自行提交取款请求。
备注 3 :
比特币可以有 Layer 2 吗?
不行。比特币缺少编程元件和状态管道系统,无法创建复杂的 Layer 1 合约来处理争议和/或验证有效性证明 3 。当然了,你也许听到过,使用某某比特币侧链无需放弃代币所有权之类的说法,千万别信这些虚假营销 4 。
“那闪电网络呢?” 闪电网络仅仅在理论上是 L2。但实际上,普通用户几乎都要信任一个第三方来监控整个系统(原因见上文关于状态通道的部分),也就是说实践中它并不是 L2。
Rollup 是唯一可以保证用户高枕无忧的 Layer 2 可扩展性方案,因为资金出口被以太坊 Layer 1 牢牢控制住了。
说回侧链:
如果 rollup 有这么神奇,那为什么有人会选择创建一个(a)需要额外的信任假设和(b)过去 7 年来始终得不到市场认可的侧链 5 ?
侧链之所以苟延残喘,是因为这类方案很容易构建。很多项目方只是草草构建出一个侧链,就可以拿风投?,然后发行代币 6 。
实际上,只需要一下午时间,你就可以构建出一条以太坊侧链:你只需要在以太坊上构建一个类似智能钱包的基础合约让人们能够存入资金,然后分叉 Geth(为你的侧链选一个新的链 ID 并重新构建即可)……瞧!这不就差不多了……呃,好吧,还差一点……你还得雇一些水军,再请平面设计师设计一个高大上的网站……不过很多风投机构想必都很乐意帮你一把,它们可以部署大量机器人。
一些骗子会忽悠你说侧链就是 Layer 2 方案,更有甚者还会宣传说他们的侧链比 rollup 更安全。然而,说到底,这只是一个很简单的问题:资金出口由谁控制?在 rollup 方案中,资金出口是受到控制的,并由以太坊 Layer 1 的 EVM 保护。
本文要点:
目前,凡是宣称 tps 超过 2000 并以可扩展性项目为卖点的链都很可能是侧链,需要用户作出一些未公开的信任假设。
等到 Eth2 数据分片上线后,Rollup 的 tps 可能会达到 1 万以上。这类方案对数据的需求量很大。
Rollup 是唯一不需要用户做出额外的信任和/或活性假设的 Layer2 可扩展性解决方案。
侧链之所以存在至今,是因为这类方案可以在 1 小时内构建出来,通常是为了募集资金并发行代币。
在使用一条链之前,请检查资金出口以及你必须做出的信任假设,从而(a)确保这条链是安全的,以及(b)你可以安全取回资金。项目方通常会使用很多营销话术和荒谬的论调来掩盖项目为提高性能而在安全性方面做出的权衡。
其它 Layer 1 链可以充当以太坊的 rollup,它们只需要遵循 rollup 的设计模型,并将必要数据发布到以太坊上即可。
没有活性假设的 Layer 2 无法构建在比特币上,因为它缺少必要的编程元件和状态管道系统来获得 Layer 1 的安全性保障。
优点 | 缺点 | 是 Layer 2 吗? | |
---|---|---|---|
Plasma | 吞吐量(通用计算) | 客户端数据要求高、取款等待期、活性假设、来自运营者的数据扣留攻击 | 技术上是的,但实际上不是 |
状态通道 | 速度、客户端数据要求低 | 活性假设、取款等待期、资金效率低、通用计算很难/无法实现 | 几乎是 |
Optimistic Rollups | 受 Layer 1 保护 | 取款等待期、数据空间需求量大 | 是 |
ZK Rollups | 受 Layer 1 保护 | 数据空间需求量大 | 是 |
侧链 | 不适用 | 需要托管 | 不是 |
-“缺点”一列通过不同颜色反映了问题的存在情况(即,我们可以通过设计在多大程度上规避这些问题)。例如,rollup 的数据要求可以轻易得到满足(正如以太坊 2.0 以及 LazyLedger 等 "数据可得性即服务提供商" 所计划的那样),而无需牺牲去中心化,因为数据是 “冷的”,即,全节点不会执行 rollup 数据,而且磁盘空间的成本很低-
脚注:
1:如果是状态通道,根本没有什么 “Macau” 链,用户之间直接进行交互。例如,你在以太坊上质押了一笔 Dai,和一群小伙伴开了个状态通道打德扑,然后开始交换信息来更新游戏状态,如 “我弃牌,以这个密码学签名为证”。等游戏结束后,你可以向以太坊上的合约提交这局德州的最新快照,然后取出你的余额。支付通道和象棋通道也是同理。虽然状态通道方案可以消除来自恶意侧链运营者的风险,但是用户依然需要保持警惕,以防对手方试图使用已经过时的有效状态发起取款。因此,取款通常有一个等待期,以便其他参与者验证其有效性并发起挑战。例如,如果你要求取款并提交一个有效证明来证明你赢了,其他玩家可能会挑战你,利用你最近输给他们的游戏结果生存伪证明,并提交给合约。
2:以 Plasma Cash 为例,用户会继承且必须存储其收到的每个代币的完整交易记录,这需要耗费大量时间。
3:你可以这么想:EVM 可以为你提供基础材料,让你 “3D 打印” 出任何你感兴趣的对象;比特币的脚本好比是瑞士军刀(感谢 Vitalik Buterin),只能用于有限的目的。
4:在这期节目中发言的 Nic Carter 并非这条侧链的投资者,但是 Nic Carter 赞助了他的播客。
5:中心化交易所确实是侧链,而且很受欢迎。用户的资金并非像本文提到的那样发送到 “存款合约” 内,而是发送到中心化交易所控制下的地址。但是,中心化交易所并没有打着 “可扩展性解决方案” 的旗号标榜自己,用户知道将资金存入中心化交易所是需要信任的。
6:当然也有例外。xDai 侧链在以太坊社区非常流行,特别适合小额付款和快速实验。但是,xDai 团队和社区永远不会进行虚假宣传,来向用户掩盖安全性权衡问题的真相