planD

Posted on May 14, 2022Read on Mirror.xyz

打造一个跨链 AMM,我们做得到吗?

本文将对已有的跨链信息传递协议进行评估,然后围绕着跨链 AMM 这一核心,对未来的多公链并存状态进行一些畅想。我们相信,万物跨链的时代才刚刚开始,未来的各个公链一定会从「孤岛」进化为「城市」。

注:本文为 DeFieye X Celer 征文大赛提交作品。不包含任何投资建议。

在当今多公链百家争鸣的区块链世界中,笔者非常欣赏将公链比作城市的精彩观点——

  • Ethereum 是纽约,它价格昂贵、拥挤,但是只有富人能够负担得起;
  • Layer 2 网络是纽约的摩天大楼——它们为缓解以太坊的拥挤而生,纵向拓宽了纽约的城市容量;
  • Avalanche 是芝加哥,那里很冷,但是更新、更便宜、更激进,更适宜平民的居住;
  • Near 是旧金山,是一座为 web3.0 开发者们打造的理想主义城市,在这里到处是想要实现以太坊 3.0 梦想的人......

但这个比喻有一个很大的缺陷,那就是——在如今的区块链世界中,公链之间的相互沟通远没有城市之间的贸易往来要顺利。笔者更愿意将公链们比作海洋中的一个个孤岛,打通它们之间的唯一路径就是作为一艘艘小船的跨链桥

然而,纵使如今市场上跨链桥的数目不断增多、原理各异、锁仓量和交易量不断上涨,小船也终究只是能够承载货物和资产的小船——公链之间的信息传递道路并没有被打通,一个公链的生态繁荣和另一个公链完全无关,公链之间的资金流动性也没有办法合并。

那么,有没有一种方式可以让孤岛们真正连结起来,变为一座座城市,极大地提升交通和贸易的自由度呢?让我们从跨链信息传递协议说起。


跨链信息传递协议

要使得公链之间的道路被打通,跨链信息传递协议是最重要的底层协议。

对于资产转移,我们有哈希时间锁(Hash Time Lock Contract, HTLC)来保证资产转移的绝对安全性——简单来说就是,在智能合约的基础上,跨链交易的双方需要先锁定资产,如果都在有限的时间内输入正确哈希值的原值,才能够完成交易。关于哈希时间锁更详细的讲解可以参见 科普 | 跨链技术方案之哈希锁定 一文。

由于在这个过程中用户和流动性提供者 (Liquidity Provider, LP) 之间完全是「一手交钱,一手交货」的,所以没有第三方盗取资产的可能性。Celer 团队也认可 HTLC 的安全性,并将其作为跨链桥 cBridge 的底层原理;但另一方面,HTLC 并没有在公链间进行信息传递的能力——在现有的技术背景下,链间信息传递仍然一定需要第三方的帮助来进行

笔者调研了三个跨链信息传递协议:Celer 团队的 Celer IM (Inter-chain Message) 协议,Multichain 团队的 Anycall 协议,以及 LayerZero 团队的 LayerZero 协议,在此进行简单的分析和对比。

Celer IM

在 Celer IM 协议中,信息传递的第三方角色由 SGN 网络 (State Guardian Network) 来担任。SGN 网络是一个基于 Cosmos SDK 的 PoS 链,每个节点都需要质押 $CELR 代币才能加入这个 PoS 链作为共识流程的一部分。如下图是借助 Celer IM 进行一次信息传递的步骤:

Celer IM 跨链信息传递原理。图源: Celer IM 文档

  1. (图中第 1 步) 用户使用源链上 DApp 将相关信息传给源链上的 MessageBus (可以理解为信息的缓冲站台)。
  2. (图中第 2~3 步) SGN 中的各个节点都观察到 MessageBus 合约中需要传递的信息,于是各个节点对于该信息的存在性达成共识,进行多重签名 (Multi-Party Signature),并交给 Excutor
  3. (图中第 4~5 步) Excutor 将附带多重签名的信息交给目标链上的 MessageBus,然后目标链上的 MessageBus 将信息发送给目标链的 DApp,信息传递结束。

