UniSwap v2 原理

233 阅读1分钟

UniSwap v2 原理

核心原理 x * y = k;

所有的lp都是通过工厂合约创建出来的, v2的factory 的crate2 创建合约。  合约中包含一个owner (合约的管理者)和 feeMaster(手续费的接受地址);

Factory  保存了所有的lp 信息。

 Lp 也称为 pool 合约。 

Lp 本身是一个ERC20 Token,  这个合约保存 mint  ,swap ,burn, lock 等方法逻辑。  合约包含的变量 resolve1 , resolve2 两个表示 x, y 代币的量。和k的乘机关系。

  1. 首先 mint 函数是这个lp注入流动性,  注入的时候需要按照 x*y 的当前比例来注入。 其中会审查是否向合约打入指定的token0 和token1 否则报错。 

  2. Swap方法,是将两个代币转换, 传入指定的token0 给出指定的token1, swap 永远不会将池子的代币掏空, 因为它要保持 x* y. = k.。 这个公式。

  3. burn 方法,是用来撤销流动性,  根据调用指定的lp撤销流动性打入调用地址。

其中 撤销流动性会将这个池子的lp奖励分发给调用者。 奖励分为两个部分分发一个 feemaster 地址 一个 lp 用户。 

上述从代码层面解释了v2 核心 的原理.

当然跟用户交互是router 合约,router 包含了所有 添加流动性撤销流动性,swap 等逻辑。

V2的缺点:

做市商添加的lp包含所有价格。不能添加两个区间的价格。 这导致资金利用效率的浪费。

关于无常损失我认为不应该是v2设计问题,根据市场而定。