Transaction Hash:
Block:
7493719 at Apr-03-2019 06:21:47 AM +UTC
Transaction Fee:
0.000174645 ETH
$0.37
Gas Used:
34,929 Gas / 5 Gwei
Emitted Events:
| 135 |
DailyRewards.RewardClaimed( buyer=[Sender] 0x2e59696eeefe4e43ee758930c2e1fa0038d4bcba, day=45 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
| 0x2E59696E...038D4BcbA |
0.007145068285340638 Eth
Nonce: 177
|
0.006970423285340638 Eth
Nonce: 178
| 0.000174645 | ||
|
0x52bc44d5...b7d7bE3b5
Miner
| (Nanopool) | 8,247.157566000833806016 Eth | 8,247.157740645833806016 Eth | 0.000174645 | |
| 0xD31A5AfC...66EDf69d9 |
Execution Trace
DailyRewards.CALL( )
pragma solidity ^0.4.24;
// written by garry from Team Chibi Fighters
// find us at https://chibifighters.io
// chibifighters@gmail.com
// version 1.0.0
contract Owned {
address public owner;
address public newOwner;
event OwnershipTransferred(address indexed _from, address indexed _to);
constructor() public {
owner = msg.sender;
}
modifier onlyOwner {
require(msg.sender == owner);
_;
}
function transferOwnership(address _newOwner) public onlyOwner {
newOwner = _newOwner;
}
function acceptOwnership() public {
require(msg.sender == newOwner);
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
newOwner = address(0);
}
}
interface ERC20Interface {
function transferFrom(address from, address to, uint tokens) external returns (bool success);
function transfer(address to, uint tokens) external;
function balanceOf(address _owner) external view returns (uint256 _balance);
}
interface ERC20InterfaceClassic {
function transfer(address to, uint tokens) external returns (bool success);
}
contract DailyRewards is Owned {
event RewardClaimed(
address indexed buyer,
uint256 day
);
// what day the player is on in his reward chain
mapping (address => uint) private daysInRow;
// timeout after which row is broken
mapping (address => uint) private timeout;
// how often the reward can be claimed, e.g. every 24h
uint waitingTime = 24 hours;
// window of claiming, if it expires day streak resets to day 1
uint waitingTimeBuffer = 48 hours;
constructor() public {
// Explore Chibis and their universe
// Off chain battles, real Ether fights, true on chain ownership
// Leaderboards, tournaments, roleplay elements, we got it all
}
function requestReward() public returns (uint _days) {
require (msg.sender != address(0));
require (now > timeout[msg.sender]);
// waited too long, reset
if (now > timeout[msg.sender] + waitingTimeBuffer) {
daysInRow[msg.sender] = 1;
} else {
// no limit to being logged in, looking forward to the longest streak
daysInRow[msg.sender]++;
}
timeout[msg.sender] = now + waitingTime;
emit RewardClaimed(msg.sender, daysInRow[msg.sender]);
return daysInRow[msg.sender];
}
/**
* @dev Query stats of next reward, checks for expired time, too
**/
function nextReward() public view returns (uint _day, uint _nextClaimTime, uint _nextClaimExpire) {
uint _dayCheck;
if (now > timeout[msg.sender] + waitingTimeBuffer) _dayCheck = 1; else _dayCheck = daysInRow[msg.sender] + 1;
return (_dayCheck, timeout[msg.sender], timeout[msg.sender] + waitingTimeBuffer);
}
function queryWaitingTime() public view returns (uint _waitingTime) {
return waitingTime;
}
function queryWaitingTimeBuffer() public view returns (uint _waitingTimeBuffer) {
return waitingTimeBuffer;
}
/**
* @dev Sets the interval for daily rewards, e.g. 24h = 86400
* @param newTime New interval time in seconds
**/
function setWaitingTime(uint newTime) public onlyOwner returns (uint _newWaitingTime) {
waitingTime = newTime;
return waitingTime;
}
/**
* @dev Sets buffer for daily rewards. So user have time to claim it. e.g. 1h = 3600
* @param newTime New buffer in seconds
**/
function setWaitingTimeBuffer(uint newTime) public onlyOwner returns (uint _newWaitingTimeBuffer) {
waitingTimeBuffer = newTime;
return waitingTimeBuffer;
}
/**
* @dev Send Ether to owner
* @param _address Receiving address
* @param _amountWei Amount in WEI to send
**/
function weiToOwner(address _address, uint _amountWei) public onlyOwner returns (bool) {
require(_amountWei <= address(this).balance);
_address.transfer(_amountWei);
return true;
}
function ERC20ToOwner(address _to, uint256 _amount, ERC20Interface _tokenContract) public onlyOwner {
_tokenContract.transfer(_to, _amount);
}
function ERC20ClassicToOwner(address _to, uint256 _amount, ERC20InterfaceClassic _tokenContract) public onlyOwner {
_tokenContract.transfer(_to, _amount);
}
}