Contract 0x0e022Fad0693fa3F0Ca97A1020819125C5e47279

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x86c711aaf79fa908f5e11693ccb834914a5c4ab90d3551fd107649b5bb3d1c45Exit386757962023-01-29 19:12:092 days 13 hrs ago0x7a1955c4e362435a89e2f94366b9e9f92c66d7c1 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.009899826915 113.143465174
0xbe880d2d01f8e0a59ccf47d96ebb4d29b2f1bfca063ffa0cb54cc3b08d9fb9e2Get Reward386757842023-01-29 19:11:432 days 13 hrs ago0x7a1955c4e362435a89e2f94366b9e9f92c66d7c1 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.008447521112 120.412245913
0x52fa535b60e653793ecdbcdd92b14c460bec2d8458d1f2c99351f3ce8d7f2c9eWithdraw385938562023-01-27 16:43:324 days 16 hrs ago0xcec44dc723d9a7dd73ca09c0e2b51645c0e4af20 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.007394084585 92.805399392
0x5fb017a34f644714fd772704b3491c84bd24102c2f731862960a5ab473f384b3Get Reward384701742023-01-24 13:10:247 days 19 hrs ago0x571b39eb091c04261876b60f8cb564ecbdd60735 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.007247329051 81.198017498
0xa4b4d2a5d53d7d568a1ee27a0d8dc3157929663c2d77d97a48e3b07e71601ac9Withdraw384325852023-01-23 14:41:148 days 18 hrs ago0x1901a84380a0b9ef2760206f7208166f906f38c5 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.008243163075 103.462441177
0x4b61f565e9acf6a7dbc732a9764cff4769b4a34fe747d9a3b358ae30e428ee2eGet Reward384325752023-01-23 14:40:528 days 18 hrs ago0x1901a84380a0b9ef2760206f7208166f906f38c5 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.006864352227 97.845516745
0x9ee10d648970549fa242a2a5ae97e89a7040926e37bfd486f1179592a02b42e3Exit384250382023-01-23 10:13:498 days 22 hrs ago0x35f87cf2c34137314d133e6b95a8cbd31de82301 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.00659954569 75.425103317
0x1bc2ee67f99de7716f1d12b115f365ea33968916947d46c944ab29131a8cf2f6Get Reward384249892023-01-23 10:12:058 days 22 hrs ago0x35f87cf2c34137314d133e6b95a8cbd31de82301 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.005980905872 81.213756349
0xf8fd14e108d7c18068c7a95fda131c99c37f0c1ac69470a05fd19d0310bb402dGet Reward384223482023-01-23 8:37:599 days 9 mins ago0x6017e5bd7f00a9a8a35e21b19e1f26a7adc62c82 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.004192423242 48.097553401
0x32752e798ec691f663ced55f23683741222bf5a50d8035e3a05dac5e9f624c53Withdraw384006482023-01-22 19:35:239 days 13 hrs ago0xdde712166c15e5ae7b6eab5f5b300c0fede93f98 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.003278941635 41.154991474
0x86e113b8c2b1cb75a8ed0d12a1ec092fad6c7f23a393966743042600a384beedGet Reward384001842023-01-22 19:18:489 days 13 hrs ago0xdde712166c15e5ae7b6eab5f5b300c0fede93f98 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.002924592636 41.687586579
0xa0ab94c8f86968b87c85d00b53e6965bad75051ad89926c66e00cce4330f80aaExit383895932023-01-22 12:52:509 days 19 hrs ago0x68e7b0f8846d139405539a36cd7fccb65f45b72d IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.005465290352 62.461888877
0xaf36d546c2bd62836c1f6af2cc0c0e0d200624728ac3b16f4980052bf2425f83Get Reward383895792023-01-22 12:52:209 days 19 hrs ago0x68e7b0f8846d139405539a36cd7fccb65f45b72d IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.004625349044 62.806868779
0x6526348b9ce81d4d8f3948e1642fb7e123bcf2894e6cbdb2fce9fbd6e0427256Withdraw383833722023-01-22 9:08:239 days 23 hrs ago0x79e82deb899359500850d23c078c209d169485e3 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.00420034335852.7197841
0x6666d22f65c40489b74b1c3a795f725a90e933540398aa1905966d6f82e228aeGet Reward383833622023-01-22 9:08:039 days 23 hrs ago0x79e82deb899359500850d23c078c209d169485e3 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.00347351782347.16633838
0xbec8d4ab346a85308ec204049a3989cf2d6740455f2290edac8b5a4ba745ebb5Get Reward383527372023-01-21 14:36:1010 days 18 hrs ago0x4eb6716b0189d1a801bc96fcd08f397eac9c61b3 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.003627223532 51.769407442
0x4a8ea6b7db38bb37cc4fd0ad0f16ab39f0e5feedc0d619256e5cbf47f46a7edaExit383259812023-01-20 22:35:3111 days 10 hrs ago0xc99eeeb385586fdcef5128d17ae84ccdf7f2fd5c IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.004899371612 55.994098294
0xe9d48cc3eba050b9122c4874ff5f0233ebf43fd1529b14cb011087f1e0571302Get Reward383256832023-01-20 22:24:5911 days 10 hrs ago0xc99eeeb385586fdcef5128d17ae84ccdf7f2fd5c IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.00719905425 97.75479673
0x237512d06c81946e26703ad14a446e6126cbd7a57e1353be83c89a79a70bba2aWithdraw383191632023-01-20 18:29:4611 days 14 hrs ago0x1757c4975bf35fbfbd040e93e2ac45e8db0bf9bc IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.004203192822 52.755548586
0x8a3c5676b6fe646948b3eb52c277326b7e0ed4e197af313a6976795c7564630eGet Reward383189572023-01-20 18:22:0811 days 14 hrs ago0x1757c4975bf35fbfbd040e93e2ac45e8db0bf9bc IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.004668063915 63.386887129
0xe80d3a5fc478f0805933d567fbb48ac6c08dc4da650771337ea76653e93a7dacExit383011832023-01-20 7:38:0612 days 1 hr ago0x7febb3f57815c0e0dc7f815927817c418b0e5e88 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.003189942751 45.312974116
0x9528223f1b718d8e02bbfa582c054187851bfee1c1f20c71d92bee90451e628bGet Reward383011612023-01-20 7:37:2012 days 1 hr ago0x7febb3f57815c0e0dc7f815927817c418b0e5e88 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.003370610056 48.045186469
0x64b13ff1a7ea6cdd2295e607740ca215b7a1c095ab7b604832122d2e6d0d868fExit382911102023-01-20 1:25:5712 days 7 hrs ago0xf7b0175565366602f5ddf57be6d67424497c72a2 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.005561058404 63.556405914
0x7f728d76213cb1e5ad46e7547d840ae400b442f8815e5b8904521cb58b8412a1Withdraw382765782023-01-19 16:15:2412 days 16 hrs ago0x6d42ab9f87ff2747ebf93a6ca2765a7c475abb47 IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.007504430333 94.190382351
0xc6ad3b09e4aec0eac43108ae2d5b0e3179074d9c5387d2f8acc8ed5cd4c0e96dWithdraw382743602023-01-19 14:55:0812 days 17 hrs ago0xc000db09a04c6effc246009ab835d8f23486b95c IN  0x0e022fad0693fa3f0ca97a1020819125c5e472790 MATIC0.013308722034 167.041808824
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GAMEE_LP_Unipool

