合约主要功能函数介绍
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);
}