ETH Price: $2,633.24 (+1.77%)

Contract

0xc08f2f8946593a8da611F70747B4360006b5B2c5
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Rewards205717412024-08-20 18:52:3528 hrs ago1724179955IN
0xc08f2f89...006b5B2c5
0 ETH0.000077641.19135484
Claim Rewards204021872024-07-28 2:53:2324 days ago1722135203IN
0xc08f2f89...006b5B2c5
0 ETH0.000074471.14266776
Claim Rewards188146182023-12-18 18:21:11247 days ago1702923671IN
0xc08f2f89...006b5B2c5
0 ETH0.00333569.37382477
Transfer Ownersh...145410302022-04-07 20:52:50867 days ago1649364770IN
0xc08f2f89...006b5B2c5
0 ETH0.001312845.82053184
Claim Rewards144063122022-03-17 21:05:40888 days ago1647551140IN
0xc08f2f89...006b5B2c5
0 ETH0.0043923167.39468393
Claim Rewards144062052022-03-17 20:43:21888 days ago1647549801IN
0xc08f2f89...006b5B2c5
0 ETH0.003981161.08522592
Claim Rewards144061952022-03-17 20:40:35888 days ago1647549635IN
0xc08f2f89...006b5B2c5
0 ETH0.0037069856.87911625
Claim Rewards144050992022-03-17 16:29:55888 days ago1647534595IN
0xc08f2f89...006b5B2c5
0 ETH0.00801263122.94401224
Claim Rewards144026022022-03-17 7:16:30888 days ago1647501390IN
0xc08f2f89...006b5B2c5
0 ETH0.0014783522.68348237
Grant Access143999152022-03-16 21:05:58889 days ago1647464758IN
0xc08f2f89...006b5B2c5
0 ETH0.003364861.74980591
Claim Rewards143893572022-03-15 5:43:22890 days ago1647323002IN
0xc08f2f89...006b5B2c5
0 ETH0.0011691217.93873129
Claim Rewards143890442022-03-15 4:34:25890 days ago1647318865IN
0xc08f2f89...006b5B2c5
0 ETH0.0017058226.17385357
Claim Rewards143825852022-03-14 4:27:48891 days ago1647232068IN
0xc08f2f89...006b5B2c5
0 ETH0.0014187421.76885546
Claim Rewards143815712022-03-14 0:39:54891 days ago1647218394IN
0xc08f2f89...006b5B2c5
0 ETH0.0014603425.11336353
Claim Rewards143806342022-03-13 21:15:30892 days ago1647206130IN
0xc08f2f89...006b5B2c5
0 ETH0.0025191338.65311197
Claim Rewards143803722022-03-13 20:14:24892 days ago1647202464IN
0xc08f2f89...006b5B2c5
0 ETH0.0025842739.65259136
Claim Rewards143778092022-03-13 10:34:52892 days ago1647167692IN
0xc08f2f89...006b5B2c5
0 ETH0.0008267414.21737883
Claim Rewards143762842022-03-13 4:41:00892 days ago1647146460IN
0xc08f2f89...006b5B2c5
0 ETH0.001916929.41261126
Claim Rewards143732392022-03-12 17:20:40893 days ago1647105640IN
0xc08f2f89...006b5B2c5
0 ETH0.0019386429.74614208
Claim Rewards143718362022-03-12 12:04:27893 days ago1647086667IN
0xc08f2f89...006b5B2c5
0 ETH0.0008052512.35559861
Claim Rewards143676352022-03-11 20:23:56894 days ago1647030236IN
0xc08f2f89...006b5B2c5
0 ETH0.0051715779.35149762
Claim Rewards143652032022-03-11 11:20:26894 days ago1646997626IN
0xc08f2f89...006b5B2c5
0 ETH0.0012853819.72268342
Claim Rewards143651082022-03-11 10:56:01894 days ago1646996161IN
0xc08f2f89...006b5B2c5
0 ETH0.000976316.78936276
Claim Rewards143630422022-03-11 3:00:05894 days ago1646967605IN
0xc08f2f89...006b5B2c5
0 ETH0.0022105933.91889334
Claim Rewards143623262022-03-11 0:20:41894 days ago1646958041IN
0xc08f2f89...006b5B2c5
0 ETH0.0024818238.08050957
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TheHumanoidsStakingReward

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 7 : TheHumanoidsStakingReward.sol
// SPDX-License-Identifier: MIT

/*
                    ████████╗██╗  ██╗███████╗
                    ╚══██╔══╝██║  ██║██╔════╝
                       ██║   ███████║█████╗
                       ██║   ██╔══██║██╔══╝
                       ██║   ██║  ██║███████╗
                       ╚═╝   ╚═╝  ╚═╝╚══════╝
██╗  ██╗██╗   ██╗███╗   ███╗ █████╗ ███╗   ██╗ ██████╗ ██╗██████╗ ███████╗
██║  ██║██║   ██║████╗ ████║██╔══██╗████╗  ██║██╔═══██╗██║██╔══██╗██╔════╝
███████║██║   ██║██╔████╔██║███████║██╔██╗ ██║██║   ██║██║██║  ██║███████╗
██╔══██║██║   ██║██║╚██╔╝██║██╔══██║██║╚██╗██║██║   ██║██║██║  ██║╚════██║
██║  ██║╚██████╔╝██║ ╚═╝ ██║██║  ██║██║ ╚████║╚██████╔╝██║██████╔╝███████║
╚═╝  ╚═╝ ╚═════╝ ╚═╝     ╚═╝╚═╝  ╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚═╝╚═════╝ ╚══════╝


The Humanoids Staking Reward Contract, earning $10 ION per day

*/

