uniswap v1学习(第三天)

428 阅读3分钟

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。这个差值就是滑点。

image.png

无常损失

假如现在池子有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做了对手盘。