交易所合約跟單帶單系統開發技術成熟(Demo)原始碼搭建

Tg_StPv888發表於2023-04-25

合約主要功能函式介紹

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部落格 ” ,連結:http://blog.itpub.net/70016646/viewspace-2948677/,如需轉載,請註明出處,否則將追究法律責任。

相關文章