pragma solidity =0.8.11;

import "./OwnableTokenAccessControl.sol";
import "./IStakingReward.sol";
import "./IERC20Mint.sol";

contract TheHumanoidsStakingReward is OwnableTokenAccessControl, IStakingReward {
    uint256 public constant REWARD_RATE_PER_DAY = 10 ether;
    uint256 public stakingRewardEndTimestamp = 1736152962;

    mapping(address => uint256) private _stakeData; // packed bits balance:208 timestamp:34 stakedCount:14

    address private constant STAKING_ADDRESS = address(0x3d6a1F739e471c61328Eb8a8D8d998E591C0FD42);
    address private constant TOKEN_ADDRESS = address(0x831dAA3B72576867cD66319259bf022AFB1D9211);


    /// @dev Emitted when `account` claims `amount` of reward.
    event Claim(address indexed account, uint256 amount);


    function setStakingRewardEndTimestamp(uint256 timestamp) external onlyOwner {
        require(stakingRewardEndTimestamp > block.timestamp, "Staking has already ended");
        require(timestamp > block.timestamp, "Must be a time in the future");
        stakingRewardEndTimestamp = timestamp;
    }


    modifier onlyStaking() {
        require(STAKING_ADDRESS == _msgSender(), "Not allowed");
        _;
    }


    function _reward(uint256 timestampFrom, uint256 timestampTo) internal pure returns (uint256) {
        unchecked {
            return ((timestampTo - timestampFrom) * REWARD_RATE_PER_DAY) / 1 days;
        }
    }

    function reward(uint256 timestampFrom, uint256 timestampTo) external view returns (uint256) {
        if (timestampTo > stakingRewardEndTimestamp) {
            timestampTo = stakingRewardEndTimestamp;
        }
        if (timestampFrom < timestampTo) {
            return _reward(timestampFrom, timestampTo);
        }
        return 0;
    }

    function timestampUntilRewardAmount(uint256 targetRewardAmount, uint256 stakedCount, uint256 timestampFrom) public view returns (uint256) {
        require(stakedCount > 0, "stakedCount cannot be zero");
        uint256 div = REWARD_RATE_PER_DAY * stakedCount;
        uint256 duration = ((targetRewardAmount * 1 days) + div - 1) / div; // ceil
        uint256 timestampTo = timestampFrom + duration;
        require(timestampTo <= stakingRewardEndTimestamp, "Cannot get reward amount before staking ends");
        return timestampTo;
    }


    function stakedTokensBalanceOf(address account) external view returns (uint256 stakedCount) {
        stakedCount = _stakeData[account] & 0x3fff;
    }

    function lastClaimTimestampOf(address account) external view returns (uint256 lastClaimTimestamp) {
        lastClaimTimestamp = (_stakeData[account] >> 14) & 0x3ffffffff;
    }

    function rawStakeDataOf(address account) external view returns (uint256 stakeData) {
        stakeData = _stakeData[account];
    }

    function _calculateRewards(uint256 stakeData, uint256 unclaimedBalance) internal view returns (uint256, uint256, uint256) {
        uint256 timestamp = 0;
        uint256 stakedCount = stakeData & 0x3fff;
        if (stakedCount > 0) {
            timestamp = block.timestamp;
            if (timestamp > stakingRewardEndTimestamp) {
                timestamp = stakingRewardEndTimestamp;
            }
            uint256 lastClaimTimestamp = (stakeData >> 14) & 0x3ffffffff;
            if (lastClaimTimestamp < timestamp) {
                unchecked {
                    unclaimedBalance += _reward(lastClaimTimestamp, timestamp) * stakedCount;
                }
            }
        }
        return (unclaimedBalance, timestamp, stakedCount);
    }


    function willStakeTokens(address account, uint16[] calldata tokenIds) external override onlyStaking {
        uint256 stakeData = _stakeData[account];
        (uint256 unclaimedBalance, , uint256 stakedCount) = _calculateRewards(stakeData, stakeData >> 48);
        unchecked {
            _stakeData[account] = (unclaimedBalance << 48) | (block.timestamp << 14) | (stakedCount + tokenIds.length);
        }
    }

    function willUnstakeTokens(address account, uint16[] calldata tokenIds) external override onlyStaking {
        uint256 stakeData = _stakeData[account];
        (uint256 unclaimedBalance, uint256 timestamp, uint256 stakedCount) = _calculateRewards(stakeData, stakeData >> 48);

        uint256 unstakeCount = tokenIds.length;
        if (unstakeCount < stakedCount) {
            unchecked {
                stakedCount -= unstakeCount;
            }
        }
        else {
            stakedCount = 0;
            if (unclaimedBalance == 0) {
                timestamp = 0;
            }
        }

        _stakeData[account] = (unclaimedBalance << 48) | (timestamp << 14) | stakedCount;
    }

    function willBeReplacedByContract(address /*stakingRewardContract*/) external override onlyStaking {
        uint256 timestamp = block.timestamp;
        if (stakingRewardEndTimestamp > timestamp) {
            stakingRewardEndTimestamp = timestamp;
        }
    }

    function didReplaceContract(address /*stakingRewardContract*/) external override onlyStaking {

    }


    function stakeDataOf(address account) external view returns (uint256) {
        uint256 stakeData = _stakeData[account];
        if (stakeData != 0) {
            (uint256 unclaimedBalance, uint256 timestamp, uint256 stakedCount) = _calculateRewards(stakeData, stakeData >> 48);
            stakeData = (unclaimedBalance << 48) | (timestamp << 14) | (stakedCount);
        }
        return stakeData;
    }

    function claimStakeDataFor(address account) external returns (uint256) {
        uint256 stakeData = _stakeData[account];
        if (stakeData != 0) {
            require(_hasAccess(Access.Claim, _msgSender()), "Not allowed to claim");

            (uint256 unclaimedBalance, uint256 timestamp, uint256 stakedCount) = _calculateRewards(stakeData, stakeData >> 48);
            stakeData = (unclaimedBalance << 48) | (timestamp << 14) | (stakedCount);

            delete _stakeData[account];
        }
        return stakeData;
    }


    function _claim(address account, uint256 amount) private {
        if (amount == 0) {
            return;
        }

        uint256 stakeData = _stakeData[account];

        uint256 balance = stakeData >> 48;
        if (balance > amount) {
            unchecked {
                _stakeData[account] = ((balance - amount) << 48) | (stakeData & 0xffffffffffff);
            }
            emit Claim(account, amount);
            return;
        }

        (uint256 unclaimedBalance, uint256 timestamp, uint256 stakedCount) = _calculateRewards(stakeData, balance);

        require(unclaimedBalance >= amount, "Not enough rewards to claim");
        unchecked {
            _stakeData[account] = ((unclaimedBalance - amount) << 48) | (timestamp << 14) | stakedCount;
        }

        emit Claim(account, amount);
    }

    function _transfer(address account, address to, uint256 amount) internal {
        _claim(account, amount);
        IERC20Mint(TOKEN_ADDRESS).mint(to, amount);
    }


    function claimRewardsAmount(uint256 amount) external {
        address account = _msgSender();
        _transfer(account, account, amount);
    }

    function claimRewards() external {
        address account = _msgSender();
        uint256 stakeData = _stakeData[account];
        (uint256 unclaimedBalance, uint256 timestamp, uint256 stakedCount) = _calculateRewards(stakeData, stakeData >> 48);

        require(unclaimedBalance > 0, "Nothing to claim");
        _stakeData[account] = (timestamp << 14) | stakedCount;

        emit Claim(account, unclaimedBalance);
        IERC20Mint(TOKEN_ADDRESS).mint(account, unclaimedBalance);
    }

    // ERC20 compatible functions

    function balanceOf(address account) external view returns (uint256) {
        uint256 stakeData = _stakeData[account];
        (uint256 unclaimedBalance, , ) = _calculateRewards(stakeData, stakeData >> 48);
        return unclaimedBalance;
    }

    function transfer(address to, uint256 amount) external returns (bool) {
        _transfer(_msgSender(), to, amount);
        return true;
    }

    function transferFrom(address account, address to, uint256 amount) external returns (bool) {
        require(_hasAccess(Access.Transfer, _msgSender()), "Not allowed to transfer");
        _transfer(account, to, amount);
        return true;
    }

    function burn(uint256 amount) external {
        _claim(_msgSender(), amount);
    }

    function burnFrom(address account, uint256 amount) external {
        require(_hasAccess(Access.Burn, _msgSender()), "Not allowed to burn");
        _claim(account, amount);
    }
}

