ETH Price: $1,589.07 (+0.34%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake222813732025-04-16 11:51:352 days ago1744804295IN
0x7CdbEc6c...a19758cAd
0 ETH0.000061250.85076948
Unstake222589872025-04-13 8:54:355 days ago1744534475IN
0x7CdbEc6c...a19758cAd
0 ETH0.000025340.46166
Unstake222352622025-04-10 1:33:598 days ago1744248839IN
0x7CdbEc6c...a19758cAd
0 ETH0.000037690.68668666
Unstake221453312025-03-28 12:12:3521 days ago1743163955IN
0x7CdbEc6c...a19758cAd
0 ETH0.000079281.10155306
Unstake221377722025-03-27 10:52:2322 days ago1743072743IN
0x7CdbEc6c...a19758cAd
0 ETH0.000050950.92821814
Unstake219610512025-03-02 18:41:5947 days ago1740940919IN
0x7CdbEc6c...a19758cAd
0 ETH0.0008462511.75496434
Unstake219353272025-02-27 4:37:1150 days ago1740631031IN
0x7CdbEc6c...a19758cAd
0 ETH0.000054871
Unstake219304072025-02-26 12:08:3551 days ago1740571715IN
0x7CdbEc6c...a19758cAd
0 ETH0.000025741.07370408
Unstake219304052025-02-26 12:08:1151 days ago1740571691IN
0x7CdbEc6c...a19758cAd
0 ETH0.000066381.20936395
Unstake219183602025-02-24 19:46:4753 days ago1740426407IN
0x7CdbEc6c...a19758cAd
0 ETH0.000155052.82481447
Unstake219051152025-02-22 23:20:5955 days ago1740266459IN
0x7CdbEc6c...a19758cAd
0 ETH0.000120261.67088169
Unstake218381952025-02-13 14:35:5964 days ago1739457359IN
0x7CdbEc6c...a19758cAd
0 ETH0.000332466.05675033
Unstake218023262025-02-08 14:14:5969 days ago1739024099IN
0x7CdbEc6c...a19758cAd
0 ETH0.000079481.44828575
Unstake217997872025-02-08 5:44:2369 days ago1738993463IN
0x7CdbEc6c...a19758cAd
0 ETH0.000021460.89566413
Unstake217997862025-02-08 5:44:1169 days ago1738993451IN
0x7CdbEc6c...a19758cAd
0 ETH0.000062830.87290583
Unstake217888232025-02-06 17:01:2371 days ago1738861283IN
0x7CdbEc6c...a19758cAd
0 ETH0.000106214.43219071
Unstake217888232025-02-06 17:01:2371 days ago1738861283IN
0x7CdbEc6c...a19758cAd
0 ETH0.000106214.43219071
Unstake217786532025-02-05 6:58:3572 days ago1738738715IN
0x7CdbEc6c...a19758cAd
0 ETH0.000110192.00754187
Unstake217529162025-02-01 16:38:4776 days ago1738427927IN
0x7CdbEc6c...a19758cAd
0 ETH0.000147392.68584472
Unstake217294962025-01-29 10:09:4779 days ago1738145387IN
0x7CdbEc6c...a19758cAd
0 ETH0.000141872.58473059
Unstake217078352025-01-26 9:35:4782 days ago1737884147IN
0x7CdbEc6c...a19758cAd
0 ETH0.000237134.32005999
Unstake216337342025-01-16 1:22:3592 days ago1736990555IN
0x7CdbEc6c...a19758cAd
0 ETH0.00022664.12920143
Unstake216314862025-01-15 17:50:2393 days ago1736963423IN
0x7CdbEc6c...a19758cAd
0 ETH0.0006701312.20850983
Unstake216256212025-01-14 22:10:5994 days ago1736892659IN
0x7CdbEc6c...a19758cAd
0 ETH0.000317695.78782207
Unstake216216722025-01-14 8:57:3594 days ago1736845055IN
0x7CdbEc6c...a19758cAd
0 ETH0.000230254.19568942
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:
GMEEStaking

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 99999 runs

Other Settings:
london EvmVersion, MIT license
File 1 of 15 : GMEEStaking.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {PauseStorage} from "@animoca/ethereum-contracts/contracts/lifecycle/libraries/PauseStorage.sol";
import {Pause} from "@animoca/ethereum-contracts/contracts/lifecycle/Pause.sol";
import {ContractOwnership} from "@animoca/ethereum-contracts/contracts/access/ContractOwnership.sol";
import {ContractOwnershipStorage} from "@animoca/ethereum-contracts/contracts/access/libraries/ContractOwnershipStorage.sol";

/**
 * @title GMEEStaking
 * @dev Contract for staking $GMEE tokens.
 */
contract GMEEStaking is ContractOwnership, Pause {
    using PauseStorage for PauseStorage.Layout;
    using ContractOwnershipStorage for ContractOwnershipStorage.Layout;

    struct Stake {
        uint256 lockTimestamp;
        uint248 amount;
        uint8 period;
    }

    // Immutable variable representing the GMEE token contract
    IERC20 public immutable gmee;

    // Unstake tax percentage must be an integer value
    // for example to set 3.5% we use 35 (3.5*10) and divide 35 by DECIMAL_FACTOR to get actual value of 3.5% i.e., 0.035
    uint248 public tax;

    // Decimal factor to support decimal percentages
    uint248 public constant DECIMAL_FACTOR = 1000;

    // Address to receive unstake tax
    address public treasury;

    // Mapping to store stake information for each user
    mapping(address => Stake) public stakes;

    // Total amount of $GMEE tokens staked in the contract
    uint248 public totalStaked;

    // Events to log staking and unstaking actions
    event Staked(address indexed account, uint256 amount, uint256 totalAmount, uint256 period);
    event Unstaked(address indexed account, uint256 amount, uint256 taxAmount, uint256 remainingStake);
    event Restaked(address indexed account, uint256 totalAmount, uint256 period);
    event UnstakeTaxTreasuryChanged(address indexed account);
    event UnstakeTaxPercentageUpdated(uint256 newPercentage);

    /**
     * @dev Constructor function for the GMEEStaking contract.
     * @param _gmee The address of the GMEE token contract.
     * @param _treasury The address to send unstake tax to.
     * @param _owner The address to set as the owner of the contract.
     * @param _initialTaxPercentage The initial unstake tax percentage.
     */
    constructor(address _gmee, address _treasury, address _owner, uint248 _initialTaxPercentage) Pause(false) ContractOwnership(_owner) {
        require(_initialTaxPercentage <= DECIMAL_FACTOR, "GMEE:tax% must be 0-100");
        require(_treasury != address(0), "GMEE:treasury != zero address");
        gmee = IERC20(_gmee);
        treasury = _treasury;
        tax = _initialTaxPercentage;
        emit UnstakeTaxTreasuryChanged(_treasury);
        emit UnstakeTaxPercentageUpdated(_initialTaxPercentage);
    }

    /**
     * @dev Stake $GMEE tokens for a specified period.
     * @param amount The amount of $GMEE tokens to stake.
     * @param period The staking period (30, 60, or 90 days).
     */
    function stake(uint248 amount, uint8 period) external {
        PauseStorage.layout().enforceIsNotPaused();
        address account = msg.sender;
        require(period == 30 || period == 60 || period == 90, "GMEE:Invalid period");
        require(amount > 0, "GMEE:Amount must be > 0");

        Stake storage userStake = stakes[account];
        uint248 userStakeAmount = userStake.amount; // Read storage variable once

        uint248 newStakeAmount;
        if (userStakeAmount > 0) {
            require(period == userStake.period, "GMEE:staking period differed");
            newStakeAmount = userStakeAmount + amount;
        } else {
            userStake.period = period;
            newStakeAmount = amount;
        }

        userStake.amount = newStakeAmount; // Update userStake.amount
        userStake.lockTimestamp = block.timestamp;
        gmee.transferFrom(account, address(this), amount);
        totalStaked += amount;
        emit Staked(account, amount, newStakeAmount, period);
    }

    /**
     * @dev Unstake $GMEE tokens.
     * @param amount The amount of $GMEE tokens to unstake.
     */
    function unstake(uint248 amount) external {
        require(amount > 0, "Unstake amount must be > zero");
        address account = msg.sender;
        Stake storage userStake = stakes[account];
        uint248 userStakeAmount = userStake.amount; // Read storage variable once

        require(userStakeAmount >= amount, "Insufficient staked amount");

        uint248 taxAmount = 0;
        if (tax > 0 && block.timestamp < userStake.lockTimestamp + uint256(userStake.period) * 1 days) {
            taxAmount = (amount * tax) / DECIMAL_FACTOR;
        }

        uint248 remainingStake = userStakeAmount - amount;

        userStake.amount = remainingStake;
        totalStaked -= amount;

        if (taxAmount > 0) {
            gmee.transfer(treasury, taxAmount);
        }
        gmee.transfer(account, amount - taxAmount);

        emit Unstaked(account, amount, taxAmount, remainingStake);
    }

    /**
     * @dev Restake $GMEE tokens (restarts staking period).
     */
    function restake() external {
        PauseStorage.layout().enforceIsNotPaused();
        address account = msg.sender;
        Stake storage userStake = stakes[account];
        uint248 userStakeAmount = userStake.amount; // Read storage variable once
        require(userStakeAmount > 0, "Insufficient staked amount");

        // Calculate remaining time in the current lock period
        uint256 elapsedTime = block.timestamp - userStake.lockTimestamp;
        require(elapsedTime >= uint256(userStake.period) * 1 days, "Current lock period not expired");

        userStake.lockTimestamp = block.timestamp;

        emit Restaked(account, userStakeAmount, userStake.period);
    }

    /**
     * @dev Set the address to receive unstake tax.
     * @param _treasury The address to set as the treasury.
     */
    function setUnstakeTaxTreasury(address _treasury) external {
        require(_treasury != address(0), "GMEE:treasury != zero address");
        ContractOwnershipStorage.layout().enforceIsContractOwner(msg.sender);
        treasury = _treasury;
        emit UnstakeTaxTreasuryChanged(_treasury);
    }

    /**
     * @dev Set or update the unstake tax percentage.
     * @param _percentage The new unstake tax percentage.
     */
    function setUnstakeTaxPercentage(uint248 _percentage) external {
        ContractOwnershipStorage.layout().enforceIsContractOwner(msg.sender);
        require(_percentage <= DECIMAL_FACTOR, "GMEE:tax% must be 0-100");
        if (totalStaked > 0) {
            require(_percentage <= tax, "GMEE:New tax% <= current tax%");
        }
        tax = _percentage;
        emit UnstakeTaxPercentageUpdated(_percentage);
    }
}

File 2 of 15 : ContractOwnership.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import {ContractOwnershipStorage} from "./libraries/ContractOwnershipStorage.sol";
import {ContractOwnershipBase} from "./base/ContractOwnershipBase.sol";
import {InterfaceDetection} from "./../introspection/InterfaceDetection.sol";

/// @title ERC173 Contract Ownership Standard (immutable version).
/// @dev See https://eips.ethereum.org/EIPS/eip-173
/// @dev This contract is to be used via inheritance in an immutable (non-proxied) implementation.
abstract contract ContractOwnership is ContractOwnershipBase, InterfaceDetection {
    using ContractOwnershipStorage for ContractOwnershipStorage.Layout;

    /// @notice Initializes the storage with an initial contract owner.
    /// @notice Marks the following ERC165 interface(s) as supported: ERC173.
    /// @dev Emits an {OwnershipTransferred} if `initialOwner` is not the zero address.
    /// @param initialOwner the initial contract owner.
    constructor(address initialOwner) {
        ContractOwnershipStorage.layout().constructorInit(initialOwner);
    }
}

File 3 of 15 : ContractOwnershipBase.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import {IERC173} from "./../interfaces/IERC173.sol";
import {ContractOwnershipStorage} from "./../libraries/ContractOwnershipStorage.sol";
import {Context} from "@openzeppelin/contracts/utils/Context.sol";

/// @title ERC173 Contract Ownership Standard (proxiable version).
/// @dev See https://eips.ethereum.org/EIPS/eip-173
/// @dev This contract is to be used via inheritance in a proxied implementation.
/// @dev Note: This contract requires ERC165 (Interface Detection Standard).
abstract contract ContractOwnershipBase is Context, IERC173 {
    using ContractOwnershipStorage for ContractOwnershipStorage.Layout;

    /// @inheritdoc IERC173
    function owner() public view virtual override returns (address) {
        return ContractOwnershipStorage.layout().owner();
    }

    /// @inheritdoc IERC173
    function transferOwnership(address newOwner) public virtual override {
        ContractOwnershipStorage.layout().transferOwnership(_msgSender(), newOwner);
    }
}

File 4 of 15 : IERC173.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

/// @title ERC-173 Contract Ownership Standard
/// @dev See https://eips.ethereum.org/EIPS/eip-173
/// @dev Note: the ERC-165 identifier for this interface is 0x7f5828d0
interface IERC173 {
    /// @notice Emitted when the contract ownership changes.
    /// @param previousOwner the previous contract owner.
    /// @param newOwner the new contract owner.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice Sets the address of the new contract owner.
    /// @dev Reverts if the sender is not the contract owner.
    /// @dev Emits an {OwnershipTransferred} event if `newOwner` is different from the current contract owner.
    /// @param newOwner The address of the new contract owner. Using the zero address means renouncing ownership.
    function transferOwnership(address newOwner) external;

    /// @notice Gets the address of the contract owner.
    /// @return contractOwner The address of the contract owner.
    function owner() external view returns (address contractOwner);
}

File 5 of 15 : ContractOwnershipStorage.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import {IERC173} from "./../interfaces/IERC173.sol";
import {ProxyInitialization} from "./../../proxy/libraries/ProxyInitialization.sol";
import {InterfaceDetectionStorage} from "./../../introspection/libraries/InterfaceDetectionStorage.sol";

library ContractOwnershipStorage {
    using ContractOwnershipStorage for ContractOwnershipStorage.Layout;
    using InterfaceDetectionStorage for InterfaceDetectionStorage.Layout;

    struct Layout {
        address contractOwner;
    }

    bytes32 internal constant LAYOUT_STORAGE_SLOT = bytes32(uint256(keccak256("animoca.core.access.ContractOwnership.storage")) - 1);
    bytes32 internal constant PROXY_INIT_PHASE_SLOT = bytes32(uint256(keccak256("animoca.core.access.ContractOwnership.phase")) - 1);

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

    /// @notice Initializes the storage with an initial contract owner (immutable version).
    /// @notice Marks the following ERC165 interface(s) as supported: ERC173.
    /// @dev Note: This function should be called ONLY in the constructor of an immutable (non-proxied) contract.
    /// @dev Emits an {OwnershipTransferred} if `initialOwner` is not the zero address.
    /// @param initialOwner The initial contract owner.
    function constructorInit(Layout storage s, address initialOwner) internal {
        if (initialOwner != address(0)) {
            s.contractOwner = initialOwner;
            emit OwnershipTransferred(address(0), initialOwner);
        }
        InterfaceDetectionStorage.layout().setSupportedInterface(type(IERC173).interfaceId, true);
    }

    /// @notice Initializes the storage with an initial contract owner (proxied version).
    /// @notice Sets the proxy initialization phase to `1`.
    /// @notice Marks the following ERC165 interface(s) as supported: ERC173.
    /// @dev Note: This function should be called ONLY in the init function of a proxied contract.
    /// @dev Reverts if the proxy initialization phase is set to `1` or above.
    /// @dev Emits an {OwnershipTransferred} if `initialOwner` is not the zero address.
    /// @param initialOwner The initial contract owner.
    function proxyInit(Layout storage s, address initialOwner) internal {
        ProxyInitialization.setPhase(PROXY_INIT_PHASE_SLOT, 1);
        s.constructorInit(initialOwner);
    }

    /// @notice Sets the address of the new contract owner.
    /// @dev Reverts if `sender` is not the contract owner.
    /// @dev Emits an {OwnershipTransferred} event if `newOwner` is different from the current contract owner.
    /// @param newOwner The address of the new contract owner. Using the zero address means renouncing ownership.
    function transferOwnership(Layout storage s, address sender, address newOwner) internal {
        address previousOwner = s.contractOwner;
        require(sender == previousOwner, "Ownership: not the owner");
        if (previousOwner != newOwner) {
            s.contractOwner = newOwner;
            emit OwnershipTransferred(previousOwner, newOwner);
        }
    }

    /// @notice Gets the address of the contract owner.
    /// @return contractOwner The address of the contract owner.
    function owner(Layout storage s) internal view returns (address contractOwner) {
        return s.contractOwner;
    }

    /// @notice Ensures that an account is the contract owner.
    /// @dev Reverts if `account` is not the contract owner.
    /// @param account The account.
    function enforceIsContractOwner(Layout storage s, address account) internal view {
        require(account == s.contractOwner, "Ownership: not the owner");
    }

    function layout() internal pure returns (Layout storage s) {
        bytes32 position = LAYOUT_STORAGE_SLOT;
        assembly {
            s.slot := position
        }
    }
}

File 6 of 15 : InterfaceDetection.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import {IERC165} from "./interfaces/IERC165.sol";
import {InterfaceDetectionStorage} from "./libraries/InterfaceDetectionStorage.sol";

/// @title ERC165 Interface Detection Standard (immutable or proxiable version).
/// @dev This contract is to be used via inheritance in an immutable (non-proxied) or proxied implementation.
abstract contract InterfaceDetection is IERC165 {
    using InterfaceDetectionStorage for InterfaceDetectionStorage.Layout;

    /// @inheritdoc IERC165
    function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
        return InterfaceDetectionStorage.layout().supportsInterface(interfaceId);
    }
}

