编译器
0.5.16+commit.9c3226ce
文件 1 的 7:IDparam.sol
pragma solidity >=0.5.0 <0.8.0;
interface IDparam {
event FeeRateEvent(uint256 feeRate);
event LiquidationLineEvent(uint256 liquidationRate);
event MinMintEvent(uint256 minMint);
function stakeRate() external view returns (uint256);
function liquidationLine() external view returns (uint256);
function feeRate() external view returns (uint256);
function minMint() external view returns (uint256);
function setFeeRate(uint256 _feeRate) external;
function setLiquidationLine(uint256 _liquidationLine) external;
function setMinMint(uint256 _minMint) external;
function isLiquidation(uint256 price) external view returns (bool);
function isNormal(uint256 price) external view returns (bool);
}
文件 2 的 7: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);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
文件 3 的 7:Math.sol
pragma solidity ^0.5.0;
library Math {
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
function average(uint256 a, uint256 b) internal pure returns (uint256) {
return (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2);
}
}
文件 4 的 7:OinStake.sol
pragma solidity >=0.5.0 <0.8.0;
import "./Math.sol";
import "./SafeMath.sol";
import "./IERC20.sol";
import "./Owned.sol";
import "./IDparam.sol";
import "./WhiteList.sol";
interface IOracle {
function val() external returns (uint256);
function poke(uint256 price) external;
function peek() external;
}
interface IESM {
function isStakePaused() external view returns (bool);
function isRedeemPaused() external view returns (bool);
function isClosed() external view returns (bool);
function time() external view returns (uint256);
}
interface ICoin {
function burn(address account, uint256 amount) external;
function mint(address account, uint256 amount) external;
function balanceOf(address account) external view returns (uint256);
}
contract OinStake is Owned, WhiteList {
using Math for uint256;
using SafeMath for uint256;
struct RewardState {
uint256 index;
uint256 block;
}
struct StakerState {
uint256 index;
uint256 reward;
}
uint256 public reward;
uint256 public rewardSpeed = 5e8;
uint256 public initialIndex = 1e16;
uint256 public doubleScale = 1e16;
RewardState public rewardState;
mapping(address => StakerState) public stakerStates;
mapping(address => uint256) public tokens;
mapping(address => uint256) public coins;
uint256 public totalCoin;
uint256 public totalToken;
uint256 public sFee;
uint256 constant ONE = 10**8;
address constant blackhole = 0x1111111111111111111111111111111111111111;
IDparam params;
IOracle orcl;
IESM esm;
ICoin coin;
IERC20 token;
event SetupOracle(address orcl);
event SetupParam(address param);
event SetupEsm(address esm);
event SetupCoin(address token, address coin);
event StakeEvent(uint256 token, uint256 coin);
event RedeemEvent(uint256 token, uint256 move, uint256 fee, uint256 coin);
event IndexUpdate(uint256 delt, uint256 block, uint256 index);
event ClaimToken(address holder, uint256 amount);
event InjectReward(uint256 amount);
event ExtractReward(address reciver, uint256 amount);
constructor(
address _param,
address _orcl,
address _esm
) public Owned(msg.sender) {
params = IDparam(_param);
orcl = IOracle(_orcl);
esm = IESM(_esm);
rewardState = RewardState(initialIndex, getBlockNumber());
}
modifier notClosed() {
require(!esm.isClosed(), "System closed");
_;
}
function setupParams(address _params) public onlyWhiter {
params = IDparam(_params);
emit SetupParam(_params);
}
function setupOracle(address _orcl) public onlyWhiter {
orcl = IOracle(_orcl);
emit SetupOracle(_orcl);
}
function setupEsm(address _esm) public onlyWhiter {
esm = IESM(_esm);
emit SetupEsm(_esm);
}
function getParamsAddr() public view returns (address) {
return address(params);
}
function getOracleAddr() public view returns (address) {
return address(orcl);
}
function getEsmAddr() public view returns (address) {
return address(esm);
}
function getCoinAddress() public view returns (address) {
return address(coin);
}
function getTokenAddress() public view returns (address) {
return address(token);
}
function setup(address _token, address _coin) public onlyWhiter {
require(
address(token) == address(0) && address(coin) == address(0),
"setuped yet."
);
token = IERC20(_token);
coin = ICoin(_coin);
emit SetupCoin(_token, _coin);
}
function debtOf(address account) public view returns (uint256, uint256) {
return (tokens[account], coins[account]);
}
function getInputToken(uint256 coinAmount)
public
view
returns (uint256 tokenAmount)
{
tokenAmount = coinAmount.mul(params.stakeRate());
}
function stake(uint256 coinAmount) external notClosed {
require(!esm.isStakePaused(), "Stake paused");
require(coinAmount > 0, "The quantity is less than the minimum");
require(orcl.val() > 0, "Oracle price not initialized.");
require(params.isNormal(orcl.val()), "Oin's price is too low.");
address from = msg.sender;
if (coins[from] == 0) {
require(
coinAmount >= params.minMint(),
"First make coin must grater than 100."
);
}
accuredToken(from);
uint256 tokenAmount = getInputToken(coinAmount);
token.transferFrom(from, address(this), tokenAmount);
coin.mint(from, coinAmount);
totalCoin = totalCoin.add(coinAmount);
totalToken = totalToken.add(tokenAmount);
coins[from] = coins[from].add(coinAmount);
tokens[from] = tokens[from].add(tokenAmount);
emit StakeEvent(tokenAmount, coinAmount);
}
function _normalRedeem(uint256 coinAmount, address receiver)
internal
notClosed
{
require(!esm.isRedeemPaused(), "Redeem paused");
address staker = msg.sender;
require(coins[staker] > 0, "No collateral");
require(coinAmount > 0, "The quantity is less than zero");
require(coinAmount <= coins[staker], "input amount overflow");
accuredToken(staker);
uint256 tokenAmount = getInputToken(coinAmount);
uint256 feeRate = params.feeRate();
uint256 fee = tokenAmount.mul(feeRate).div(1000);
uint256 move = tokenAmount.sub(fee);
sFee = sFee.add(fee);
token.transfer(blackhole, fee);
coin.burn(staker, coinAmount);
token.transfer(receiver, move);
coins[staker] = coins[staker].sub(coinAmount);
tokens[staker] = tokens[staker].sub(tokenAmount);
totalCoin = totalCoin.sub(coinAmount);
totalToken = totalToken.sub(tokenAmount);
emit RedeemEvent(tokenAmount, move, fee, coinAmount);
}
function _abnormalRedeem(uint256 coinAmount, address receiver) internal {
require(esm.isClosed(), "System not Closed yet.");
address from = msg.sender;
require(coinAmount > 0, "The quantity is less than zero");
require(coin.balanceOf(from) > 0, "The coin no balance.");
require(coinAmount <= coin.balanceOf(from), "Coin balance exceed");
uint256 tokenAmount = getInputToken(coinAmount);
coin.burn(from, coinAmount);
token.transfer(receiver, tokenAmount);
totalCoin = totalCoin.sub(coinAmount);
totalToken = totalToken.sub(tokenAmount);
emit RedeemEvent(tokenAmount, tokenAmount, 0, coinAmount);
}
function redeem(uint256 coinAmount, address receiver) public {
_normalRedeem(coinAmount, receiver);
}
function redeem(uint256 coinAmount) public {
redeem(coinAmount, msg.sender);
}
function redeemMax(address holder) public {
redeem(coins[msg.sender], holder);
}
function redeemMax() public {
redeemMax(msg.sender);
}
function oRedeem(uint256 coinAmount, address receiver) public {
_abnormalRedeem(coinAmount, receiver);
}
function oRedeem(uint256 coinAmount) public {
oRedeem(coinAmount, msg.sender);
}
function setRewardSpeed(uint256 speed) public onlyWhiter {
updateIndex();
rewardSpeed = speed;
}
function updateIndex() public {
if (esm.isClosed()) {
return;
}
uint256 blockNumber = getBlockNumber();
uint256 deltBlock = blockNumber.sub(rewardState.block);
if (deltBlock > 0) {
uint256 accruedReward = rewardSpeed.mul(deltBlock);
uint256 ratio = totalToken == 0
? 0
: accruedReward.mul(doubleScale).div(totalToken);
rewardState.index = rewardState.index.add(ratio);
rewardState.block = blockNumber;
emit IndexUpdate(deltBlock, blockNumber, rewardState.index);
}
}
function accuredToken(address account) internal {
updateIndex();
StakerState storage stakerState = stakerStates[account];
stakerState.reward = _getReward(account);
stakerState.index = rewardState.index;
}
function _getReward(address staker) internal view returns (uint256 value) {
StakerState storage stakerState = stakerStates[staker];
value = stakerState.reward.add(
rewardState.index.sub(stakerState.index).mul(tokens[staker]).div(
doubleScale
)
);
}
function getHolderReward(address account)
public
view
returns (uint256 value)
{
uint256 blockReward2 = (totalToken == 0 || esm.isClosed())
? 0
: getBlockNumber()
.sub(rewardState.block)
.mul(rewardSpeed)
.mul(tokens[account])
.div(totalToken);
value = _getReward(account) + blockReward2;
}
function claimToken(address holder) public {
accuredToken(holder);
StakerState storage stakerState = stakerStates[holder];
uint256 value = stakerState.reward.min(reward);
require(value > 0, "The reward of address is zero.");
token.transfer(holder, value);
reward = reward.sub(value);
stakerState.index = rewardState.index;
stakerState.reward = stakerState.reward.sub(value);
emit ClaimToken(holder, value);
}
function getBlockNumber() public view returns (uint256) {
return block.number;
}
function injectReward(uint256 amount) external onlyOwner {
token.transferFrom(msg.sender, address(this), amount);
reward = reward.add(amount);
emit InjectReward(amount);
}
function extractReward(address account, uint256 amount) external onlyOwner {
require(amount <= reward, "withdraw overflow.");
token.transfer(account, amount);
reward = reward.sub(amount);
emit ExtractReward(account, amount);
}
}
文件 5 的 7:Owned.sol
pragma solidity ^0.5.16;
contract Owned {
address public owner;
address public nominatedOwner;
constructor(address _owner) public {
require(_owner != address(0), "Owner address cannot be 0");
owner = _owner;
emit OwnerChanged(address(0), _owner);
}
function nominateNewOwner(address _owner) external onlyOwner {
nominatedOwner = _owner;
emit OwnerNominated(_owner);
}
function acceptOwnership() external {
require(
msg.sender == nominatedOwner,
"You must be nominated before you can accept ownership"
);
emit OwnerChanged(owner, nominatedOwner);
owner = nominatedOwner;
nominatedOwner = address(0);
}
modifier onlyOwner {
require(
msg.sender == owner,
"Only the contract owner may perform this action"
);
_;
}
event OwnerNominated(address newOwner);
event OwnerChanged(address oldOwner, address newOwner);
}
文件 6 的 7: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 的 7:WhiteList.sol
pragma solidity >=0.5.0 <0.8.0;
import "./Owned.sol";
contract WhiteList is Owned {
mapping(address => uint256) public whiter;
event AppendWhiter(address adder);
event RemoveWhiter(address remover);
constructor() internal {
appendWhiter(owner);
}
modifier onlyWhiter() {
require(isWhiter(), "WhiteList: msg.sender not in whilteList.");
_;
}
function appendWhiter(address account) public onlyOwner {
require(account != address(0), "WhiteList: address not zero");
require(
!isWhiter(account),
"WhiteListe: the account exsit whilteList yet"
);
whiter[account] = 1;
emit AppendWhiter(account);
}
function removeWhiter(address account) public onlyOwner {
require(
isWhiter(account),
"WhiteListe: the account not exist whilteList"
);
delete whiter[account];
emit RemoveWhiter(account);
}
function isWhiter(address account) public view returns (bool) {
return whiter[account] == 1;
}
function isWhiter() public view returns (bool) {
return isWhiter(msg.sender);
}
}
{
"compilationTarget": {
"OinStake.sol": "OinStake"
},
"evmVersion": "istanbul",
"libraries": {},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"_param","type":"address"},{"internalType":"address","name":"_orcl","type":"address"},{"internalType":"address","name":"_esm","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adder","type":"address"}],"name":"AppendWhiter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"reciver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ExtractReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"delt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"IndexUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InjectReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"token","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"move","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"coin","type":"uint256"}],"name":"RedeemEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"remover","type":"address"}],"name":"RemoveWhiter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"coin","type":"address"}],"name":"SetupCoin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"esm","type":"address"}],"name":"SetupEsm","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"orcl","type":"address"}],"name":"SetupOracle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"param","type":"address"}],"name":"SetupParam","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"token","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"coin","type":"uint256"}],"name":"StakeEvent","type":"event"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"appendWhiter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"claimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"coins","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"debtOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"doubleScale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"extractReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCoinAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getEsmAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getHolderReward","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"coinAmount","type":"uint256"}],"name":"getInputToken","outputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOracleAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getParamsAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"injectReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isWhiter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhiter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"coinAmount","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"oRedeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"coinAmount","type":"uint256"}],"name":"oRedeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"coinAmount","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"coinAmount","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"redeemMax","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"redeemMax","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeWhiter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardSpeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardState","outputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"block","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"speed","type":"uint256"}],"name":"setRewardSpeed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_coin","type":"address"}],"name":"setup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_esm","type":"address"}],"name":"setupEsm","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_orcl","type":"address"}],"name":"setupOracle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_params","type":"address"}],"name":"setupParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"coinAmount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerStates","outputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalCoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"updateIndex","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]