编译器
0.5.17+commit.d19bba13
文件 1 的 8:Address.sol
pragma solidity ^0.5.5;
library Address {
function isContract(address account) internal view returns (bool) {
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call.value(amount)("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
文件 2 的 8:Context.sol
pragma solidity ^0.5.0;
contract Context {
constructor () internal { }
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this;
return msg.data;
}
}
文件 3 的 8:IERC20.sol
pragma solidity ^0.5.0;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function burnFrom(address sender, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
文件 4 的 8:Ownable.sol
pragma solidity ^0.5.0;
import "./Context.sol";
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
function isOwner() public view returns (bool) {
return _msgSender() == _owner;
}
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
文件 5 的 8:SafeERC20.sol
pragma solidity ^0.5.0;
import "./IERC20.sol";
import "./SafeMath.sol";
import "./Address.sol";
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeBurnFrom(IERC20 token, address from, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.burnFrom.selector, from,value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function callOptionalReturn(IERC20 token, bytes memory data) private {
require(address(token).isContract(), "SafeERC20: call to non-contract");
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
文件 6 的 8:SafeMath.sol
pragma solidity ^0.5.0;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
文件 7 的 8:StakePool.sol
pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;
import "./StakeSet.sol";
import "./SafeERC20.sol";
import "./Ownable.sol";
contract StakePool is Ownable{
using SafeMath for uint;
using SafeERC20 for IERC20;
using StakeSet for StakeSet.Set;
uint[4] STAKE_PER = [20, 30, 50, 100];
uint[4] STAKE_POWER_RATE = [100, 120, 150, 200];
address constant wethToken = address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
address public payToken =address(0xdAC17F958D2ee523a2206206994597C13D831ec7);
address public aToken = address(0x1e8433F5017B3006f634293Ed9Ecf0e9504CdB25);
address public secretSigner;
uint private _totalStakeToken;
uint private _totalStakeEth;
uint private _totalStakeUsdt;
bool private _isOnlyToken;
uint public currentId;
uint private _totalOrders;
uint private _totalWeight;
mapping(address => uint) private _userOrders;
mapping(address => uint) private _weights;
mapping(address => uint) private _withdrawalAmount;
mapping (address => uint256) private _bypass;
mapping(address => StakeSet.Set) private _stakeOf;
mapping(uint => bool) public withdrawRewardIdOf;
mapping(address => address) public lpAddress;
event Stake(address indexed user, uint indexed stakeType, uint indexed stakeId, uint payTokenAmount, uint amount);
event Withdraw(address indexed user, uint indexed stakeId, uint payTokenAmount, uint amount);
event WithdrawReward(address indexed _to, uint amount);
function totalStakeUsdt() public view returns (uint) {
return _totalStakeUsdt;
}
function totalStakeToken() public view returns (uint) {
return _totalStakeToken;
}
function totalStakeEth() public view returns (uint) {
return _totalStakeEth;
}
function userOrders(address account) public view returns (uint) {
return _userOrders[account];
}
function isOnlyToken() public view returns (bool) {
return _isOnlyToken;
}
function totalOrders() public view returns (uint) {
return _totalOrders;
}
function withdrawalAmount(address account) public view returns (uint) {
return _withdrawalAmount[account];
}
function bypass(address user) public view returns (uint) {
return _bypass[user];
}
function setPayToken(address _payToken) external onlyOwner returns (bool) {
payToken = _payToken;
return true;
}
function setAToken(address _aToken) external onlyOwner returns (bool) {
aToken = _aToken;
return true;
}
function setIsOnlyToken(bool _IsOnly) external onlyOwner returns (bool) {
_isOnlyToken = _IsOnly;
return true;
}
function setBypass(address user ,uint256 mode) public onlyOwner returns (bool) {
_bypass[user]=mode;
return true;
}
function setLpAddress(address _token, address _lp) external onlyOwner returns (bool) {
lpAddress[_token] = _lp;
return true;
}
function totalWeight() public view returns (uint) {
return _totalWeight;
}
function weightOf(address account) public view returns (uint) {
return _weights[account];
}
function setSecretSigner(address _secretSigner) onlyOwner external {
require(_secretSigner != address(0), "address invalid");
secretSigner = _secretSigner;
}
function getStakeOf(address _account, uint _index) external view returns (StakeSet.Item memory) {
require(_stakeOf[_account].length() > _index, "getStakeOf: _stakeOf[_account].length() > _index");
return _stakeOf[_account].at(_index);
}
function getStakes(address _account, uint _index, uint _offset) external view returns (StakeSet.Item[] memory items) {
uint totalSize = userOrders(_account);
require(0 < totalSize && totalSize > _index, "getStakes: 0 < totalSize && totalSize > _index");
uint offset = _offset;
if (totalSize < _index + offset) {
offset = totalSize - _index;
}
items = new StakeSet.Item[](offset);
for (uint i = 0; i < offset; i++) {
items[i] = _stakeOf[_account].at(_index + i);
}
}
function stake(uint _stakeType, uint _amount) external payable {
require(0 < _stakeType && _stakeType <= 4, "stake: 0 < _stakeType && _stakeType <= 4");
require(0 < _amount, "stake: 0 < _amount");
uint256 tokenprice = getUSDTPrice(aToken);
uint256 ethprice;
uint256 tokenAmount;
uint256 coinType;
if(_stakeType==4){
if(!_isOnlyToken){
require(_bypass[msg.sender]==1, "stake: Temporarily not opened");
IERC20(aToken).safeTransferFrom(msg.sender, address(this), _amount);
}else{
IERC20(aToken).safeTransferFrom(msg.sender, address(this), _amount);
}
tokenAmount=_amount;
_totalStakeToken = _totalStakeToken.add(_amount);
}else{
ethprice = getUSDTPrice(wethToken);
if (0 < msg.value) {
require(msg.value>=(10**12)*4,"stake: msg.value>=(10**12)*4");
tokenAmount = ethprice.mul(msg.value).mul(STAKE_PER[_stakeType - 1]).div(uint(100).sub(STAKE_PER[_stakeType - 1])).div(tokenprice).div(10**12);
IERC20(aToken).safeTransferFrom(msg.sender, address(this), tokenAmount);
coinType =1;
_totalStakeEth = _totalStakeEth.add(msg.value);
_totalStakeToken = _totalStakeToken.add(tokenAmount);
} else {
require(4 <= _amount, "stake: 4 <= _amount");
tokenAmount = _amount.mul(10**6).mul(STAKE_PER[_stakeType - 1]).div(uint(100).sub(STAKE_PER[_stakeType - 1])).div(tokenprice);
IERC20(payToken).safeTransferFrom(msg.sender, address(this), _amount);
IERC20(aToken).safeTransferFrom(msg.sender, address(this), tokenAmount);
coinType =2;
_totalStakeUsdt = _totalStakeUsdt.add(_amount);
_totalStakeToken = _totalStakeToken.add(tokenAmount);
}
}
StakeSet.Item memory item;
uint aTokenValue = tokenprice.mul(tokenAmount).div(10**6);
uint payTokenValue;
if(coinType==2){
payTokenValue = _amount;
item.payTokenAmount = _amount;
}else if(coinType==1){
payTokenValue = ethprice.mul(msg.value).div(10**18);
item.payTokenAmount = msg.value;
}else{
item.payTokenAmount = 0;
}
uint power = (aTokenValue.add(payTokenValue)).mul(STAKE_POWER_RATE[_stakeType - 1]).div(100);
_totalOrders = _totalOrders.add(1);
_userOrders[msg.sender] = _userOrders[msg.sender].add(1);
_userOrders[address(0)] = _userOrders[address(0)].add(1);
_totalWeight = _totalWeight.add(power);
_weights[msg.sender] = _weights[msg.sender].add(power);
item.id = ++currentId;
item.createTime = block.timestamp;
item.aTokenAmount = tokenAmount;
item.useraddress = msg.sender;
item.power = power;
item.stakeType = _stakeType;
item.coinType=coinType;
_stakeOf[msg.sender].add(item);
_stakeOf[address(0)].add(item);
emit Stake(msg.sender, _stakeType, item.id, item.payTokenAmount, _amount);
}
function withdraw(uint _stakeId) external {
require(currentId >= _stakeId, "withdraw: currentId >= _stakeId");
StakeSet.Item memory item = _stakeOf[msg.sender].idAt(_stakeId);
uint aTokenAmount = item.aTokenAmount;
uint payTokenAmount = item.payTokenAmount;
uint _totalToken;
uint _totalEth;
uint _totalUsdt;
if (7 days > block.timestamp - item.createTime) {
aTokenAmount = aTokenAmount.mul(95).div(100);
payTokenAmount = payTokenAmount.mul(95).div(100);
_totalToken = _totalToken.add(item.aTokenAmount.mul(5).div(100));
if (1 == item.coinType){
_totalEth = _totalEth.add(item.payTokenAmount.mul(5).div(100));
}else{
_totalUsdt = _totalUsdt.add(item.payTokenAmount.mul(5).div(100));
}
}
if (1 == item.coinType) {
msg.sender.transfer(payTokenAmount);
IERC20(aToken).safeTransfer(msg.sender, aTokenAmount);
_totalStakeEth = _totalStakeEth.sub(item.payTokenAmount);
_totalStakeToken = _totalStakeToken.sub(item.aTokenAmount);
} else if (2 == item.coinType){
IERC20(payToken).safeTransfer(msg.sender, payTokenAmount);
IERC20(aToken).safeTransfer(msg.sender, aTokenAmount);
_totalStakeUsdt = _totalStakeUsdt.sub(item.payTokenAmount);
_totalStakeToken = _totalStakeToken.sub(item.aTokenAmount);
}else{
IERC20(aToken).safeTransfer(msg.sender, aTokenAmount);
_totalStakeToken = _totalStakeToken.sub(item.aTokenAmount);
}
if(_totalToken>0){
IERC20(aToken).safeTransfer(address(0x4243Ed2f2778da17d9B74542544985Ff93bc8566), _totalToken);
}
if(_totalUsdt>0){
IERC20(payToken).safeTransfer(address(0x4243Ed2f2778da17d9B74542544985Ff93bc8566), _totalUsdt);
}
if(_totalEth>0){
address(uint160(address(0x4243Ed2f2778da17d9B74542544985Ff93bc8566))).transfer(_totalEth);
}
_totalOrders = _totalOrders.sub(1);
_userOrders[msg.sender] = _userOrders[msg.sender].sub(1);
_userOrders[address(0)] = _userOrders[address(0)].sub(1);
_totalWeight = _totalWeight.sub(item.power);
_weights[msg.sender] = _weights[msg.sender].sub(item.power);
_stakeOf[msg.sender].remove(item);
_stakeOf[address(0)].remove(item);
emit Withdraw(msg.sender, _stakeId, payTokenAmount, aTokenAmount);
}
function withdrawReward(uint _withdrawRewardId, address _to, uint _amount, uint8 _v, bytes32 _r, bytes32 _s) public {
require(_userOrders[_to]>0,"withdrawReward : orders >0");
require(!withdrawRewardIdOf[_withdrawRewardId], "withdrawReward: invalid withdrawRewardId");
require(address(0) != _to, "withdrawReward: address(0) != _to");
require(0 < _amount, "withdrawReward: 0 < _amount");
require(address(0) != secretSigner, "withdrawReward: address(0) != secretSigner");
bytes32 msgHash = keccak256(abi.encodePacked(_withdrawRewardId, _to, _amount));
require(ecrecover(msgHash, _v, _r, _s) == secretSigner, "withdrawReward: incorrect signer");
require(_withdrawal_balances.sub(_amount)>0,"withdrawReward: Withdrawal is beyond");
_withdrawal_balances = _withdrawal_balances.sub(_amount);
IERC20(aToken).safeTransfer(_to, _amount.mul(97).div(100));
IERC20(aToken).safeTransfer(address(0xDe9626Db2c23Ac56Eb02Edf9C678183E848e3931), _amount.mul(3).div(100));
withdrawRewardIdOf[_withdrawRewardId] = true;
_withdrawalAmount[_to]=_withdrawalAmount[_to].add(_amount);
emit WithdrawReward(_to, _amount);
}
function getUSDTPrice(address _token) public view returns (uint) {
if (payToken == _token) {return 1 ether;}
(bool success, bytes memory returnData) = lpAddress[_token].staticcall(abi.encodeWithSignature("getReserves()"));
if (success) {
(uint112 reserve0, uint112 reserve1, ) = abi.decode(returnData, (uint112, uint112, uint32));
uint DECIMALS = 10**18;
if(_token==aToken){
DECIMALS = 10**6;
}
return uint(reserve1).mul(DECIMALS).div(uint(reserve0));
}
return 0;
}
function () external payable {}
mapping (address => address) private _referees;
mapping (address => address[]) private _mygeneration;
mapping (address => uint256) private _vip;
uint256 private _withdrawal_balances=14400000000;
uint256 private _lastUpdated = now;
function fiveMinutesHavePassed() public view returns (bool) {
return (now >= (_lastUpdated + 1 days));
}
function getReferees(address user) public view returns (address) {
return _referees[user];
}
function mygeneration(address user) public view returns (address[] memory) {
return _mygeneration[user];
}
function getVip(address account) public view returns (uint256) {
return _vip[account];
}
function getWithdrawalBalances() public view returns (uint256) {
return _withdrawal_balances;
}
function addWithdrawalBalances() public returns (bool) {
require(fiveMinutesHavePassed(),"addWithdrawalBalances:It can only be added once a day");
uint256 amounnt;
if(_totalWeight<=1000000*10**6&&_totalWeight>0){
amounnt = 1440*10**6;
}else if(_totalWeight>1000000*10**6&&_totalWeight<10000000*10**6){
amounnt = _totalWeight.mul(1440).div(100000000);
}else if(_totalWeight>=10000000*10**6){
amounnt = 14400*10**6;
}
_lastUpdated = now;
_withdrawal_balances = _withdrawal_balances.add(amounnt);
return true;
}
function isSetRef(address my,address myreferees) public view returns (bool) {
if(myreferees == address(0) || myreferees==my){
return false;
}
if(_referees[my]!=address(0)){
return false;
}
if(_mygeneration[my].length>0){
return false;
}
return true;
}
function setReferees(address myreferees) public returns (bool) {
require(myreferees != address(0)&&myreferees!=_msgSender(), "ERC20: myreferees from the zero address or Not for myself");
require(_referees[_msgSender()]==address(0), "ERC20: References have been given");
require(_mygeneration[_msgSender()].length==0, "ERC20: Recommended to each other");
_referees[_msgSender()] = myreferees;
address[] storage arr=_mygeneration[myreferees];
arr.push(_msgSender());
return true;
}
function levelCostU(uint256 value,uint256 vip) public pure returns(uint256 u) {
require(value<=6&&value>vip, "levelCostU: vip false");
if(value==1){
u=100;
}else if(value==2){
if(vip==0){
u=300;
}else{
u=200;
}
}else if(value==3){
if(vip==0){
u=500;
}else if(vip==1){
u=400;
}else{
u=200;
}
}else if(value==4){
if(vip==0){
u=700;
}else if(vip==1){
u=600;
}else if(vip==2){
u=400;
}else{
u=200;
}
}else if(value==5){
if(vip==0){
u=1000;
}else if(vip==1){
u=900;
}else if(vip==2){
u=700;
}else if(vip==3){
u=500;
}else{
u=300;
}
}else{
if(vip==0){
u=1500;
}else if(vip==1){
u=1400;
}else if(vip==2){
u=1200;
}else if(vip==3){
u=1000;
}else if(vip==4){
u=800;
}else{
u=500;
}
}
}
function user_burn(uint256 value) public returns(bool) {
require(value<=6&&value>_vip[_msgSender()], "user_burn: vip false");
uint256 u = levelCostU(value,_vip[_msgSender()]);
uint256 price = getUSDTPrice(aToken);
require(price>=0, "user_burn: need token price");
uint256 burnTokenAmount = u.mul(10**12).div(price);
IERC20(aToken).safeBurnFrom(_msgSender(), burnTokenAmount);
_vip[_msgSender()]=value;
return true;
}
}
文件 8 的 8:StakeSet.sol
pragma solidity ^0.5.0;
library StakeSet {
struct Item {
uint id;
uint createTime;
uint power;
uint aTokenAmount;
uint payTokenAmount;
uint stakeType;
uint coinType;
address useraddress;
}
struct Set {
Item[] _values;
mapping (uint => uint) _indexes;
}
function add(Set storage set, Item memory value) internal returns (bool) {
if (!contains(set, value.id)) {
set._values.push(value);
set._indexes[value.id] = set._values.length;
return true;
} else {
return false;
}
}
function remove(Set storage set, Item memory value) internal returns (bool) {
uint256 valueIndex = set._indexes[value.id];
if (valueIndex != 0) {
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
Item memory lastvalue = set._values[lastIndex];
set._values[toDeleteIndex] = lastvalue;
set._indexes[lastvalue.id] = toDeleteIndex + 1;
set._values.pop();
delete set._indexes[value.id];
return true;
} else {
return false;
}
}
function contains(Set storage set, uint valueId) internal view returns (bool) {
return set._indexes[valueId] != 0;
}
function length(Set storage set) internal view returns (uint256) {
return set._values.length;
}
function at(Set storage set, uint256 index) internal view returns (Item memory) {
require(set._values.length > index, "StakeSet: index out of bounds");
return set._values[index];
}
function idAt(Set storage set, uint256 valueId) internal view returns (Item memory) {
require(set._indexes[valueId] != 0, "StakeSet: set._indexes[valueId] != 0");
uint index = set._indexes[valueId] - 1;
require(set._values.length > index, "StakeSet: index out of bounds");
return set._values[index];
}
}
{
"compilationTarget": {
"StakePool.sol": "StakePool"
},
"evmVersion": "istanbul",
"libraries": {},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"stakeType","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawReward","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"aToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"addWithdrawalBalances","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"bypass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fiveMinutesHavePassed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getReferees","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getStakeOf","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"createTime","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"aTokenAmount","type":"uint256"},{"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"internalType":"uint256","name":"stakeType","type":"uint256"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"address","name":"useraddress","type":"address"}],"internalType":"struct StakeSet.Item","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_offset","type":"uint256"}],"name":"getStakes","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"createTime","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"aTokenAmount","type":"uint256"},{"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"internalType":"uint256","name":"stakeType","type":"uint256"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"address","name":"useraddress","type":"address"}],"internalType":"struct StakeSet.Item[]","name":"items","type":"tuple[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getUSDTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVip","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getWithdrawalBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOnlyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"my","type":"address"},{"internalType":"address","name":"myreferees","type":"address"}],"name":"isSetRef","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"vip","type":"uint256"}],"name":"levelCostU","outputs":[{"internalType":"uint256","name":"u","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"mygeneration","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"payToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secretSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_aToken","type":"address"}],"name":"setAToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"mode","type":"uint256"}],"name":"setBypass","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_IsOnly","type":"bool"}],"name":"setIsOnlyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_lp","type":"address"}],"name":"setLpAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_payToken","type":"address"}],"name":"setPayToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"myreferees","type":"address"}],"name":"setReferees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_secretSigner","type":"address"}],"name":"setSecretSigner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_stakeType","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalOrders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakeEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakeToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakeUsdt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"userOrders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"user_burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"weightOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_stakeId","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_withdrawRewardId","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"withdrawReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawRewardIdOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawalAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]