File 2 of 7 : OwnableTokenAccessControl.sol
// SPDX-License-Identifier: MIT

pragma solidity =0.8.11;

import "@openzeppelin/contracts/access/Ownable.sol";

/// @title OwnableTokenAccessControl
/// @notice Basic access control for utility tokens 
/// @author ponky
contract OwnableTokenAccessControl is Ownable {
    /// @dev Keeps track of how many accounts have been granted each type of access
    uint96 private _accessCounts;

    mapping (address => uint256) private _accessFlags;

    /// @dev Access types
    enum Access { Mint, Burn, Transfer, Claim }

    /// @dev Emitted when `account` is granted `access`.
    event AccessGranted(bytes32 indexed access, address indexed account);

    /// @dev Emitted when `account` is revoked `access`.
    event AccessRevoked(bytes32 indexed access, address indexed account);

    /// @dev Helper constants for fitting each access index into _accessCounts
    uint constant private _AC_BASE          = 4;
    uint constant private _AC_MASK_BITSIZE  = 1 << _AC_BASE;
    uint constant private _AC_DISABLED      = (1 << (_AC_MASK_BITSIZE - 1));
    uint constant private _AC_MASK_COUNT    = _AC_DISABLED - 1;

    /// @dev Convert the string `access` to an uint
    function _accessToIndex(bytes32 access) internal pure virtual returns (uint index) {
        if (access == 'MINT')       {return uint(Access.Mint);}
        if (access == 'BURN')       {return uint(Access.Burn);}
        if (access == 'TRANSFER')   {return uint(Access.Transfer);}
        if (access == 'CLAIM')      {return uint(Access.Claim);}
        revert("Access type does not exist");
    }

    function _hasAccess(Access access, address account) internal view returns (bool) {
        return (_accessFlags[account] & (1 << uint(access))) != 0;
    }

    function hasAccess(bytes32 access, address account) public view returns (bool) {
        uint256 flag = 1 << _accessToIndex(access);        
        return (_accessFlags[account] & flag) != 0;
    }

    function grantAccess(bytes32 access, address account) external onlyOwner {
        require(account.code.length > 0, "Can only grant access to a contract");

        uint index = _accessToIndex(access);
        uint256 flags = _accessFlags[account];
        uint256 newFlags = flags | (1 << index);
        require(flags != newFlags, "Account already has access");
        _accessFlags[account] = newFlags;

        uint shift = index << _AC_BASE;
        uint256 accessCount = _accessCounts >> shift;
        require((accessCount & _AC_DISABLED) == 0, "Granting this access is permanently disabled");
        require((accessCount & _AC_MASK_COUNT) < _AC_MASK_COUNT, "Access limit reached");
        unchecked {
            _accessCounts += uint96(1 << shift);
        }
        emit AccessGranted(access, account);
    }

    function revokeAccess(bytes32 access, address account) external onlyOwner {
        uint index = _accessToIndex(access);
        uint256 flags = _accessFlags[account];
        uint256 newFlags = flags & ~(1 << index);
        require(flags != newFlags, "Account does not have access");
        _accessFlags[account] = newFlags;

        uint shift = index << _AC_BASE;
        unchecked {
            _accessCounts -= uint96(1 << shift);
        }

        emit AccessRevoked(access, account);
    }

    /// @dev Returns the number of contracts that have `access`.
    function countOfAccess(bytes32 access) external view returns (uint256 accessCount) {
        uint index = _accessToIndex(access);

        uint shift = index << _AC_BASE;
        accessCount = (_accessCounts >> shift) & _AC_MASK_COUNT;
    }

    /// @dev `access` can still be revoked but not granted
    function permanentlyDisableGrantingAccess(bytes32 access) external onlyOwner {
        uint index = _accessToIndex(access);
        
        uint shift = index << _AC_BASE;
        uint256 flag = _AC_DISABLED << shift;
        uint256 accessCounts = _accessCounts;
        require((accessCounts & flag) == 0, "Granting this access is already disabled");
        _accessCounts = uint96(accessCounts | flag);
    }
}

