pancakeswap 、uniswap、sushiswap等主流DEX目前都已经升级到V3版本。v3与v2版本在添加流动性产生LP方面发生了根本的区别。原来在v2版本用户添加流动性后会根据用户添加代币的数量以及配对usdt的数量计算产生出lp的数量,将lp分发到添加流动性的用户钱包地址中。lp作为一个独立的代币,只对该交易对有效,不同的资金池之间是互相隔离的。v3版本将所有资金池融合成一个大池,用户添加流动性获取的lp是ERC721标准的NFT,并且所有资金池共享一个NFT合约,只是不同的资金池对应的加池用户的NFT的tokenid不同。基于以上版本升级的改变,原来用户添加流动性获取LP,根据用户加池份额分红手续费usdt的逻辑代码失效,无法在v3版本上实现lp加池分红usdt。
基于V3版本重新修改lp加池分红usdt的逻辑代码实现,主要原理如下:更加用户持有的NFT数量,每个nft对应等额的usdt,遍历所有NFT同时要求用户持有本币才能获取LP加池分红,通过以上原理筛选出lp加池用户,进而分发usdt手续费分红。
基本的实现方式等同于NFT分红模式,核心代码实现如下:
function processLargeNFTReward(uint256 gas) private { if (processLargeNFTBlock + processLargeNFTBlockDebt > block.number) { return; } uint totalNFT = nft.totalSupply(); if (0 == totalNFT) { return; } uint256 rewardCondition = nftRewardCondition; address sender = address(_tokenDistributor); if (balanceOf(address(sender)) < rewardCondition) { return; } uint256 amount = rewardCondition / totalNFT; uint256 gasUsed = 0; uint256 iterations = 0; uint256 gasLeft = gasleft(); address shareHolder; uint256 limitAmount = _limitAmount; uint256 shareHolderBalance; while (gasUsed < gas && iterations < totalNFT) { if (currentLargeNFTIndex >= totalNFT) { currentLargeNFTIndex = 0; } if (!excludeNFTHolder[shareHolder]) { if (0 == limitAmount || _feeWhiteList[shareHolder]) { _tokenTransfer(sender, shareHolder, amount, false); _nftReward[shareHolder] += amount; } else { shareHolderBalance = balanceOf(shareHolder); if (shareHolderBalance + amount <= limitAmount) { _tokenTransfer(sender, shareHolder, amount, false); } } } gasUsed = gasUsed + (gasLeft - gasleft()); gasLeft = gasleft(); iterations++; } processLargeNFTBlock = block.number; }
至此,完成pancakeswap V3版本实现LP加池分红usdt的完整代码实现的所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册