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):⼀次交易使价格改变的程度, 单笔交易量越⼤对价格的影响越⼤
相关资料
无常损失
流动性提供者⽆常损失:⼀对代币存⼊Uniswap后,如果⼀种代币以另⼀种进⾏计价的价格上升,在价格上升后取出,总价格⽐原价值低⼀些,低的部分就是损失。
相关资料
代码分析
合约本地部署
- 部署要点
- 在
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)
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.