6

uniswap 的 LPtoken 的铸造销毁和权益

 3 years ago
source link: https://www.chainnews.com/articles/133597354562.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

uniswap 的 LPtoken 的铸造销毁和权益

本文介绍 uniswap 中的 lptoken 的铸造,销毁和权益。 uniswap 的交易对手盘模式在中心化交易所,用户间挂买单和卖单,交易所的撮合引擎会按时间和价格进行排序,一旦买单和卖单价格重叠,就可以成交完成交换。但 uniswap 里没有挂单这个设…

· 2021年1月6日 06:01

本文介绍 uniswap 中的 lptoken 的铸造,销毁和权益。

uniswap 的交易对手盘模式

在中心化交易所,用户间挂买单和卖单,交易所的撮合引擎会按时间和价格进行排序,一旦买单和卖单价格重叠,就可以成交完成交换。

但 uniswap 里没有挂单这个设计,取而代之的是流动性资金池充当所有交易的对手盘。

流动性资金池是包含了需要交易的两种币,比如 ETH 和 USDT。比如一个流动性池里有 x 个 ETH 和 y 个 usdt。此时 k=x*y (k 是一个常数)

当用户 A 想用 dy 个 usdt 买 ETH,在不考虑滑点的前提下,用户 A 买入的价格是 y/x。而真实成交时,用户能买到的 ETH 数量 dx 为 (不考虑 0.3% 的手续费):k=(x-dx)*(y+dy),dx=x-k/(y+dy)

交易所,流动性池里的资金就成了:(x-dx)个 ETH 和(y+dy)个 Usdt,而此时 ETH 的价格变成了 (y+dy)/(x-dx)。

以上就是 uniswap 交易的基本模式。

下面来讲这个流动性资金池的设计。

lptoken 铸造

在 uniswap 里对某个交易对(pair) 第一次添加流动性的人,可以任意对交易对的价格进行定价,即 x、y 和 k 都是这个人定的。

创世流动性之后再添加 dx 和 dy,如果按系统默认值去添加,都会受 dx/dy=x/y 的约束。

添加流动性后,uniswap 会给用户返回一个 erc20 代币,这就是 lptoken。

lptoken 的总量是变化的,添加流动性就会铸造新的 lptoken,即增发,而赎回流动性则会销毁 lptoken。

假设创世流动性里用户注入了 x 个 ETH 和 y 个 usdt,则创世铸造 lptoken 的数量 =sqrt(xy)。(注:sqrt 是开方;注:代码里的公式是 sqrt(xy)-100010^-18,这个 100010^-18 是个啥不管它,我没研究,反正这么小无所谓)

创世流动性之后,有用户添加了 (dx,dy) 个币的流动性,并且 dx/dy=x/y,则系统新铸造出 d(lptoken 数量)=dx/x*铸造前 lptoken 的总量,返回给用户。

但如果 (dx-ddx)/dy=x/y (注:ddx>0),新铸造的 d(lptoken 数量)=dy/y*铸前总量,而这 ddx 个币则相当于捐赠给了所有的 lptoken 持有者。

如果 dx/(dy-ddy)=x/y(注:ddy>0),则新铸造的 d(lptoken 数量)=dx/x*铸前总量。ddy 变成了捐赠。

可以总结为:添加流动性获得的 lptoken 数量 =min(dx/x铸前总额,dy/y铸前总额)。(注:min 是取最小值函数)

在极端情况下,有人误打了 dx>0 个币,但 dy=0 个币,则不会铸造新的 lptoken,dx 全部变成了现有 lptoken 里的成分,捐赠给了所有现有 lptoken 的用户。

这种误打币到某个 lptoken 合约地址,是经常会发生的。

lptoken 销毁

当用户想赎回流动性时,需要将 lptoken 销毁掉。按 uniswap 系统的流程就可以完成销毁。

假设现在一个交易对(eth/usdt)的流动性有 x 个 eth,y 个 usdt,现在有用户销毁 z 个 token,则用户可以得到 eth 和 usdt 的数量分别是 :dx=(z/ 总 lptoken)x,dy=(z/ 总 lptoken)y

lptoken 的权益

从上面分析可以清晰地知道,lptoken 代表了一个交易对的资金池的所有权,可以从这个资金池里按比例提取交易对代币的份额。

lptoken 的成分包括了两种币,如 eth/usdt 交易对的 lptoken 就包括了 eth 和 usdt 两种币。

随着流动性资金池里成分不一样,lptoken 的价值也不一样。

用户在 uniswap 交易,是需要付 0.3% 的手续费。比如用户用 dy 个 usdt 去 eth/usdt 交易对买 dx 个 eth。

uniswap 首先会扣除用户 0.3%dy 的本金,然后去计算该给用户的 dx,在给完用户 dx 后,这 0.3%dy 的本金会注入到 lptoken 的成分里,相当于 lptoken 增值了。

lptoken 会获得所有的捐赠收益,比如用户误将 dx 个 ETH 转入了 eth/usdt 这个 pair 的 lptoken 合约地址,dx 个 eth 就会变成捐赠给 lptoken,增加了 lptoken 的价值。

(感谢 Plancker Dao 成员李世胜对本文的贡献)


uniswap 的 LPtoken 的铸造销毁和权益



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK