AMM (Automated Market Maker)是Defi最重要的发明之一,他促成了去中心化交易所(DEX)的形成,改变了币只能hold而不能产生收益的情况。让去中心化参与者之前的钱流动了起来,盘活了整个生态。
Introduction
传统Market Maker(TMM)的职能主要是为市场注入流动性,缩小bid和ask之间的差价,同时利用这些差价赚取收益。TMM目前都是一些centralized的大公司(例如Citadel),拥有巨量资金以及asset,所以他可以既当buyer又当seller。TMM需要很强的数据分析能力来精准判断supply/demand以提供定价,而这些能力的背后又是无数的人力和资金。

当我们移步到decentralized finance,没有了TMM的职能我们将面临两个问题:
- 没有一个centralize的公司可以提供定价
- 市场里没有足够的liquidity
AMM的诞生就是为了解决这两个问题。AMM的本质是一套算法,通常直接运行在DEX里。

Pricing
AMM采用了一个极其简单的定价方式: constant product curve.
对于任何一个trading pair,例如ETH对BAT,假设ETH的liquidity是x(DEX里这个trading pair一共有x个ETH), BAT的liquidity是y(一共有y个BAT)。
constant product curve 描述了两个要求:
- x * y = k。(确保每一笔交换以后k都保持恒定,k的初始值由initial creator决定,后根据liquidity加减不停调整,但是交易不会影响k。)
- 用ETH换BAT的价格是x/y。(这个可以用简单的supply demand来理解,如果很多人把ETH换成了BAT,那么x变多,y变小,ETH换BAT成本就会变高)
Liquidity
AMM引入了一个新的概念: Liquidity Provider,众人拾柴火焰高,任何的人都可以提供Liquidity。
同样ETH和BAT的例子,Liquidity Provider需要根据x/y (兑换价格), 来提供等量的liquidity pair。提供的Liquidity会以百分比的形式被记录在DEX里,provider根据这些百分比按比例收取手续费,最后也可以按比例拿走liquidity。
增加liquidity会增加x,y的值,所以k也会变多,反之亦然。
参考uniswap v1的实现: https://github.com/Uniswap/v1-contracts/blob/master/contracts/uniswap_exchange.vy#L48
Impermanent Loss
由于liquidity是按百分比记录,所以放进去1 ETH作为liquidity不代表能拿出来1 ETH,当ETH对于BAT的价格暴涨时,那么拿出的ETH将会减少。这就叫Impermanent Loss。
Trading
有了price和liquidity,trading就可以发生了。
假设liquidity pool里有100(x)个ETH和100(y)个BAT,这时ETH对BAT的价格是1:1, k = 10000, buyer想花一个ETH买入BAT,他能获得多少个BAT呢?表面上他应该能获得一个BAT,但是因为交易发生以后,会剩下101个eth和99个BAT,这样改变了k。所以实际上获得的BAT是 x-(k/y’) = 10000-(10000/101) = 0.99。
由于DEX应用AMM而没有使用order book,所以并没有实现limit order的功能。每一笔交易都会影响价格,因此必须设置slippage去防止front run。