注:原文作者 Brecht Devos 是 Loopring 首席架构师,在这篇文章中,他阐述了能让用户在 Layer 2 网络直接与 Layer 1 应用进行交互的 Ethport 设计。
概述:
Loopring-zkRollup 用户可利用批处理和零知识证明的能力,以低手续费直接在 L2 与 L1 DeFi 应用进行交互;
Loopring 支持了便宜且高资本效率的跨 L2 转账;
中心化交易所(CEX)可使用标准的 L1 功能,轻松地将用户资金提到 Loopring 的 zkRollup 二层网络,同时可节省成本;
Ethport 将在 2021 年 5 月作为 Loopring 3.7 版本的一部分上线以太坊主网。
1
当前 zkRollup 的问题
目前, Loopring 的 zkRollup 二层网络非常适合转账以及订单薄 /AMM 交易,然而它并不支持通用智能合约,如果用户想要做更复杂的事情,那只能与以太坊 L1 主网进行交互,但以当前网络的 gas 费计算,这种操作是非常昂贵的。
对于中心化交易所而言,提币的成本也是很高的,并且每一个 L2 网络都有自己的特殊性,因此中心化交易所要整合这些方案并不容易,而如果有一个标准的 L1 接口,其隐藏了所有的实现细节,同时仍能提供节省费用的好处,那它将是非常有吸引力的。
现在,越来越多的 L2 网络在以太坊主网上线,而用户希望在这些 L2 之间移动,而不必通过 L1 的交互。
即使将来会有更多的功能直接迁移到 L2,这也需要一段时间才能完全实现。部分(甚至大部分)流动性可能暂时仍停留在 L1 上,直到更通用的 L2 变得成熟。我们需要一些有助于过渡期的东西。
2
解决方案
尽可能让任务发生在 Layer 2 网络,是使得交易变得足够便宜的关键,这样用户就无需担心手续费太高的问题。通常,我们可以将多笔交易批处理在一起,这样就可以分摊 L1 网络的 gas 成本。L2 交易用于完成大部分工作,而所有用户只需一笔 L1 交易,那么理论上就可以显著降低 Gas 成本。
zkRollup 技术特别适合解决这一问题,因为只要立即提供有效性证明,L1 网络上的 L2 状态就会立即完成。这不仅意味着提款(withdrawal)这样的操作很快就可以完成,我们还可以立即使用 L2 数据进行 L1 交易,而不必担心无效的 L2 状态转换。
通常情况下,最佳解决方案取决于具体问题以及所需的用户体验。首先,让我们先详细介绍一下 Loopring 工具包中有哪些工具,以及它们各自解决了哪些问题。
流动性提供者(LP)
这就是当前 Loopring 的现状,其依靠专门的流动性提供者在 L2 上提供流动性,当然,有时用户之间也会提供流动性。例如,如果有人想要进入一个金库,而另一个用户想要退出该金库,只要允许这些用户相互交易,则至少有一个用户已实现了他的目标。最好的情况是,用户之间总是可以进行交易,但这是不可预测的,而且在合理的时间内并不总是可能的。
这种方法的缺点是,流动性提供者(LP)只能利用有限的资金,他们还需要让这些资金随时可用。zkRollups 实际上非常擅长这一点,因为资金从来不会被长期锁定(zkRollups 中的存款和取款都很快),所以即使是有限的资金也可以很快地被重新使用。不过,这种方法的资本效率是不高的,实际上我们可以做的更好。
单相转换器(Single Phase Converter)
为了解决资本效率问题,我们可以利用 L2 上的闪电铸造(flash minting)功能,因为在 L2 上,每个代币都内置了闪电铸造(flash minting),我们可以根据需要创建任意多的代币。所以,我们可以:
Flash mint 所有用户想要购买的代币数量,因此所有交易都可以在 L2 上完成(可以是数千次交易);
按预期汇率填充 L2 上的所有交易;
Withdraw 用户出售的所有代币;
使用这些代币执行 L1 交易,以获得用户购买的真实代币(并且已经在 L2 网络上分发);
用这些代币偿还闪电贷;
当在 L2 上进行交易时,汇率是完全确定的,并且 L1 交易永远不会失败时(例如,ETH/WETH,或者只有 L2 本身可以与之交互的任意逻辑智能合约),这会是一个完美的解决方案,但如果:
汇率可能会发生不可预测的变化(通常是在任何用户都可在 L1 上与智能合约进行交互时);
不管出于什么原因,需要完成的 L1 交易失败了;
那么这个时候,就会有 flash mint 无法偿还的风险。如果 flash mint 无法偿还,就无法在链上提交区块,因为这会是无效的。这意味着必须恢复 L2 上的所有交易,用新的交易创建一个新的区块,重新创建零知识证明……理论上这是可能的,但实际这是我们需要去避免的一种情况。
二相转换器(Double Phase Converter)
为了解决可预测性问题,我们可以分为两个阶段进行交易。
在第一阶段,我们首先在专用金库(仅用于特定的代币 swap)中收集所有用户的资金。我们首先给用户一个表示他在金库中所占份额的 token (按固定的 1:1 比率),而不是直接交换成用户想要购买的代币。然后进行 L1 交易,观察实际汇率。在第二阶段,在转换过程中接收到的代币数量,可以在接下来的区块中按比例分配给所有用户。
Bridge (桥)
桥(Bridge)是一种比转换器(Converter)更为强大的设计,但是由于一些额外的 L1 开销,每笔用户交易的成本也要贵一些。这种桥设计不仅可以更灵活的方式执行类似转换器的批处理代币交换,还支持不能简化为简单代币交换的 L1 交易。
这个桥允许用户使用批存款将资金有效地存入 Loopring,相比每个用户单独加入 zkRollup 网络,通过标准的 L1 智能合约直接在 L1 上提供批存款功能,以允许用户一起加入 L2 网络,通过这种设计,就可以将多笔交易聚集成一笔 L1 交易,从而有效降低手续费。这使得中心化交易所也可以使用标准的 L1 基础设施轻松地支持 Loopring 的 L2 网络。
这个资产桥还允许用户直接在 L2 网络进行高效的 L1 交易,这首先在 L2 上的资产桥账户中收集这些交易的所有资金,这样就可以最小化 L1 代币转账的数量。然后在 L1 资产桥合约(L2 资产桥账户的所有者)中,我们检查所有到资产桥的转账(这是使用有条件转账完成的,条件是转账由资产桥合约处理)。通过让用户在转账后签署一些额外的数据,资产桥可得知用户希望使用提供的资金进行哪一次 L1 交易。这个资产桥将所有这些交易一起批处理,将它们按 L1 交易的类型进行分组,然后将它们发送到与该类型交易相关联的连接器(Connector)。这些连接器是在所有用户交易和批处理交易之间进行转换的简单合约。资产桥提供了一个通用接口,允许用户连接到任何连接器合约,即使我们不知道这个连接器是做什么的。
每个用户都可以向连接器提供自定义数据(接受的数据取决于连接器),这允许批处理,但每个用户都有可自定义的行为。例如,如果一组用户想要在 Uniswap 上交换代币,那么每个用户都可以设置其所需的滑点。连接器只能对满足滑点要求的用户进行一次批量交换,而对于所有其他用户来说,只需返回他们的资金。跨 L2 转账的另一个例子是,用户可以在另一个 L2 网络上设置其目的地地址。
而 Ethport,就是建立在以上这些设计的一个产品。
声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。
简介:专业性+洞察力的中文区块链媒体,致力于探索Web 3.0前瞻内容和深度解读。
评论0条