可以看到,Celer IM 协议的安全性主要依赖于 SGN——当 SGN 的多数节点保持诚实,并共同对真实的跨链信息给出多重签名时,安全性就能够得到保障。而 SGN 的机制是,作恶的节点将会被没收质押的大部分 $CELR 作为惩罚,这无疑为 SGN 的运行提供了良好保障。

Anycall

在 Anycall 中,信息传递的第三方角色由 SMPC(Secure Multi Party Computation) 网络担任。该网络目前一共约 32 个节点(数据来源: Multichain Dashboard),它们曾经仅负责对 Multichain 本身的跨链交易进行多重签名,现在也负责对 Anycall 信息进行多重签名。Anycall 的信息传递原理和 Celer IM 非常类似,如下:

DAPPS sender contract(Chain A) -> anyCall (Chain A) -> SMPC Network -> anyExec (Chain B) -> DAPP receiver contract(Chain B)

具体原理参见 anyCall 官方文档,在此不予赘述。

LayerZero

在 LayerZero 中,信息传递的第三方角色由中继者 Relayer 和预言机 Oracle 和来共同担任。LayerZero 协议与 Celer IM 和 Anycall 略有不同,使用它进行一次信息传递的步骤如下:

LayerZero 协议原理图。图源: LayerZero 白皮书

  1. (图中第 1~3 步) UA (User Application, 可以理解为某使用 LayerZero 协议的 DApp 的合约)在 A 链上将需要传递的信息以及目标链 id 等打包发送给 LayerZero 在 A 链上的终端。
  2. (图中第 4~5 步) A 链上的终端将信息发送给指定的中继者 Relayer,并将当前的区块 id 发送给预言机 Oracle。
  3. (图中第 6~7 步) 中继者接受来自 A 链上关于该交易的证明 (这里的交易指区块链中广义的 transaction),而预言机获取 A 链中该区块的区块头
  4. (图中第 8 步) 预言机在认定该区块经过了 A 链上的几次确认之后,将区块头发送给 B 链上的终端。
  5. (图中第 9~13 步) B 链上的终端用区块头向中继者询问,并得到 A 链上的 UA 发起的、并带有交易证明的信息。

在这个过程中,LayerZero 的预言机使用的是第三方服务 Chainlink,而中继者是可以由任何人运行的链下服务。可以看到,中继者是负责传递信息的「使者」,而预言机则是中继者传输消息的「监工」——只要保证这两个角色的独立性,LayerZero 的安全性便可以得到保证;而 LayerZero 选择使用的预言机服务 Chainlink 已经是市场中最成熟的预言机,与中继者勾结的概率较小。

熟悉了这三个跨链信息传递协议,我们便可以对其进行简单的对比:

跨链信息传递协议对比表格

可以看到,在没有类似 HTLC 技术的情况下,跨链信息传递的可靠性依赖于「第三方」的可靠性;而三个协议究竟哪一个的「第三方」靠谱,可能还有待时间的考量——毕竟 Celer IM 和 Anycall 都是 2022 年 4 月才出现的崭新协议。让我们拭目以待!


跨链 AMM

打好了跨链信息传递协议的基础,让我们来看看接下来的事情。

在 2021 年新入圈的用户,看到的区块链世界一定是百花齐放的——2021 是「多公链时代」的元年,各个崭新的公链生态都在争奇斗艳。但是这同时也诞生了许多问题。相信以下这些问题,一定不仅仅让笔者感到困惑:

  1. “我看好「多公链时代」,我也相信未来这些主流的公链们一定都能吸引到无数用户,但我实在没有精力去挨个探索所有公链的生态。就没有一种链上资产,可以代表「多公链」这个共同体吗?
  2. “我不想要 Wrapped Token。你说说,BNB Chain 上的 AVAX 有什么用?Fantom 上的 miMATIC 有什么用?它们虽然可以去挖矿,但是不能当 gas 使用,而且还多了一层非原生资产的风险。就没有一种方式,让我们一直手持着原生资产也能挖矿,而不是持有这些 Wrapped Token 吗?
  3. “每探索一个新的公链,我就需要先去中心化交易所购买该链的原生代币 (Native Token),然后再充值到这个公链上,才能当 gas 使用。为什么没有一种通用的、充当 gas 的货币啊?

