Uniswap代码构造
Uniswap智能合约代码由两个github我的项目组成。一个是core,一个是periphery。
https://github.com/Uniswap/un...开发询V-(Whi366)
https://github.com/Uniswap/un...
core偏外围逻辑,单个swap的逻辑。periphery偏外围服务,一个个swap的根底上构建服务。单个swap,两种代币造成的交易对,俗称“池子”。每个交易对有一些根本属性:reserve0/reserve1以及total supply。reserve0/reserve1是交易对的两种代币的储存量。total supply是以后流动性代币的总量。每个交易对都对应一个流动性代币(LPT-liquidity provider token)。 简略的说,LPT记录了所有流动性提供者的奉献。所有流动性代币的总和就是total supply。Uniswap协定的思维是reserve0*reserve1的乘积不变。
Periphery逻辑
外围逻辑实现在UniswapV2Router02.sol中。称为Router,因为Periphery实现了“路由”,反对各个swap之间的连贯。基本上实现了三个性能:1/add liquidity(减少流动性)2/remove liqudity(抽取流动性)3/swap(替换)。
1.add liqudity
减少流动性,就是同时提供两种代币。因为代币有可能是ETH,针对不同状况有不同的接口。逻辑相似。
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
)external virtual override ensure(deadline)returns(uint amountA,uint amountB,uint liquidity)
add liqudity查看之前有没有创立相应的交易对。如果有相应的交易对,确定目前的兑换比例在心愿的范畴内(冀望amountDesired和不低于amountMin)。如果兑换比例OK,将相应的代币转入对应的交易对池子,并调用其的mint函数。
2.remove liqudity
提供流动性的相同的操作就是抽取流动性。也就是说,流动性提供者不再提供相应的流动性:
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,