/**
*Submitted for verification at Etherscan.io on 2019-11-06
*/
pragma solidity 0.5.11;
pragma experimental ABIEncoderV2;
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
*/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
*/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
contract ERC20BasicInterface {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
function transferFrom(address from, address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
uint8 public decimals;
}
contract GachaDrop is Ownable {
struct Drop {
string name;
uint periodToPlay;
address erc20Need;
uint256 requireErc20;
mapping(address => uint) timeTrackUser;
uint countCallTime;
}
mapping(string => Drop) public Drops;
string[] public DropNames;
event _random(address _from, uint _ticket, string _drop, uint _countCallTime);
event _changePeriodToPlay(string _drop, uint _period);
constructor() public {
Drops['avatarofwar'].name = 'avatarofwar';
Drops['avatarofwar'].periodToPlay = 86400;
Drops['avatarofwar'].erc20Need = 0xEc7ba74789694d0d03D458965370Dc7cF2FE75Ba;
// Drops['AvatarOfWar'].erc20Need = 0x91013928b1C4dbd0D5cB21BA5b052BfD840A7a7F; // hbwallet rinkeby
// Drops['avatarofwar'].erc20Need = 0x614F3262c6df42b174cF8544454D6Dc39A9768D2; // kovan
Drops['avatarofwar'].requireErc20 = 0;
DropNames.push('avatarofwar');
}
function getDropNames() public view returns(string[] memory) {
return DropNames;
}
function getTimeTrackUser(string memory _drop, address _player) public view returns(uint _periodToPlay, uint _timeTrackUser, uint _countCallTime) {
return (Drops[_drop].periodToPlay, Drops[_drop].timeTrackUser[_player], Drops[_drop].countCallTime);
}
function getAward(string memory _drop) public {
require(isValidToPlay(_drop));
Drops[_drop].timeTrackUser[msg.sender] = block.timestamp;
Drops[_drop].countCallTime = Drops[_drop].countCallTime + 1;
emit _random(msg.sender, block.timestamp, Drops[_drop].name, Drops[_drop].countCallTime);
}
function isValidToPlay(string memory _drop) public view returns (bool){
ERC20BasicInterface erc20 = ERC20BasicInterface(Drops[_drop].erc20Need);
return Drops[_drop].periodToPlay <= now - Drops[_drop].timeTrackUser[msg.sender]
&& erc20.balanceOf(msg.sender) >= Drops[_drop].requireErc20;
}
function changePeriodToPlay(string memory _drop, uint _period, address _erc20Need, uint256 _requireErc20) onlyOwner public{
if(Drops[_drop].periodToPlay == 0) {
DropNames.push(_drop);
Drops[_drop].name = _drop;
}
Drops[_drop].periodToPlay = _period;
Drops[_drop].erc20Need = _erc20Need;
Drops[_drop].requireErc20 = _requireErc20;
emit _changePeriodToPlay(_drop, _period);
}
}
{
"compilationTarget": {
"GachaDrop.sol": "GachaDrop"
},
"evmVersion": "petersburg",
"libraries": {},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"constant":true,"inputs":[],"name":"getDropNames","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"DropNames","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"_drop","type":"string"},{"internalType":"address","name":"_player","type":"address"}],"name":"getTimeTrackUser","outputs":[{"internalType":"uint256","name":"_periodToPlay","type":"uint256"},{"internalType":"uint256","name":"_timeTrackUser","type":"uint256"},{"internalType":"uint256","name":"_countCallTime","type":"uint256"}],"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":[{"internalType":"string","name":"_drop","type":"string"}],"name":"isValidToPlay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"Drops","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"periodToPlay","type":"uint256"},{"internalType":"address","name":"erc20Need","type":"address"},{"internalType":"uint256","name":"requireErc20","type":"uint256"},{"internalType":"uint256","name":"countCallTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_drop","type":"string"}],"name":"getAward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_drop","type":"string"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"address","name":"_erc20Need","type":"address"},{"internalType":"uint256","name":"_requireErc20","type":"uint256"}],"name":"changePeriodToPlay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_ticket","type":"uint256"},{"indexed":false,"internalType":"string","name":"_drop","type":"string"},{"indexed":false,"internalType":"uint256","name":"_countCallTime","type":"uint256"}],"name":"_random","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_drop","type":"string"},{"indexed":false,"internalType":"uint256","name":"_period","type":"uint256"}],"name":"_changePeriodToPlay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]