ITPub博客

首页 > 区块链 > 区块链 > 交易所合约跟单带单系统开发技术成熟(Demo)源码搭建

交易所合约跟单带单系统开发技术成熟(Demo)源码搭建

原创 区块链 作者:Tg_StPv888 时间:2023-04-25 14:57:23 0 删除 编辑

合约主要功能函数介绍

1.1 主要参数

    address private owner;          //合约部署(拥有者)账号地址

    address private profitor;       //收益分配者账号地址,仅该地址有权分配收益

    bool _isDIS = false;            //质押合约功能状态,true才可以进行质押

 

    ERC20 _Token;                   //用于分配收益的ERC20资产

    KeyFlag[] keys;                 //用于标记用户地址的质押状态

 

    uint256 size;                   //质押者地址(用户)数量

    uint256 _maxPledgeAmount;       //最大质押(底层币)额度

    uint256 _maxMiningAmount;       //最大(ERC20收益分配)额度

    uint256 _leftMiningAmount;      //剩余额度

    uint256 _minAmount;             //单次最少质押额度

    uint256 _totalPledegAmount;     //已质押总额度

    uint256 _maxPreMiningAmount;    //最大单次分配额度

    uint256 _startTime;             //开始时间,单位“秒”

    uint256 _endTime;               //结束时间,单位“秒”

    uint256 _precentUp=100;         //与_precentDown一起设定每次收益提取比例

    uint256 _precentDown=100;       //与_precentUp一起设定每次收益提取比例

 

    struct PledgeOrder {            //结构体,用于标记质押用户的各类状态

        bool isExist;               //质押状态

        uint256 token;              //质押额度

        uint256 profitToken;        //收益额度

        uint256 time;               //最近一次提取收益时间

        uint256 index;              //质押地址序号

    }

 

    struct KeyFlag {                //结构体,用于标记用户地址的质押状态

        address key;                //地址

        bool isExist;               //质押状态

    }


部署合约时,构造函数内的参数需要用户输入,以完成相应的参数设置并实现相应功能;


1.2 质押函数pledgeToken

    function pledgeToken() public payable{

        require(address(msg.sender) == address(tx.origin), "no contract");

        require(_isDIS, "is disable");

        require(_leftMiningAmount>0, "less token");

        require(msg.value>=_minAmount, "less token");

        require(_totalPledegAmount.add(msg.value)<=_maxPledgeAmount, "more token");

        require(block.timestamp>=_startTime&&block.timestamp<=_endTime, "is disable");

 

        if(_orders[msg.sender].isExist==false){

            keys.push(KeyFlag(msg.sender,true));

            size++;

            createOrder(msg.value,keys.length.sub(1));

        }else{

            PledgeOrder storage order=_orders[msg.sender];

            order.token=order.token.add(msg.value);

            keys[order.index].isExist=true;

        }

        _totalPledegAmount=_totalPledegAmount.add(msg.value);

    }


功能说明:


明显的,该函数具有接收底层币功能(payable);

质押地址必须是账号地址,不能是合约地址;

需要合约质押功能已经开始,且在活动限定时间内;

剩余额度大于0;

进行质押的底层币额度不能少于最小值,质押后也不能超过限定的最大质押额度;

如果该用户之前没有质押过,则建立档案(createOrder),否则仅修改档案;



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70016646/viewspace-2948677/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专业区块项目开发团队:18028578624微電

注册时间:2022-04-13

  • 博文量
    158
  • 访问量
    95687