当 DeFi 遇上 Rollup,将擦出怎样的火花?
撰文:Daniel Goldman[1], Offchain Labs[2] 工程师、研究员&作家
编译:Unitimes_Jhonny
来源:Unitimes
去年出现了两个新的以太坊流行语。在应用层面,我们获得了“ DeFi ”项目,DeFi 利用智能合约,以无需信任 (或至少信任最小化,或至少希望有一天实现信任最小化) 的特性来提供传统金融服务的化身。而在可扩展性协议的设计方面,研究者们开始吵嚷着一种称为 Optimistic Rollu p 的 Layer2 结构,这些 Layer2 爱好者认为,Optimistic Rollup 带来的承诺绝非昙花一现的流行语。
今年,随着一个活跃的 DeFi 生态系统的形成,rollups 也在通向主网的路上,一个问题自然地出现了: 这两者将如何相遇?
我们可以使用 rollups 来扩展 DeFi 生态系统吗?
简言之, 可以 !
尽管如人们所料,其中会出现一些新的挑战。
概述
Optimistic Rollups[3]是一种 Layer2 侧链结构,寻求减轻以太坊主链的负担。其基本的理念就是, 以太坊主链将不需要验证 rollup 侧链上的所有交易,而仅仅只需发布这些交易即可,并“乐观地”认为这些交易是有效的,除非交易明确地被挑战 。
使用 rollups 的核心好处是降低了用户的 Gas 成本,这意味着整个网络每秒处理的交易量将会增加 (至少达到数百 TPS)。
更便宜的交易成本还意味着, 某些应用 (如采用复杂密码技术的隐私解决方案) 将变得可行 ,因为这些应用在其他情况下消耗 Gas 太多,甚至是不可能实现的。因此, 虽然 rollup 本身并没有提供隐私保护的好处,但它为构建隐私保护技术提供了合适的基础 。
同样,rollup 也不会增加交易延迟 (速度),但 能够提供一个构建通道 (channels) 的良好的环境,从而实现几乎即时的交易 。
Optimistic Rollups 处理数据的方式为这种结构提供了一些很好的简单性,特别是相对于其他 Layer2 协议[4]而言。最重要的是, 这种简单性将传递给终端用户的体验,用户可以 (而且应该) 几乎像使用 Layer1 一样使用 Optimistic Rollups 。同样,对于开发人员和协议设计人员来说,他们所熟悉的许多工具和想法模型仍然是可用的,虽然我们将看到处理一些关于 可组合性的挑战 可能需要一些额外的工作。
从用户的角度来看
从用户的角度来说,用户在 rollup 上与 dApp (包括 DeFi 等应用) 进行交互将与在 Layer1 上使用这些应用的体验几乎是一样的 。诸如 Metamask[5]和 Burner wallet[6]等受欢迎的钱包应用可以在 rolup 上支持,区块浏览器也可以检测 rollup 链的活动。
用户使用基于 rollup 链的 dapp (去中心化应用) 的基本流程如下图所示:
首先,用户在某条 rollup 链上存储一些资金 (可以是 ETH、ERC20代币或者 ERC721 代币等等) ;此第一步仿照了许多 Layer1 dApp 的用户体验,即用户首先必须将资金转移至某个合约中才能使用该 dapp。 此时,用户可以像往常一样在这个基于 rollup 链的 dApp 上发起交易 ;如果该 rollup 链的设计是优先考虑抗审查性 (censorship resistance)[7],那么用户的交易被打包并不会比在 Layer1 上发布交易更依赖于信任、声誉或者善意,也不会招致更多潜在的审查或抢先交易。
当用户想要将自己的资产转回至 Layer1 上时,可以发起一笔特殊的 取款交易 (withdrawl transaction) 。在这方面,我们将会看到一个潜在的差异:Optimistic Rollup 的安全模型取决于各方发起挑战的能力,因此我们需要给予各方监测这类活动一定的 宽限期 ,从而证明该用户的取款是否存在欺诈行为。
这意味着, 如果用户发起了取款请求,那用户必须等待一定时间,之后资金才会再次在 Layer1 上可用 。这种机制提供的经济安全性来源于 生产 rollup 区块的运营者的资产抵押需求和用户的这个取款等待时长 (Ed Felten 认为3个小时足够了[8])。
话虽如此,预计/希望的情况是,用户将很少 (如果需要的话) 真的需要等待这个宽限期 。第三方 (即除用户和 rollup 链运营者之外的流动性提供者) 可以通过在 Layer1 上给用户发送等额的价值来购买用户在 rollup 链上等待取款的资金的所有权,并减去一些手续费, 这样用户就可以在无需等待的情况下获取资金了 。
因此, 只要这些流动性提供者确实存在,并且有着一个将其中的复杂性抽离的用户界面,那么 rollup 链上的取款体验也将与 Layer1 上的别无二致 。
无需信任的 Optimistic Rollup
嗯,但 Optimistic Rollup 真的是无需信任的吗?简言之, 是的 !
任何用户都可以一种无需信任的方式来使用 rollup (如果用户想要的话);即便用户不想要,他们的安全性保障依旧是很强大的。
为了消除任何信任需求,任何人 (用户或者其他人) 都可以成为 rollup 验证者 ,让他们自己验证是否有人在试图欺骗,并且在有人试图欺骗时加以阻止。这就相当于运行某个额外的软件 (即验证者软件) ,该软件必须在每次发生争议期间至少对争议“查看”1次。
对于不运行验证者软件的用户来说,只有当 100% 的验证者都参与了犯罪并相互勾结的情况下,欺诈性的交易 (比如盗窃资金) 才有可能发生 。换句话说,只要有一个诚实的验证者存在 (不管是另一个用户,某个交易所,某个应用开发者,某个区块浏览器,某个钱包提供商,或者某个地下室的匿名少年) ,或者即便所有的参与方都怀有恶意,但只要他们不会都相互勾结并集体一致撒谎,那么整条 rollup 链就能免于恶意行为的影响。
一旦欺诈的行为被证明,恶意者的存款将被罚没 (get slashed) ,其中一些会给与欺诈的证明者,这有助于激励验证者诚实地进行验证,使蓄意进行不诚实的行为并给其他验证者带来不便的验证者付出代价。
从开发者的角度来看
现在让我们转向应用开发者的角度来。我们很高兴地发现, 在 rollup 上搭建和部署 dApp 的开发者体验在很大程度上也将与 Layer1 有着相当类似的体验 。诸如 truffle、web3 和 ethers.js 等开发者工具和库也可以在 rollup 环境中重新用于开发。此外,在 rollup 链上部署的合约依旧可以使用 Solidity 编写,仅有一些限制[9]。
因此, 在 rollup 应用的设计和论证方面,最大的区别在于可组合性问题 (composability) ,可组合性与 DeFi 应用尤为相关。
可组合性挑战
DeFi 应用的一个更为知名 (有时也是令人担忧) 的特征就是它们之间的可组合性 ,即 DeFi 应用可以直接无需许可地集成其他金融服务。对于 Layer1 上的以太坊合约来说,这种机制的互联性实际上是“免费的”。当我们将活动划分到单独的 Layer2 环境中时, 不同的 Layer2 链之间的互操作性虽然依旧存在,但互操作性却成为了一个更大的挑战 。
上图:Rollup1 链与 Rollup2 链之间无法轻易地组合交易。
借用一个类比[10]:如果 Layer1 上的诸多 dApp 应用是舍友关系,那么在不同的 rollup 链上的应用就像是同一个社区中住在不同房子里的朋友关系。也就是说, 虽然住所不那么拥挤了,但是交流和制定计划就不再像在公共空间里那样那么简单 。
我们不妨以无损彩票 DeFi 应用 PoolTogether[11]为例。 PoolTogether 的合约 管理着随机选中彩票的获奖者并分配资金;这些资金由一个单独的 借贷协议 Compound 产生的利息组成,且资产本身是由另一个单独的合约发行的 DAI 。这种互联性是无缝的, 所有这三个应用都存在于以太坊 Layer1 上 。
那么如果所有这三个合约都在不同的 rollup 链上呢?
将像 DAI 这样的资产从一条 rollup 链转移至另一条 rollup 链是没有障碍的 ,并且看起来非常类似于在通常的 Layer1 合约之间进行转移。 然而 ,购买一张 PoolTogether 彩票需要使用 PoolTogether 将资产存储在 Compound 平台上, 如果 PoolTogether 和 Compound 在两条不同的 rollup 链上,那么购买一张彩票将 不可能 仅通过一笔简单的交易完成 。
这是因为, PoolTogether 所在的 rollup 链将需要一种新的策略来获取和“监听” Compound 所在的 rollup 链上的更新信息 。在其他一些情况下,我们可以想象这两个合约都想要双向进行对话的权力;或者在某些情况下,我们可能只需要其中一方从另一方获得偶尔的、周期性的“更新信息”。
其中涉及的 rollup 链之间的通信工具集 类似于不同的 Layer1 区块链之间的通信方式 , 或者类似于 Eth2.0 中不同的分片链之间的通信方式 。
简言之, 针对不同的用例 有许多不同的方式[12] ,每种方式都有其自身的技术复杂性程度和/或用户体验方面的权衡,这取决于特定的需求 。技术细节不在本文讨论范围之内,但是用户体验的权衡往往包括要求用户等待更长的时间来确认他们的交易,或者发布多个交易来完成他们想要的操作。
如果再对这个类比进行延申一下:为了交流和制定计划,朋友们应该从一个家迁移至另一个家吗?或者他们隔着窗户相互嚷嚷?或者通过某个中间的共同房子传递信息?亦或者通过数字的方式聊天 (这种方式很迅速,但需要更先进的通信技术)?
有很多可能性,但我只想说, 在不同的 rollup 链上沟通永远不会像面对面聊天那么简单 。
但值得注意的是,跨 rollup 通信仍然比较容易...
跨分片通信和跨 rollup 通信都要比跨任意两条区块链的通信更加容易,至少在一个方面是这样的: 它们有着一个共同的参考框架 - :跨分片通信中的就是 Eth2.0 信标链 ,跨 rollup 通信中的就是 底层的 Layer1 链 。
而在另一种极端情况下, 我们可以想象这样一种情况:我们将一大堆的应用 (比如 DeFi 应用) 都放在同一条大型的 rollup 链上。 在这种情况下,跨 rollup 通信的复杂性就不存在了 ,Compound 和 PoolTogether 就能像在 Layer1 上一样在 Layer2 上自由地相互通信了。
但这一愿景的唯一问题在于,这将削弱我们一开始所追求的可扩展性好处 。Layer2 的可扩展性在很大程度上来自于对工作进行分区和本地化,而不是将这些工作都统一在 Layer1 上执行。 一条繁忙的 rollup 链将难以进行验证 ,使我们面临本来想要避免的问题。换句话说,我们不想要从一个过度拥挤的房子搬进另一个过度拥挤的新房子。
因此, 理想的场景可能是介于两者之间 : 那些受益于 (或者需要) 可组合性的 DeFi 应用可以选择迁移至同一条 rollup 链上,同时根据需要通过适当的方式来实现与其他 rollup 链的通信 。
上图:dApp 应用可以根据需要聚集在相同的 rollup 链上,以保持紧密的通信,就像人们聚集在地区和城市的方式一样。
Layer2 的一个关键价值主张就是可以进行无需许可的试验: dApp 和用户可以根据预期需要的服务和交互来选择本地环境 , 从而使自己能够获取新的功能并降低费用,同时缓解更大范围的 Layer1 网络拥堵 。
就 Layer2 的构建而言, Optimistic Rollups 在提供这些好处的同时保留了用户期望的大多数关键 UX (用户体验) 。当前,随着可扩展性解决方案变得可用,以及我们朝着 DeFi 演化的下一阶段迈进,围绕促进 rollup 链之间的互操作性问题将是重要的考虑因素。
参考链接:
[1]https://twitter.com/DZack23
[2]https://offchainlabs.com/
[3]https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/optimistic_rollups/
[4]https://www.theblockcrypto.com/post/16705/understanding-plasma-part-2-make-plasma-fungible-again
[5]https://metamask.io/
[6]https://xdai.io/
[7]https://medium.com/offchainlabs/eleven-questions-to-ask-your-rollup-provider-b0831ee6b864
[8]https://medium.com/offchainlabs/fighting-censorship-attacks-on-smart-contracts-c026a7c0ff02
[9]https://github.com/OffchainLabs/arbitrum/blob/master/docs/Solidity_Support.md#user-content-restrictions
[10]https://twitter.com/licuende/status/1247950214327042048?s=20
[11]https://www.pooltogether.com/
[12]https://eprint.iacr.org/2019/1128.pdf