一、说明
uniswap, pancakeswap,sunswap登录主流的DEX交易所计算实时价格的原理都是一致的,即K=xy,通过简单的价格乘积恒定公式来实时的计算代币的价格。目前uniswap,pancakeswap没有提供相关的价格调用API,需要自行通过合约代码来核算价格,并根据当前价格波动情况,针对交易情况做出相应的调整。
比如当前价格低于昨天的收盘价格时就需要增加lpfee回流底池,以增加底池厚度,抵消抛压。如果当前价格高于昨天的首盘价格就需要降低手续费,以稳定代币价格,稀释资金池厚度。
需要获得代币当前价格的应用场景主要包括:根据交易量usdt确定交易挖矿的额度和频率;根据当前代币的价格动态调整交易手续费;根据当前代币价格核算加池分红币种的价值;根据当前代币价格设置空投数量等;
二、获取当前价格代码实现
function getCurPrice() private view returns(uint _price){ address t0 = ISwapPair(address(_mainPair)).token0(); (uint r0,uint r1,) = ISwapPair(address(_mainPair)).getReserves(); if( r0 > 0 && r1 > 0 ){ if( t0 == address(this)){ _price = r1 * 10 ** IERC20(_fist).decimals() / r0; }else{ _price = r0 * 10 ** IERC20(_fist).decimals() / r1; } } }
通过两种代币的对标比例核算代币的实时价格。
根据当前代币的价格或者最近某个时间段的价格波动情况,针对目前合约的运营情况做出相应的调整。比如当前价格低于昨天的收盘价格时就需要增加lpfee回流底池,以增加底池厚度,抵消抛压。如果当前价格高于昨天的首盘价格就需要降低手续费,以稳定代币价格,稀释资金池厚度。
调用当前代币实时价格的函数:
if (_swapPairList[from] || _swapPairList[to]) { swapForFistAmount = amount.mul(getCurPrice()); if (!_feeWhiteList[from] && !_feeWhiteList[to]) { if (0 == startTradeBlock) { require(0 < startAddLPBlock && _swapPairList[to], "BEP20:operater action is not AddLiquidity"); } if (block.number < startTradeBlock.add(4)) { _funTransfer(from, to, amount); return; } if ( overMinTokenBalance && !inSwapAndLiquify && _swapPairList[to] && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity } takeFee = true; } if (_swapPairList[to]) { isSell = true; } }
至此,完成uniswap,pancakeswap,sunswap等主流的dex获取当前代币实时价格接口方法所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册