打造一个跨链 AMM,我们做得到吗?
May 14th, 2022

本文将对已有的跨链信息传递协议进行评估,然后围绕着跨链 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 文档
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 白皮书
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(右)的原理图
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 交易界面
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,我们将会看到更多的产品在这一方面做出努力。在随后的几年里,让我们一起见证万物跨链的未来吧!

Subscribe to planD
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from planD

Skeleton

Skeleton

Skeleton