File 7 of 15 : IERC165.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

/// @title ERC165 Interface Detection Standard.
/// @dev See https://eips.ethereum.org/EIPS/eip-165.
/// @dev Note: The ERC-165 identifier for this interface is 0x01ffc9a7.
interface IERC165 {
    /// @notice Returns whether this contract implements a given interface.
    /// @dev Note: This function call must use less than 30 000 gas.
    /// @param interfaceId the interface identifier to test.
    /// @return supported True if the interface is supported, false if `interfaceId` is `0xffffffff` or if the interface is not supported.
    function supportsInterface(bytes4 interfaceId) external view returns (bool supported);
}

File 8 of 15 : InterfaceDetectionStorage.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import {IERC165} from "./../interfaces/IERC165.sol";

library InterfaceDetectionStorage {
    struct Layout {
        mapping(bytes4 => bool) supportedInterfaces;
    }

    bytes32 internal constant LAYOUT_STORAGE_SLOT = bytes32(uint256(keccak256("animoca.core.introspection.InterfaceDetection.storage")) - 1);

    bytes4 internal constant ILLEGAL_INTERFACE_ID = 0xffffffff;

    /// @notice Sets or unsets an ERC165 interface.
    /// @dev Reverts if `interfaceId` is `0xffffffff`.
    /// @param interfaceId the interface identifier.
    /// @param supported True to set the interface, false to unset it.
    function setSupportedInterface(Layout storage s, bytes4 interfaceId, bool supported) internal {
        require(interfaceId != ILLEGAL_INTERFACE_ID, "InterfaceDetection: wrong value");
        s.supportedInterfaces[interfaceId] = supported;
    }

    /// @notice Returns whether this contract implements a given interface.
    /// @dev Note: This function call must use less than 30 000 gas.
    /// @param interfaceId The interface identifier to test.
    /// @return supported True if the interface is supported, false if `interfaceId` is `0xffffffff` or if the interface is not supported.
    function supportsInterface(Layout storage s, bytes4 interfaceId) internal view returns (bool supported) {
        if (interfaceId == ILLEGAL_INTERFACE_ID) {
            return false;
        }
        if (interfaceId == type(IERC165).interfaceId) {
            return true;
        }
        return s.supportedInterfaces[interfaceId];
    }

    function layout() internal pure returns (Layout storage s) {
        bytes32 position = LAYOUT_STORAGE_SLOT;
        assembly {
            s.slot := position
        }
    }
}

