uniswap v1提出了通过常量乘积的自动做市商,x * y = k,即第一象限的双曲线。
需求
uniswap v1能够支持任意ERC Token与ETH进行swap。
白皮书规范
从v1白皮书中规定了这么几个接口。
添加移除流动性
一开始Exchange没有任何的ERC代币以及ETH,需要有本金才能swap啊,所以提出了流动性的概念。让一些手中有钱的人向合约中充值 ETH和ERC Token(是“和”哦,不能单独充值某个),然后才能让trader进行swap。
那么大户都是免费拿钱给你用么?当然不是,trader进行的每笔swap,都需要支付手续费,而大户,就会享受这些手续费。同时,这些手续费会按提供流动性多少的比例进行分配,流动性的多少,可以用LP Token来表示。
LP Token
LP Token是uniswap 的一个代币,它代表了流动性提供的多少。 假如现在池子有10 ETH,100JCB。k = 10 * 100 = 1000 你此时按照比例增加流动性,增加1ETH和10JCB,此时k=11 * 110 = 1210,流动性增加了,根据白皮书内容,你将获得 根号(1210 - 1000) 数量的LP Token。它代表了你提供了多少流动性。
移除流动性
移除流动性则是通过LP Token计算你提供了多少流动性,然后按照 你的LP Token 数量/总LP Token数量的比例,将池子中的 ETH和ERC Token转给你。
ETH 与 ERC Token置换
x1 * y1 = x2 * y2
滑点
滑点是在ETH与ERC Token置换出现的。 假如现在池子有10 ETH,100JCB。k = 10 * 100 = 1000 你想换出2个ETH,在换第一枚ETH时候,只需要支付100JCB,而换到第二枚ETH时,需要支付的JCB肯定是大于100JCB。这个差值就是滑点。
无常损失
假如现在池子有10 ETH,1000JCB。k = 10 * 1000 = 10000,LP Token总数=100。 你向池子添加流动性,支付了1ETH,100JCB,添加流动性的总资产=200JCB,获取的LP Token=
假如当前ETH十分火爆,大家都在使用JCB换到ETH,最终导致池子ETH=5,根据公式,JCB=2000。 你获取的LP Token = 根号(11 * 1100) - 100 = 10。
此时如果你移除你的流动性,你可以拿回的资产(单位JCB)=5ETH * 2000JCB * 10/100 + 10/100 * 2000JCB = 1200 JCB
但是,如果你没有去添加流动性,而是一直持有,你的资产(单位JCB)=1ETH * 2000JCB + 100JCB=2100JCB。
2100 JCB - 1200 JCB的差值就是无常损失。无常损失的产生是由于“添加流动性的你”是和广大trader做了对手盘。