# 打造一个跨链 AMM，我们做得到吗？

By [planD](https://paragraph.com/@bendanwang) · 2022-05-14

---

> **本文将对已有的跨链信息传递协议进行评估，然后围绕着跨链 AMM 这一核心，对未来的多公链并存状态进行一些畅想。我们相信，万物跨链的时代才刚刚开始，未来的各个公链一定会从「孤岛」进化为「城市」。**
> 
> _注：本文为 DeFieye X Celer 征文大赛提交作品。不包含任何投资建议。_

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

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

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

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

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

* * *

跨链信息传递协议
--------

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

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

由于在这个过程中用户和流动性提供者 (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 链作为共识流程的一部分。如[下图](https://im-docs.celer.network/developer/end-to-end-flow)是借助 Celer IM 进行一次信息传递的步骤：

![Celer IM 跨链信息传递原理。图源: Celer IM 文档](https://storage.googleapis.com/papyrus_images/e0464c4c7a5a4c424fd2a8e1c327497f58b6b4db28f975f2650b5992eac89df7.png)

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](https://anyswap.net/network)），它们曾经仅负责对 Multichain 本身的跨链交易进行多重签名，现在也负责对 Anycall 信息进行多重签名。Anycall 的信息传递原理和 Celer IM 非常类似，如下：

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

具体原理参见 [anyCall 官方文档](https://docs.multichain.org/developer-guide/anycall/how-to-integrate-cross-chain-anycall-contract)，在此不予赘述。

### LayerZero

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

![LayerZero 协议原理图。图源: LayerZero 白皮书](https://storage.googleapis.com/papyrus_images/f1dbc33bb02783d535bfaf977f7c7f0dcbda76a97dbc527672d7e86851aec5f5.png)

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 已经是市场中最成熟的预言机，与中继者勾结的概率较小。

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

![跨链信息传递协议对比表格](https://storage.googleapis.com/papyrus_images/8b6c8d62edfb7bec56f01e002216173461955aa3c538bf2ddc518eec0081f91c.png)

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

可以看到，在没有类似 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（右）的原理图](https://storage.googleapis.com/papyrus_images/604fc71f541d51493be163a8cf03348c967a0712017539e17a198b18bf32562c.png)

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

当我们在 [Etherscan (Uniswap V2: Router 2)](https://etherscan.io/address/0x7a250d5630b4cf539739df2c5dacb4c659f2488d#code) 上阅读 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](https://chainhop.exchange/) 是一个基于 Celer IM 的跨链 DEX——它允许用户一键将源链上的 Token A 兑换为目标链上的 Token B。举个例子，当我想利用 Chainhop 将 Avalanche 链上的 $AVAX 兑换为 Polygon 链上的 $MATIC 时，它会在前端页面告诉我们找到的转换路径，如图：

![Chainhop 交易界面](https://storage.googleapis.com/papyrus_images/60b8c158432fd3b73976630924dcb611dc1892be02411844d5210971ff55ea3f.png)

Chainhop 交易界面

可以在 Best Route 中看到，转换的路径为：

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

其中第一笔交易是在 Trader Joe 上完成的，第二笔交易是在 cBridge 上完成的，第三笔交易是在 QuickSwap 上完成的。相关说明可以在 [Chainhop 的流动性提供表](https://docs.chainhop.exchange/chainhop/multi-chain-liquidity) 中找到。

用户仅仅需要点击一次 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，我们将会看到更多的产品在这一方面做出努力。在随后的几年里，让我们一起见证万物跨链的未来吧！

---

*Originally published on [planD](https://paragraph.com/@bendanwang/amm)*