File 9 of 15 : Pause.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import {PauseStorage} from "./libraries/PauseStorage.sol";
import {PauseBase} from "./base/PauseBase.sol";
import {ContractOwnership} from "../access/ContractOwnership.sol";

/// @title Pausing mechanism (immutable version).
/// @dev This contract is to be used via inheritance in an immutable (non-proxied) implementation.
abstract contract Pause is PauseBase, ContractOwnership {
    using PauseStorage for PauseStorage.Layout;

    /// @notice Initializes the storage with an initial pause state.
    /// @dev Emits a {Paused} event if `isPaused` is true.
    /// @param isPaused The initial pause state.
    constructor(bool isPaused) {
        PauseStorage.layout().constructorInit(isPaused);
    }
}

File 10 of 15 : PauseBase.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import {PauseStorage} from "./../libraries/PauseStorage.sol";
import {ContractOwnershipStorage} from "./../../access/libraries/ContractOwnershipStorage.sol";
import {Context} from "@openzeppelin/contracts/utils/Context.sol";

/// @title Pausing mechanism (proxiable version).
/// @dev This contract is to be used via inheritance in a proxied implementation.
/// @dev Note: This contract requires ERC173 (Contract Ownership standard).
abstract contract PauseBase is Context {
    using PauseStorage for PauseStorage.Layout;
    using ContractOwnershipStorage for ContractOwnershipStorage.Layout;

    /// @notice Emitted when the pause is triggered.
    event Paused();

    /// @notice Emitted when the pause is lifted.
    event Unpaused();

    /// @notice Pauses the contract.
    /// @dev Reverts if the sender is not the contract owner.
    /// @dev Reverts if the contract is paused.
    /// @dev Emits a {Paused} event.
    function pause() external {
        ContractOwnershipStorage.layout().enforceIsContractOwner(_msgSender());
        PauseStorage.layout().pause();
    }

    /// @notice Unpauses the contract.
    /// @dev Reverts if the sender is not the contract owner.
    /// @dev Reverts if the contract is not paused.
    /// @dev Emits an {Unpaused} event.
    function unpause() external {
        ContractOwnershipStorage.layout().enforceIsContractOwner(_msgSender());
        PauseStorage.layout().unpause();
    }

    /// @notice Gets the paused state of the contract.
    /// @return isPaused The paused state of the contract.
    function paused() external view returns (bool) {
        return PauseStorage.layout().paused();
    }
}

