Dex Mind

一个杠杆式去中心化交易所的想法

Posted by Lengzhao Blog on September 29, 2022

DEX

DEX:去中心化交易所(decentralized exchange),核心逻辑都用区块链实现,用户可以直接调用合约实现交易。

  1. 这只是一个想法
  2. 放大池子的深度,使资金利用率更好

AMM

由于链上存储成本超高,所以大部分的DEX都是采用AMM的方式(Automated Market Maker,自动化做市机制),AMM机制由算法构成,不同的项目有不同的算法,uniswap v2的机制是恒定乘积,即X*Y=k。

各指令的费用

  1. uniswap V2的资金利用率很低
  2. V3的资金利用率高,但收益无法复用;对普通用户不友好

目标

  1. 通过简单的方式,提高资金的利用率(类似Uniswap V3对V2的优势)
  2. 不同的DEX之间,利用率越高的DEX,流动性越好,收益也越好
    1. 用户更喜欢深度好的LP,这样交易的滑点越低。
  3. 对普通用户友好,收益复用

最简单的想法

  1. 默认AMM的算法为x*y=k
    1. 只要增大k,就是增加LP的深度,用户交易时,滑点就更低
  2. 为了更高的深度,x和y就不能用实际的token数量。
    1. 方式1:更换算法
    2. 方式2:使用虚拟的x和y(当前的想法)
  3. 添加流动性的时候,就不再是简单的增加x和y
    1. 比如:增加1个x和1个y,流动性增加的是2倍(可以是其他倍数,倍数越高,池子深度越好,但价格范围越小)
    2. 但流动池的x’增加的是2*x,y’增加的是2*y
    3. 这样的结果,k = x’*y’=2x*2y
    4. 实际流动性相当于uniswap v2的4倍
  4. 流动性增加的时候以倍数增加,但交易的方式还是和uniswap v2一样
    1. 使用新的k,计算可以swap的token数量
    2. 然后给用户转对应数量的token
    3. 如果池子中的token数量不足(价格偏离严重时),则交易失败
  5. 存在的问题1:
    1. x的价格区间再也不是0-∞
    2. 如果倍数为2倍,则x的价格变动区间为0.25y-4y
    3. 当价格超过这个范围,由于x或y的真实token已经被兑换完,所以无法进一步下跌或上涨。
  6. 存在的问题2:
    1. 杠杆率不是固定的,当交易越多,价格不变,由于手续费的存在,所以真实的x和y越来越多,x’/x的值就越来越小,杠杆率就慢慢变小

注意点

  1. 添加流动性的时候,价格不变,杠杆率不变,但深度增加
  2. 交易的时候,K不变,价格变化。如果流动性枯竭,会导致交易失败;其他的场景跟Uniswap V2一样

与Uniswap V3的比较

  1. 都支持提供单币种的流动性(能够实现简单的IDO功能)
  2. Uniswap V3的手续费,无法重复利用,且撤销流动性的时候,手续费比较高
    1. 当前的方案与V2类似,手续费是直接到LP中
  3. 流动性撤销时,是以虚拟流动性的占比,获取真实流动性中对应比例的资产
  4. 整个方案比Uniswap V3简单很多
  5. 交易者的手续费也会比较少
    1. 在Uniswap V3,如果交易跨多个ticker,手续费成倍增加
    2. 当前方案的手续费与V2差不多
  6. 依旧能够支持平台币
  7. LP依旧是同质化的token,可以进行组合性操作(如流动性挖矿等)
    1. Uniswap V2版本的LP是ERC20,V3是NFT
  8. 如果提供百倍杠杆的流动性,就能够支持稳定币之间的交易池,类似Curve?

资金利用率的提高,从另一方面来说,流动性不变的情况下,只需要更少的资金,收益不变。价格涨跌时,无偿损失更少。 但这些都不是绝对的,如果多人同时提供流动性,A将所有资产都提供了流动性,B按比例(50%)提供流动性,则B 的流动性比例降低,收益就降低。

流动性归一

如果不同的杠杆率有不同的流动池,将导致资金分散。 可以通过动态杠杆率和动态手续费的方式,将相同交易对的流动性合一。

动态杠杆率

  1. 每个交易对都只有一个池,避免流动性的割裂
  2. 初始的杠杆率,由交易对的创建者设置,范围(1-10),默认只能选择2或5
  3. 交易对当前的杠杆率=vToken/rToken,需要将token2按照价格全部转成token1

增加新的流动性时:

  1. 直接以现有的杠杆率,计算新的份额
  2. 以份额比例计算新的杠杆率:new_level = old_radio*old_lever + new_radio*hope_level
  3. 基于新旧杠杆率,调整vToken的值:amount = new_level*old_amount/old_level

动态费用

  1. 交易对的费用是动态的,与动态杠杆率类似
  2. 费用信息保存在交易对中
  3. 每个流动性提供者都可以设置预期的费用,根据流动性占比进行调整。
  4. 支持的范围为(万分之五–百分之一)

lp份额

  1. 支持单向提供流动性:添加流动性的时候,只添加单一币种
  2. lp份额的token有两种,分别是tokenA和tokenB的,份额都是整个池子的总份额,只是赎回的时候,优先赎回的币种差异
  3. 比如:添加tokenA的流动性,占比为10%,则用户拥有lp_tokenA=total*10%
    1. 赎回的时候,如果tokenA被大量交易走,只有池子价值的6%,则用户赎回6%的tokenA和4%的tokenB(总价值的6%和4%)
  4. 单一LP份额与双LP的差别:
    1. 单一LP份额无法区分用户添加流动性的币种
    2. 单一LP份额,添加流动性后立即赎回的token会变化,就可以通过这种方式免手续费兑换

不同杠杆率的价格区间

  1. 流动性枯竭时,某一个token的数量被兑换光
    1. 杠杆倍数为n
    2. 交易时,vDAI与DAI是1:1兑换的
    3. 所以流动性枯竭时,n*x的最小值为(n-1)*x
    4. 这是不考虑手续费的情况,如果包含手续费,价格范围可以更大
    5. 价格范围是会变动的,当有人提供新的流动性,将导致范围的变化
      1. 当有人提供单币种的流动性,将会导致单侧的真实流动性增加,其价格范围会增大
      2. 当调整杠杆率,会使整体的价格范围改变
  2. 2倍杠杆
    1. 2x*2y=4k
    2. 此时变成x*4y=4k
    3. 所以价格区间为25%-400%
  3. 3倍杠杆
    1. 3x*3y=9k
    2. 流动性枯竭:2x*4.5y=9k
    3. 所以价格区间为:44%-225%
  4. 4倍杠杆
    1. 4x*4y=16k
    2. 流动性枯竭:3x*5.33y=16k
    3. 所以价格区间为:56%-177.8%
  5. 5倍杠杆
    1. 5x*5y=25k
    2. 流动性枯竭:4x*6.25y=25k
    3. 价格区间为:64%-156%
  6. 6倍杠杆
    1. 6x*6y=36k
    2. 价格区间:69%-144%
  7. 7倍杠杆
    1. 7x*7y=49k
    2. 价格区间:73%-136%
  8. 8倍杠杆
    1. 8x*8y=64k
    2. 价格区间:76%-130.6%
  9. 9倍杠杆
    1. 9x*9y=81k
    2. 价格区间:79%-126.6%
  10. 10倍杠杆
    1. 10x*10y=100k
    2. 价格区间:81%-123.5%