币安链BSC上NFT发行教程——持有NFT可以获取等值的代币定期释放赎回到钱包地址合约代码实现【pdf+视频BSC链NFT发行教程下载】

  • A+
所属分类:NFT

chatGPT账号

币安链BSC上NFT发行教程——持有NFT可以获取等值的代币定期释放赎回到钱包地址合约代码实现【pdf+视频BSC链NFT发行教程下载】

一、说明

目前市面上联动本币和NFT的常见方法主要有两种:

第一种:类似于LP加池分红usdt的原理,uniswap V3版本的LP本身就是NFT,每笔交易扣除指定数量的滑点税费暂时中转到合约地址中。达到触发条件后分红累积的代币到所持NFT的钱包地址中,根据每个nft的tokenid获取均等数量的代币,主要原理是首先遍历所有代币的持有者,然后根据NFT查询所有的tokenid与代币的持有者匹配后均等分发所有分红的代币到NFT持有者钱包地址中。

第二种:通过合约额设置每张NFT的tokenId对应不同数量的代币。也就是给每张NFT设置不同的价值,已经代币赎回比例和手续费。在项目开始交易后的指定时间定期释放代币到NFT的持有者钱包地址,由用户主动claim所属的代币,并支付交易gas费用。针对每张NFT设置单独的代币赎回开关。

本案例主要讲述第二种方法的NFT分红源代码实现。

二、合约代码实现

  1. 代币赎回相关属性结构体对象声明:
struct ClaimInfo {
       uint tokenId;
       uint canClaimTotal;
       State claimState;
       uint claimPercent;
       uint claimedQuantity;
       uint laveQuantity;
       uint lastClaimTime; 
       uint firstClaimTime; 
       uint claimNum; 
       uint abandonedTime; 
       uint activeTime;
    }

2. 钱包地址代币赎回权限验证器

modifier hasClaimRight() {
        uint _balance = getNFTBalance(msg.sender);
        require(_balance > 0, 'Insufficient balance');
         _;
    }

3. 每张NFT对应的tokenId价值初始化功能

根据每张NFT的tokenID设置不同的价值,即每个tokenId可以赎回的代币数量的不同的,价值越高可赎回的代币数量就越多

function addInitParames(uint[] memory _infos) public onlyOwner {
        require(_inited == false, "can't add parames");
        require(_infos.length > 0, "can't init this contract from infos");
        uint _tokenId = _infos[0];
        uint _canClaimTotal = _infos[1];
        addClaimInfo(_tokenId, _canClaimTotal, 1);
    }
function addClaimInfo(uint _tokenId, uint _canClaimTotal, uint _claimPercent) internal {
        require(_tokenId != uint(0), "Distribute: tokenId null is not allowed");
        require(_canClaimTotal != uint(0), "Distribute: canClaimTotal null is not allowed");
        require(_claimPercent != uint(0), "Distribute: claimPercent null is not allowed");
        nftInfo[nftAddress][_tokenId] = _claimInfo;
	nftInfoList.push(_claimInfo);
	nftInfoIndex[nftAddress][_tokenId] = nftInfoList.length-1;
        emit addClaimInfoEvent(_tokenId, _canClaimTotal, _claimPercent);
    }

4. 用户根据持有的NFT情况,手动赎回所属代币的核心代码实现

for(uint i=0;i<_myTokenIds.length; i++) {
            uint _tokenId =_myTokenIds[i];
           
            if(_info.claimState == State.Abandoned) {
                continue;
            }
            if(_info.claimNum == _canClaimeNumTotal) {
                continue;
            }
            
            if(_info.canClaimTotal <= 0) {
                continue;
            }
            if(_info.laveQuantity <=0) {
                continue;
            }
            
            for (uint k=1;k<=_canClaimeNumTotal;k++) {
                if(k <= _info.claimNum) {
                    continue;
                }
                
                uint _modNum = SafeMath.mod(k, 12);
                uint _currentPercent = _info.claimPercent;
                if (k > 1 && _modNum == 1) {
                    _info.claimPercent = SafeMath.div(_currentPercent, 2);
               }
                uint _thisClaim = SafeMath.div(_thisClaimTemp, (10 ** 30));
            }
            _needSendTotal = SafeMath.add(_needSendTotal, _claimNeedTemp);
            emit doClaimInfo(_info);
        
            ClaimLog memory _claimLog = ClaimLog({receiver:msg.sender, nftAddr: nftAddress, tokenId: _tokenId, quantity:_claimNeedTemp, 
            claimTime: _info.lastClaimTime, claimPercent:_info.claimPercent, claimNum: _info.claimNum});
 
    		claimLogIndex[nftAddress][_tokenId] = claimLogList.length-1;
    		emit doClaimLog(_claimLog);
        }

合约部署完成后测试相关的代币claim接口可以正常实现代币的赎回功能,项目开盘90天后允许用户赎回所属代币,每张NFT的tokenID对应的等值代币每月释放一次,每30天允许赎回等值代币的1%,需要100个月才能将所有代币全部赎回完成。

至此,完成持有NFT可以获取等值的代币定期释放赎回到钱包地址合约代码实现所有操作流程。

pdf+视频(BSC币安链+TRX波场链)NFT发行教程及合约源代码下载:

币安智能链BSC+波场链TRX NFT发行(合约部署、开源、参数配置、开发、故障处理、工具使用)教程下载:

币安链BSC上NFT发行教程——持有NFT可以获取等值的代币定期释放赎回到钱包地址合约代码实现【pdf+视频BSC链NFT发行教程下载】

币安智能链BSC+波场链TRX NFT发行合约源代码下载

币安链BSC上NFT发行教程——持有NFT可以获取等值的代币定期释放赎回到钱包地址合约代码实现【pdf+视频BSC链NFT发行教程下载】

pdf+视频(BSC币安链+TRX波场链)NFT发行教程及合约源代码下载地址:

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

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

币安链BSC上NFT发行教程——持有NFT可以获取等值的代币定期释放赎回到钱包地址合约代码实现【pdf+视频BSC链NFT发行教程下载】
免责声明

免责声明:

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

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

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

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

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

本文是全系列中第149 / 223篇:行业技术

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

发表评论

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