13103827627
首页 > 新闻中心 > LP双币质押流动性挖dapp系统开发
新闻中心
LP双币质押流动性挖dapp系统开发
发布时间:2024-01-04        浏览次数:6        返回列表
LP双币质押流动性挖dapp系统开发

    什么是Uniswap?

    uniswap是一个进行自动化做市商的项目,该项目的特点是公平,去中心,抗审查,安全。并且uniswap并不会存在特殊群体,参与项目的每个人都是平等的不论你是LP还是Trader。

    V1的特点:

    可以加入流动矿池成为LP并获取奖励费用

    利用公式进行自动定价,每次交易过后都会进行计算定价

    支持私人定制的交换

    每个LP按照一定比例输入ERC20-ERC20的数量之后,会获得一定数量LPtoken,用来表示贡献度,可以根据贡献度来领取池中的奖励(奖励的来源为每次交易收取的费用)。如果想退出的话,可以将LPtoken进行销毁,销毁后会按照LPtoken的比例将两种资金进行返回。

    同时可以设置限价单和限时单。

    Uniswap如何进行计算

    无交易费推导

    在整个计算过程中uniswap使用的是x-y-k的模型,即为无论怎样进行交易,保持交易后x*y=k,两种代币的乘积不变。根据这个思想,进行推导

    设要用Δx数量的x代币交换Δy代币,则有

    (x+Δx)*(y-Δy)=k=x*y

    设α=Δx/x,β=Δy/y,将其代入上式可得

    ∴(x+α*x)*(y-β*y)=x*y

    ∴(1+α)*(1-β)=1

    ∴α=β/(1-β),β=α/(1+α)

    ∴Δy=α/(1+α)*y=Δx/(x+Δx)*y

    Δx=β/(1-β)*x=Δy/(y-Δy)*x

    带手续费交易

    在实际情况中,每一次交易都会收取一定的手续费用来交易LP,通常手续费为交易量的0.3%,这就表明你输入的Δx并不是全用于计算,实际的计算值为Δx*0.97%,剩下的作为手续费放入交易池中奖励LP,下面是实际的推导过程:

    设要用Δx数量的x代币交换Δy代币,则有

    设手续费的比例为ρ,1-ρ为γ

    (x+Δx*γ)*(y-Δy)=k=x*y

    设α=Δx/x,β=Δy/y,将其代入上式可得

    ∴(x+α*x*γ)*(y-β*y)=x*y

    ∴(1+α*γ)*(1-β)=1

    ∴α=β/((1-β)*γ),β=(α*γ)/(1+α*γ)

    ∴Δy=(α*γ/(1+α*γ))*y=((Δx*γ)/(x+Δx*γ))*y

    Δx=β/(1-β)*x=Δy/(y-Δy)*(1/γ)*x

    //我们假设ρ=0.3%,所以γ=997/1000

    ∴上述结果可以表示为:

    Δy=(997*Δx*y)/(1000*x+997*Δx)

    Δx=(1000*Δy*x)/((y-Δy)*997))

    通过上面推导可以看出当ρ为0时就成为了无手续费模式,并且可以发现一个问题,代入手续费之后整个池子的k只会略微变大,这是因为会有部分的费用作为手续费进入池子并不会进入交易当中。也可以理解为,你输入的Δx=手续费+实际的交易的数量

    在实际的交易中,会出现以下两种情况:

    给出交易的x代币数量,计算出y代币的数量

2e26b58da3fb18a2837d783d6ba7c1cc.jpeg

    在这种情况下,输入的x代币会有一部分作为手续费放入池中,其余部分才会被用来做交换。计算时可参考上面手续费交易的结果。

    给出想要的y代币数量,计算出所需要的x代币数量

    给出想要获取的y代币,计算所需的x代币数量,同时x代币中包含了手续费和实际交换数量。计算时可参考上面手续费交易的结果。

    流动性计算

    用户不仅可以进行代币的交换,同时还可以成为LP(Li),获取LPtoken用来获取池子中的利息。流动性计算的推导如下

    设l=x*y表示两种代币的数量,则有//提供流动性推导设α=Δx/x,则有

    ∴Δy=Δx/x*y+1

    Δl=Δx/x*y

    ∴x'=x+Δx

    y'=y+Δx*t/x+1//这是考虑到solidity语法在计算时的小数会进行向下取整

    l'=l+Δx*l/x

    //取消流动性

    设β=Δl/l

    ∴Δx=Δl*x/l

    Δy=Δl*y/l

    ∴x'=x-Δx

    y'=y-Δy

    l'=l-Δl

    由于存在向下取整的计算方式,我们将提供和取消两种结合起来看之后会发现,在取消之后剩余的x,y的数量大于提供流动性之前,这是为了保证避免投资者通过这种方式进行获利。如果不使用向下取整的计算方式的话,其实提供和取消之后x,y的数量不会发生变化。同时在提供流动性之后,LP会获取LPtoken,LPtoken数量等于两种代币之积(代币数量更新之后)再开根号。

4b5ada3fbd019389dcdcc8a9727af36f.jpeg

    滑点问题

    由于Uniswap是在上的操作,所以可能会导致你看到的价格和实际的价格会有所不同,这是由于交易的确认需要时间,并且交易的顺序不清楚。这样就会导致产生交易滑点,通常为0.5%的滑点保护。而对于滑点的计算我们通常使用(实际成交价格-交易时输入的价格)/交易时输入的价格。当计算出的值满足设定的比例时,即可完成交易。

    手续费问题

    由于在每笔交易时都会收取一定的手续费,这些手续费会按照LP的持有的token的比例进行分发。这是为了激励用户成为LP并且投入更多的资金,创造更多的流动性。从理论上来说当每一一笔交易发生的时候要将手续费分发给LP,在进行分发的时候可能会使用一个大循环进行分配。但是在实际中这样对用户消耗的gas是很多的,所以这样的方法是不可行的。所以在代码中将手续费的分配放在LP提供流动性和移除流动性的部分,并且维持手续费公平分配的与那里很简单。每次用户进行交易的时候交易的手续费会将每单位的LPtoken的代币的价值提高,而LP在提供流动性的时候会按照当前每单位的LPtoken的代币的价值进行买入LPtoken(变相地理解),举例说明:用户A提供流动性的时候获取了100LPtoken,池子中有1000tokenA,1000tokenB,这时候1LPtoken的价值分别是10tokenA和10tokenB,在经过多次买卖后池子里面有1100tokenA和1500tokenB,这时候1LPtoken对应11tokenA和15tokenB,多出来的这部分即为手续费收益。当用户B想要增加流动性的时候,会按照1LPtoken对应11tokenA和15tokenB的比例进行生成LPtoken,然后按照上面所说的再进行手续费的收益。


新闻分类
最新发布
企业新闻
站内搜索
 
联系方式
  • 地址:河南省郑州市郑东新区商鼎路78号升龙广场3号楼A座32楼
  • 电话:13103827627
  • 手机:13103827627
  • 联系人:王经理