注:原文作者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,就是建立在以上这些设计的一个产品。