这些问题的存在,其实都侧面印证了各个公链还处于孤岛状态这一事实。于是,笔者进行过这样一些设想:如果存在真正跨链的自动做市商 (Auto Market Maker, AMM),把各个链上的资金流动性都聚集起来,这样的联合公链生态会是怎样的呢?如果我们依靠跨链信息传递协议,打造一个跨链 AMM,那么——

  1. 我们首先可以组「跨链LP」(Liquidity Pool, 流动性池)。Fantom 链上的 $FTM 和 Polygon 链上的 $MATIC,两个原生代币可以通过 AMM 的原理(即著名的 x·y=k,即在不增加或减少流动性的时候,池中两者数量相乘为定值)组成跨链LP。用户通过这个池子可以直接将 Fantom 链上的 $FTM 换成 Polygon 链上的 $MATIC。
  2. 然后,在出现多个链上的多种资产组成的跨链 LP 后,用户可以直接选择为这样的 LP 提供流动性。用户可以直接提供 $BNB(on BNB Chain) + $FTM(on Fantom) + $MATIC(on Polygon) 的共同流动性以获取 LP Token,然后质押挖矿换取收益,或者当作某种抵押资产进行借贷。这个 LP Token 可以存在于任何链上。
  3. 然后,由于各个公链上原生代币之间极易兑换,也许会出现某种 Token,它被所有公链的矿工所认可,可以用该 Token 来支付这些公链上的 gas fee。这样,用户再也不需要把每个链上的原生代币全都购买一遍以作为 gas fee 之后,才能去探索这些公链的生态。

可以看到,如果这个跨链 AMM 真的存在,那它的确解决了本节开头时提出的三个问题:它允许用户质押多个公链的原生代币以获得挖矿收益;允许用户使用通用的 Token 当作 gas fee;允许用户并不持有任何的 Wrapped Token。

但是,这样的跨链AMM,凭现有的技术可以做出来吗?

Uniswap 作为 AMM 的鼻祖,其核心原理如下:如果一个用户想用 X’ 个 Token A 换 Y’ 个 Token B,而池中分别有 X 个 Token A 和 Y 个 Token B,那么用户的交易需要满足等式 X·Y=(X-X’)·(Y+Y’)=k,即恒定乘积公式。

Uniswap 提供流动性(左)和兑换 Token(右)的原理图

当我们在 Etherscan (Uniswap V2: Router 2) 上阅读 Uniswap 的兑换 Token 的代码时(见下图),我们很容易看出上述的 X’ 就是参数 amountIn;但是如果能根据 X’ 就计算出 Y’,那么为什么参数中还有一个 amountOutMin 呢?

function swapExactTokensForTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
)

这是因为,在秒级高吞吐量但情况下,一秒已经足够交易对的价格产生偏移,因此函数中用户除了需要给定 Token A 的数量 amountIn,还需要给定期望得到 Token B 的最少数量 amountOutMin。如果能交换到的 Token B 的实际数量小于这个最少数量,那么交易将会被拒绝。

在 Ethereum 链上,一次 Uniswap 的交易中,用户只需要等待某个矿工打包了它的请求,便可以完成这次交易。