File 3 of 7 : IStakingReward.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IStakingReward {
    function willStakeTokens(address account, uint16[] calldata tokenIds) external;
    function willUnstakeTokens(address account, uint16[] calldata tokenIds) external;

    function willBeReplacedByContract(address stakingRewardContract) external;
    function didReplaceContract(address stakingRewardContract) external;
}

File 4 of 7 : IERC20Mint.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

interface IERC20Mint is IERC20 {
    function mint(address to, uint256 amount) external;
}

File 5 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 6 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 7 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"access","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AccessGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"access","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AccessRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","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"},{"inputs":[],"name":"REWARD_RATE_PER_DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimRewardsAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claimStakeDataFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"access","type":"bytes32"}],"name":"countOfAccess","outputs":[{"internalType":"uint256","name":"accessCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"didReplaceContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"access","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"access","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasAccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"lastClaimTimestampOf","outputs":[{"internalType":"uint256","name":"lastClaimTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"access","type":"bytes32"}],"name":"permanentlyDisableGrantingAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"rawStakeDataOf","outputs":[{"internalType":"uint256","name":"stakeData","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"access","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestampFrom","type":"uint256"},{"internalType":"uint256","name":"timestampTo","type":"uint256"}],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setStakingRewardEndTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"stakeDataOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"stakedTokensBalanceOf","outputs":[{"internalType":"uint256","name":"stakedCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingRewardEndTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"targetRewardAmount","type":"uint256"},{"internalType":"uint256","name":"stakedCount","type":"uint256"},{"internalType":"uint256","name":"timestampFrom","type":"uint256"}],"name":"timestampUntilRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"willBeReplacedByContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"willStakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"willUnstakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405263677b978260025534801561001857600080fd5b5061002233610027565b610077565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611818806100866000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637da9dd5b116101045780639f7ed2df116100a2578063ae6551c611610071578063ae6551c614610408578063af430c291461041b578063b3ea69ac1461042e578063f2fde38b1461044157600080fd5b80639f7ed2df146103b05780639fad7df5146103d9578063a4fa8d57146103e2578063a9059cbb146103f557600080fd5b80638d53b208116100de5780638d53b2081461035c5780638da5cb5b1461036f5780638e8ec5df1461038a57806399f1783c1461039d57600080fd5b80637da9dd5b1461032357806383177db31461033657806389a7c1631461034957600080fd5b80635b5d16b911610171578063715018a61161014b578063715018a6146102e6578063783c0203146102ee57806379cc6790146103015780637b12bd711461031457600080fd5b80635b5d16b9146102935780636731d2f3146102a657806370a08231146102d357600080fd5b80633b8fa909116101ad5780633b8fa9091461021957806340554c3a1461025a57806342966c681461026d5780634cf47f0a1461028057600080fd5b80630cc6b631146101d457806323b872dd146101e9578063372500ab14610211575b600080fd5b6101e76101e236600461154b565b610454565b005b6101fc6101f736600461156d565b6104a6565b60405190151581526020015b60405180910390f35b6101e7610514565b61024c61022736600461154b565b6001600160a01b0316600090815260036020526040902054600e1c6403ffffffff1690565b604051908152602001610208565b6101e76102683660046115a9565b610654565b6101e761027b3660046115d5565b6108f0565b61024c61028e3660046115d5565b6108fd565b61024c6102a136600461154b565b61094c565b61024c6102b436600461154b565b6001600160a01b0316600090815260036020526040902054613fff1690565b61024c6102e136600461154b565b6109ff565b6101e7610a32565b61024c6102fc36600461154b565b610a68565b6101e761030f3660046115ee565b610ab3565b61024c678ac7230489e8000081565b61024c610331366004611618565b610b0a565b6101fc6103443660046115a9565b610c23565b6101e7610357366004611644565b610c59565b6101e761036a3660046115a9565b610ceb565b6000546040516001600160a01b039091168152602001610208565b6101e76103983660046115d5565b610e0c565b6101e76103ab366004611644565b610edb565b61024c6103be36600461154b565b6001600160a01b031660009081526003602052604090205490565b61024c60025481565b61024c6103f03660046116ca565b610f92565b6101fc6104033660046115ee565b610fcd565b6101e761041636600461154b565b610fe3565b6101e76104293660046115d5565b611016565b6101e761043c3660046115d5565b61110d565b6101e761044f36600461154b565b611119565b733d6a1f739e471c61328eb8a8d8d998e591c0fd4233146104905760405162461bcd60e51b8152600401610487906116ec565b60405180910390fd5b60025442908110156104a25760028190555b5050565b60006104b36002336111b1565b6104ff5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420616c6c6f77656420746f207472616e736665720000000000000000006044820152606401610487565b61050a8484846111ee565b5060019392505050565b3360008181526003602052604081205490808061053584603081901c611271565b9250925092506000831161057e5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606401610487565b6001600160a01b03851660008181526003602052604090819020600e85901b84179055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4906105d19086815260200190565b60405180910390a26040516340c10f1960e01b81526001600160a01b03861660048201526024810184905273831daa3b72576867cd66319259bf022afb1d9211906340c10f1990604401600060405180830381600087803b15801561063557600080fd5b505af1158015610649573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b0316331461067e5760405162461bcd60e51b815260040161048790611711565b6000816001600160a01b03163b116106e45760405162461bcd60e51b815260206004820152602360248201527f43616e206f6e6c79206772616e742061636365737320746f206120636f6e74726044820152621858dd60ea1b6064820152608401610487565b60006106ef836112ce565b6001600160a01b038316600090815260016020819052604090912054919250821b8117808214156107625760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420616c726561647920686173206163636573730000000000006044820152606401610487565b6001600160a01b038416600090815260016020819052604082208390559054600485901b91600160a01b9091046001600160601b03908116831c16906107a990601061175c565b6001901b8116156108115760405162461bcd60e51b815260206004820152602c60248201527f4772616e74696e67207468697320616363657373206973207065726d616e656e60448201526b1d1b1e48191a5cd8589b195960a21b6064820152608401610487565b600161081e81601061175c565b6001901b61082c919061175c565b600161083981601061175c565b6001901b610847919061175c565b82161061088d5760405162461bcd60e51b81526020600482015260146024820152731058d8d95cdcc81b1a5b5a5d081c995858da195960621b6044820152606401610487565b600080546001600160601b03600160a01b80830482166001871b01909116026001600160a01b039182161782556040519088169189917ff20afd7b032307b01752ee91e3f6a4b83a5b4ab631f9ab279322fd45634382c09190a350505050505050565b6108fa3382611376565b50565b600080610909836112ce565b9050600481901b600161091d81601061175c565b6001901b61092b919061175c565b6000546001600160601b03600160a01b909104811690921c16169392505050565b6001600160a01b03811660009081526003602052604081205480156109f9576109766003336111b1565b6109b95760405162461bcd60e51b81526020600482015260146024820152734e6f7420616c6c6f77656420746f20636c61696d60601b6044820152606401610487565b60008060006109cc84603086901c611271565b6001600160a01b03891660009081526003602052604081205560309290921b600e9190911b171793505050505b92915050565b6001600160a01b03811660009081526003602052604081205481610a2782603081901c611271565b509095945050505050565b6000546001600160a01b03163314610a5c5760405162461bcd60e51b815260040161048790611711565b610a6660006114df565b565b6001600160a01b03811660009081526003602052604081205480156109f9576000806000610a9a84603086901c611271565b60309290921b600e9190911b1717935050505092915050565b610abe6001336111b1565b610b005760405162461bcd60e51b81526020600482015260136024820152722737ba1030b63637bbb2b2103a3790313ab93760691b6044820152606401610487565b6104a28282611376565b6000808311610b5b5760405162461bcd60e51b815260206004820152601a60248201527f7374616b6564436f756e742063616e6e6f74206265207a65726f0000000000006044820152606401610487565b6000610b6f84678ac7230489e80000611773565b9050600081600181610b848962015180611773565b610b8e9190611792565b610b98919061175c565b610ba291906117aa565b90506000610bb08286611792565b9050600254811115610c195760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f74206765742072657761726420616d6f756e74206265666f72652060448201526b7374616b696e6720656e647360a01b6064820152608401610487565b9695505050505050565b600080610c2f846112ce565b6001600160a01b038416600090815260016020819052604090912054911b16151591505092915050565b733d6a1f739e471c61328eb8a8d8d998e591c0fd423314610c8c5760405162461bcd60e51b8152600401610487906116ec565b6001600160a01b0383166000908152600360205260408120549080610cb583603081901c611271565b6001600160a01b03909816600090815260036020526040902060309290921b42600e1b1795909701949094179093555050505050565b6000546001600160a01b03163314610d155760405162461bcd60e51b815260040161048790611711565b6000610d20836112ce565b6001600160a01b038316600090815260016020819052604090912054919250821b19811680821415610d945760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420646f6573206e6f74206861766520616363657373000000006044820152606401610487565b6001600160a01b0380851660008181526001602081905260408083208690558254600489901b92831b6001600160601b03600160a01b80840482169290920316029516949094178255925188917fe7906b77ea165c70ad8268ce5b59b778a198edf9c1ae4118378eefdc76fce5f491a3505050505050565b6000546001600160a01b03163314610e365760405162461bcd60e51b815260040161048790611711565b4260025411610e875760405162461bcd60e51b815260206004820152601960248201527f5374616b696e672068617320616c726561647920656e646564000000000000006044820152606401610487565b428111610ed65760405162461bcd60e51b815260206004820152601c60248201527f4d75737420626520612074696d6520696e2074686520667574757265000000006044820152606401610487565b600255565b733d6a1f739e471c61328eb8a8d8d998e591c0fd423314610f0e5760405162461bcd60e51b8152600401610487906116ec565b6001600160a01b038316600090815260036020526040812054908080610f3884603081901c611271565b919450925090508481811015610f52578082039150610f60565b6000915083610f6057600092505b506001600160a01b03909616600090815260036020526040902060309290921b600e9190911b17909417909355505050565b6000600254821115610fa45760025491505b81831015610fc4575062015180678ac7230489e8000083830302046109f9565b50600092915050565b6000610fda3384846111ee565b50600192915050565b733d6a1f739e471c61328eb8a8d8d998e591c0fd4233146108fa5760405162461bcd60e51b8152600401610487906116ec565b6000546001600160a01b031633146110405760405162461bcd60e51b815260040161048790611711565b600061104b826112ce565b9050600481901b6000816110616001601061175c565b600054600190911b90911b9150600160a01b90046001600160601b0381811691831616156110e25760405162461bcd60e51b815260206004820152602860248201527f4772616e74696e6720746869732061636365737320697320616c726561647920604482015267191a5cd8589b195960c21b6064820152608401610487565b600080546001600160a01b0316600160a01b939092176001600160601b031692909202179055505050565b336104a28180846111ee565b6000546001600160a01b031633146111435760405162461bcd60e51b815260040161048790611711565b6001600160a01b0381166111a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610487565b6108fa816114df565b60008260038111156111c5576111c56117cc565b6001600160a01b038316600090815260016020819052604090912054911b161515905092915050565b6111f88382611376565b6040516340c10f1960e01b81526001600160a01b03831660048201526024810182905273831daa3b72576867cd66319259bf022afb1d9211906340c10f1990604401600060405180830381600087803b15801561125457600080fd5b505af1158015611268573d6000803e3d6000fd5b50505050505050565b6000808080613fff861680156112c3574291506002548211156112945760025491505b6403ffffffff600e88901c16828110156112c1578162015180828503678ac7230489e80000020402870196505b505b949690955092505050565b600081631352539560e21b14156112e757600092915050565b8163212aa92760e11b14156112fd5760016109f9565b81672a2920a729a322a960c11b14156113175760026109f9565b8164434c41494d60d81b141561132e5760036109f9565b60405162461bcd60e51b815260206004820152601a60248201527f416363657373207479706520646f6573206e6f742065786973740000000000006044820152606401610487565b8061137f575050565b6001600160a01b038216600090815260036020526040902054603081901c8281111561140f576001600160a01b0384166000818152600360205260409081902085840360301b65ffffffffffff8616179055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4906114019086815260200190565b60405180910390a250505050565b600080600061141e8585611271565b925092509250858310156114745760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f756768207265776172647320746f20636c61696d00000000006044820152606401610487565b6001600160a01b0387166000818152600360205260409081902088860360301b600e86901b1784179055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4906114ce9089815260200190565b60405180910390a250505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461154657600080fd5b919050565b60006020828403121561155d57600080fd5b6115668261152f565b9392505050565b60008060006060848603121561158257600080fd5b61158b8461152f565b92506115996020850161152f565b9150604084013590509250925092565b600080604083850312156115bc57600080fd5b823591506115cc6020840161152f565b90509250929050565b6000602082840312156115e757600080fd5b5035919050565b6000806040838503121561160157600080fd5b61160a8361152f565b946020939093013593505050565b60008060006060848603121561162d57600080fd5b505081359360208301359350604090920135919050565b60008060006040848603121561165957600080fd5b6116628461152f565b9250602084013567ffffffffffffffff8082111561167f57600080fd5b818601915086601f83011261169357600080fd5b8135818111156116a257600080fd5b8760208260051b85010111156116b757600080fd5b6020830194508093505050509250925092565b600080604083850312156116dd57600080fd5b50508035926020909101359150565b6020808252600b908201526a139bdd08185b1b1bddd95960aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561176e5761176e611746565b500390565b600081600019048311821515161561178d5761178d611746565b500290565b600082198211156117a5576117a5611746565b500190565b6000826117c757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220464fe70cb9f05a29901cce481df55620c7b29393e6de0aa7180cbc2e391c12fa64736f6c634300080b0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637da9dd5b116101045780639f7ed2df116100a2578063ae6551c611610071578063ae6551c614610408578063af430c291461041b578063b3ea69ac1461042e578063f2fde38b1461044157600080fd5b80639f7ed2df146103b05780639fad7df5146103d9578063a4fa8d57146103e2578063a9059cbb146103f557600080fd5b80638d53b208116100de5780638d53b2081461035c5780638da5cb5b1461036f5780638e8ec5df1461038a57806399f1783c1461039d57600080fd5b80637da9dd5b1461032357806383177db31461033657806389a7c1631461034957600080fd5b80635b5d16b911610171578063715018a61161014b578063715018a6146102e6578063783c0203146102ee57806379cc6790146103015780637b12bd711461031457600080fd5b80635b5d16b9146102935780636731d2f3146102a657806370a08231146102d357600080fd5b80633b8fa909116101ad5780633b8fa9091461021957806340554c3a1461025a57806342966c681461026d5780634cf47f0a1461028057600080fd5b80630cc6b631146101d457806323b872dd146101e9578063372500ab14610211575b600080fd5b6101e76101e236600461154b565b610454565b005b6101fc6101f736600461156d565b6104a6565b60405190151581526020015b60405180910390f35b6101e7610514565b61024c61022736600461154b565b6001600160a01b0316600090815260036020526040902054600e1c6403ffffffff1690565b604051908152602001610208565b6101e76102683660046115a9565b610654565b6101e761027b3660046115d5565b6108f0565b61024c61028e3660046115d5565b6108fd565b61024c6102a136600461154b565b61094c565b61024c6102b436600461154b565b6001600160a01b0316600090815260036020526040902054613fff1690565b61024c6102e136600461154b565b6109ff565b6101e7610a32565b61024c6102fc36600461154b565b610a68565b6101e761030f3660046115ee565b610ab3565b61024c678ac7230489e8000081565b61024c610331366004611618565b610b0a565b6101fc6103443660046115a9565b610c23565b6101e7610357366004611644565b610c59565b6101e761036a3660046115a9565b610ceb565b6000546040516001600160a01b039091168152602001610208565b6101e76103983660046115d5565b610e0c565b6101e76103ab366004611644565b610edb565b61024c6103be36600461154b565b6001600160a01b031660009081526003602052604090205490565b61024c60025481565b61024c6103f03660046116ca565b610f92565b6101fc6104033660046115ee565b610fcd565b6101e761041636600461154b565b610fe3565b6101e76104293660046115d5565b611016565b6101e761043c3660046115d5565b61110d565b6101e761044f36600461154b565b611119565b733d6a1f739e471c61328eb8a8d8d998e591c0fd4233146104905760405162461bcd60e51b8152600401610487906116ec565b60405180910390fd5b60025442908110156104a25760028190555b5050565b60006104b36002336111b1565b6104ff5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420616c6c6f77656420746f207472616e736665720000000000000000006044820152606401610487565b61050a8484846111ee565b5060019392505050565b3360008181526003602052604081205490808061053584603081901c611271565b9250925092506000831161057e5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606401610487565b6001600160a01b03851660008181526003602052604090819020600e85901b84179055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4906105d19086815260200190565b60405180910390a26040516340c10f1960e01b81526001600160a01b03861660048201526024810184905273831daa3b72576867cd66319259bf022afb1d9211906340c10f1990604401600060405180830381600087803b15801561063557600080fd5b505af1158015610649573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b0316331461067e5760405162461bcd60e51b815260040161048790611711565b6000816001600160a01b03163b116106e45760405162461bcd60e51b815260206004820152602360248201527f43616e206f6e6c79206772616e742061636365737320746f206120636f6e74726044820152621858dd60ea1b6064820152608401610487565b60006106ef836112ce565b6001600160a01b038316600090815260016020819052604090912054919250821b8117808214156107625760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420616c726561647920686173206163636573730000000000006044820152606401610487565b6001600160a01b038416600090815260016020819052604082208390559054600485901b91600160a01b9091046001600160601b03908116831c16906107a990601061175c565b6001901b8116156108115760405162461bcd60e51b815260206004820152602c60248201527f4772616e74696e67207468697320616363657373206973207065726d616e656e60448201526b1d1b1e48191a5cd8589b195960a21b6064820152608401610487565b600161081e81601061175c565b6001901b61082c919061175c565b600161083981601061175c565b6001901b610847919061175c565b82161061088d5760405162461bcd60e51b81526020600482015260146024820152731058d8d95cdcc81b1a5b5a5d081c995858da195960621b6044820152606401610487565b600080546001600160601b03600160a01b80830482166001871b01909116026001600160a01b039182161782556040519088169189917ff20afd7b032307b01752ee91e3f6a4b83a5b4ab631f9ab279322fd45634382c09190a350505050505050565b6108fa3382611376565b50565b600080610909836112ce565b9050600481901b600161091d81601061175c565b6001901b61092b919061175c565b6000546001600160601b03600160a01b909104811690921c16169392505050565b6001600160a01b03811660009081526003602052604081205480156109f9576109766003336111b1565b6109b95760405162461bcd60e51b81526020600482015260146024820152734e6f7420616c6c6f77656420746f20636c61696d60601b6044820152606401610487565b60008060006109cc84603086901c611271565b6001600160a01b03891660009081526003602052604081205560309290921b600e9190911b171793505050505b92915050565b6001600160a01b03811660009081526003602052604081205481610a2782603081901c611271565b509095945050505050565b6000546001600160a01b03163314610a5c5760405162461bcd60e51b815260040161048790611711565b610a6660006114df565b565b6001600160a01b03811660009081526003602052604081205480156109f9576000806000610a9a84603086901c611271565b60309290921b600e9190911b1717935050505092915050565b610abe6001336111b1565b610b005760405162461bcd60e51b81526020600482015260136024820152722737ba1030b63637bbb2b2103a3790313ab93760691b6044820152606401610487565b6104a28282611376565b6000808311610b5b5760405162461bcd60e51b815260206004820152601a60248201527f7374616b6564436f756e742063616e6e6f74206265207a65726f0000000000006044820152606401610487565b6000610b6f84678ac7230489e80000611773565b9050600081600181610b848962015180611773565b610b8e9190611792565b610b98919061175c565b610ba291906117aa565b90506000610bb08286611792565b9050600254811115610c195760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f74206765742072657761726420616d6f756e74206265666f72652060448201526b7374616b696e6720656e647360a01b6064820152608401610487565b9695505050505050565b600080610c2f846112ce565b6001600160a01b038416600090815260016020819052604090912054911b16151591505092915050565b733d6a1f739e471c61328eb8a8d8d998e591c0fd423314610c8c5760405162461bcd60e51b8152600401610487906116ec565b6001600160a01b0383166000908152600360205260408120549080610cb583603081901c611271565b6001600160a01b03909816600090815260036020526040902060309290921b42600e1b1795909701949094179093555050505050565b6000546001600160a01b03163314610d155760405162461bcd60e51b815260040161048790611711565b6000610d20836112ce565b6001600160a01b038316600090815260016020819052604090912054919250821b19811680821415610d945760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420646f6573206e6f74206861766520616363657373000000006044820152606401610487565b6001600160a01b0380851660008181526001602081905260408083208690558254600489901b92831b6001600160601b03600160a01b80840482169290920316029516949094178255925188917fe7906b77ea165c70ad8268ce5b59b778a198edf9c1ae4118378eefdc76fce5f491a3505050505050565b6000546001600160a01b03163314610e365760405162461bcd60e51b815260040161048790611711565b4260025411610e875760405162461bcd60e51b815260206004820152601960248201527f5374616b696e672068617320616c726561647920656e646564000000000000006044820152606401610487565b428111610ed65760405162461bcd60e51b815260206004820152601c60248201527f4d75737420626520612074696d6520696e2074686520667574757265000000006044820152606401610487565b600255565b733d6a1f739e471c61328eb8a8d8d998e591c0fd423314610f0e5760405162461bcd60e51b8152600401610487906116ec565b6001600160a01b038316600090815260036020526040812054908080610f3884603081901c611271565b919450925090508481811015610f52578082039150610f60565b6000915083610f6057600092505b506001600160a01b03909616600090815260036020526040902060309290921b600e9190911b17909417909355505050565b6000600254821115610fa45760025491505b81831015610fc4575062015180678ac7230489e8000083830302046109f9565b50600092915050565b6000610fda3384846111ee565b50600192915050565b733d6a1f739e471c61328eb8a8d8d998e591c0fd4233146108fa5760405162461bcd60e51b8152600401610487906116ec565b6000546001600160a01b031633146110405760405162461bcd60e51b815260040161048790611711565b600061104b826112ce565b9050600481901b6000816110616001601061175c565b600054600190911b90911b9150600160a01b90046001600160601b0381811691831616156110e25760405162461bcd60e51b815260206004820152602860248201527f4772616e74696e6720746869732061636365737320697320616c726561647920604482015267191a5cd8589b195960c21b6064820152608401610487565b600080546001600160a01b0316600160a01b939092176001600160601b031692909202179055505050565b336104a28180846111ee565b6000546001600160a01b031633146111435760405162461bcd60e51b815260040161048790611711565b6001600160a01b0381166111a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610487565b6108fa816114df565b60008260038111156111c5576111c56117cc565b6001600160a01b038316600090815260016020819052604090912054911b161515905092915050565b6111f88382611376565b6040516340c10f1960e01b81526001600160a01b03831660048201526024810182905273831daa3b72576867cd66319259bf022afb1d9211906340c10f1990604401600060405180830381600087803b15801561125457600080fd5b505af1158015611268573d6000803e3d6000fd5b50505050505050565b6000808080613fff861680156112c3574291506002548211156112945760025491505b6403ffffffff600e88901c16828110156112c1578162015180828503678ac7230489e80000020402870196505b505b949690955092505050565b600081631352539560e21b14156112e757600092915050565b8163212aa92760e11b14156112fd5760016109f9565b81672a2920a729a322a960c11b14156113175760026109f9565b8164434c41494d60d81b141561132e5760036109f9565b60405162461bcd60e51b815260206004820152601a60248201527f416363657373207479706520646f6573206e6f742065786973740000000000006044820152606401610487565b8061137f575050565b6001600160a01b038216600090815260036020526040902054603081901c8281111561140f576001600160a01b0384166000818152600360205260409081902085840360301b65ffffffffffff8616179055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4906114019086815260200190565b60405180910390a250505050565b600080600061141e8585611271565b925092509250858310156114745760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f756768207265776172647320746f20636c61696d00000000006044820152606401610487565b6001600160a01b0387166000818152600360205260409081902088860360301b600e86901b1784179055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4906114ce9089815260200190565b60405180910390a250505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461154657600080fd5b919050565b60006020828403121561155d57600080fd5b6115668261152f565b9392505050565b60008060006060848603121561158257600080fd5b61158b8461152f565b92506115996020850161152f565b9150604084013590509250925092565b600080604083850312156115bc57600080fd5b823591506115cc6020840161152f565b90509250929050565b6000602082840312156115e757600080fd5b5035919050565b6000806040838503121561160157600080fd5b61160a8361152f565b946020939093013593505050565b60008060006060848603121561162d57600080fd5b505081359360208301359350604090920135919050565b60008060006040848603121561165957600080fd5b6116628461152f565b9250602084013567ffffffffffffffff8082111561167f57600080fd5b818601915086601f83011261169357600080fd5b8135818111156116a257600080fd5b8760208260051b85010111156116b757600080fd5b6020830194508093505050509250925092565b600080604083850312156116dd57600080fd5b50508035926020909101359150565b6020808252600b908201526a139bdd08185b1b1bddd95960aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561176e5761176e611746565b500390565b600081600019048311821515161561178d5761178d611746565b500290565b600082198211156117a5576117a5611746565b500190565b6000826117c757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220464fe70cb9f05a29901cce481df55620c7b29393e6de0aa7180cbc2e391c12fa64736f6c634300080b0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.