More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,767 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 22281373 | 2 days ago | IN | 0 ETH | 0.00006125 | ||||
Unstake | 22258987 | 5 days ago | IN | 0 ETH | 0.00002534 | ||||
Unstake | 22235262 | 8 days ago | IN | 0 ETH | 0.00003769 | ||||
Unstake | 22145331 | 21 days ago | IN | 0 ETH | 0.00007928 | ||||
Unstake | 22137772 | 22 days ago | IN | 0 ETH | 0.00005095 | ||||
Unstake | 21961051 | 47 days ago | IN | 0 ETH | 0.00084625 | ||||
Unstake | 21935327 | 50 days ago | IN | 0 ETH | 0.00005487 | ||||
Unstake | 21930407 | 51 days ago | IN | 0 ETH | 0.00002574 | ||||
Unstake | 21930405 | 51 days ago | IN | 0 ETH | 0.00006638 | ||||
Unstake | 21918360 | 53 days ago | IN | 0 ETH | 0.00015505 | ||||
Unstake | 21905115 | 55 days ago | IN | 0 ETH | 0.00012026 | ||||
Unstake | 21838195 | 64 days ago | IN | 0 ETH | 0.00033246 | ||||
Unstake | 21802326 | 69 days ago | IN | 0 ETH | 0.00007948 | ||||
Unstake | 21799787 | 69 days ago | IN | 0 ETH | 0.00002146 | ||||
Unstake | 21799786 | 69 days ago | IN | 0 ETH | 0.00006283 | ||||
Unstake | 21788823 | 71 days ago | IN | 0 ETH | 0.00010621 | ||||
Unstake | 21788823 | 71 days ago | IN | 0 ETH | 0.00010621 | ||||
Unstake | 21778653 | 72 days ago | IN | 0 ETH | 0.00011019 | ||||
Unstake | 21752916 | 76 days ago | IN | 0 ETH | 0.00014739 | ||||
Unstake | 21729496 | 79 days ago | IN | 0 ETH | 0.00014187 | ||||
Unstake | 21707835 | 82 days ago | IN | 0 ETH | 0.00023713 | ||||
Unstake | 21633734 | 92 days ago | IN | 0 ETH | 0.0002266 | ||||
Unstake | 21631486 | 93 days ago | IN | 0 ETH | 0.00067013 | ||||
Unstake | 21625621 | 94 days ago | IN | 0 ETH | 0.00031769 | ||||
Unstake | 21621672 | 94 days ago | IN | 0 ETH | 0.00023025 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GMEEStaking
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// 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); } }
// 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); } }
// 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); } }
// 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); }
// 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 } } }
// 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); } }
// 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); }
// 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 } } }
// 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); } }
// 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(); } }
// 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 } } }
// 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; } }
// 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); }
// 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; } }
// 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 } } }
{ "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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.00253 | 77,841,302 | $196,924.48 |
Loading...
Loading
Loading...
Loading
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.