聚焦资讯
服务于区块链创业者

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

chatGPT账号

一、说明

目前市面上联动本币和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+波场链TRX NFT发行合约源代码下载

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

此内容仅供注册用户可见,请登录!

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

 

免责声明

发文时比特币价格:$42249

免责声明:

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

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

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

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

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

chatGPT账号
赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权,未经允许不得转载。
文章名称:《币安链BSC上NFT发行教程——持有NFT可以获取等值的代币定期释放赎回到钱包地址合约代码实现【pdf+视频BSC链NFT发行教程下载】》
文章链接:https://www.xingzhi.io/nonfungible/26609.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

服务于区块链创业者

业务范围商务合作

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的区块链世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录后才能复制或下载网站内容