最近Uniswap上的流动性挖矿太火了,参与过流动性挖矿的用户应该会发现一个现象——挖矿前后的ETH-ERC20数量是不一样的。
有的时候我觉得这个机制挺坑的。看涨一个Token,也可能因为参与流动性挖矿而导致被动在未达到预期价格时卖出了。
Uniswap是利用储备金流动性来实现协议上的数字资产交易兑换。流动性提供者需要将等值的ETH和ERC20代币充值到这个交易合约中。第一个向这个合约提供流动性的人拥有设置此ERC20代币与ETH之间兑换汇率的权利。
Uniswap的做市自动化(Automated Market Maker)机制,用既定算法替代人工报价,去掉了中心化的撮合与清结算,消除了交易中的做市商。可以提供无限的流动性,可以有很大的订单规模,且不用担心流动池很小。
做市原理:X*Y=K,其中X是ERC20代币,Y是ETH,K是常数。
ETH池*Token池=恒定乘积值
在Uniswap上执行某项交易前后,此恒定乘积值保持不变。
举个栗子:
第一笔向资金池提供
ETH池=10
Token池=500
则Constant Product:10*500 = 5000
交易前:ETH池=10、Token池=500 、恒定乘积值 = 5000
当某用户想买该Token时,比如想买1个ETH。此时,交易金额的0.3%(也就是0.003ETH)会被扣除作为给流动性提供者的矿工费。剩下0.997ETH则被添加到ETH池。
ETH池=10+(1-1*0.3%) = 10.997
保持Constant Product = 5000不变,则
Token池=5000/10.997 = 454.67
也就是说,池子里得剩下454.67Token,所以
显示给该用户的Token交易汇率 = 500-454.67 = 45.33 Token
也就是说,这笔交易完成瞬间
ETH池=10.997
Token池=454.67
这一笔交易汇率 = 45.33Token/ETH
该用户Token数=45.33 个
矿工收益 = 0.003 ETH(池子资产也是矿工的ETH10.997、Token454.67)
交易后:由于获得了0.003ETH的矿工并没有将这些ETH提走,所以又会迅速重新添加到ETH流动池中。
ETH池=10.997 + 0.003 = 11
Token池=454.67
最新的恒定乘积值 = 11*454.67 = 5001.37
下一笔交易时,将以5001.37这个新的恒定乘积值为基准,去计算交易汇率。
除了ETH-ERC20交易对外,Uniswap还有ERC20-ERC20的交易对,有一点不一样。