File 11 of 15 : PauseStorage.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import {ProxyInitialization} from "./../../proxy/libraries/ProxyInitialization.sol";

library PauseStorage {
    using PauseStorage for PauseStorage.Layout;

    struct Layout {
        bool isPaused;
    }

    bytes32 internal constant LAYOUT_STORAGE_SLOT = bytes32(uint256(keccak256("animoca.core.lifecycle.Pause.storage")) - 1);
    bytes32 internal constant PROXY_INIT_PHASE_SLOT = bytes32(uint256(keccak256("animoca.core.lifecycle.Pause.phase")) - 1);

    event Paused();
    event Unpaused();

    /// @notice Initializes the storage with an initial pause state (immutable version).
    /// @dev Note: This function should be called ONLY in the constructor of an immutable (non-proxied) contract.
    /// @dev Emits a {Paused} event if `isPaused` is true.
    /// @param isPaused The initial pause state.
    function constructorInit(Layout storage s, bool isPaused) internal {
        if (isPaused) {
            s.isPaused = true;
            emit Paused();
        }
    }

    /// @notice Initializes the storage with an initial pause state (proxied version).
    /// @notice Sets the proxy initialization phase to `1`.
    /// @dev Note: This function should be called ONLY in the init function of a proxied contract.
    /// @dev Reverts if the proxy initialization phase is set to `1` or above.
    /// @dev Emits a {Paused} event if `isPaused` is true.
    /// @param isPaused The initial pause state.
    function proxyInit(Layout storage s, bool isPaused) internal {
        ProxyInitialization.setPhase(PROXY_INIT_PHASE_SLOT, 1);
        s.constructorInit(isPaused);
    }

    /// @notice Pauses the contract.
    /// @dev Reverts if the contract is paused.
    /// @dev Emits a {Paused} event.
    function pause(Layout storage s) internal {
        s.enforceIsNotPaused();
        s.isPaused = true;
        emit Paused();
    }

    /// @notice Unpauses the contract.
    /// @dev Reverts if the contract is not paused.
    /// @dev Emits an {Unpaused} event.
    function unpause(Layout storage s) internal {
        s.enforceIsPaused();
        s.isPaused = false;
        emit Unpaused();
    }

    /// @notice Gets the paused state of the contract.
    /// @return isPaused The paused state of the contract.
    function paused(Layout storage s) internal view returns (bool isPaused) {
        return s.isPaused;
    }

    /// @notice Ensures that the contract is paused.
    /// @dev Reverts if the contract is not paused.
    function enforceIsPaused(Layout storage s) internal view {
        require(s.isPaused, "Pause: not paused");
    }

    /// @notice Ensures that the contract is not paused.
    /// @dev Reverts if the contract is paused.
    function enforceIsNotPaused(Layout storage s) internal view {
        require(!s.isPaused, "Pause: paused");
    }

    function layout() internal pure returns (Layout storage s) {
        bytes32 position = LAYOUT_STORAGE_SLOT;
        assembly {
            s.slot := position
        }
    }
}

