pragma solidity 0.5.12 <0.6.0;
// -------------------------------------------------------------------------------------------
// EXMR FOUNDATION = EXMR FND.
// "Public Smart Contract"
//
// For details, please visit: https://exmrfoundation.org
// Staking Reward: https://dapp.exmr.io
// We handle different projects, we are opening the doors to the entire developer community
// so they can create Dapps and platforms based on our EXMR and get rewards for it...
// -------------------------------------------------------------------------------------------
contract ownerShip
{
address payable public owner;
address payable public newOwner;
bool public safeGuard ;
event OwnershipTransferredEv(address payable indexed previousOwner, address payable indexed newOwner);
constructor() public
{
owner = msg.sender;
safeGuard = false;
}
modifier onlyOwner()
{
require(msg.sender == owner);
_;
}
function transferOwnership(address payable _newOwner) public onlyOwner
{
newOwner = _newOwner;
}
function acceptOwnership() public
{
require(msg.sender == newOwner);
emit OwnershipTransferredEv(owner, newOwner);
owner = newOwner;
newOwner = address(0);
}
function changesafeGuardStatus() onlyOwner public
{
if (safeGuard == false)
{
safeGuard = true;
}
else
{
safeGuard = false;
}
}
}
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) {
require(b <= a, "SafeMath: subtraction overflow");
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) {
require(b > 0, "SafeMath: division by zero");
uint256 c = a / b;
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0, "SafeMath: modulo by zero");
return a % b;
}
}
contract tokenERC20 is ownerShip
{
using SafeMath for uint256;
bytes23 public name;
bytes8 public symbol;
uint8 public decimals;
uint256 public totalSupply;
uint256 public totalMintAfterInitial;
uint256 public maximumSupply;
uint public burningRate = 500; // 500=5%
struct userBalance
{
uint256 totalValue;
uint256 freezeValue;
uint256 freezeDate;
uint256 meltValue;
}
mapping (address => mapping (address => userBalance)) public tokens;
mapping (address => uint256) public balanceOf;
mapping (address => mapping (address => uint256)) public allowance;
mapping (address => bool) public frozenAccount;
event FrozenFunds(address target, bool frozen);
event Transfer(address indexed from, address indexed to, uint256 value);
event Burn(address indexed from, uint256 value);
function calculatePercentage(uint256 PercentOf, uint256 percentTo ) internal pure returns (uint256)
{
uint256 factor = 10000;
require(percentTo <= factor);
uint256 c = PercentOf.mul(percentTo).div(factor);
return c;
}
function setBurningRate(uint _burningRate) onlyOwner public returns(bool success)
{
burningRate = _burningRate;
return true;
}
struct tokenTypeData
{
bytes23 tokenName;
bytes8 tokenSymbol;
uint decimalCount;
uint minFreezingValue;
uint rateFactor;
uint perDayFreezeRate;
bool freezingAllowed;
}
mapping (address => tokenTypeData) public tokenTypeDatas;
constructor () public {
decimals = 18;
totalSupply = 18000000000000000000000000;
maximumSupply = 75000000000000000000000000;
balanceOf[msg.sender]=totalSupply;
tokens[address(this)][owner].totalValue = balanceOf[msg.sender];
name = "EXMR FDN.";
symbol = "EXMR";
tokenTypeData memory temp;
temp.tokenName=name;
temp.tokenSymbol=symbol;
temp.decimalCount=decimals;
temp.minFreezingValue=100;
temp.rateFactor=10000;
temp.perDayFreezeRate=1;
temp.freezingAllowed=true;
tokenTypeDatas[address(this)] = temp;
emit Transfer(address(0), msg.sender, totalSupply);
}
function _transfer(address _from, address _to, uint _value) internal {
require(!safeGuard,"safeGuard Active");
require (_to != address(0),"to is address 0");
require (balanceOf[_from] >= _value, "no balance in from");
require (balanceOf[_to].add(_value) >= balanceOf[_to],"overflow balance");
require(!frozenAccount[_from],"from account frozen");
require(!frozenAccount[_to],"to account frozen");
balanceOf[_from] = balanceOf[_from].sub(_value);
tokens[address(this)][_from].totalValue = tokens[address(this)][_from].totalValue.sub(_value);
balanceOf[_to] = balanceOf[_to].add(_value);
tokens[address(this)][_to].totalValue = tokens[address(this)][_to].totalValue.add(_value);
uint burnValue;
if(!(msg.sender == owner || msg.sender == address(this)))
{
burnValue = calculatePercentage(_value,burningRate);
require(burnInternal(_to, burnValue),"burning failed");
}
emit Transfer(_from, _to,_value);
}
function burnInternal(address _burnFrom, uint _burnValue) internal returns(bool success)
{
require(!safeGuard,"safeGuard Active");
require(_burnFrom != address(0));
require(balanceOf[_burnFrom] >= _burnValue);
require(!frozenAccount[_burnFrom],"to account frozen");
balanceOf[_burnFrom] = balanceOf[_burnFrom].sub(_burnValue);
tokens[address(this)][_burnFrom].totalValue = tokens[address(this)][_burnFrom].totalValue.sub(_burnValue);
balanceOf[address(0)] = balanceOf[address(0)].add(_burnValue);
tokens[address(this)][address(0)].totalValue = tokens[address(this)][address(0)].totalValue.add(_burnValue);
totalSupply = totalSupply.sub(_burnValue);
emit Transfer(_burnFrom, address(0),_burnValue);
return true;
}
function mintInternal(uint256 mintedAmount) internal returns (bool success) {
totalSupply = totalSupply.add(mintedAmount);
totalMintAfterInitial = totalMintAfterInitial.add(mintedAmount);
return true;
}
function transfer(address _to, uint256 _value) public returns (bool success) {
_transfer(msg.sender, _to, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
require(!safeGuard);
require(_from != address(0),"transfer from adderss(0) is invalid");
require(_value <= allowance[_from][msg.sender]); // Check allowance
allowance[_from][msg.sender] = allowance[_from][msg.sender].sub(_value);
_transfer(_from, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) public
returns (bool success) {
require(!safeGuard);
allowance[msg.sender][_spender] = _value;
return true;
}
function mintToken(address target, uint256 mintedAmount) public onlyOwner returns (bool success) {
balanceOf[target] = balanceOf[target].add(mintedAmount);
tokens[address(this)][target].totalValue = tokens[address(this)][target].totalValue.add(mintedAmount); //parallel record for multi token addressing need
totalSupply = totalSupply.add(mintedAmount);
totalMintAfterInitial = totalMintAfterInitial.add(mintedAmount);
emit Transfer(address(0), address(this), mintedAmount);
return true;
}
function burn(uint256 _value) public onlyOwner returns (bool success) {
burnInternal(msg.sender, _value);
return true;
}
function burnFrom(address _from, uint256 _value) public onlyOwner returns (bool success) {
burnInternal(_from, _value);
return true;
}
}
interface ERC20Necessary {
function transfer(address to, uint256 value) external returns (bool);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function totalSupply() external view returns (uint256);
function balanceOf(address who) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract EXMR_FDN is tokenERC20
{
using SafeMath for uint256;
bool public whitelistingStatus = false;
mapping (address => bool) public whitelisted;
function changeWhitelistingStatus() onlyOwner public{
if (whitelistingStatus == false){
whitelistingStatus = true;
whitelisted[owner]= true;
}
else{
whitelistingStatus = false;
}
}
function whitelistUser(address userAddress) onlyOwner public{
require(whitelistingStatus == true);
require(userAddress != address(0));
whitelisted[userAddress] = true;
}
function freezeAccount(address target, bool freeze) onlyOwner public {
frozenAccount[target] = freeze;
emit FrozenFunds(target, freeze);
}
function manualWithdrawToken(uint256 _amount) onlyOwner public {
uint256 tokenAmount = _amount.mul(100);
_transfer(address(this), msg.sender, tokenAmount);
}
function manualWithdrawEther()onlyOwner public{
uint256 amount=address(this).balance;
owner.transfer(amount);
}
//Bounty
function Bounty(address[] memory recipients,uint[] memory tokenAmount) public onlyOwner returns (bool) {
uint reciversLength = recipients.length;
require(reciversLength <= 150);
for(uint i = 0; i < reciversLength; i++)
{
//This will loop through all the recipients and send them the specified tokens
_transfer(owner, recipients[i], tokenAmount[i]);
}
return true;
}
uint public meltHoldSeconds = 172800; // 48 Hr. user can withdraw only after this period
event tokenDepositEv(address token, address user, uint amount, uint balance);
event tokenWithdrawEv(address token, address user, uint amount, uint balance);
function setWithdrawWaitingPeriod(uint valueInSeconds) onlyOwner public returns (bool)
{
meltHoldSeconds = valueInSeconds;
return true;
}
function newTokenTypeData(address token,bytes23 _tokenName, bytes8 _tokenSymbol, uint _decimalCount, uint _minFreezingValue, uint _rateFactor, uint _perDayFreezeRate) onlyOwner public returns (bool)
{
tokenTypeData memory temp;
temp.tokenName=_tokenName;
temp.tokenSymbol=_tokenSymbol;
temp.decimalCount=_decimalCount;
temp.minFreezingValue=_minFreezingValue;
temp.rateFactor=_rateFactor;
temp.perDayFreezeRate=_perDayFreezeRate;
temp.freezingAllowed=true;
tokenTypeDatas[token] = temp;
return true;
}
function freezingOnOffForTokenType(address token) onlyOwner public returns (bool)
{
if (tokenTypeDatas[token].freezingAllowed == false)
{
tokenTypeDatas[token].freezingAllowed = true;
}
else
{
tokenTypeDatas[token].freezingAllowed = false;
}
return true;
}
function setMinFreezingValue(address token, uint _minFreezingValue) onlyOwner public returns (bool)
{
tokenTypeDatas[token].minFreezingValue = _minFreezingValue;
return true;
}
function setRateFactor(address token, uint _rateFactor) onlyOwner public returns (bool)
{
tokenTypeDatas[token].rateFactor = _rateFactor;
return true;
}
function setPerDayFreezeRate(address token, uint _perDayFreezeRate) onlyOwner public returns (bool)
{
tokenTypeDatas[token].perDayFreezeRate = _perDayFreezeRate;
return true;
}
function tokenDeposit(address token, uint amount) public
{
require(token!=address(0),"Address(0) found, can't continue");
require(ERC20Necessary(token).transferFrom(msg.sender, address(this), amount),"ERC20 'transferFrom' call failed");
tokens[token][msg.sender].totalValue = tokens[token][msg.sender].totalValue.add(amount);
emit tokenDepositEv(token, msg.sender, amount, tokens[token][msg.sender].totalValue);
}
function tokenWithdraw(address token, uint amount) public
{
require(!safeGuard,"System Paused By Admin");
require(token != address(this));
require(token!=address(0),"Address(0) found, can't continue");
if(now.sub(meltHoldSeconds) > tokens[token][msg.sender].freezeDate)
{
tokens[token][msg.sender].meltValue = 0;
}
require(tokens[token][msg.sender].totalValue.sub(tokens[token][msg.sender].freezeValue.add(tokens[token][msg.sender].meltValue)) >= amount,"Required amount is not free to withdraw");
tokens[token][msg.sender].totalValue = tokens[token][msg.sender].totalValue.sub(amount);
ERC20Necessary(token).transfer(msg.sender, amount);
emit tokenWithdrawEv(token, msg.sender, amount, tokens[token][msg.sender].totalValue);
}
event releaseMyExmrEv(address token, uint amount);
//releasing after minumum waiting period to withdraw EXMR
function releaseMyExmr(address token) public returns (bool)
{
require(!safeGuard,"System Paused By Admin");
require(token!=address(0),"Address(0) found, can't continue");
require(token == address(this),"Only pissible for EXMR ");
require(now.sub(meltHoldSeconds) > tokens[token][msg.sender].freezeDate,"wait period is not over");
uint amount = tokens[token][msg.sender].meltValue;
balanceOf[msg.sender] = balanceOf[msg.sender].add(amount);
tokens[token][msg.sender].totalValue = balanceOf[msg.sender].add(tokens[token][msg.sender].freezeValue );
tokens[token][msg.sender].meltValue = 0;
emit releaseMyExmrEv(token, amount);
return true;
}
event tokenBalanceFreezeEv(address token, uint amount, uint earning);
function tokenBalanceFreeze(address token, uint amount) public returns (bool)
{
require(!safeGuard,"System Paused By Admin");
require(tokenTypeDatas[token].freezingAllowed,"token type not allowed to freeze");
require(token!=address(0),"Address(0) found, can't continue");
address callingUser = msg.sender;
require(msg.sender != address(0),"Address(0) found, can't continue");
require(amount <= tokens[token][callingUser].totalValue.sub(tokens[token][callingUser].freezeValue.add(tokens[token][callingUser].meltValue)) && amount >= tokenTypeDatas[token].minFreezingValue, "less than required or less balance");
uint freezeValue = tokens[token][callingUser].freezeValue;
uint earnedValue;
if (freezeValue > 0)
{
earnedValue = getEarning(token,callingUser,freezeValue);
require(mintInternal(earnedValue),"minting failed");
tokens[address(this)][callingUser].meltValue = tokens[address(this)][callingUser].meltValue.add(earnedValue);
}
tokens[token][callingUser].freezeValue = tokens[token][callingUser].freezeValue.add(amount);
if (token==address(this))
{
balanceOf[callingUser] = balanceOf[callingUser].sub(amount);
}
tokens[token][callingUser].freezeDate = now;
emit tokenBalanceFreezeEv(token,amount,earnedValue);
return true;
}
function getEarning(address token,address user,uint amount) internal view returns(uint256)
{
uint effectiveAmount = calculatePercentage(amount,tokenTypeDatas[token].rateFactor);
uint interestAmount = calculatePercentage(effectiveAmount,tokenTypeDatas[token].perDayFreezeRate);
uint secondsPassed = (now - tokens[token][user].freezeDate);
uint daysPassed=0;
if (secondsPassed >= 86400) // if less than one day earning will be zero
{
daysPassed = secondsPassed.div(86400);
}
return daysPassed.mul(interestAmount);
}
event tokenBalanceMeltEv(address token, uint amount, uint earning);
function tokenBalanceMelt(address token, uint amount) public returns (bool)
{
require(!safeGuard,"System Paused By Admin");
require(token!=address(0),"Address(0) found, can't continue");
address callingUser = msg.sender;
require(msg.sender != address(0),"Address(0) found, can't continue");
require(amount <= tokens[token][callingUser].freezeValue && amount > 0, "less than required or less balance");
uint freezeValue = tokens[token][callingUser].freezeValue;
uint earnedValue = getEarning(token,callingUser,freezeValue);
require(mintInternal(earnedValue),"minting failed");
tokens[address(this)][callingUser].meltValue = tokens[address(this)][callingUser].meltValue.add(earnedValue);
tokens[token][callingUser].freezeValue = tokens[token][callingUser].freezeValue.sub(amount);
if (token==address(this))
{
tokens[token][callingUser].meltValue = tokens[token][callingUser].meltValue.add(amount);
}
tokens[token][callingUser].freezeDate = now;
emit tokenBalanceMeltEv(token,amount,earnedValue);
return true;
}
function viewMyReward(address token) public view returns(uint freezedValue, uint rewardValue)
{
address callingUser = msg.sender;
uint freezeValue = tokens[token][callingUser].freezeValue;
uint earnedValue = getEarning(token,callingUser,freezeValue);
return (freezeValue,earnedValue);
}
}
{
"compilationTarget": {
"EXMR_FDN.sol": "EXMR_FDN"
},
"evmVersion": "petersburg",
"libraries": {},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"frozen","type":"bool"}],"name":"FrozenFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address payable","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address payable","name":"newOwner","type":"address"}],"name":"OwnershipTransferredEv","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"releaseMyExmrEv","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"earning","type":"uint256"}],"name":"tokenBalanceFreezeEv","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"earning","type":"uint256"}],"name":"tokenBalanceMeltEv","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"tokenDepositEv","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"tokenWithdrawEv","type":"event"},{"constant":false,"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmount","type":"uint256[]"}],"name":"Bounty","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burnFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"burningRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"changeWhitelistingStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"changesafeGuardStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"freeze","type":"bool"}],"name":"freezeAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"freezingOnOffForTokenType","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"frozenAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"manualWithdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manualWithdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maximumSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"meltHoldSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"mintedAmount","type":"uint256"}],"name":"mintToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"bytes23","name":"","type":"bytes23"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes23","name":"_tokenName","type":"bytes23"},{"internalType":"bytes8","name":"_tokenSymbol","type":"bytes8"},{"internalType":"uint256","name":"_decimalCount","type":"uint256"},{"internalType":"uint256","name":"_minFreezingValue","type":"uint256"},{"internalType":"uint256","name":"_rateFactor","type":"uint256"},{"internalType":"uint256","name":"_perDayFreezeRate","type":"uint256"}],"name":"newTokenTypeData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"releaseMyExmr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"safeGuard","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_burningRate","type":"uint256"}],"name":"setBurningRate","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_minFreezingValue","type":"uint256"}],"name":"setMinFreezingValue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_perDayFreezeRate","type":"uint256"}],"name":"setPerDayFreezeRate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_rateFactor","type":"uint256"}],"name":"setRateFactor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"valueInSeconds","type":"uint256"}],"name":"setWithdrawWaitingPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"bytes8","name":"","type":"bytes8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokenBalanceFreeze","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokenBalanceMelt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokenDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenTypeDatas","outputs":[{"internalType":"bytes23","name":"tokenName","type":"bytes23"},{"internalType":"bytes8","name":"tokenSymbol","type":"bytes8"},{"internalType":"uint256","name":"decimalCount","type":"uint256"},{"internalType":"uint256","name":"minFreezingValue","type":"uint256"},{"internalType":"uint256","name":"rateFactor","type":"uint256"},{"internalType":"uint256","name":"perDayFreezeRate","type":"uint256"},{"internalType":"bool","name":"freezingAllowed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokenWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"uint256","name":"totalValue","type":"uint256"},{"internalType":"uint256","name":"freezeValue","type":"uint256"},{"internalType":"uint256","name":"freezeDate","type":"uint256"},{"internalType":"uint256","name":"meltValue","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalMintAfterInitial","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"viewMyReward","outputs":[{"internalType":"uint256","name":"freezedValue","type":"uint256"},{"internalType":"uint256","name":"rewardValue","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"whitelistUser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelistingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}]