Compiler Version
v0.6.8+commit.0bbfe453

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-10-17
*/

/**
 *Submitted for verification at polygonscan.com on 2022-03-29
*/

// File: @openzeppelin/contracts/math/Math.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

// File: @openzeppelin/contracts/math/SafeMath.sol


pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/GSN/Context.sol


pragma solidity >=0.6.0 <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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


pragma solidity >=0.6.0 <0.8.0;

/**
 * @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 () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


pragma solidity >=0.6.0 <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);
}

// File: @openzeppelin/contracts/utils/Address.sol


pragma solidity >=0.6.2 <0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol


pragma solidity >=0.6.0 <0.8.0;




/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: contracts/staking/IRewardDistributionRecipient.sol


pragma solidity 0.6.8;



abstract contract IRewardDistributionRecipient is Ownable {
    address public rewardDistribution;

    function notifyRewardAmount(uint256 reward) external virtual;

    modifier onlyRewardDistribution() {
        require(_msgSender() == rewardDistribution, "Caller is not reward distribution");
        _;
    }

    function setRewardDistribution(address _rewardDistribution) external onlyOwner {
        rewardDistribution = _rewardDistribution;
    }
}

// File: contracts/staking/LP_Ropsten_GMEE_ETH_Unipool.sol


pragma solidity 0.6.8;






contract LPTokenWrapper {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    IERC20 public immutable uni;

    uint256 private _totalSupply;
    mapping(address => uint256) private _balances;

    constructor(IERC20 uni_) public {
        uni = uni_;
    }

    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    function stake(uint256 amount) public virtual {
        _totalSupply = _totalSupply.add(amount);
        _balances[msg.sender] = _balances[msg.sender].add(amount);
        uni.safeTransferFrom(msg.sender, address(this), amount);
    }

    function withdraw(uint256 amount) public virtual {
        _totalSupply = _totalSupply.sub(amount);
        _balances[msg.sender] = _balances[msg.sender].sub(amount);
        uni.safeTransfer(msg.sender, amount);
    }
}

// solhint-disable-next-line contract-name-camelcase
contract GAMEE_LP_Unipool is LPTokenWrapper, IRewardDistributionRecipient {
    // solhint-disable-next-line var-name-mixedcase
    uint256 public immutable DURATION;
    IERC20 public immutable rewardToken;

    uint256 public periodFinish = 0;
    uint256 public rewardRate = 0;
    uint256 public lastUpdateTime;
    uint256 public rewardPerTokenStored;
    mapping(address => uint256) public userRewardPerTokenPaid;
    mapping(address => uint256) public rewards;

    event RewardAdded(uint256 reward);
    event Staked(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);
    event RewardPaid(address indexed user, uint256 reward);

    constructor(
        IERC20 uni_,
        IERC20 rewardToken_,
        uint256 duration
    ) public LPTokenWrapper(uni_) {
        rewardToken = rewardToken_;
        DURATION = duration;
    }

    modifier updateReward(address account) {
        rewardPerTokenStored = rewardPerToken();
        lastUpdateTime = lastTimeRewardApplicable();
        if (account != address(0)) {
            rewards[account] = earned(account);
            userRewardPerTokenPaid[account] = rewardPerTokenStored;
        }
        _;
    }

    function lastTimeRewardApplicable() public view returns (uint256) {
        return Math.min(block.timestamp, periodFinish);
    }

    function rewardPerToken() public view returns (uint256) {
        if (totalSupply() == 0) {
            return rewardPerTokenStored;
        }
        return rewardPerTokenStored.add(lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate).mul(1e18).div(totalSupply()));
    }

    function earned(address account) public view returns (uint256) {
        return balanceOf(account).mul(rewardPerToken().sub(userRewardPerTokenPaid[account])).div(1e18).add(rewards[account]);
    }

    // stake visibility is public as overriding LPTokenWrapper's stake() function
    function stake(uint256 amount) public override updateReward(msg.sender) {
        require(amount > 0, "Cannot stake 0");
        super.stake(amount);
        emit Staked(msg.sender, amount);
    }

    function withdraw(uint256 amount) public override updateReward(msg.sender) {
        require(amount > 0, "Cannot withdraw 0");
        super.withdraw(amount);
        emit Withdrawn(msg.sender, amount);
    }

    function exit() external {
        getReward();
        withdraw(balanceOf(msg.sender));
    }

    function getReward() public updateReward(msg.sender) {
        uint256 reward = earned(msg.sender);
        if (reward > 0) {
            rewards[msg.sender] = 0;
            rewardToken.safeTransfer(msg.sender, reward);
            emit RewardPaid(msg.sender, reward);
        }
    }

    function notifyRewardAmount(uint256 reward) external override onlyRewardDistribution updateReward(address(0)) {
        if (block.timestamp >= periodFinish) {
            rewardRate = reward.div(DURATION);
        } else {
            uint256 remaining = periodFinish.sub(block.timestamp);
            uint256 leftover = remaining.mul(rewardRate);
            rewardRate = reward.add(leftover).div(DURATION);
        }
        lastUpdateTime = block.timestamp;
        periodFinish = block.timestamp.add(DURATION);
        emit RewardAdded(reward);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"uni_","type":"address"},{"internalType":"contract IERC20","name":"rewardToken_","type":"address"},{"internalType":"uint256","name":"duration","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"DURATION","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":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardDistribution","type":"address"}],"name":"setRewardDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uni","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040526000600455600060055534801561001a57600080fd5b506040516115ca3803806115ca8339818101604052606081101561003d57600080fd5b50805160208201516040909201516001600160601b0319606083901b1660805290919060006100736001600160e01b036100dd16565b600280546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060609190911b6001600160601b03191660c05260a052506100e1565b3390565b60805160601c60a05160c05160601c611499610131600039806108325280610c6a5250806104c852806106a15280610709528061074a525080610b2e5280610e1c5280610f3d52506114996000f3fe608060405234801561001057600080fd5b50600436106101975760003560e01c806380faa57d116100e3578063df136d651161008c578063edc9af9511610066578063edc9af9514610349578063f2fde38b14610351578063f7c618c11461037757610197565b8063df136d6514610331578063e9fad8ee14610339578063ebe2b12b1461034157610197565b8063a694fc3a116100bd578063a694fc3a14610304578063c8f33c9114610321578063cd3daf9d1461032957610197565b806380faa57d146102ce5780638b876347146102d65780638da5cb5b146102fc57610197565b80632e1a7d4d1161014557806370a082311161011f57806370a0823114610298578063715018a6146102be5780637b0a47ee146102c657610197565b80632e1a7d4d146102565780633c6b16ab146102735780633d18b9121461029057610197565b8063101114cf11610176578063101114cf1461022257806318160ddd146102465780631be052891461024e57610197565b80628cc2621461019c5780630700037d146101d45780630d68b761146101fa575b600080fd5b6101c2600480360360208110156101b257600080fd5b50356001600160a01b031661037f565b60408051918252519081900360200190f35b6101c2600480360360208110156101ea57600080fd5b50356001600160a01b0316610405565b6102206004803603602081101561021057600080fd5b50356001600160a01b0316610417565b005b61022a6104b0565b604080516001600160a01b039092168252519081900360200190f35b6101c26104bf565b6101c26104c6565b6102206004803603602081101561026c57600080fd5b50356104ea565b6102206004803603602081101561028957600080fd5b50356105dd565b6102206107ae565b6101c2600480360360208110156102ae57600080fd5b50356001600160a01b03166108a2565b6102206108bd565b6101c261097e565b6101c2610984565b6101c2600480360360208110156102ec57600080fd5b50356001600160a01b0316610997565b61022a6109a9565b6102206004803603602081101561031a57600080fd5b50356109b8565b6101c2610aab565b6101c2610ab1565b6101c2610b05565b610220610b0b565b6101c2610b26565b61022a610b2c565b6102206004803603602081101561036757600080fd5b50356001600160a01b0316610b50565b61022a610c68565b6001600160a01b03811660009081526009602090815260408083205460089092528220546103ff91906103f390670de0b6b3a7640000906103e7906103d2906103c6610ab1565b9063ffffffff610c8c16565b6103db886108a2565b9063ffffffff610cd516565b9063ffffffff610d2e16565b9063ffffffff610d7016565b92915050565b60096020526000908152604090205481565b61041f610dca565b6002546001600160a01b03908116911614610481576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b6000545b90565b7f000000000000000000000000000000000000000000000000000000000000000081565b336104f3610ab1565b6007556104fe610984565b6006556001600160a01b03811615610545576105198161037f565b6001600160a01b0382166000908152600960209081526040808320939093556007546008909152919020555b6000821161059a576040805162461bcd60e51b815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b6105a382610dce565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b6003546001600160a01b03166105f1610dca565b6001600160a01b0316146106365760405162461bcd60e51b81526004018080602001828103825260218152602001806114196021913960400191505060405180910390fd5b6000610640610ab1565b60075561064b610984565b6006556001600160a01b03811615610692576106668161037f565b6001600160a01b0382166000908152600960209081526040808320939093556007546008909152919020555b60045442106106d3576106cb827f000000000000000000000000000000000000000000000000000000000000000063ffffffff610d2e16565b60055561073e565b6004546000906106e9904263ffffffff610c8c16565b9050600061070260055483610cd590919063ffffffff16565b90506107387f00000000000000000000000000000000000000000000000000000000000000006103e7868463ffffffff610d7016565b60055550505b426006819055610774907f000000000000000000000000000000000000000000000000000000000000000063ffffffff610d7016565b6004556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b336107b7610ab1565b6007556107c2610984565b6006556001600160a01b03811615610809576107dd8161037f565b6001600160a01b0382166000908152600960209081526040808320939093556007546008909152919020555b60006108143361037f565b9050801561089e5733600081815260096020526040812055610867907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316908363ffffffff610e5416565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b5050565b6001600160a01b031660009081526001602052604090205490565b6108c5610dca565b6002546001600160a01b03908116911614610927576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36002805473ffffffffffffffffffffffffffffffffffffffff19169055565b60055481565b600061099242600454610ed9565b905090565b60086020526000908152604090205481565b6002546001600160a01b031690565b336109c1610ab1565b6007556109cc610984565b6006556001600160a01b03811615610a13576109e78161037f565b6001600160a01b0382166000908152600960209081526040808320939093556007546008909152919020555b60008211610a68576040805162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b610a7182610eef565b60408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25050565b60065481565b6000610abb6104bf565b610ac857506007546104c3565b610992610af6610ad66104bf565b6103e7670de0b6b3a76400006103db6005546103db6006546103c6610984565b6007549063ffffffff610d7016565b60075481565b610b136107ae565b610b24610b1f336108a2565b6104ea565b565b60045481565b7f000000000000000000000000000000000000000000000000000000000000000081565b610b58610dca565b6002546001600160a01b03908116911614610bba576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610bff5760405162461bcd60e51b81526004018080602001828103825260268152602001806113ac6026913960400191505060405180910390fd5b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610cce83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f73565b9392505050565b600082610ce4575060006103ff565b82820282848281610cf157fe5b0414610cce5760405162461bcd60e51b81526004018080602001828103825260218152602001806113f86021913960400191505060405180910390fd5b6000610cce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061100a565b600082820183811015610cce576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b600054610de1908263ffffffff610c8c16565b600090815533815260016020526040902054610e03908263ffffffff610c8c16565b33600081815260016020526040902091909155610e51907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316908363ffffffff610e5416565b50565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610ed490849061106f565b505050565b6000818310610ee85781610cce565b5090919050565b600054610f02908263ffffffff610d7016565b600090815533815260016020526040902054610f24908263ffffffff610d7016565b33600081815260016020526040902091909155610e51907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690308463ffffffff61112016565b600081848411156110025760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610fc7578181015183820152602001610faf565b50505050905090810190601f168015610ff45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836110595760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610fc7578181015183820152602001610faf565b50600083858161106557fe5b0495945050505050565b60606110c4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111ae9092919063ffffffff16565b805190915015610ed4578080602001905160208110156110e357600080fd5b5051610ed45760405162461bcd60e51b815260040180806020018281038252602a81526020018061143a602a913960400191505060405180910390fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526111a890859061106f565b50505050565b60606111bd84846000856111c5565b949350505050565b6060824710156112065760405162461bcd60e51b81526004018080602001828103825260268152602001806113d26026913960400191505060405180910390fd5b61120f8561133f565b611260576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106112bd57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611280565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461131f576040519150601f19603f3d011682016040523d82523d6000602084013e611324565b606091505b5091509150611334828286611345565b979650505050505050565b3b151590565b60608315611354575081610cce565b8251156113645782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315610fc7578181015183820152602001610faf56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122082c003d21e67d138a3a155305e9f5e3646b5612133cf5ef31b546623e9c0aae264736f6c634300060800330000000000000000000000001c0ccd758c1da634d17ab8c590ebfb9409ce2c56000000000000000000000000cf32822ff397ef82425153a9dcb726e5ff61dca7000000000000000000000000000000000000000000000000000000000076a700

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000001c0ccd758c1da634d17ab8c590ebfb9409ce2c56000000000000000000000000cf32822ff397ef82425153a9dcb726e5ff61dca7000000000000000000000000000000000000000000000000000000000076a700

-----Decoded View---------------
Arg [0] : uni_ (address): 0x1c0ccd758c1da634d17ab8c590ebfb9409ce2c56
Arg [1] : rewardToken_ (address): 0xcf32822ff397ef82425153a9dcb726e5ff61dca7
Arg [2] : duration (uint256): 7776000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001c0ccd758c1da634d17ab8c590ebfb9409ce2c56
Arg [1] : 000000000000000000000000cf32822ff397ef82425153a9dcb726e5ff61dca7
Arg [2] : 000000000000000000000000000000000000000000000000000000000076a700


Deployed ByteCode Sourcemap

24929:3376:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24929:3376:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;26615:198:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26615:198:0;-1:-1:-1;;;;;26615:198:0;;:::i;:::-;;;;;;;;;;;;;;;;25363:42;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25363:42:0;-1:-1:-1;;;;;25363:42:0;;:::i;23645:138::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23645:138:0;-1:-1:-1;;;;;23645:138:0;;:::i;:::-;;23381:33;;;:::i;:::-;;;;-1:-1:-1;;;;;23381:33:0;;;;;;;;;;;;;;24183:91;;;:::i;25063:33::-;;;:::i;27112:212::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27112:212:0;;:::i;27737:565::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27737:565:0;;:::i;27437:292::-;;;:::i;24282:110::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24282:110:0;-1:-1:-1;;;;;24282:110:0;;:::i;9094:148::-;;;:::i;25185:29::-;;;:::i;26181:131::-;;;:::i;25299:57::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25299:57:0;-1:-1:-1;;;;;25299:57:0;;:::i;8452:79::-;;;:::i;26904:200::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26904:200:0;;:::i;25221:29::-;;;:::i;26320:287::-;;;:::i;25257:35::-;;;:::i;27332:97::-;;;:::i;25147:31::-;;;:::i;23989:27::-;;;:::i;9397:244::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9397:244:0;-1:-1:-1;;;;;9397:244:0;;:::i;25103:35::-;;;:::i;26615:198::-;-1:-1:-1;;;;;26788:16:0;;26669:7;26788:16;;;:7;:16;;;;;;;;;26740:22;:31;;;;;;26696:109;;26788:16;26696:87;;26778:4;;26696:77;;26719:53;;:16;:14;:16::i;:::-;:20;:53;:20;:53;:::i;:::-;26696:18;26706:7;26696:9;:18::i;:::-;:22;:77;:22;:77;:::i;:::-;:81;:87;:81;:87;:::i;:::-;:91;:109;:91;:109;:::i;:::-;26689:116;26615:198;-1:-1:-1;;26615:198:0:o;25363:42::-;;;;;;;;;;;;;:::o;23645:138::-;8674:12;:10;:12::i;:::-;8664:6;;-1:-1:-1;;;;;8664:6:0;;;:22;;;8656:67;;;;;-1:-1:-1;;;8656:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23735:18:::1;:40:::0;;-1:-1:-1;;23735:40:0::1;-1:-1:-1::0;;;;;23735:40:0;;;::::1;::::0;;;::::1;::::0;;23645:138::o;23381:33::-;;;-1:-1:-1;;;;;23381:33:0;;:::o;24183:91::-;24227:7;24254:12;24183:91;;:::o;25063:33::-;;;:::o;27112:212::-;27175:10;25916:16;:14;:16::i;:::-;25893:20;:39;25960:26;:24;:26::i;:::-;25943:14;:43;-1:-1:-1;;;;;26001:21:0;;;25997:157;;26058:15;26065:7;26058:6;:15::i;:::-;-1:-1:-1;;;;;26039:16:0;;;;;;:7;:16;;;;;;;;:34;;;;26122:20;;26088:22;:31;;;;;;:54;25997:157;27215:1:::1;27206:6;:10;27198:40;;;::::0;;-1:-1:-1;;;27198:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27249:22;27264:6;27249:14;:22::i;:::-;27287:29;::::0;;;;;;;27297:10:::1;::::0;27287:29:::1;::::0;;;;;::::1;::::0;;::::1;27112:212:::0;;:::o;27737:565::-;23561:18;;-1:-1:-1;;;;;23561:18:0;23545:12;:10;:12::i;:::-;-1:-1:-1;;;;;23545:34:0;;23537:80;;;;-1:-1:-1;;;23537:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27843:1:::1;25916:16;:14;:16::i;:::-;25893:20;:39:::0;25960:26:::1;:24;:26::i;:::-;25943:14;:43:::0;-1:-1:-1;;;;;26001:21:0;::::1;::::0;25997:157:::1;;26058:15;26065:7;26058:6;:15::i;:::-;-1:-1:-1::0;;;;;26039:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;26122:20:::1;::::0;26088:22:::1;:31:::0;;;;;;:54;25997:157:::1;27881:12:::2;;27862:15;:31;27858:304;;27923:20;:6:::0;27934:8:::2;27923:20;:10;:20;:::i;:::-;27910:10;:33:::0;27858:304:::2;;;27996:12;::::0;27976:17:::2;::::0;27996:33:::2;::::0;28013:15:::2;27996:33;:16;:33;:::i;:::-;27976:53;;28044:16;28063:25;28077:10;;28063:9;:13;;:25;;;;:::i;:::-;28044:44:::0;-1:-1:-1;28116:34:0::2;28141:8;28116:20;:6:::0;28044:44;28116:20:::2;:10;:20;:::i;:34::-;28103:10;:47:::0;-1:-1:-1;;27858:304:0::2;28189:15;28172:14;:32:::0;;;28230:29:::2;::::0;28250:8:::2;28230:29;:19;:29;:::i;:::-;28215:12;:44:::0;28275:19:::2;::::0;;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;23628:1:::1;27737:565:::0;:::o;27437:292::-;27478:10;25916:16;:14;:16::i;:::-;25893:20;:39;25960:26;:24;:26::i;:::-;25943:14;:43;-1:-1:-1;;;;;26001:21:0;;;25997:157;;26058:15;26065:7;26058:6;:15::i;:::-;-1:-1:-1;;;;;26039:16:0;;;;;;:7;:16;;;;;;;;:34;;;;26122:20;;26088:22;:31;;;;;;:54;25997:157;27501:14:::1;27518:18;27525:10;27518:6;:18::i;:::-;27501:35:::0;-1:-1:-1;27551:10:0;;27547:175:::1;;27586:10;27600:1;27578:19:::0;;;:7:::1;:19;::::0;;;;:23;27616:44:::1;::::0;:11:::1;-1:-1:-1::0;;;;;27616:24:0::1;::::0;27653:6;27616:44:::1;:24;:44;:::i;:::-;27680:30;::::0;;;;;;;27691:10:::1;::::0;27680:30:::1;::::0;;;;;::::1;::::0;;::::1;27547:175;26164:1;27437:292:::0;:::o;24282:110::-;-1:-1:-1;;;;;24366:18:0;24339:7;24366:18;;;:9;:18;;;;;;;24282:110::o;9094:148::-;8674:12;:10;:12::i;:::-;8664:6;;-1:-1:-1;;;;;8664:6:0;;;:22;;;8656:67;;;;;-1:-1:-1;;;8656:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9185:6:::1;::::0;9164:40:::1;::::0;9201:1:::1;::::0;-1:-1:-1;;;;;9185:6:0::1;::::0;9164:40:::1;::::0;9201:1;;9164:40:::1;9215:6;:19:::0;;-1:-1:-1;;9215:19:0::1;::::0;;9094:148::o;25185:29::-;;;;:::o;26181:131::-;26238:7;26265:39;26274:15;26291:12;;26265:8;:39::i;:::-;26258:46;;26181:131;:::o;25299:57::-;;;;;;;;;;;;;:::o;8452:79::-;8517:6;;-1:-1:-1;;;;;8517:6:0;8452:79;:::o;26904:200::-;26964:10;25916:16;:14;:16::i;:::-;25893:20;:39;25960:26;:24;:26::i;:::-;25943:14;:43;-1:-1:-1;;;;;26001:21:0;;;25997:157;;26058:15;26065:7;26058:6;:15::i;:::-;-1:-1:-1;;;;;26039:16:0;;;;;;:7;:16;;;;;;;;:34;;;;26122:20;;26088:22;:31;;;;;;:54;25997:157;27004:1:::1;26995:6;:10;26987:37;;;::::0;;-1:-1:-1;;;26987:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27035:19;27047:6;27035:11;:19::i;:::-;27070:26;::::0;;;;;;;27077:10:::1;::::0;27070:26:::1;::::0;;;;;::::1;::::0;;::::1;26904:200:::0;;:::o;25221:29::-;;;;:::o;26320:287::-;26367:7;26391:13;:11;:13::i;:::-;26387:78;;-1:-1:-1;26433:20:0;;26426:27;;26387:78;26482:117;26507:91;26584:13;:11;:13::i;:::-;26507:72;26574:4;26507:62;26558:10;;26507:46;26538:14;;26507:26;:24;:26::i;:91::-;26482:20;;;:117;:24;:117;:::i;25257:35::-;;;;:::o;27332:97::-;27368:11;:9;:11::i;:::-;27390:31;27399:21;27409:10;27399:9;:21::i;:::-;27390:8;:31::i;:::-;27332:97::o;25147:31::-;;;;:::o;23989:27::-;;;:::o;9397:244::-;8674:12;:10;:12::i;:::-;8664:6;;-1:-1:-1;;;;;8664:6:0;;;:22;;;8656:67;;;;;-1:-1:-1;;;8656:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9486:22:0;::::1;9478:73;;;;-1:-1:-1::0;;;9478:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9588:6;::::0;9567:38:::1;::::0;-1:-1:-1;;;;;9567:38:0;;::::1;::::0;9588:6:::1;::::0;9567:38:::1;::::0;9588:6:::1;::::0;9567:38:::1;9616:6;:17:::0;;-1:-1:-1;;9616:17:0::1;-1:-1:-1::0;;;;;9616:17:0;;;::::1;::::0;;;::::1;::::0;;9397:244::o;25103:35::-;;;:::o;2361:136::-;2419:7;2446:43;2450:1;2453;2446:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2439:50;2361:136;-1:-1:-1;;;2361:136:0:o;3251:471::-;3309:7;3554:6;3550:47;;-1:-1:-1;3584:1:0;3577:8;;3550:47;3621:5;;;3625:1;3621;:5;:1;3645:5;;;;;:10;3637:56;;;;-1:-1:-1;;;3637:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4198:132;4256:7;4283:39;4287:1;4290;4283:39;;;;;;;;;;;;;;;;;:3;:39::i;1897:181::-;1955:7;1987:5;;;2011:6;;;;2003:46;;;;;-1:-1:-1;;;2003:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6989:106;7077:10;6989:106;:::o;24646:222::-;24721:12;;:24;;24738:6;24721:24;:16;:24;:::i;:::-;24706:12;:39;;;24790:10;24780:21;;:9;:21;;;;;;:33;;24806:6;24780:33;:25;:33;:::i;:::-;24766:10;24756:21;;;;:9;:21;;;;;:57;;;;24824:36;;:3;-1:-1:-1;;;;;24824:16:0;;24853:6;24824:36;:16;:36;:::i;:::-;24646:222;:::o;20148:177::-;20258:58;;;-1:-1:-1;;;;;20258:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20258:58:0;;;;;;;;25:18:-1;;61:17;;20258:58:0;182:15:-1;20281:23:0;179:29:-1;160:49;;20231:86:0;;20251:5;;20231:19;:86::i;:::-;20148:177;;;:::o;541:106::-;599:7;630:1;626;:5;:13;;638:1;626:13;;;-1:-1:-1;634:1:0;;541:106;-1:-1:-1;541:106:0:o;24400:238::-;24472:12;;:24;;24489:6;24472:24;:16;:24;:::i;:::-;24457:12;:39;;;24541:10;24531:21;;:9;:21;;;;;;:33;;24557:6;24531:33;:25;:33;:::i;:::-;24517:10;24507:21;;;;:9;:21;;;;;:57;;;;24575:55;;:3;-1:-1:-1;;;;;24575:20:0;;24616:4;24623:6;24575:55;:20;:55;:::i;2800:192::-;2886:7;2922:12;2914:6;;;;2906:29;;;;-1:-1:-1;;;2906:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2906:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2958:5:0;;;2800:192::o;4826:278::-;4912:7;4947:12;4940:5;4932:28;;;;-1:-1:-1;;;4932:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4932:28:0;;4971:9;4987:1;4983;:5;;;;;;;4826:278;-1:-1:-1;;;;;4826:278:0:o;22453:761::-;22877:23;22903:69;22931:4;22903:69;;;;;;;;;;;;;;;;;22911:5;-1:-1:-1;;;;;22903:27:0;;;:69;;;;;:::i;:::-;22987:17;;22877:95;;-1:-1:-1;22987:21:0;22983:224;;23129:10;23118:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23118:30:0;23110:85;;;;-1:-1:-1;;;23110:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20333:205;20461:68;;;-1:-1:-1;;;;;20461:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20461:68:0;;;;;;;;25:18:-1;;61:17;;20461:68:0;182:15:-1;20484:27:0;179:29:-1;160:49;;20434:96:0;;20454:5;;20434:19;:96::i;:::-;20333:205;;;;:::o;16147:195::-;16250:12;16282:52;16304:6;16312:4;16318:1;16321:12;16282:21;:52::i;:::-;16275:59;16147:195;-1:-1:-1;;;;16147:195:0:o;17199:530::-;17326:12;17384:5;17359:21;:30;;17351:81;;;;-1:-1:-1;;;17351:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17451:18;17462:6;17451:10;:18::i;:::-;17443:60;;;;;-1:-1:-1;;;17443:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17577:12;17591:23;17618:6;-1:-1:-1;;;;;17618:11:0;17638:5;17646:4;17618:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;17618:33:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;17576:75:0;;;;17669:52;17687:7;17696:10;17708:12;17669:17;:52::i;:::-;17662:59;17199:530;-1:-1:-1;;;;;;;17199:530:0:o;13229:422::-;13596:20;13635:8;;;13229:422::o;18735:742::-;18850:12;18879:7;18875:595;;;-1:-1:-1;18910:10:0;18903:17;;18875:595;19024:17;;:21;19020:439;;19287:10;19281:17;19348:15;19335:10;19331:2;19327:19;19320:44;19235:148;19423:20;;-1:-1:-1;;;19423:20:0;;;;;;;;;;;;;;;;;19430:12;;19423:20;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;

Swarm Source

ipfs://82c003d21e67d138a3a155305e9f5e3646b5612133cf5ef31b546623e9c0aae2
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.