4 月 23 日,imToken 联合 togETHer 在杭州共同策划了一场以太坊 L2 扩容主题的线下 Meetup。Looping 的 CTO Steve Guo 分享了 Looping 新推出的 ZK Rollup 桥接方案 - Ethport。
Loopring 分享现场视频
以下内容来源于 Loopring 官方博客对 Ethport 方案的介绍,由 Ethfans 社区翻译和整理。
概述
- Loopring ZK Rollup 用户可以利用批处理交易和零知识证明,在 L2 直接与 L1 DApp 交互,便宜快捷
- Loopring 现已支持便宜且资本高效的 L2-L2 双向转账
- 中心化交易所可以使用标准的 L1 功能来将款项直接取出到 Loopring 的 ZK Rollup 上,而且代价也能保持 L2 交易的低水平。用户从 Loopring 把资金直接存入中心化交易所也会变得更简单、更便宜
- Ethport 将作为 Loopring 3.7 版本的一部分,在 2021 年 5 月推出
问题描述
我们当前的 ZK Rollup 在降低转账和订单簿 / AMM 交易的交易代价上已经做得很好了。但是,虽然转账和操作是用户经常做的事,但有时候,他们也想做一些更复杂的事,需要与 L1 交互的事。而在以太坊上发交易的 Gas 费又是很贵的。
从中心化交易所中取款也一样,再加上,每种 L2 都有自己的特点,所以 CEX 并不那么容易支持直接取款到 L2 上。如果有一个标准化的 L1 接口,可以隐藏起所有的实现细节,同时还能保持像 L2 交易那样的低成本,想必是皆大欢喜。
如今,每天都有许多 L2 推出,用户也希望不需要经过 L1 就能在 L2 之间转账,否则极为繁琐(要从某个 L2 中取钱到 L1 上再存入另一个 L2)。
即使未来会有更多功能直接做在 L2 上,要是这些问题没有解决,那也够呛。一部分(甚至是绝大部分)流动性仍会留在 L1 上,直到更通用的 L2 变得更成熟。我们需要某些东西来开路架 “桥”(一语双关哦),跨过这个转型期。
解决方案
尽可能把工作都交给 L2 来完成,是降低用户成本的关键。通常来说我们可以(在 L2 上)把许多交易捆绑在一起然后上链,这样 L1 的 Gas 成本就能在这许多笔交易之间分摊。L2 的交易用来执行实际功能,而且这样只需一笔 L1 交易就能满足所有用户的需要,这就大幅降低了 Gas 开销。
ZK Rollup 非常非常适合用来解决这个问题,因为 L2 的状态是随着相关的计算有效性证明提交到 L1 而立即获得终局性的。这不仅意味着像取款这样的操作可以一触即达,而且 L1 的交易可以立即使用 L2 上的数据,而无需担心无效的状态转换掺杂其中、需要回滚 L2 状态。
通常情况下,理想的解决方案都基于具体的问题以及我们想要的用户体验。我们先来仔细看看 Loopring 的工具箱里都有些什么家伙,各自都能解决什么问题,然后再来解释如何把它们呈给用户。
流动性提供者
这也是 Loopring 当前实现的阶段。我们依赖于专门的流动性提供者为 L2 提供流动性。当然,有时候这些流动性会用来在用户内部完成撮合。比如,某个人想把钱存入某个金库合约,而另一个人希望把钱从该合约中取出,那就直接让他们成为交易对手,这样至少有一个用户能实现自己的目标。最理想的情形是用户都能在彼此之间撮合交易,但用户的需求是无法预测的,并不总是能在够短的等待时间内完成。
这种办法的缺点在于,流动性提供者仅能利用自己手中的很少一部分资金。而且也需要全时段保证资金可用。ZK Rollup 已经非常适合这类流动性提供者了,因为资本不需要锁定很长时间(无论是存款还是取款都很快),即使是小额的资金也能很快回收重用。但是,这还不是资金效率最优的形式,我们还可以做得更好。
单相变电站
要解决资本效率的问题,我们可以利用 L2 上的闪电铸币(我们已经构思了快一年了)。如果在 L2 上每种 token 都能闪电铸币,我们就能获得任意所需数量:
- 闪电铸造出所有用户撮合之后所需的 token 数量,因此所有币币交易都能在 L2 上完成(可以撮合几千笔交易)
- 以可预测的汇率完成 L2 上的所有交易
- 一次性取出所有用户集体卖出的 token
- 使用这些 token 来做 L1 交易,获得 L2 用户想要买入的真实 token
- 用这些 token 来偿还闪电贷
如果在 L2 上的币币交易的汇率是完全确定的、而且 L1 交易绝对不会失败(例如 ETH/WETH、或者只有该 L2 自己能交互的任意什么合约),那这种方法是完美的。但如果:
- 汇率大幅波动,无法预测(很常见的情形)
- 需要执行的 L1 交易可能会失败(不论什么原因)
这都是使闪电铸币无法偿还的风险。如果闪电铸币无法偿还,那就没法把这个块发到主链上因为它是无效的。这就意味着我们必须回滚 L2 上的所有交易、用新的交易创建一个新的区块、生成新的零知识证明 …… 虽然在理论上可以接受,但实践中我们肯定希望避免这种情形。
双相变电站
要解决预测问题,我们可以分两个步骤来完成交易。在第一个阶段,我们先把所有用户的资金都收集起来,安排到一个币币互换专用的金库合约里。我们不是直接交付用户希望买入的 token,而是给用户一种代表他在金库中的份额的 token(按固定的 1:1 比例)。然后就可以等待 L1 交易完成了,实际的汇率也能观察到。在第二个阶段,变电站收到的 token 可以在下一个区块中按比例分发给所有用户。
桥接器
桥接器是一个比变电站更强大的设计,但用户的单笔交易成本也会更高,因为有额外的 L1 费用。桥接器不仅能像变电站那样支持批量的币币互换(而且方式更灵活),它还支持那些没有办法被抽象成一笔币币互换交易的 L1 操作。
桥接器也使高效的 Loopring 用户引导操作成为可能,办法就是批量存入。用户不必单个单个地把钱存到 ZK Rollup 里面,批量存入功能可以直接在 L1 上使用一个标准的智能合约来实现,用户可以成批地进入 L2 的世界。如此一来,昂贵的 L1 代币转账可以简化为每种代币一笔转账交易,然后用便宜得多的 L2 转账在 L2 上完成分发。这也使得中心化交易所更容易使用标准的 L1 基础设施来支持 Loopring。
桥接器也使得用户可以在 L2 上发起 L1 交易。首先,把所有这些交易的资金都收集到一个 L2 上的桥接器账户中(以此最小化 L1 代币转账数量);然后,在 L1 的桥接器合约(也是 L2 桥接器账户的 owner)我们运行所有发送给桥接器的转账(方法是使用 “有条件转账”,条件就是转账已由桥接器合约处理)。让用户在签名转账时添加额外的数据,桥接器就知道用户想用提供的资金做哪些 L1 操作。桥接器把用户的交易按照 L1 交易的类型分类成批,然后把成批的交易发送给对应类型的连接器(connector)。这些链接器都是简单的合约,在所有用户的交易和批交易做转换。桥接器提供了一个通用的接口,可以让用户连接到任意连接器合约,即使你并不知道连接器到底是干什么的,也无所谓!
每个用户都可以为连接器提供定制化的数据(至于能接受什么样的数据也取决于连接器本身),也就是虽然用户的交易是以批次为单位处理的,但操作都是可以定制的。举个例子,如果一批用户想在 Uniswap 上做币币交换,每个用户都可以设置自己愿意接受的滑点。连接器可以只为那些滑点要求得到了满足的用户执行操作,但其他用户则只返回,不做操作。另一个例子是跨 L2 转账:用户可以设定 TA 的资金想要去往的另一个 L2 上的地址。
有些交易会需要给 L2 上的用户返回资金,另一些交易(比如仅仅是把资金转入另一个 Rollup)则不需要。连接器会使用同样的批存入功能来实现这一切,只要有需要。
✈ Ethport
Ethport 是一个建立在上述设计上的、对用户友好的产品。
- 尽可能使用 L2 上可用的流动性
- 如果存在最优化的变电站并且可用,那它就会走变电站,批量处理所有相似的 L1 以尽可能降低费用
- 如都不可用,就使用通用的桥接器
通常来说,用户会需要等待一段时间,直至有足够多的用户想做类似的操作,或者另一个用户 / 流动性提供者表示他们可以帮助这笔交易更快完成。我们把通用的 DApp 集成模块叫做 “终端(terminal)”,一个终端内每个单独的、可批处理的操作叫做 “门(gate)”。
举个例子,如果用户想把 ETH 存入 Yearn ETH 金库,TA 需要跑到 Yearn 终端,等待 TA 的交易在 ETH 门启动。
我们会根据用户的需要逐渐地添加终端和门。
---
其他几场分享的文字版也已整理完毕,会在后续分享给大家,敬请期待。
风险提示:本文内容均不构成任何形式的投资意见或建议。imToken 对本文所提及的第三方服务和产品不做任何保证和承诺,亦不承担任何责任。数字资产投资有风险,请谨慎评估该等投资风险,咨询相关专业人士后自行作出决定。