而另一方面,在跨链 AMM 中,情况会变得非常复杂:

  • swapTokensForExactTokens 函数中,源链 (Source Chain) 的 DApp 将会先向目标链 (Destination Chain) 发起一笔 Swap 请求;目标链收到请求后,还会将目标链上的 Token 数量情况传递给源链,以计算得出换得的 Token 数量。
  • 假设源链上的一次区块确认时间为 BTS (Block Time on Source Chain),目标链上的一次区块确认时间为 BTD (Block Time on Destination Chain),那么源链到目标链上的一次跨链信息传递至少要经过 3·BTS 的时间,因为「第三方」为了保证信息的真实性,一定会至少等待源链 3 个区块确认过后,才敢将信息签名并发送给目标链(事实上为了更高的安全性,这个时间甚至应该更高,比如取 5·BTS)。
  • 同理,目标链到源链上的一次跨链信息传递至少要经过 3·BTD 的时间。
  • 因此,一次跨链 AMM 的 Swap 请求至少需要经过 3·BTS + 3·BTD 的时间;而在源链上做一次本地的 AMM Swap,如果 gas fee 足够,仅需要等待最快约 1·BTS 的时间,因为矿工监听到请求后可以立刻将交易打包。

由此可见,如果用现有的 AMM 模型,那么一次跨链 AMM 的交易需要 5~10 倍于普通 AMM 交易的时间;这个时间窗口下,交易对价格的变化也可能放大 5~10 倍,用户能做的只是将 amountOutMin 这一参数不断变小——但这是极为影响用户体验的。在极端行情下,这样的跨链 AMM 的每一笔交易可能都无法如用户所愿。

因此,在现有的 AMM 模型和跨链信息传递协议下,我们认为跨链 AMM 是无法实现的。但所幸,市场上出现了一些折衷的解决方案。让我们来一起看看它——基于 Celer IM 协议的 Chainhop。


Chainhop: 一个目前的解决方案

Chainhop 是一个基于 Celer IM 的跨链 DEX——它允许用户一键将源链上的 Token A 兑换为目标链上的 Token B。举个例子,当我想利用 Chainhop 将 Avalanche 链上的 $AVAX 兑换为 Polygon 链上的 $MATIC 时,它会在前端页面告诉我们找到的转换路径,如图:

Chainhop 交易界面

可以在 Best Route 中看到,转换的路径为:

$AVAX (on Avalanche) → $USDC (on Avalanche) → $USDC (on Polygon) → $MATIC (on Polygon)

其中第一笔交易是在 Trader Joe 上完成的,第二笔交易是在 cBridge 上完成的,第三笔交易是在 QuickSwap 上完成的。相关说明可以在 Chainhop 的流动性提供表 中找到。

用户仅仅需要点击一次 Swap,便可以完成这笔兑换。在这个层面上,Chainhop 的创新有两个不可否认的优点:

  1. Chainhop 让各链上资产的流通性增强了——在以往的跨链桥中,源链的 Token A 只能转换为目标链上的 Token A。
  2. 用户不再需要从中心化交易所购买各个公链的 Native Token(来充当各个公链的 gas fee),而是可以直接通过 Chainhop 来兑换。

但同时,与我们理想中的跨链 AMM相比,Chainhop 还存在着以下一些问题:

  1. 用户没有办法提供上述的跨链流动性,也无法组跨链 LP,因为 Chainhop 借助的流动性都是基于已有的 DEX 和跨链桥。
  2. 由于交易路径一般会经过 2~3 个 DApp(包括 DEX 和跨链桥),因此用户需要交 2~3 份的手续费。如果每一笔手续费按照 0.3% 计算,那总的手续费可能高达 1%。

因此,对于标题所述的问题,我们可以给出这样一个答案:

基于现有的跨链信息传递协议和 AMM 算法,我们还无法打造出理想的跨链AMM。但是,我们已经有了一些积极的尝试——诸如 Chainhop 等 DApp 的出现,是打造「万物跨链」理想国的必经之路。它们试图降低用户的操作复杂度,试图将各个链上的资金流动性打通,试图给孤岛之间建立更强的连结。

不仅仅是 Chainhop 这类跨链 DEX,我们将会看到更多的产品在这一方面做出努力。在随后的几年里,让我们一起见证万物跨链的未来吧!