Post

W4-1 UniswapV3分析

W4-1 UniswapV3分析

UniswapV2分析

Uniswap

  • AMM协议: AutoMated Market Maker
    • AutoMate(d): ⾃动,没有中间机构进⾏资⾦交易
  • Market Maker: 做市商(保证订单得以执⾏),流动性提供者(LP: liquidity providers)
    • 流动性指的是如何快速和⽆缝地购买或出售⼀项资产
    • LP 是提供资产的⼈以实现快速交易

常量乘积模型: K = x * y

  • AMM 的执⾏引擎, 没有价格预⾔机,价格⽤公式推导
  • x:token0 的储备量(reserve0)
  • y:token1 的储备量(reserve1)
  • 提供流动性:
    • 转⼊token0、token1,增加reserve0、reserve1,拿到流动性凭证 = sqrt(x * y)
  • 兑换时,K 保持不变
    • 减少reserve0,就必须增加reserve1
    • 减少reserve1,就必须增加reserve0
  • 移除流动性
    • 通过流动性凭证,撤出token0、token1
  • 价格滑点(slippage):⼀次交易使价格改变的程度, 单笔交易量越⼤对价格的影响越⼤ image1

image2

  • 添加流动性,增加K image3

相关资料

无常损失

流动性提供者⽆常损失:⼀对代币存⼊Uniswap后,如果⼀种代币以另⼀种进⾏计价的价格上升,在价格上升后取出,总价格⽐原价值低⼀些,低的部分就是损失。 image4

相关资料

代码分析

  • 代码分层 image5

  • 代码结构 image6 image7

合约本地部署

  • 部署要点
    • UniswapV2Factory合约需要加上 bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(UniswapV2Pair).creationCode));
    • 用hardhat改造项目,部署在本地节点
    • 需要部署weth合约,用于测试转账

      在部署Factory合约的时候,需要注意code hash常量需要满足要求**

Uniswap 集成使⽤

交易平台(通过 Router 与其他币进⾏交易)

价格预⾔机(获取时间加权平均价格)

  • TWAP = Time-Weighted Average Price,即时间加权平均价格
  • price0CumulativeLast、 price1CumulativeLast 记录了 token 的累加价格
    • priceCumulativeLast2 = priceCumulativeLast1 + price2 * timeElapsed;

为什么需要价格的预言机? (存在无抵押贷款攻击)

  • 任何与价格有关的地方,都需要Oracle
  • 任何能影响价格的因素,都存在套利和风险

    避免操纵攻击

  • Oracle延迟更新机制TWAP
    • 简单来说就是取均价取代实时价格作为预言机
  • 优点
    • 攻击者难以通过一笔交易来影响价格,从而影响预言机的下游
  • 缺点
    • 价格不是实时价格,当价格剧烈波动时,更新不及时,无法反应真实的波动情况
    • 要同时存在两个代币的TWAP,因为不能通过倒数来计算另外一个代币的价格

相关资料

闪电兑(flash swap)

image8

  • 流程上的区别
    • 普通交易
      • image9
    • 闪电兑换
      • image10
  • use case
    • 套利
    • 债务再融资
      • 不需要动用自己的资金,直接使用flash swap的资金完成再融资

Uniswap 相比V1的改进

增加了支持任何ERC-20的交易对兑换

  • V1只支持ERC-20跟ETH的兑换

细节变更

  • 使用solidity 替代 Vyper 作为合约变成语言
  • 使用UQ112.112类型存储
  • 支持meta transaction
  • 协议手续费分成变化
This post is licensed under CC BY 4.0 by the author.