Web3 新手系列:DEX 为啥不做订单匹配也能撮合交易

This article is not available in the current language yet. Showing the original version.
DEX 也就是去中心化交易所,典型代表就是 Uniswap、Curve。对应的中心化交易所有币安、OKX 等。去中心化和中心化最核心的差别大家应该也都知道,中心化的交易所的交易是通过交易所的服务器来实现交易的,而去中心化的交易所则是通过运行在区块链上的智能合约交易的。

DEX 也就是去中心化交易所,典型代表就是 Uniswap、Curve。对应的中心化交易所有币安、OKX 等。去中心化和中心化最核心的差别大家应该也都知道,中心化的交易所的交易是通过交易所的服务器来实现交易的,而去中心化的交易所则是通过运行在区块链上的智能合约交易的。

然而除了是否是去中心化以外,大部分 DEX 相比中心化交易所对比,还有一个巨大的差异,那就是他们撮合交易的方式也不同。中心化交易所撮合交易的方式和传统的股票交易类似,他们都是订单簿交易所。有人要卖,有人要卖,交易所在中间撮合。

但是这样的模式在 DEX 上就行不通了,为啥?因为这样消耗的 GAS 贵啊,效率也不高。想想看如果合约中要记录每个人的订单,然后去做撮合,中间得来来回回执行好多运算,另外有的代币可能流动性不高,能上中心化交易所的代币可能就没这个问题了,但是很多流动性较小的代币,可能还没法完成交易。

于是就发明了 AMM(自动化做市商,Automated Market Maker),可以做到不用匹配订单也可以实现交易。大家可能会好奇,这怎么做到的,交易通常就是有人卖才有人能买啊?没错 AMM 就是做到了没人卖你也可以买。接下来就具体展开讲讲 AMM 是如何做到这一点的。

AMM 是如何做的呢?没有订单如何交易呢?那就要引入一个概念 Liquidity Provider(LP),也就是流动性提供商。

简单一句话说:交易不再是通过订单匹配买卖双方交易,而是直接在 LP 提供的流动性池子中交易。

就比如说我作为 LP 在池子中放了 1 个 ETH 和 3000 个 USDT(当前市场价正好是 1 ETH = 3000 USDT),那你作为交易方就可以把 0.01 嗯 ETH 放进池子,然后拿出来 30 个 USDT。

这样池子里面就变成 0.99 个 ETH 和 3030 USDT 了,所以作为交易者你不需要等待,直接就能换。

但是价格怎么定呢?不能由 LP 来实时调整价格吧,这样行不通,价格应该是市场驱动的。那如何让市场的交易行为体现在架构上呢?这里就很巧妙了,其实核心就下面一个公式:

X * Y = K

其中 X 和 Y 是一个交易对(上面例子中就是 ETH 和 USDT)中两种代币的数量,K 是这两者相乘得到的值,我们要求交易者每次取出 X 存入 Y 或者存入 X 取出 Y(也就是发生了代币交换),但是 K 必须保持不变。

这样就能做到市场自动调节价格了吗?没错,我们继续看上面的例子。

1 * 3000 = 3000

0.99 * 3030 = 2999.7

K 从 3000 变成 2999.7 了,但是基本认为还是 3000。但是下一次再交换 ETH 的价格就不再是 3000 了,而是 3000 / 0.99 = 3030.3... 了,ETH 涨价了。这样是不是很合理,有人要换 ETH,ETH 变得稀缺,所以涨价了,下次要换 ETH 就需要更多的 USDT,只要保证池子中的 ETH * USDT 等于一个常量,这样自然就会此消彼长,当 ETH 变少时,你要通过 USDT 换取 ETH 时候就需要消耗更多 USDT,反之亦然。

Web3 新手系列:DEX 为啥不做订单匹配也能撮合交易

如上图,x * y = K 的曲线如上,当 x 越少,y 就越多,x 的价格就是 y/x 其实就是斜率,斜率越高,x 越贵。

当然上面的例子只是为了方便理解,实际上的价格并不是交易后才重新计算,而是当前交易造成的 x 和 y 的变化就会影响价格。这里会引出一个比较重要的概念,就是滑点。在上面的例子中,真实情况是,为了保证 K 不变,你买入 ETH 就会导致 ETH 价格上涨,而这个上涨在当前交易中就会体现,你会发现最终成交的价格和交易前看到的价格不一致,这就是滑点。当一个交易对流动性越大的时候滑点就越小,反正滑点越大。另外交易量越大,滑点也会越大。

除了滑点外,在真正的实现中还有很多细节要考虑,比如取整问题,手续费,跨池子交易问题等等。在这里就不展开了,如果感兴趣的同学可以阅读来自 ZAN 团队同学在开源社区贡献的https://github.com/WTFAcademy/WTF-Dapp/blob/main/P002_WhatIsUniswap/readme.md这篇解析 Uniswap 代码的文章具体了解。

相比 ERC20 或者 ERC721 这样的合约,涉及到金融的合约往往更为复杂,往往包含大量的复杂逻辑代码,这里推荐大家可以试用体验我们的ZANAI Scanhttps://zan.top/home/ai-scan?chInfo=ch_WZ)的合约审计服务。只需要输入合约地址就能快速对合约进行安全分析,查看与其相似的链上代码以及审计历史,还可以体验先进的形式化验证和 GPT 安全分析功能。

总的来说,基于智能合约可以做到不依赖中心化的服务进行交易,但是智能合约交易成本的考虑(主要是 gas)和交易效率的要求,使得订单薄不适用于它。于是有了 AMM,AMM 核心就是基于 X * Y = K 这个逻辑,于是需要 LP 来提供流动性。流动性提供方收取手续费,交易方基于流动性池子来交易。

本文由 ZAN Team(X 账号@zan_team) 的愚指导(X 账号@yudao1024)撰写。

Share to:

Author: ZAN Team

Opinions belong to the column author and do not represent PANews.

This content is not investment advice.

Image source: ZAN Team. If there is any infringement, please contact the author for removal.

Follow PANews official accounts, navigate bull and bear markets together
PANews APP
New US rules on cryptocurrency fundraising and startup exemptions have been submitted to the White House and are awaiting final signature; they are expected to be released soon.
PANews Newsflash