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的乘机关系。
-
首先 mint 函数是这个lp注入流动性, 注入的时候需要按照 x*y 的当前比例来注入。 其中会审查是否向合约打入指定的token0 和token1 否则报错。
-
Swap方法,是将两个代币转换, 传入指定的token0 给出指定的token1, swap 永远不会将池子的代币掏空, 因为它要保持 x* y. = k.。 这个公式。
-
burn 方法,是用来撤销流动性, 根据调用指定的lp撤销流动性打入调用地址。
其中 撤销流动性会将这个池子的lp奖励分发给调用者。 奖励分为两个部分分发一个 feemaster 地址 一个 lp 用户。
上述从代码层面解释了v2 核心 的原理.
当然跟用户交互是router 合约,router 包含了所有 添加流动性撤销流动性,swap 等逻辑。
V2的缺点:
做市商添加的lp包含所有价格。不能添加两个区间的价格。 这导致资金利用效率的浪费。
关于无常损失我认为不应该是v2设计问题,根据市场而定。