Note

AMM算法

AMM,Defi的原理,自动化做市商,相较于传统的交易所做市商,完全由机器来决定买方和卖方的报价。

做市商的工作是向某个市场提供流动性。做市商主要通过三种方式赚钱:指定做市安排(传统上由资产发行商支付费用) 、交易费回扣 (传统上由交易所支付) 以及从做市中赚价差(Dex中的手续费)

AMM原理

其实AMM可以只用一个函数来解释

$$
x*y=k
$$

也就是反比例函数

流动性影响

所谓恒定乘积算法,指的是在流动性池没有添加或减少流动性的情况下,只有交易行为发送的情况下,k值不变。

影响K值得几种情况

  1. 交易手续费影响k值

    比如uniswap交易需要交千3的手续费,完成交易后,手续费会被添加到流动性池里

  2. 添加流动性影响k值

    如果现在资金池里有xETH/yUSDT,K=x*y。现在有人又添加了流动性,增加了dx个ETH和dy个usdt,并且dx/dy=x/y。

    如果你使用Uniswap的默认设定,即你添加流动性时,先输入ETH的数量,然后uniswap会默认计算出需要多少usdt,这个默认计算就是保持dx/dy=x/y。

    但,添加完流动性后,流动性池里的资金变成了:(x+dx)ETH/(y+dy)USDT。此时,(x+dx)(y+dy)>x*y。所以添加流动性K值变大了。

    同样的减少流动性,会减少K值。

  3. 捐赠影响k值

    如果你在添加流动性时,不是按dx/dy=x/y的比例去添加,而是直接往合约地址里转了dx>0,dy=0,也是可以的。这同样会改变K值。

    这样的事是经常发生的,有些人错误地将ETH转入一个uniswap流动性池合约地址里,就产生了捐赠行为,白白把币送给了所有原来的流动性所有者。

    这种非K值比例添加流动性的行为,被uniswap称为捐赠。

    但这种捐赠行为,在设计上是可以被其他人套利的。比如有人充值了dx>0,dy=0;此时另外的人可以充值按K值比例的dy,并且执行一个添加流动性的操作,就可以把那dx的捐赠给薅走。这个挺复杂的,细节我也搞不清楚。

    任何不是按K值比例添加的流动性,都会产生捐赠。比如dx/dy>x/y,则先添加(dx-ddx)/dy=x/y的流动性,并返回给用户对应数量的LPtoken。然后ddx就变成了捐赠。

    还有,在同一个区块里,可能即有交易是添加流动性的,也有交易是买卖,那K值就会更复杂的变化。

IDO

以pancakeswap为案例,所有计算忽略手续费

假设我在BSC这条链上发布了一个token名字叫$SHEEP,然后我以SHEEP/BNB作为交易对放进流动性池,5000SHEEP和100BNB放进池子,此时,我SHEEP的ido价格就被我定下来了。

假设BNB/USDT=500,则

  • SHEEP/BNB=0.02
  • SHEEP/USDT=10

即一颗SHEEP=10U

根据公式,得k=500000,画出曲线,由于斜率不是恒定的,每次交易都会影响token的价格

那么假设我这个token的作用是购买去中心化存储服务,那么,有需求的人就会来购买sheep。在这个场景下会出现三种角色。

  1. 流动性提供者(A)
  2. 真正需要购买存储服务的人(B)
  3. 套利者/炒币(C)

pancakeswap会给提供流动性的人奖励手续费(所以不用担心没有人来提供流动性),计算公式是

成交量 * 0.3% * 提供的流动性占这个池子的比例

这时A认为我这个项目挺有前景的,会有大量的人来交易,他决定提供一点流动性,这时他往池子里放入了500颗SHEEP和10颗BNB(假设500颗SHEEP是通过airdrop得到的,这里必须提供与原有池子等值的两个币种),那么A就大概占据了10/110=9%的池子流动性,现在池子中有5500颗。(假设后续有大户进场的话,这个比例会越来越小)(为了保证k值不变,去除流动性提供的情况,原理相同)

B不信任中心化存储服务,想尝试我这个项目,那么他购买了500颗SHEEP,由于k是不变的,x=4500那么y=500000/4500=111.1,那么他需要支付11.1颗BNB才能购买500颗SHEEP,此时池子中SHEEP有4500颗,BNB有111.1颗

  • SHEEP/BNB=0.024689
  • SHEEP/USDT=12.34

也就是说SHEEP涨价了,这时候C看到价格涨了,就把airdrop获得的500颗SHEEP卖掉,那么池子又回到了原有的样子。

必须要理解的是,这个交易体现在曲线上是一个动态的过程,一次性买的越多,则花的越多,一般套利者不会一次性下大单。

兑换价格的计算方法

假设交易前DAI和ETH的数量分别是X和Y,交易后是X'和Y'。那么交易遵循X*Y=k=X'*Y'的规则,k恒定不变

那么多少DAI可以获得多少的ETH
$$
假设用\Delta x个DAI换\Delta y个ETH,则
P交易=\frac{\Delta x}{\Delta y} =P原\times (1+\partial )
$$
根据公式得出,实际成交的价格和∂成正比例(∂的意思是支付的DAI占池子里DAI的比例,0<∂)。即 成交的数量越大,∂越大,价格和支付币种的占比呈一次函数等比上升。∂=△x/X

兑换后市场价格的计算方法

市场价格=池子里DAI的数量/池子里ETH的数量(P市场=X/Y)。假设市场数量趋近于无穷大,兑换价格无限趋近于X/Y

兑换价格=支付DAI的数量/获得ETH的数量(P兑换=△x /△y)

由于用户交易会改变池子里的DAI和ETH的数量,所以交易前和交易后的市场价格是会变化的。换句话说,交易者会改变市场价格。交易后的市场价格公式:
根据

$$
X*Y=X^{'} * Y^{'}=(X+\Delta x) (Y-\Delta y)\Delta y=Y\frac{\Delta x}{X+\Delta x}
$$

$$
\Delta y=Y*\frac{\Delta x}{X+\Delta x}
$$

可得,购买ETH后的市场价为

$$
\frac{X^{'} }{Y^{'}} =\frac{1}{XY}(X+\Delta x)^{2} =\frac{X}{Y}*(1+\partial ) ^{2}
$$

最终计算公式

$$
P兑换后=\frac{\Delta x}{\Delta y} =P原\times (1+\partial )^{2}
$$

无常损失

大概就是当你提供了流动性之后,币价的上涨获得的收益,比你全部持有此币种的收益要低。

参考文章

滑点

滑点是指下单时,交易点位与实际交易点位有价格差别的一种交易现象。

Uniswap

v3版本看起来更新了很多,可以参考一下whitepapar

2022年的Defi

Defi狂热潮已经过了一年了,我没有赶上,不能说是错过,毕竟7000%的年化可不是天天都有,风险也很大。只能说错过亏钱的机会吧,2022年Defi一定不会占据很大的热度,毕竟只是一个金融工具(虽然已经有去中心化金融衍生品了)。Defi平台币永远躲不过流动性提供者大量的抛压,特别是在经历了DYDX之后,我已经不打算买任何做市的币。2022年一定是Web3真正发挥作用的一年,一定是先从基础建设开始。

0
0
...
...
...
Avatar