AMM 协议是指自动做市商协议,它是目前 DeFi 领域中最受欢迎的协议之一。AMM的出现使得流动性挖矿这一玩法迅速火爆起来。传统的挖矿通过提供算力来获得奖励,而流动性挖矿是提供流动性来获取奖励。对于流动性提供者而言,通过为去中心化交易所或其他项目提供流动性,从而获得代币奖励,这种模式在DeFi中比较常见。

和中心化交易所的订单簿模型不同,AMM采用的是固定乘积的方式来计算交易池中的代币,只要流动性提供者提供的流动性足够充足,就能保证去中心化交易所的持续运转。

AMM有两个参与方,一个是流动性提供者liquidity provider,可以理解为做市商;一种是交易者trader。流动性提供者会先向资金池中注入一定数量的代币,来为交易提供流动性。而交易者在兑换代币或交易的时候,会付出一定的手续费,这笔手续费就是流动性提供者的收入。

流动性挖矿项目有很多:YFI、Curve、Uniswap、SushiSwap、DODO、YAM、UMA、SUN、MDEX、Balancer等等。

我们以Uniswap为例,来看看去中心化交易所内部的原理,以及如何通过提供流动性来获取可观的收益。

Uniswap诞生于2018年,是一个完全去中心化的协议,它没有类似中心化交易所的订单簿报价系统,而是基于恒定乘积做市商模型,来保持兑换价格的合理性,并激励更多的人贡献流动性。

Uniswap的Pool资金池模块就是流动性管理,每个交易对的流动性都通过一个单独的以太坊合约来管理,我们可以先加入或创建一个资金池,然后增加或取出某个交易对的流动性。这个过程其实这就是给做市商池充、提币的过程。

如果某个交易对在已有的资金池中找不到,我们可以通过上图中下方的“+创建资金池”按钮,来创建这个交易对的资金池。这个过程称为上币。去中心化交易所对于上币的人没有要求,任何人都可以选择一个交易对,并且上币到Uniswap上。如果你是创建这个交易对的资金池的人,那么交易对的两个品种A和B的初始的量,是由你来决定的,A和B的初始价格就是你定义的两个初始量的比值。如果你的定价很不合理,那么就会有套利者进行套利交易,套利这个动作会推动价格打到合理的位置。之后加入流动性池子里的人,他们提供的两个币的量,也会按照新的比例。

这里展示了Uniswap的工作原理:

每个交易对都由一个做市池合约来管理,做市池中两种币的当前总价值永远是等值的,例如图中,资金池中有100个A和10个B,说明当前A和B的兑换价格就是1:10的关系。如果发生了交易,价格就会发生变动。流动性提供者要做的事就是根据当前做市池两种币的数量,按照这一比例的同时存入这两种币。例如图中,做市池中有100个A和10个B,那么我们需要按照10:1的比例,存入A和B,之后就可以躺着赚钱了,Uniswap会自动把手续费收入分给流动性提供者。

对于交易者来说,如果他要把A兑换成B,就需要支付10个A,并且加上千分之三的手续费。而由于滑点的存在,一般来说,交易者收到的币B会小于1个。资金池越大,对于B来说,滑点就越小。

Uniswap有一套自动的做市商机制来管理流动性、确定交易对之间的兑换价格,以及交易滑点。这套独特的机制叫做恒定做市商模型,简称CPMM(Constant Product Market Maker)。

恒定乘积做市商模型其实就是一个公式:x*y=k。假设交易对是A和B,其中x是流动性池中A的总流通量,y是B的总流通量,在不增加或减少流动性的情况下,无论交易多少次,x和y的乘积k都是不变的。

由于每次交易,都会改变做市池中A和B的数量,所以它们的价格就会发生变化。我们可以通过简单的公式推导,计算出每次的交易价格和滑点影响:

我们还是用x, y分别表示资金池中A和B的数量,k是x和y的乘积,A/B的初始价格是y/x。假设发生了一笔交易,交易者花了[公式]x个A,买了[公式]y个B,那么资金池中新的币量是x+[公式]x个A和y-[公式]y个B,并且根据乘积不变性,(x+[公式]x)*(y-[公式]y)=k,这笔交易的价格就是[公式]y/[公式]x,并且当前最新的价格是(y-[公式]y)/ (x+[公式]x)。根据这个等式,我们就很容易推导出[公式]y的计算公式。[公式]y就是指交易者花费[公式]x个A,能够换取多少个B。

由于恒定做市商模型的计算规则,流动性提供者并不是稳赚不赔的,会存在“无常损失”。无常损失简单来说是指在AMM中持有代币和在你自己的钱包中持有代币之间的价值差。当AMM中的代币价格向任何方向上发生偏离时,就会发生这种情况。偏离越大,无常损失越大。