File 12 of 15 : ProxyInitialization.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import {StorageSlot} from "@openzeppelin/contracts/utils/StorageSlot.sol";

/// @notice Multiple calls protection for storage-modifying proxy initialization functions.
library ProxyInitialization {
    /// @notice Sets the initialization phase during a storage-modifying proxy initialization function.
    /// @dev Reverts if `phase` has been reached already.
    /// @param storageSlot the storage slot where `phase` is stored.
    /// @param phase the initialization phase.
    function setPhase(bytes32 storageSlot, uint256 phase) internal {
        StorageSlot.Uint256Slot storage currentVersion = StorageSlot.getUint256Slot(storageSlot);
        require(currentVersion.value < phase, "Storage: phase reached");
        currentVersion.value = phase;
    }
}

File 13 of 15 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 14 of 15 : 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 15 of 15 : StorageSlot.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)

pragma solidity ^0.8.0;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 *
 * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }
}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 99999
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_gmee","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint248","name":"_initialTaxPercentage","type":"uint248"}],"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":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"}],"name":"Restaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"UnstakeTaxPercentageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"UnstakeTaxTreasuryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"taxAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remainingStake","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"DECIMAL_FACTOR","outputs":[{"internalType":"uint248","name":"","type":"uint248"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gmee","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"restake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint248","name":"_percentage","type":"uint248"}],"name":"setUnstakeTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setUnstakeTaxTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint248","name":"amount","type":"uint248"},{"internalType":"uint8","name":"period","type":"uint8"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"lockTimestamp","type":"uint256"},{"internalType":"uint248","name":"amount","type":"uint248"},{"internalType":"uint8","name":"period","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax","outputs":[{"internalType":"uint248","name":"","type":"uint248"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint248","name":"","type":"uint248"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint248","name":"amount","type":"uint248"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b506040516200213938038062002139833981016040819052620000349162000424565b6000826200006581620000516200021260201b620012951760201c565b6200024860201b620012c31790919060201c565b50620000948162000080620002db60201b620013841760201c565b6200030b60201b620013b21790919060201c565b506103e86001600160f81b0382161115620000f65760405162461bcd60e51b815260206004820152601760248201527f474d45453a74617825206d75737420626520302d31303000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0383166200014e5760405162461bcd60e51b815260206004820152601d60248201527f474d45453a747265617375727920213d207a65726f20616464726573730000006044820152606401620000ed565b6001600160a01b03848116608052600180546001600160a01b0319169185169182179055600080547fff00000000000000000000000000000000000000000000000000000000000000166001600160f81b0384161781556040517fde737007db65a6958950c1ec3c0f45c8fa9125b7692e2426896122f6cf131ee09190a26040516001600160f81b03821681527f699b3e1585cbf03e69e54c870320eba3c1dac80558d9c2e8d7f2a34fbd04404c9060200160405180910390a150505050620004b1565b6000806200024260017fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cd6200048f565b92915050565b6001600160a01b038116156200029f5781546001600160a01b0319166001600160a01b03821690811783556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35b620002d76307f5828d60e41b6001620002c26200034a60201b6200140e1760201c565b6200037a60201b6200143c179092919060201c565b5050565b6000806200024260017f0186a05f63b1553398ad5ea3233c0ce68b8c9eecc47717f123c5c2b42fbd6d9f6200048f565b8015620002d757815460ff191660011782556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a15050565b6000806200024260017fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5e6200048f565b600160e01b6001600160e01b0319831601620003d95760405162461bcd60e51b815260206004820152601f60248201527f496e74657266616365446574656374696f6e3a2077726f6e672076616c7565006044820152606401620000ed565b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b80516001600160a01b03811681146200041f57600080fd5b919050565b600080600080608085870312156200043b57600080fd5b620004468562000407565b9350620004566020860162000407565b9250620004666040860162000407565b60608601519092506001600160f81b03811681146200048457600080fd5b939692955090935050565b818103818111156200024257634e487b7160e01b600052601160045260246000fd5b608051611c57620004e26000396000818161021001528181610c3601528181610cbe01526111440152611c576000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b25780638da5cb5b11610081578063a7df12ea11610066578063a7df12ea14610341578063be4499ea14610354578063f2fde38b1461036757600080fd5b80638da5cb5b1461030e57806399c8d5561461031657600080fd5b80635c975abb146102b357806361d027b3146102bb578063817b1cd2146102db5780638456cb591461030657600080fd5b806333fdbbe5116100ee57806333fdbbe5146102575780633f4ba83a146102905780634f91440d1461029857806350876c5e146102a057600080fd5b806301ffc9a7146101205780630ec8d9521461014857806316934fc41461015d578063312d077a1461020b575b600080fd5b61013361012e366004611962565b61037a565b60405190151581526020015b60405180910390f35b61015b6101563660046119df565b610394565b005b6101cd61016b3660046119fa565b600260205260009081526040902080546001909101547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116907f0100000000000000000000000000000000000000000000000000000000000000900460ff1683565b604080519384527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216602084015260ff169082015260600161013f565b6102327f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6102606103e881565b6040517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b61015b610576565b61015b610595565b61015b6102ae3660046119fa565b610799565b610133610891565b6001546102329073ffffffffffffffffffffffffffffffffffffffff1681565b600354610260907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681565b61015b6108aa565b6102326108c3565b600054610260907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681565b61015b61034f3660046119df565b6108ea565b61015b610362366004611a30565b610e2c565b61015b6103753660046119fa565b61127e565b600061038e8261038861140e565b90611548565b92915050565b6103a6336103a0611295565b90611622565b6103e87effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82161115610438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f474d45453a74617825206d75737420626520302d31303000000000000000000060448201526064015b60405180910390fd5b6003547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16156104f2576000547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690821611156104f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f474d45453a4e65772074617825203c3d2063757272656e742074617825000000604482015260640161042f565b600080547fff00000000000000000000000000000000000000000000000000000000000000167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f699b3e1585cbf03e69e54c870320eba3c1dac80558d9c2e8d7f2a34fbd04404c9060200160405180910390a150565b610583335b6103a0611295565b61059361058e611384565b6116a5565b565b6105a56105a0611384565b611700565b33600081815260026020526040902060018101547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1680610641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e73756666696369656e74207374616b656420616d6f756e74000000000000604482015260640161042f565b81546000906106509042611a9c565b600184015490915061068b907f0100000000000000000000000000000000000000000000000000000000000000900460ff1662015180611aaf565b8110156106f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43757272656e74206c6f636b20706572696f64206e6f74206578706972656400604482015260640161042f565b4283556001830154604080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851681527f010000000000000000000000000000000000000000000000000000000000000090920460ff16602083015273ffffffffffffffffffffffffffffffffffffffff8616917fa217c421e0e9357b7b1815d752952b142ddc0e23f9f14ecb8233f8f83d563c4d910160405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff8116610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f474d45453a747265617375727920213d207a65726f2061646472657373000000604482015260640161042f565b610822336103a0611295565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fde737007db65a6958950c1ec3c0f45c8fa9125b7692e2426896122f6cf131ee090600090a250565b60006108a561089e611384565b5460ff1690565b905090565b6108b33361057b565b6105936108be611384565b61176c565b60006108a56108d0611295565b5473ffffffffffffffffffffffffffffffffffffffff1690565b6000817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1611610975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e7374616b6520616d6f756e74206d757374206265203e207a65726f000000604482015260640161042f565b33600081815260026020526040902060018101547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116908416811015610a18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e73756666696369656e74207374616b656420616d6f756e74000000000000604482015260640161042f565b600080547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1615801590610a8d57506001830154610a7e907f0100000000000000000000000000000000000000000000000000000000000000900460ff1662015180611aaf565b8354610a8a9190611ac6565b42105b15610ad1576000546103e890610ac4907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1687611ad9565b610ace9190611b23565b90505b6000610add8684611b88565b6001850180547fff00000000000000000000000000000000000000000000000000000000000000167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116919091179091556003805492935088929091600091610b4991859116611b88565b92506101000a8154817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506000827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff161115610ca7576001546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af1158015610c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca59190611bc7565b505b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb86610cee858a611b88565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660248201526044016020604051808303816000875af1158015610d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da39190611bc7565b50604080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8089168252808516602083015283169181019190915273ffffffffffffffffffffffffffffffffffffffff8616907f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de00906060015b60405180910390a2505050505050565b610e376105a0611384565b33601e60ff83161480610e4d57508160ff16603c145b80610e5b57508160ff16605a145b610ec1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f474d45453a496e76616c696420706572696f6400000000000000000000000000604482015260640161042f565b6000837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1611610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f474d45453a416d6f756e74206d757374206265203e2030000000000000000000604482015260640161042f565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600260205260408120600181015490917effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911690811561104957600183015460ff8681167f01000000000000000000000000000000000000000000000000000000000000009092041614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f474d45453a7374616b696e6720706572696f6420646966666572656400000000604482015260640161042f565b6110428683611be9565b905061109c565b506001820180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000060ff871602179055845b6001830180547fff00000000000000000000000000000000000000000000000000000000000000167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116919091179091554284556040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015230602483015291881660448201527f0000000000000000000000000000000000000000000000000000000000000000909116906323b872dd906064016020604051808303816000875af115801561118f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b39190611bc7565b50600380548791906000906111ea9084907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611be9565b82546101009290920a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818102199093169183160217909155604080518983168152918416602083015260ff88169082015273ffffffffffffffffffffffffffffffffffffffff861691507fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed90606001610e1c565b611292338261128b611295565b91906117ca565b50565b60008061038e60017fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cd611a9c565b73ffffffffffffffffffffffffffffffffffffffff81161561134b5781547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff821690811783556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35b6113807f7f5828d000000000000000000000000000000000000000000000000000000000600161137961140e565b919061143c565b5050565b60008061038e60017f0186a05f63b1553398ad5ea3233c0ce68b8c9eecc47717f123c5c2b42fbd6d9f611a9c565b80156113805781547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011782556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a15050565b60008061038e60017fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5e611a9c565b7c01000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e74657266616365446574656374696f6e3a2077726f6e672076616c756500604482015260640161042f565b7fffffffff00000000000000000000000000000000000000000000000000000000919091166000908152602092909252604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60007c01000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016115985750600061038e565b7ffe003659000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016115e95750600161038e565b507fffffffff00000000000000000000000000000000000000000000000000000000166000908152602091909152604090205460ff1690565b815473ffffffffffffffffffffffffffffffffffffffff828116911614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f776e6572736869703a206e6f7420746865206f776e65720000000000000000604482015260640161042f565b6116ae816118f7565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a150565b805460ff1615611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50617573653a2070617573656400000000000000000000000000000000000000604482015260640161042f565b61177581611700565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a150565b825473ffffffffffffffffffffffffffffffffffffffff908116908316811461184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f776e6572736869703a206e6f7420746865206f776e65720000000000000000604482015260640161042f565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146118f15783547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182178655604051908316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35b50505050565b805460ff16611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f50617573653a206e6f7420706175736564000000000000000000000000000000604482015260640161042f565b60006020828403121561197457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119a457600080fd5b9392505050565b80357effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146119da57600080fd5b919050565b6000602082840312156119f157600080fd5b6119a4826119ab565b600060208284031215611a0c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146119a457600080fd5b60008060408385031215611a4357600080fd5b611a4c836119ab565b9150602083013560ff81168114611a6257600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561038e5761038e611a6d565b808202811582820484141761038e5761038e611a6d565b8082018082111561038e5761038e611a6d565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828116828216818102831692918115828504821417611b1a57611b1a611a6d565b50505092915050565b60007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80841680611b7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828116828216039080821115611bc057611bc0611a6d565b5092915050565b600060208284031215611bd957600080fd5b815180151581146119a457600080fd5b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818116838216019080821115611bc057611bc0611a6d56fea2646970667358221220c7db3610cda8a1d63ce988f104fa8fdbe307cdd9eeeeab610148cfbe1ac7953664736f6c63430008110033000000000000000000000000d9016a907dc0ecfa3ca425ab20b6b785b42f2373000000000000000000000000b106966d026fa099f32a57f762a38f17c6c9698e00000000000000000000000027366d0f7dce8b7e90344fce0cb7188666fdf6400000000000000000000000000000000000000000000000000000000000000032

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061011b5760003560e01c80635c975abb116100b25780638da5cb5b11610081578063a7df12ea11610066578063a7df12ea14610341578063be4499ea14610354578063f2fde38b1461036757600080fd5b80638da5cb5b1461030e57806399c8d5561461031657600080fd5b80635c975abb146102b357806361d027b3146102bb578063817b1cd2146102db5780638456cb591461030657600080fd5b806333fdbbe5116100ee57806333fdbbe5146102575780633f4ba83a146102905780634f91440d1461029857806350876c5e146102a057600080fd5b806301ffc9a7146101205780630ec8d9521461014857806316934fc41461015d578063312d077a1461020b575b600080fd5b61013361012e366004611962565b61037a565b60405190151581526020015b60405180910390f35b61015b6101563660046119df565b610394565b005b6101cd61016b3660046119fa565b600260205260009081526040902080546001909101547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116907f0100000000000000000000000000000000000000000000000000000000000000900460ff1683565b604080519384527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216602084015260ff169082015260600161013f565b6102327f000000000000000000000000d9016a907dc0ecfa3ca425ab20b6b785b42f237381565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b6102606103e881565b6040517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b61015b610576565b61015b610595565b61015b6102ae3660046119fa565b610799565b610133610891565b6001546102329073ffffffffffffffffffffffffffffffffffffffff1681565b600354610260907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681565b61015b6108aa565b6102326108c3565b600054610260907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681565b61015b61034f3660046119df565b6108ea565b61015b610362366004611a30565b610e2c565b61015b6103753660046119fa565b61127e565b600061038e8261038861140e565b90611548565b92915050565b6103a6336103a0611295565b90611622565b6103e87effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82161115610438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f474d45453a74617825206d75737420626520302d31303000000000000000000060448201526064015b60405180910390fd5b6003547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16156104f2576000547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690821611156104f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f474d45453a4e65772074617825203c3d2063757272656e742074617825000000604482015260640161042f565b600080547fff00000000000000000000000000000000000000000000000000000000000000167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f699b3e1585cbf03e69e54c870320eba3c1dac80558d9c2e8d7f2a34fbd04404c9060200160405180910390a150565b610583335b6103a0611295565b61059361058e611384565b6116a5565b565b6105a56105a0611384565b611700565b33600081815260026020526040902060018101547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1680610641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e73756666696369656e74207374616b656420616d6f756e74000000000000604482015260640161042f565b81546000906106509042611a9c565b600184015490915061068b907f0100000000000000000000000000000000000000000000000000000000000000900460ff1662015180611aaf565b8110156106f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43757272656e74206c6f636b20706572696f64206e6f74206578706972656400604482015260640161042f565b4283556001830154604080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851681527f010000000000000000000000000000000000000000000000000000000000000090920460ff16602083015273ffffffffffffffffffffffffffffffffffffffff8616917fa217c421e0e9357b7b1815d752952b142ddc0e23f9f14ecb8233f8f83d563c4d910160405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff8116610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f474d45453a747265617375727920213d207a65726f2061646472657373000000604482015260640161042f565b610822336103a0611295565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fde737007db65a6958950c1ec3c0f45c8fa9125b7692e2426896122f6cf131ee090600090a250565b60006108a561089e611384565b5460ff1690565b905090565b6108b33361057b565b6105936108be611384565b61176c565b60006108a56108d0611295565b5473ffffffffffffffffffffffffffffffffffffffff1690565b6000817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1611610975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e7374616b6520616d6f756e74206d757374206265203e207a65726f000000604482015260640161042f565b33600081815260026020526040902060018101547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116908416811015610a18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e73756666696369656e74207374616b656420616d6f756e74000000000000604482015260640161042f565b600080547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1615801590610a8d57506001830154610a7e907f0100000000000000000000000000000000000000000000000000000000000000900460ff1662015180611aaf565b8354610a8a9190611ac6565b42105b15610ad1576000546103e890610ac4907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1687611ad9565b610ace9190611b23565b90505b6000610add8684611b88565b6001850180547fff00000000000000000000000000000000000000000000000000000000000000167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116919091179091556003805492935088929091600091610b4991859116611b88565b92506101000a8154817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506000827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff161115610ca7576001546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660248201527f000000000000000000000000d9016a907dc0ecfa3ca425ab20b6b785b42f23739091169063a9059cbb906044016020604051808303816000875af1158015610c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca59190611bc7565b505b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000d9016a907dc0ecfa3ca425ab20b6b785b42f23731663a9059cbb86610cee858a611b88565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660248201526044016020604051808303816000875af1158015610d7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da39190611bc7565b50604080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8089168252808516602083015283169181019190915273ffffffffffffffffffffffffffffffffffffffff8616907f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de00906060015b60405180910390a2505050505050565b610e376105a0611384565b33601e60ff83161480610e4d57508160ff16603c145b80610e5b57508160ff16605a145b610ec1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f474d45453a496e76616c696420706572696f6400000000000000000000000000604482015260640161042f565b6000837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1611610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f474d45453a416d6f756e74206d757374206265203e2030000000000000000000604482015260640161042f565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600260205260408120600181015490917effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911690811561104957600183015460ff8681167f01000000000000000000000000000000000000000000000000000000000000009092041614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f474d45453a7374616b696e6720706572696f6420646966666572656400000000604482015260640161042f565b6110428683611be9565b905061109c565b506001820180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000060ff871602179055845b6001830180547fff00000000000000000000000000000000000000000000000000000000000000167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff838116919091179091554284556040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015230602483015291881660448201527f000000000000000000000000d9016a907dc0ecfa3ca425ab20b6b785b42f2373909116906323b872dd906064016020604051808303816000875af115801561118f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b39190611bc7565b50600380548791906000906111ea9084907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611be9565b82546101009290920a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818102199093169183160217909155604080518983168152918416602083015260ff88169082015273ffffffffffffffffffffffffffffffffffffffff861691507fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed90606001610e1c565b611292338261128b611295565b91906117ca565b50565b60008061038e60017fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cd611a9c565b73ffffffffffffffffffffffffffffffffffffffff81161561134b5781547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff821690811783556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35b6113807f7f5828d000000000000000000000000000000000000000000000000000000000600161137961140e565b919061143c565b5050565b60008061038e60017f0186a05f63b1553398ad5ea3233c0ce68b8c9eecc47717f123c5c2b42fbd6d9f611a9c565b80156113805781547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011782556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a15050565b60008061038e60017fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5e611a9c565b7c01000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e74657266616365446574656374696f6e3a2077726f6e672076616c756500604482015260640161042f565b7fffffffff00000000000000000000000000000000000000000000000000000000919091166000908152602092909252604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60007c01000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016115985750600061038e565b7ffe003659000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016115e95750600161038e565b507fffffffff00000000000000000000000000000000000000000000000000000000166000908152602091909152604090205460ff1690565b815473ffffffffffffffffffffffffffffffffffffffff828116911614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f776e6572736869703a206e6f7420746865206f776e65720000000000000000604482015260640161042f565b6116ae816118f7565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a150565b805460ff1615611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50617573653a2070617573656400000000000000000000000000000000000000604482015260640161042f565b61177581611700565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a150565b825473ffffffffffffffffffffffffffffffffffffffff908116908316811461184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f776e6572736869703a206e6f7420746865206f776e65720000000000000000604482015260640161042f565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146118f15783547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182178655604051908316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35b50505050565b805460ff16611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f50617573653a206e6f7420706175736564000000000000000000000000000000604482015260640161042f565b60006020828403121561197457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119a457600080fd5b9392505050565b80357effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146119da57600080fd5b919050565b6000602082840312156119f157600080fd5b6119a4826119ab565b600060208284031215611a0c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146119a457600080fd5b60008060408385031215611a4357600080fd5b611a4c836119ab565b9150602083013560ff81168114611a6257600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561038e5761038e611a6d565b808202811582820484141761038e5761038e611a6d565b8082018082111561038e5761038e611a6d565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828116828216818102831692918115828504821417611b1a57611b1a611a6d565b50505092915050565b60007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80841680611b7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828116828216039080821115611bc057611bc0611a6d565b5092915050565b600060208284031215611bd957600080fd5b815180151581146119a457600080fd5b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818116838216019080821115611bc057611bc0611a6d56fea2646970667358221220c7db3610cda8a1d63ce988f104fa8fdbe307cdd9eeeeab610148cfbe1ac7953664736f6c63430008110033

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

000000000000000000000000d9016a907dc0ecfa3ca425ab20b6b785b42f2373000000000000000000000000b106966d026fa099f32a57f762a38f17c6c9698e00000000000000000000000027366d0f7dce8b7e90344fce0cb7188666fdf6400000000000000000000000000000000000000000000000000000000000000032

-----Decoded View---------------
Arg [0] : _gmee (address): 0xD9016A907Dc0ECfA3ca425ab20B6b785B42F2373
Arg [1] : _treasury (address): 0xB106966d026fA099F32a57F762a38f17c6C9698e
Arg [2] : _owner (address): 0x27366D0f7DCe8b7E90344FCE0CB7188666FDF640
Arg [3] : _initialTaxPercentage (uint248): 50

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000d9016a907dc0ecfa3ca425ab20b6b785b42f2373
Arg [1] : 000000000000000000000000b106966d026fa099f32a57f762a38f17c6c9698e
Arg [2] : 00000000000000000000000027366d0f7dce8b7e90344fce0cb7188666fdf640
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000032


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.