Uniswap是一个自动做市协议,由恒定乘积公式来维持价格比例。并在以太坊上进行部署,完全的去中心化交易工具。不会受到任何中心机构的监管与接入。并且代码完全开源在Github上。
所谓的自动做市协议,也就是说是一个只有基础功能的商铺。在Uniswap中,流动性提供者同时扮演着回收商和售出商两种角色。
Uniswap可以为任何两个ERC20代币提供交换服务,但是必须有人为此提供流动性才行。
任何人都可以成为流动性提供商。你需要存入两边比例相等的Token,并且你会获得一个份额证明,也就是常说的LP
。这个LP
的数量会根据当前储备中资产的数量进行比例兑换,只能保证你存入的比例在没有任何交易之前,可以获得相等的数量。 当产生交易后,你所能获得的资产为
在上图中 储备数量为Reserves,LP Shares为你获得的LP,Deposit则为提供流动性。当然,上图中的数量 并不准确 请不要被质疑你的想法。
Uniswap的兑换基础完全来源于流动性提供者添加的流动性。在储备中没有任何代币时,用户可以以任意比例添加流动性。当然同样的要承担损失风险。比如现在用户为一个USDT:BOX
的交易对添加了流动性。添加数量为1000USDT:1000BOX。而在其他的市场中BOX的价值为2USDT。因此产生了套利空间,该交易对中的BOX被其他人大量买走,直到双边储备量为 1414USDT:707BOX,此时该交易对中价格已经和市场中价格持平。此时我们计算一下用户成本,最初的时候为1000USDT + 1000BOX = 3000USDT。而最后用户剩余金额为1414USDT + 707BOX = 2828USDT。因此,用户在添加流动性时以 过低 的价格提供了BOX代币,导致了巨额的损失。
那么我们再来看一下另外一种情况。假设用户提供数量为1000USDT:1000BOX,但是此时的市场上BOX价格为0.5USDT。那么在被其他用户大量售出BOX后。交易对中的储备数量为,707USDT:1414BOX。用户成本为1000USDT + 1000BOX = 1500USD,而用户最后剩余金额为,707USDT+1414BOX = 1414,因此,用户在添加流动性时以 过高 的价格提供了BOX代币同样的产生了巨额的损失。
在两种情况下,用户的损失比例为2828/3000 = 6%与1414/1500 = 6% 。因此,在创建一个新的交易对时,投机者很有可能使用户产生损失,因此在没有事先了解的情况下,不要轻易的创建新的,或者往低储备里的流动性池中添加流动性。但是正是因为有着价格的差异,交易对中的价格比例会随着市场的调整而越接近合理的价格。
Uniswap的价格曲线原理非常的简单。也就是X * Y = K,其中X和Y为两种资金储备。比如当你创建了一个交易对,其中的储备Token为USDT
和DAI
时,假设初始比例为100USDT:100DAI,那么他们的固定乘积则为10000,在新的流动性加入前,这个乘积不会变动。
因此,如果你使用了50USDT去兑换DAI,你能获得的资产为 150USDT * (100 - X)DAI = 10000,其中X为你获得的资产,也就是33.33DAI。很明显,产生了巨大的滑点。而减少这种滑点的办法只有一种,就是需要更多的人来提供流动性支持,如果说此时双边储备量为10000USDT:10000DAI,那么他们的乘积K则为100000000。
这个时候,我们依然兑换50USDT,并且套入公式 10050USDT * (10000 - X)DAI = 100000000,计算得出X为49.75DAI。很明显的可以看到如果储备量足够大,那么就以最优的价格获得较多的数量。为了吸引用户提供流动性,所以Uniswap会把每次兑换所支付的0.3%Token数量重注入到储备中。也就是把手续费平摊给所有的流动性提供者。这也是价值捕获方法之一。在Uni推出代币奖励后,流动性提供者们则更加的愿意提供流动性。