币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】

  • A+
所属分类:币安BSC
摘要

持币分红usdt是根据用户实际持币量的多少同步mint分红派发跟踪tricker,而不是按照用户持币的权重模糊分红。目前部分合约开发中为了简化开发难度,对持币分红usdt采用模糊分红,并不是按照用户实际持币的权重同步派发tricker的方式去分红usdt,而是直接按照用户持币数量的权重占合约中总兑换usdt的数量模糊分红usdt,这种方式存在严重的漏洞,容易被夹子攻击,闪电贷攻击等多种攻击形式拿走所有的usdt分红。


chatGPT账号

币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】

一、说明

在DEFI智能合约开发中如果合约中涉及到持币分红usdt,LP分红usdt两个分红模型的组合。那么就涉及到交易的gas费用分配问题。

持币分红usdt是根据用户实际持币量的多少同步mint分红派发跟踪tricker,而不是按照用户持币的权重模糊分红。目前部分合约开发中为了简化开发难度,对持币分红usdt采用模糊分红,并不是按照用户实际持币的权重同步派发tricker的方式去分红usdt,而是直接按照用户持币数量的权重占合约中总兑换usdt的数量模糊分红usdt,这种方式存在严重的漏洞,容易被夹子攻击,闪电贷攻击等多种攻击形式拿走所有的usdt分红。正确的持币分红应该是根据用户实际持有的代币数量同步mint 分红派发tricker来实现根据用户从参与项目到触发分红usdt动作所有操作踪迹的usdt分红跟踪,可以有效的防止夹子攻击、闪电贷攻击等。

LP分红是根据用户添加流动性获取LP凭证,剔除平台锁仓LP,永久锁仓LP, 项目方指定LP后,计算当前有效LP数量。然后按照用户实际持有LP的权重去分红usdt。

由于合约中同时包括了持币分红usdt,LP分红usdt两种分红模型,就会出现触发分红动作时的交易gas费用分配和调优问题。

  1. 同时触发持币分红usdt和LP分红usdt:就需要调整交易总GAS费用不超过50w,按照usdt分红粒度分配到两种分红模型
  2. 只触发持币分红usdt:单独计算轮询持币分红usdt的gas费用
  3. 只触发LP分红:单独计算轮询LP分红的gas费用

二、分红模块功能实现

  1. 持币分usdt功能实现:触发持币分红usdt的动作包括线上买卖,线下钱包之间转账,添加以及撤销流动性都会触发轮询持币分红。同时,msg.sender交易时会触发赎回属于自己的usdt持币分红。持币分红usdt的分红派发tricker核心代码实现:
function process(uint256 gas)
    public
    returns (
        uint256,
        uint256,
        uint256
    )
    {
        uint256 numberOfTokenHolders = tokenHoldersMap.keys.length;

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }

        uint256 _lastProcessedIndex = lastProcessedIndex;

        uint256 gasUsed = 0;

        uint256 gasLeft = gasleft();

        uint256 iterations = 0;
        uint256 claims = 0;

        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;

            if (_lastProcessedIndex >= tokenHoldersMap.keys.length) {
                _lastProcessedIndex = 0;
            }

            address account = tokenHoldersMap.keys[_lastProcessedIndex];

            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }
            iterations++;

            uint256 newGasLeft = gasleft();

            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }

            gasLeft = newGasLeft;
        }

        lastProcessedIndex = _lastProcessedIndex;

        return (iterations, claims, lastProcessedIndex);
    }

2. LP分红usdt是将本币交易手续费兑换为usdt后,将对应渠道比例的usdt分发到对应地址保存后,剩余的usdt累积到合约地址中,用于添加流动性的LP分红usdt。任何线上交易行为都会触发usdt的LP分红,核心代码如下:

function processLiquidityReward(uint256 gas) private {
        if (progressLPRewardBlock.add(progressLPRewardBlockDebt) > block.number) {
            return;
        }

        IERC20 CAKE = IERC20(rewardToken);
        uint256 balance = CAKE.balanceOf(address(this));
        if (balance < lpRewardCondition) {
            return;
        }

        IERC20 lpToken = IERC20(liquidityMainPair);
        uint lpTokenTotal = lpToken.totalSupply() - lpToken.balanceOf(deadWallet) - lpToken.balanceOf(zeroWallet);

        address shareHolder;
        uint256 tokenBalance;
        uint256 amount;

        uint256 shareholderCount = holders.length;

        uint256 gasUsed = 0;
        uint256 iterations = 0;
        uint256 gasLeft = gasleft();

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }
            shareHolder = holders[currentIndex];
            tokenBalance = lpToken.balanceOf(shareHolder);
            if (tokenBalance > 0 && !excludeHolder[shareHolder]) {
                amount = balance.mul(tokenBalance).div(lpTokenTotal);
                if (amount > 0) {
                    CAKE.transfer(shareHolder, amount);
                }
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }

        progressLPRewardBlock = block.number;
    }

三、两种分红usdt的模式组合交易手续费GAS分配和调优

通常持币分红usdt轮询每次需要触发10-20笔usdt的子交易,LP分红需要触发5-10笔的usdt子交易,按照上述usdt子交易数量权衡交易gas费的分配,最优化gas费。在保证usdt持币分红和LP分红usdt可以持续性轮询分发的前提下,最小化交易gas费用。通常采用如下分配和调优方式:

if(!swapping) {
            uint256 gas = gasForProcessing.mul(60).div(100);

            try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin);
            }
            catch {

            }
        }

        if (from != address(this)) {
            if (isLPHolder) {
                addHolder(from);
            }
            if(!swapping) {
                processLiquidityReward(gasForProcessing.mul(40).div(100));
            }
        }

四、完整版本合约代码

币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】

源码及合约部署、开源、上线交易所、动态参数配置教程下载地址:

此处为隐藏的内容!
登录后才能查看!

五、综述

融合持币分红usdt和LP分红usdt的合约开发难度比较大,并且配合其他交易税率滑点限制。需要精确计算两种分红的比例已经需要的消耗的gas费用,保证用户支付最低数量的gas费用,同时,确保交易的成功。另外涉及到代币的通缩模型和跟单分红模型,跟单代币要实时的从资金池通缩到直到地址一加速代币的销毁机制,保证资金池的代币价格稳定。由于持币分红usdt和LP分红usdt两种分红模式的机制不同(持币分红派发tricker,lp加权分红)导致融合两种模式功能开发难度很大。

至此,完成DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合所有操作流程。

pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:

币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:

币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】

多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:

币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】

pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:

此处为隐藏的内容!
登录后才能查看!

添加VX或者telegram获取全程线上免费指导

币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】

免责声明

发文时比特币价格:$71249

当前比特币价格:[crypto coins=”BTC” type=”text” show=”price”]

当前比特币涨幅:[crypto coins=”BTC” type=”text” show=”percent”]

免责声明:

本文不代表路远网立场,且不构成投资建议,请谨慎对待。用户由此造成的损失由用户自行承担,与路远网没有任何关系;

路远网不对网站所发布内容的准确性,真实性等任何方面做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,路远网对项目的真实性,准确性等任何方面均不做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,路远网不对其构成任何投资建议,用户由此造成的损失由用户自行承担,与路远网没有任何关系;

路远区块链研究院声明:路远区块链研究院内容由路远网发布,部分来源于互联网和行业分析师投稿收录,内容为路远区块链研究院加盟专职分析师独立观点,不代表路远网立场。

本文是全系列中第41 / 247篇:行业技术

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的电报
  • 这是我的电报扫一扫
  • weinxin
chatGPT账号

发表评论

您必须登录才能发表评论!