乐趣区

关于程序员:LP流动性质押挖矿项目系统开发源码搭建丨Defi质押流动性挖矿开发技术解析

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,

退出移动版