于表示没有明确逻辑所有者的对象(例如 Uniswap)。所以说通道只适合用于有已定义好参与者集的应用,虽然说可以添加和移除参与者,但是需要每次都对合约进行改变。 B. Plasma 由于 Channel「无法支撑大规模、大资金和复杂交易」的局限性,Plasma 方案应运而生。其结合了侧链的一些设计,解决了将资产发送给任意目标人的问题,同时也能够确保 TPS 的提升。事实上在开发者们研究 Layer2 解决方案的开始很长一段时间里,Plasma 一度被认为就是「the right one」。 但随着后来因为一些硬伤被 Layer 2 取代了,这边来简单给大家说说: Plasma 是一条独立的区块链,最初的设计也是想保留侧链的主要用途,可以通过链下交易来扩容,同时能一定程度解决侧链自身的安全性问题(也就是说当子链遇到攻击时,存储在子链上的资产始终是安全的)因此在取舍后放弃了侧链的一些性能(比如执行智能合约等),却通过区块锚定回主网来增加安全性。他和侧链最大的 2 点不同在于: 1)侧链使用桥的方式来和主链交互资产,但侧链的安全性依靠自身的共识机制。而且侧链往往 比主网小很多。但 plasma 将自身的每一个区块的状态信息以区块根的形式发布到以太坊主网。因此在以太坊主网上是可以确认到 plasma 链上的状态信息的(只不过子链上的具体交易数据存储需要用户自行下载保存。以太坊主链在这个过程中只承担了确认者的角色,而非验证者,所以其安全级别是较差的)。因此 Plasma 链也被称为「子」链,因为它们本质上是「父链」以太坊链的较小复制。这意味着它继承了主链的部分安全性,所以也属于 layer2 的方案。 2)plasma 上是不支持智能合约的,仅支持基本的 Token 转移、交换和其他一些交易类型。 无限创建「链中链」: 每一条 Plasma 可以无限创建更多的子链,以减轻父链的工作量,每条子链都有一个叫做「Operator(运营商)」的角色。 运营商周期性的「状态承诺」: 所有链下交易会先汇总到子链的运营商,然后(因为子链要锚定回主链)运营商周期性地把子链计算结果汇总,通过默克尔树的形式打包压缩成一个区块根,最后将区块跟提交回主链做状态记录。也就是所谓的周期性的提交「状态承诺」。通过这样的方式,无论在两次提交期间,子链上发生了多少笔交易,子链只需要将交易执行造成的状态信息提交到主链上即可。而交易的数据是不会提交给主链的。 入口——主网合约: 像侧链一样,Plasma 使用在以太坊上运行的主合约来处理用户的进入和退出。用户必须在主合约中存入 ETH 或任何 ERC-20 Token。监视合约存款的 Plasma 运营商重新创建与户的初始存款相等的金额,并将其释放到用户在 Plasma 链上的地址。 退出——欺诈证明: 然后在推出 plasma 链,也就是取款的时候,plasma 引入了之前提到的「挑战期」,通过欺诈证明的方式来惩罚不诚实行为、保证状态有效性。该主合约还负责跟踪状态承诺(前面已解释)并通过欺诈证明惩罚不诚实行为。「欺诈证明」意味着任何人在这段挑战期(通常是 7 天或者更久)内,都可以通过默克尔树校验的方式来提交证明用户资产的退出是不合法的。 Drawn by RJ 状态根 State Root: 首先刚才提到了 Plasma 在主链上拥有一个 (或者一系列相互关联的) 合约,用来维护 plasma 子链中的状态记录,这个状态记录实际上是一棵默克尔树的根节点存储的哈希值,这个哈希值被称为 state root。 具体解释:默克尔树(一颗二叉树),在二叉树的叶子节点上记录着当前 rollup 层账户的状态信息。 对于每两个状态信息 (例如 State 1/State 2),我们可以根据某种哈希公式计算出一个唯一的哈希值 (eg: Hash(1,2) ) 来作为这两个叶子节点的父亲节点,依次一层一层往上类推,最终得到一个哈希值存储在根节点中:你不需要知道怎样计算哈希值,你只需要记住几件事情。 1) 任何一个状态的变化都会导致 Root hash 发生变化。 2) 如果两棵树的根哈希值相同,那说明他们的叶子结点存储的信息完全一致(因此只需要对比两个根节点哈希值就可以确认底层状态信息的一致性)。 3) 根据根节点的哈希值和下载相邻哈希值,我们可以确认某一个状态信息存在于这棵哈希树中。 Drawn by RJ 当 rollup 上发生交易的时候,会产生新的 state root。任何子链的用户这时候都可以根据自己在子链上下载记录的交易信息来对比、证明新的状态根是否正确。(因为刚才提了,但凡记录的交易/叶子节点上完全一致的,根哈希值一定会相同。 为了保证他们的资金完全安全,用户(也就是潜在「验证者」)需要每隔一段时间观察一次等离子链,去记录链上的交易信息。这包括运行一个自动同步(下载)等离子链并确保一切按预期运行的软件。用户应至少每隔几天运行一次该软件,但具体时间取决于 Plasma MVP 智能合约设置的参数。 如果等离子链运行正常,那么用户不需要做任何其他事情。但是,如果出现不可逆转的错误(希望极少发生),那么用户的钱包将自动开始从 Plasma 链中提取资金。这种自动取款保证了用户资金的安全,即使在最坏的情况下,当恶意运营商试图窃取资金时也是如此。 数据不可用: 但 Plasma 有一个很大的问题,就是数据的不可用性。欺诈证明有效预防了用户作恶,也能保证只要有还有哪怕一个诚实节点,就能保证链的安全性。但如果是运营商作恶,同时用户/验证者没有可以证明真实性的相关交易信息呢?由于用户可以提交欺诈证明的前提是用户自行记录了子链上的交易数据 + 运营商将所有真实交易数据打包上主链,所以当运营商作恶提交无效数据时,只要将防欺诈所需的相关信息隐藏,网络中的用户便无法拿到真实信息来证明交易是无效的。 大规模退出: 由于「运营商作恶」这个问题在 plasma 方案中无法有效预防,只能想解决办法。plasma 就设计了一套「大规模退出」「mass exit「方案,但这个方案又有可能引发以太坊本身的全网拥塞… Plasma 项目: Matic 最早期就是使用 plasma,区块链研究人员此后不久发现了数据可用性问题(后面会在报告中进一步讨论),导致 Plasma 被其他解决方案弃用。改名后,polygon 项目就转为全方面,全站式扩容方案。 优缺点: +ve: 1)提供高吞吐量 2) 每笔交易的低成本 3)适用于任意用户之间的交易。使用的人可以将资产发送给 plasma 以外的人,收款者可以在任何时间点,回到 plasma 只要拿着收款证明,去兑现就可以。而如果两者都建立在等离子链上,则每个用户对没有开销。所以 plasma 也可以适应与主链无关的特定用例。包括企业在内的任何人都可以定制 Plasma 智能合约,以提供可在不同环境中工作的可扩展基础设施。 4)不需要像 channel 去提前锁定资金. 5)安全性高,plasma 的安全性某种程度上依赖于主网。(fraud prove 欺诈证明)侧链的 validator 定期将状态树根 state root 传到主链,但主链不去验证,允许任何人在一周内提交质疑,和欺诈证明。以此来保证 sv 状态有效性。 -ve: 1)无法运行智能合约。plasma 仅支持基本的 Token 转移、交换和其他一些交易类型。 2)固定提交周期,如果在这个周期内去支付,支付是不会被确认,需要等周期到了才可以。 3)提款慢,通常需要等 7 天,以允许提交质疑和欺诈证明。 4)需要定期观察网络(活跃度要求)或将此责任委托给其他人以确保资金安全 5)依靠一个或多个运营商来存储数据并根据要求提供服务。 6)如果太多用户试图同时退出,以太坊主网可能会变得拥挤。 所以这边可以看出来,Plasma 和 Channel 通道对比,核心优势在于:用户可以将资产发送给从未参与过系统的参与者,并且资本要求要低得多。但代价是:Channel 通道不需要任何数据在链上运行,但 Plasma 要求每条链定期发布一个哈希值。此外,Plasma 转账不是即时的:用户必须等待挑战权结束。 但 plasma 自身最核心的问题是,Plasma 子链为了提升效率,只会定期提交其状态结果上主链,而非所有交易数据。但是这样做的代价是 Plasma 无法建立和以太坊主链同一级别的信任,因为确保「数据有效性」的重任就落到了「运营商」身上,而非以太坊主网。但运营商是存在动机去作恶的。 于是乎,就有了 roll-up 方案… C. Roll-Up: Rollup 是目前最主流的扩容方案,可以算是原始主链处理方式和 Plasma 方式的折中:他和 plasma 一样在以太坊主链(也就是一层)之外执行交易,然后将多个交易成批处理在一起,最后将它们的状态发送回以太坊主网络。但是不同之处在于,1)roll-up 也会将交易数据提交给主链,2)rollup 会最大限度压缩这些交易数据,同时基于 Rollup 本身的特性适当删除和缩减一部分数据,只要保证最终的提交能够上主链从而供任何人验证即可。(这两种 roll-up 都是在 plasma 的基础之上,针对交易数据部分提供了不同的证明方案。) 因此,Rollup 的安全性要比 Plasma 高。而他的核心优势也就是同时保证了状态有效性+数据可用性。 Roll-up 具体上怎么实现的呢? State Root(先前提到过): 首先 Rollup 在主链上拥有一个 (或者一系列相互关联的) 合约,用来维护 Rollup 层中的状态记录,这个状态记录实际上是一棵默克尔树的根节点存储的哈希值,这个哈希值被称为 state root。 具体解释:默克尔树(一颗二叉树),在二叉树的叶子节点上记录着当前 rollup 层账户的状态信息。 对于每两个状态信息 (例如 State 1/State 2),我们可以根据某种哈希公式计算出一个唯一的哈希值 (eg: Hash(1,2) ) 来作为这两个叶子节点的父亲节点,依次一层一层往上类推,最终得到一个哈希值存储在根节点中:咱不需要知道怎样计算哈希值,咱们只需要记住几件事情。 1. 任何一个状态的变化都会导致 Root hash 发生变化; 2. 如果两棵树的根哈希值相同,那说明他们的叶子结点存储的信息完全一致(因此只需要对比两个根节点哈希值就可以确认底层状态信息的一致性; 3. 根据根节点的哈希值和下载相邻哈希值,我们可以确认某一个状态信息存在于这颗哈希树中。 Drawn by RJ Batch(这也是 rollup 非常棒的一个改良): 当 rollup 上发生交易的时候,会产生新的 state root。 但是如果每发生一笔交易就签名并在主链更新一次 state root,产生的成本反而会比将这些交易在 Layer1 上执行还要高。 所以 rollup 中产生的交易就被按批次打包汇总,同时根据这批交易全部执行完成后的状态,会产生一个新的 state root。无论是谁将交易打包提交给主链上的智能合约,他都需要计算这个新的 state root,并将其和上一个 state root 以及交易数据一并提交。 这一部分的打包被称为一个「batch」,运营商将 batch 提交给 Rollup 合约后,主链会去验证新的 state root 是否正确,如果通过验证,则将 state root 更新为最新提交的 state root,并最终完成一次 rollup 内的状态转移确认。 所以,Rollup 的实质是将一大笔实际产生的交易汇总成一笔主链上的交易,这些交易由 Rollup 链来执行和计算,但会将数据提交给主链。这样既利用了主链的共识和安全性,同时提升了实际上的交易效率,降低了交易成本。 https://vitalik.ca/general/2021/01/05/rollup.html https://vitalik.ca/general/2021/01/05/rollup.html 压缩: 这两种技术方案能够做到扩容,核心都是交易数据的压缩和打包(前面提到了 rollup 的一大改良就是将交易数据上链 因此「压缩」是针对这部分)。这是因为以太坊的区块 gas limit 是有上限的, 压缩后的交易越小,一次能提交给主链的交易就越多,平摊的费用越低。那么如何做到这一点呢? 以下是 Vitalik 在其文章中描述的一种 zk 的压缩模式,作为例子帮我们理解: 以太坊主链上一笔简单的交易(比如发送 ETH)通常消耗约 112 字节。然而,在 zk-Rollup 上发送 ETH 可以缩减到约 12 字节。 https://vitalik.ca/general/2021/01/05/rollup.html 达到这样的压缩效果,一方面是采用了更简单高级编码,另一方面,还有一些巧妙的压缩技巧。 这个图表很有意思,不考虑 rollup,一般在以太坊网络上交易会涉及到这些参数: Nonce:此参数的目的是防止重放。如果一个账户的当前 nonce 是 5,那么来自该账户的下一笔交易处理后,账户中的 nonce 将增加到 6。nonce 一般来说可以到几千几万,但它是通过 rlp 编码可以动态缩短字节,所以以太坊网上的 nonce 大约是在 3 字节左右 Gasprice:是以 10 的负 18 次方为单位的一个数,也是 rl 编码,大概是 8 字节 Gas:这边指的是你愿意付出的 gas 个数,一般都不多。一般以太坊一个 block 的 gas 上限是允许 2 千万个 gas。一般一个转账交易 gas 差不多是 2 万,调个合约差不多是 10 万-20 万,顶多几十万。所以这边平均差不多 3 个字节 To:以太坊上一个地址差不多是 21 个字节,而且以太坊地址范围很大 Value:指的是转账时的钱数,很多时候调合约 value 都是 0,因为你不需要往合约里转账。但比如我转 5eth 给你,那 value 就有个值。单位也是 10 的负 18 次方,rlp 编码,9 个字节差不多 Signature:签名就比较固定 差不多 68 个字节 所以这样算下来,一个 eth 交易差不多 112 个。因为 roll-up 是往 L2 发,所以只要能表达出完整信息,L2 方案是可以自定义格式的。但是这些信息他可以挑选,和压缩。比如: Nonce:在 rollup 中可以完全省略 nonce。因为完全可以从 pre-state 中恢复 nonce。 GasPrice:可以在每批中设置一个固定的费用水平,或者甚至将 gas 支付完全移到汇总协议之外,并让交易者通过渠道向批次创建者支付费用。 Gas:可以在 batch 层面设置 gas 限制,选择一些特定的值, To:可以通过默克尔树上的索引来替换 20 字节的地址(例如,如果地址是添加到树中的第 4527 个地址,我们只需使用索引「4527」来引用它。就可以限制到 4 个字节 Value:钱数把单位改一下,或者用其他技术法来存储。 Signature:使用 BLS 聚合签名,将多个签名整合为一个。然后可以一次性地针对整个消息批次「batch」验证签名。因为每个区块中可验证的聚合的签名数量上限是 100,所以即使包含 100 笔签名的 大批次(batch)也能聚合成一笔签名。 最后省下来差不多 12 个字节。其实相当于限制了精度,但信息范围不变,依旧几乎表达了完整的信息。这就是 roll up 为什么能扩容的重点。但这扩容的原因主要是因为在主链上,calldate 是有限制的,因为 calldate 它每个字节都会消耗主网上的一点 gas,而主链上一个 blcok 的总 gas 数上有限制的。所以就限制了 calldata 能包括的字节的总数。 这些压缩技巧是 rollup 扩容的关键,如果我们不对交易数据进行压缩,rollup 或许只能在主链的基础上的有大约 10 倍的提升效率,但有了这些压缩技巧,才能做到 100 倍甚至更高的压缩效率。 Data availability : 如何验证提交的信息是正确可用的? Roll-up 和 plasma 的一大不同在于它也提交了交易数据上主链,来保证任何人可以验证。那现在就涉及到了如何验证提交的信息是正确可用的? 对于这一问题,大体上有两种解决方案,而根据解决方案的不同,rollup 也被分成了两类:Optimistic rollup 乐观卷叠 和 Zero-knowledge (ZK) rollup 零知识证明卷叠。 a)Optimistic rollup 顾名思义,它们乐观地假设所有交易都是有效的,并在没有任何初始证明的情况下提交批次。任何人可以在挑战期内,检测并证明有数据是虚假的。 Drawn by RJ 如果批处理被证明是有欺诈性的,那么 Optimistic rollps 会执行欺诈证明,并使用以太坊主链上的可用数据运行正确的交易计算。 还可以用刚才这个图(下图)来解释 optimistic roll-up 中的 欺诈证明构建: batch 所包含的信息包括了 pre-state root,post state root,和交易信息。 根据 pre-state root 这一部分能够构建完整的默克尔树。 根据交易信息,我们可以模拟执行 batch 中提交的交易,从而得到了新的账户状态,得到新的默克尔树,得到新的 state root。 将上一步得到的 state root 和 batch 中的 state root 进行比对从而验证 batch 中的是否正确。 https://vitalik.ca/general/2021/01/05/rollup.html https://vitalik.ca/general/2021/01/05/rollup.html https://vitalik.ca/general/2021/01/05/rollup.html 为了威慑提交者不作恶,提交者往往需要质押资金,当他的提交被验证为错误时,一部分质押资金将会被扣除作为惩罚。同时,提交了相应欺诈证明的验证者会得到被扣除的押金,以此来激励监测和提交欺诈证明的行为。 如果我们将 OR 和 Plasma 进行比对,我们会发现一些相似性,例如他们都使用了欺诈证明机制,需要有一个验证者的角色来监测 OR 给主链的提交。但由于 OR 同时向主链提交了交易数据,所以 OR 上的验证者不需要在自己去保存记录 OR 上的交易。 Drawn by RJ 优缺点: +ve: 1)提供高吞吐量 2)和低交易成本 3)roll-up 交易数据存储在第 1 层链上,提高了透明度、安全性、抗审查性和去中心化性。在不牺牲安全性或不信任的情况下提供可扩展性的巨大改进。 4)optimistic rollup 的欺诈证明保证了去信任的最终性,状态的有效性,而且并允许诚实的少数人保护链(理论上哪怕只有一个诚实节点都可以保证整条链的安全性) 5)optimistic rollup 也通过将交易数据上主网保证了数据的可用性。 6)与 EVM 和 Solidity 的兼容性允许开发人员将以太坊原生智能合约移植到汇总或使用现有工具来创建新的 dapp。 -ve: 1) 提款慢,通常需要等 7 天,以允许提交质疑和欺诈证明 2)安全模型依赖于至少一个诚实节点执行汇总交易并提交欺诈证明来挑战无效状态转换。 3)Optimistic roll-up 必须在链上发布所有交易数据,也需一定的成本。 Optimistic Rollup 项目: b)另一类 Roll-up 解决方案是 Zero-Knowledge rollup (ZK rollup) 先来说说什么是零知识证明 ZKP? 零知识证明(ZKP)是现代密码学的一个重要组成部分,它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。 证明者向验证者证明并使其相 信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。通俗的来讲就是: 既证明了自己想证明的事情,同时透露给验证者的信息为「零」。eg 数独 完备性 可靠性 零知识性 与 Optimistic Rollup 不同,ZK Rollup 要求提交者在提交 batch(zk rollup 也是将交易捆绑成批次,链下执行,一同上链)时除了交易数据以及 post/previous state root 之外,还要携带一个「有效性证明」。有效性证明被提交到主网的 roll-up 合约后,任何人都可以使用它来验证 zk Rollup 层中特定 batch 的交易是否正确。证明可以在提交 batch 几分钟后完成,验证成功后主链 rollup 合约会将 State root 更新为提交的最新数据。这基本等同于省略了验证人的工作,在提交的同时完成验证。 这意味着:1. zk Rol-Up 省略掉了验证者保存数据,在挑战期提交欺诈证明的环节(如下图);2. 也不再需要在提交后再等待 7-14 天来做验证。所以交易速度也比其他 L2 方案快很多。 Drawn by RJ 目前市面上有两种零知识证明的解决方案: I. zk-SNARK(Succinct Non-Interactive Argument of Knowledge) 是简洁非交互式知识论证的缩写。该种方案的特性是简洁的,即验证过程不涉及大量数据传输以及验证算法简单,这就意味着验证时间不会随着运算吞吐量而成倍增长。 II. zk-STARK(Scalable Transparent Argument of Knowledge) 是可扩展的透明知识论证,是作为 SNARK 的替代版本而创建的。与 SNARK 的 Succinct 的「S」不同,STARK 的「S」代表的是 Scalable(可扩展性),主要表现在 STARK 生成证明(Proof)时间复杂度近似于计算的复杂度(呈拟线性关系),而验证证明(Verify Proof)的时间复杂度远小于计算的复杂度。也就是说随着 STARK 扩展性提高,STARK 的证明复杂度并没有相应增加。 但由于零知识证明这部分涉及到很复杂的底层技术和密码学概念,所以这个日后可以单拎出来再做个分享。今天这边就简单说一下,不进入具体细节。 总之,我们知道 ZK rollups 特有的几个重要压缩技巧是: 1. 生成的证明体积远远小于证明内容的体积(因此比 op 上传到主网的字节要小很多)。 2. 如果事务的一部分仅用于验证,并且与状态更新无关,那么该部分可以下链,从而减少字节。但这不能在 optimistic roll-up 中完成,因为该数据仍然需要包含在链上,以防以后需要在欺诈证明中进行检查(比较 zk 不需要挑战期和欺诈证明)。 但 zk 的挑战在于生成、以及验证一个 zk 证明本身需要非常非常大量且复杂的计算,这也是为什么目前 ZK-Rollup 研发进度和实际应用都非常慢的原因之一。而且正因为其技术上的复杂性,并不是随便一种语言,编译环境,虚拟机,指令集都能够无缝支持完成以上提到的过程,需要做额外的适配,这导致 zk 项目天生就很难兼容 evm(这一部分也、可以在日后专门聊 zk 的分享细说)。 这边是 @W3.Hitchhiker 团队做的一个不同方案的费用和 TPS 对比: https://w3hitchhiker.mirror.xyz/7dwD76ZZIlR7ep731K6y9vTTuXGHOojxWSnkXKzqPzI 优缺点: +ve: 1)有效性证明确保链下交易的正确性。 2)由于省略了验证者的工作和挑战期这个概念,一旦在 L1 上验证了有效性证明,就会批准状态更新,从而提供更快的交易最终确定性。(无须再等 7-14 天) 3)OR 的数据可用性来自于经济学。为了能够良好的运转,OR 必须设计合理的激励机制驱使一批主链上的验证人随时监测提交者,并准备提交欺诈证明,而 zk 的数据可用性依赖于密码学和代码。 4)安全性依赖于主网的安全性和共识。因为恢复链下状态所需的数据都存储在 L1 上,从而保证安全性、抗审查性和去中心化。 5)更好的数据压缩有助于降低 calldata 在以太坊上发布的成本,并最大限度地减少用户的汇总费用。属于目前压缩能力最强,效率最高的方案 6)所以用户交易费用也低。 -ve: 1)由于其有效证明所需计算量大,复杂度高,所以开发速度慢 2)因此应用不广泛。不像 op 有那么多的应该和迭代 3)目前很难支持以太坊虚拟机(EVM),使其难以运行智能合约、DeFi 协议等去中心化应用程序。 4)硬件方面的中心化风险。生成有效性证明需要专门的硬件,硬件垄断有可能会导致对链进行集中控制。 ZK Roll-Up 项目: data from https://l2beat.com/scaling/tvl/, 22/09/2022 Rollup 小总结: 现在就能明白为什么 Roll-Up 方案能够取代 Plasma 方案: 1)效率 - zk-rollup 会生成链下交易处理的有效性证明。直接省略了运营商打包数据、发布「状态承诺」和用户欺诈证明提交的环节,从而消除挑战期和退出机制的需要。这也意味着用户不必定期观察链来保护他们的资金。 2)支持智能合约 - Plasma 的另一个问题是无法支持以太坊智能合约的执行。Optimistic roll-up 与以太坊虚拟机兼容,甚至现在不少 zk 项目(zkSync,StarkWare 等)也在推进 zkEVM 的实现。使其成为更理想的、即安全又有用的去中心化扩容方案。 数据不可用 - 如前所述,Plasma 存在数据可用性问题。如果恶意运营商在 Plasma 链上提交了无效数据,用户将无法质疑并提交欺诈证明。Rollups 通过强制运营商在以太坊上发布交易数据来解决这个问题,允许任何人验证链的状态并在必要时创建欺诈证明。 3)大规模退出问题 - ZK-rollups 和 Optimistic Rollups 都以不同的方式解决了 Plasma 的大规模退出问题。例如,ZK-rollup 的加密机制确保运营商在任何情况下都无法窃取用户资金。 同样,optimistic rollup 对提款施加了延迟期,在此期间任何人都可以发起挑战并防止恶意提款请求。虽然这类似于 Plasma,但不同之处在于验证者可以访问创建欺诈证明所需的数据。因此,roll-up 方案不会涉及到有可能损害主网络的「大规模推出」。 V 神这几年也强调了未来以太坊的发展路线将是以 roll up 为中心,底层链为区块的数据可用性提供保证,而 Rollup 为区块的扩容和有效性提供保证。 然而… 随着向 layer2 大规模迁移的推进,即便是压缩能力强的 rollups,最终还是会回归到相同的扩容问题——因为 rollup 交易数据仍必须传播到所有完整节点,其扩容程度依旧受到以太坊的数据处理能力的限制。 与主网相比,Optimistic rollup 可以实现 25 倍的可扩展性升级,zk rollup 可以实现 100 倍,约 3000 TPS。 可以说 Rollup 方案们在扩容方面提供的是线性增长,而非指数级的。那有没有可能够既保证性能,又提供指数级的扩容增长? 于是 StarkWare 团队又首创了 Validium 方案,一个有可能达到 2-3 万 tps 的链下扩容方案… D. Validium 链 它的运行方式类似于 ZK rollup,也通过发布零知识证明来验证以太坊的链下交易,但是最主要的区别在于 Validiums 的数据可用性是链下的。因为这样吞吐量不受以太坊数据处理能力的限制,从而提高扩展性、交易速度、降低用户费用(发布成本 calldata 更低)等目的。 存款和取款: 存款和取款也和 rollup 类似,用户的存款和取款由以太坊上的智能合约控制。用户通过在以太坊主链合约中存入 ETH(或任何与 ERC 兼容的 Token),在 validium 链上铸造出与其存款相等金额的 Token。 取款的话,validium 用户将其提款交易提交给运营商。用户在 validium 链上的资产在退出系统前也会被销毁。一但批次的有效性证明得到验证,用户就可以通过提供 merkle 证明来调用主合约进行提款。所以和 zk-rollup 一样,Validiums 提供近乎即时的提款。 Batch 批次: 和 rollup 类似,用户向运营商提交交易,运营商将交易打包成批次然后提交上主链。批次中包括状态根 state root/merkle root 和有效性证明。要执行状态更新,运营商必须计算一个新的状态根(在执行交易之后)并将其提交给主链上的合约。如果有效性证明通过,将切换到新的状态根。 与 ZK-rollup 不同,validium 上的运营商不需要发布交易数据。这使得 validium 成为一个纯粹的链下扩展协议。 Drawn by RJ Validium 的链下数据存储主要好处是进一步提高可扩展性(吞吐量不受以太坊数据处理能力的限制)、提高交易速度、降低用户费用(发布成本 calldata 更低)、以及保护隐私,因为公众无法在链上访问交易数据。 数据可用性: 然而,链下数据的可用性带来了一个问题——如果运营商作恶向用户隐瞒链下状态数据,同时用户无法访问交易数据,那么用户就无法计算执行提款所需的 Merkle 证明,用户的资金就会被冻结。 如下图所示:如果运营者更改了 trasaction 6,则交易 transaction1 的所有者将无法证明其帐户所有权,因为丢失了证明过程中所需的节点 hash(5,6,7,8)的信息。 (听起来比 plasma 好一些,在 plasma 方案中,运营商作恶是可以盗取用户资金的,在 validium 中,因为不是使用欺诈证明,而是有效性证明,运营商作恶隐藏数据的最糟情况是冻结用户资金,使其无法提款…) Drawn by RJ 因此,Validium 有必要采用额外的链下数据管理机制,以便确保用户在需要时可以访问到链下交易数据。 Validiums 的链下数据可用性管理方法可以分为两大类:一些依赖受信任方来存储链下数据;而另一些则使用随机分配的验证者来完成任务。 第一类:数据可用性委员会 Data Availability Committee (DAC) 为了解决这个问题,StarkWare 提出了数据可用性委员会(DAC)的概念,以消除用户对运营商的信任依赖。 通过指定一组受信任的实体(统称为数据可用性委员会)来存储链下数据副本并在运营商不为用户的提款请求提供服务的紧急情况下将其(链下数据副本)变为公开可访问。由于成员较少,DAC 更容易实施并且需要较少的协调。但伴随的是集中化风险。 直接退出,无需通过运营商。 在紧急情况下,主网上应用程序智能合约(ASC)将不再接受新的状态更新,而是只允许能够为最新状态提供 merkle 证明的用户直接提取资金。也就是说这种情况下用户可以无需通过运营商,直接调用主合约的提款功能,将他们的资金提回。 由于其仍使用零知识证明,所以不存在广播不正确状态的危险。 但是,用户必须信任 DAC 以在需要时提供数据(例如,用于生成 Merkle 证明)。数据可用性委员会的成员有可能受到恶意行为者的损害,然后恶意行为者可以扣留链下数据。 第二类:绑定数据可用性 Bounded Data Availability 这种是通过经济激励机制和去中心化的形式来保证链下数据的可用性。此方案要求负责存储离线数据的参与者在担任其角色之前在智能合约中质押(即锁定)Token。这种 Token 作为一种「纽带」来保证数据可用性管理者之间的诚实行为并减少信任假设。如果这些参与者未能证明数据可用性,则保证金将被削减。 在绑定的数据可用性方案中,一旦质押所需的 Token,任何人都可以被分配存储链下数据。这扩大了符合条件的数据可用性管理人员的数量,减少了影响数据可用性委员会 (DAC) 的集中化风险。更重要的是,这种方法依赖于加密经济激励措施来防止恶意活动,比指定受信任方来保护离线数据更安全。 Validium 的优缺点: +ve: zk roll-up 的很多优势和劣势 validium 也有: 1) 有效性证明强制链下交易的完整性,并防止运营商用无效状态来更新 2) 交易速度快。将资金撤回以太坊时不会出现延迟(无需欺诈证明) 3)适用于特定用例,例如优先考虑隐私&可扩展性的交易或区块链游戏。(比如 DeversiFi 是一个使用第二层网络 (Validium) 实现隐私交易和可扩容的去中心化*交易平台*的 DEX V1.0 选择链下数据解决方案的主要原因之一,是因为他们的客户——专业交易者——不能将他们的交易历史记录在链上,因为这会将他们的策略暴露给竞争对手。 4)链下数据可用性提供更高水平的吞吐量。 5)通过不将交易数据发布到以太坊主网来降低用户的 gasfee 6)指数级的可扩展性增长将承载更高的流动性,这会是新兴 DEX 的一个重要属性 -ve: 1)由于其有效证明所需计算量大,复杂度高,所以开发速度慢。对于低吞吐量的应用程序不具有成本效益。 2)因此应用不广泛。不像 op 有那么多的应用和迭代 3)目前很难支持以太坊虚拟机(EVM),使其难以运行智能合约、DeFi 协议等去中心化应用程序。 4)硬件方面的中心化风险。生成有效性证明需要专门的硬件,硬件垄断有可能会导致对链进行集中控制。 5)模型依赖于信任假设和加密经济激励,不像 ZK-rollups 纯粹依赖加密 密码学安全机制。 6)链下数据的可用性的问题:创建或验证 Merkle 证明所需的数据可能不可用。这意味着如果运营商作恶,用户可能无法从链上合约中提取资金。即时有数据可用性委员会,依旧存在中心化的风险。 Validium 项目: from https://l2beat.com/scaling/tvl/, 22/09/2022 E. Volition 这边可以多提一个混合方案——StarkWare 创立的 volition 的概念:结合了 ZK-rollup 和 validium,并允许用户在两种扩展解决方案之间切换。通过 Volition,用户可以利用 validium 的链下数据可用性进行某些交易,同时保留在需要时切换到链上数据可用性解决方案(ZK-rollup)的自由。这实质上使用户可以根据他们的独特情况自由选择权衡取舍。 https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb 例子:在 zkSync2.0 中,就用到了 volition 的概念。他们 L2 状态分为 2 个方面:具有链上数据可用性的 zkRollup 和具有链下数据可用性的 zkPorter。这两部分将是可组合和可互操作的。 四、总结: 各类方案对比,rollup 有效地保证了状态有效性+数据可用性,保留了先前方案的优势,同时解决了他们的局限性。从而成为目前扩容领域的的龙头。 在 roll-up 方案中,短期来看,optimistic rollup 技术更加成熟、运用更广泛,op roll-up 可能会在通用 EVM 计算中胜出,而 ZK roll-up 可能会在简单的支付、交换和其他特定于应用程序的用例中胜出。 但从长远来看,而 ZK Rollup 的弱点基本都属于技术问题,随着大量优秀的开发人员投入到相关研究,ZK Rollup 在未来会是更优的扩容方案。ZK-Rollup 技术的基本原理将使其能够取代 Optimistic Rollups,有能力达到更快的速度、更高的安全性,更全的性能,从而带来更加广泛的采用。目前已经有不少像 Scroll、zkSync 和 Polygon 这样的 Layer 2 项目已经在尝试引入 zk-EVM 的计算环境,这将使 ZK-Rollups 能够独立运行所有类型的通用智能合约。 未来会有更多融合。从扩容方案发展过程来看,以太坊的扩容并不是某个单一方案能够一劳永逸的。很多解决方案提供商也都在多条路径上进行着探索和布局。个人相信这也势必会产生更多融合方案(eg. Optimism 的「Bedrock」;StarkEx 的 Volition;Polygon) 读完本文应该能很直观地感受到:扩容方案的发展迭代,往往是意识到一个解决方案存在的局限性后,用另一种更好的方案来尽可能地保留优点,解决缺点,突破局限。就像当初很长一段时间开发人员都认为 Plasma 就是「the right one」,直到意识到它的局限性无法被突破,从而探索出了 roll-up;目前 roll-up 看起来好像就是大家公认的答案了,但也许随着探索的深入,还会出现颠覆 roll-up 的更优的解决方案? 最后就是我整理完感觉这些扩容方案目前有无数种走向,对于我这种二级投资的个体户 感觉可以慢慢来,等项目跑出来做右侧交易,因为变化太快,可能好不容易搞明白了,他们发现走不通,改方向了(就像 plasma)。然后判断出一个大趋势广撒网,广押宝也许是笨但比较有效的办法哈哈。但这是二级思路不适用于一级,一级最后还是看团队、看项目背后的网络、资源。 来源:金色财经lg...