跨链交互在应用层的范式变迁
最初,所有 dApp 几乎都部署在以太坊上,因为没的选。但随着应用层生态的繁荣,以太坊不堪重负,这给了其他公链发展的机会,先后出现了各种 ETH Killer,以及侧链、 Layer2。
从 dApp 的角度看,以太坊就像上海这样的超大城市,人口众多但资源紧张、寸土寸金,如果我的业务场景对吞吐量要求较高,但对互操作性要求不高,那就可以部署在一条不太拥挤的侧链上。比如一家印刷厂或种植园就没必要开在上海,而可以在郊区选址。dYdX 出走以太坊的故事,想必大家都很熟悉了。
同时,一个 dApp 可以在多链上部署,搞「连锁经营」,服务不同链上的用户,扩大规模和收入。例如,首个吸血鬼攻击的成功案例—— Sushiswap 就丧心病狂的在 28 条链上做了部署,我们能想到名字的公链上,基本都有 Sushiswap。

但这种多链的应用生态给用户带来了很差的体验:为了与不同链上的应用交互,还要理解不同链的区别,在多个链上注册地址,在每条链上都充值 gas 费,最后再把资产在不同链转来转去——天呐,太累了!
更要命的是,很多 DeFi 协议都涉及到流动性的使用,你部署在多链上就得在多链上引导流动性,这会让流动性分散在不同链上,深度不共享,用户在交易时,会产生更大的 price impact。对此,有人对以太坊 L2 的发展表示担忧,认为 L2 可能会分解掉以太坊的流动性,使其丧失竞争优势。也有研究者提出了 SLAMM 这样的统一流动性解决方案,但这个方案制造的问题比解决的问题还多,十分蹩脚,这里就不展开叙述了,感兴趣的朋友可以去找相关资料看看。
真正核心的问题是:怎样才能把各个链上的资源和生态都聚合到一起,让用户不必感知「链」的存在?比如我有 1 个 ETH,能否想在哪用就哪用,把自动兑换并支付不同链的 Gas 这些环节隐藏掉?我想使用某个应用程序,能否在哪条链都可以用,而不用把资产跨过去?同时,项目方也不用再站队选链,不用在多链上重复部署,而可以部署在最适合的链上,然后不同链上的人都可以来用?

应用层需要一种新的范式,把「链」这一层隐藏掉。有人模仿「账户抽象」的概念,创造了一个新词汇叫「链抽象」,就是这个意思。我们来看一个 LSD 项目是怎么做的?
For example,Bifrost 自称是 全链 LSD 的开拓者,采用不同于其他 LSD 产品的架构设计。Bifrost 有一条自己的链 Bifrost Parachain,该链是 Polkadot 的平行链。Bifrost 的流动性质押模块仅部署在 Bifrost Parachain 上,其 LSD 资产—— vToken 的流动性也全在 Bifrost Parachain 上,但其他链可以通过远程调用的方式使用 Bifrost Parachain 上的流动性质押模块和流动性。如此一来:
- 用户可以在其他链铸造 vToken;
- 用户可以在其他链赎回 vToken;
- 用户可以在其他链兑换 vToken,但背后触及的是 Bifrost 链的流动性;
- 用户可以在其他链为 Bifrost Parachain 上的 vToken/Token 池子提供流动性,并获得 LP Token;
- 用户可以在其他链销毁 LP Token,以赎回流动性。
这些操作,用户完全感觉不到背后的跨链传递过程,一切就像在本地完成一样,大家可以通过 Omni LSD dApp 去体验一下。Omni LSD dApp 目前支持在 Ethereum、Moonbeam、Moonriver、Astar 上远程铸造 / 赎回 / 兑换 vToken。

如果没有上述功能,用户如果想在 Moonbeam 上铸造 vDOT,必须手动操作三步,很麻烦!
① 把 DOT 从 Moonbeam 跨链转入 Bifrost
② 在 Bifrost 链上质押 DOT 获得 vDOT
③ 将 vDOT 跨链转回 Moonbeam

而通过远程调用功能,用户的资产看似无需离开 Moonbeam 链,即可完成上述三个步骤, 直接在 Moonbeam 链上将 DOT 转换为 vDOT 。也就是说,整个过程,用户就像在使用 Moonbeam 本地应用一样体验 Bifrost 链上的服务。
听起来很酷吧!可这怎么实现呢?其实也不复杂,Bifrost 在其他链上部署了一个远程模块(remote modular),用于接收用户请求,并跨链传递给 Bifrost Parachain,流动性质押模块处理完成后,再将结果跨链返回远程模块。用户只需在远程链上发起请求,后续的过程,会由 Relayers 触发并完成。
Bifrost 将其架构称为「全链架构」,与其他 LSD 协议的多链部署策略的对比如下图:

之所以这么浓墨重彩的讲 Bifrost 的架构,是为了让大家彻底理解 Bifrost 所说的「全链架构」是怎么回事,Bifrost 的架构所代表的其实是一种全新的通用范式。
Chainlink 在其博客文章《跨链智能合约》一文中,曾将这种架构描述为「总店 + 分店」模型。应用程序的主要逻辑放在一条链上,就像一个「总店」,然后其他链上提供一个远程访问模块,以实现与终端用户之间的交互(获取用户输入,输出用户想要的结果),就像一个个「门店」。

门店获取用户的输入后,将该输入跨链传递到总店,总店进行处理后输入结果,再将该结果跨链传递到门店,向用户输出。某些情况下,总店的不同模块可能被拆分到不同链上,它们共同构成一个虚拟的总店。该架构下,程序的主要逻辑都在总店,应用程序拥有一个统一的状态记录,流动性割裂和用户体验割裂的问题都得以解决。此外,该架构的应用还具有更好的跨链可组合性,其他链上的应用程序也可以像其他链上的用户一样,远程访问总店的功能。
尽管 Bifrost 将该结构称为「全链架构」,作者个人并不是很喜欢「全链」,也就是 Omni-Chain 这个词,因为这是个含义不明的词汇,最初 LayerZero 发明这个词汇,用来彰显它那无可比拟的可扩展性,但 LayerZero 也未曾完全说明白究竟什么是「全链」。难道是「全部的链」?必然不是,没有什么应用跑在全部的链上。作者有个做游戏的项目方说自己做的是全链游戏,细问才知道,这个「全链」是指「代码全部都上链」,和一些 Web3 游戏仅把资产数据上链区别开,和 LayerZero 说的「全链」风马牛不相及。
我认为更合适的表述还是「链抽象」,Chain-Abstraction,或者 Chain-Agnostic(与链无关),二者都可以表达一种「用户无需关心链」的状态。
