ETH Price: $3,033.91 (-7.02%)
Gas: 12 Gwei

Token

 

Overview

Max Total Supply

0

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PlanetRewards

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion
File 1 of 4 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

File 2 of 4 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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 3 of 4 : 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 4 of 4 : PlanetRewards.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

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

contract PlanetRewards is Ownable {
    bool public stakingEnabled;
    address public immutable PLANET;
    uint256 public rewardRate = 10000;
    uint256 public firstStakeAmount = 1_000_000 ether;
    uint256 public minStake = 100_000 ether;
    uint256 public cooldown = 1 days;
    uint256 public maxStakeDurationWithoutNewEntry = 52 weeks;
    uint256 public minStakeDuration;
    uint256 public globalTotalStaked;
    uint256 public totalUniqueStakers;

    mapping(address => Account) public account;

    address[] public lastWinners;

    struct Account {
        uint256 lastStakedAt;
        uint256 totalStaked;
        uint256 creditedPoints;
    }

    event Stake(address indexed staker, uint256 amount, uint256 totalCreditedPoints, uint256 timestamp);
    event Unstake(address indexed staker, uint256 amount, uint256 timestamp);
    event StakingEnabled(bool enabled);
    event ResetWinner(address winner);
    event SetMinStake(uint256 value);
    event SetFirstStakeAmount(uint256 value);
    event SetMinStakeDuration(uint256 value);
    event SetRewardRate(uint256 value);
    event SetMinStakeDurationWithoutNewEntry(uint256 value);
    event SetCooldown(uint256 value);

    error InvalidStakingAmount();
    error NoStakedTokens();
    error StakingNotEnabled();
    error UnstakingNotPermitted();
    error ZeroValue();

    constructor(address planet) {
        PLANET = planet;
    }

    function stake(uint256 amount) public {
        if (!stakingEnabled) revert StakingNotEnabled();
        if (amount % minStake != 0) revert InvalidStakingAmount();

        IERC20(PLANET).transferFrom(msg.sender, address(this), amount);

        uint256 stakedBefore = account[msg.sender].totalStaked;

        if (stakedBefore == 0) {
            if (amount < firstStakeAmount) revert InvalidStakingAmount();
            totalUniqueStakers++;
        }
        
        globalTotalStaked += amount;

        uint256 points = totalPoints(msg.sender);

        account[msg.sender] = Account(
            {
                lastStakedAt: block.timestamp,
                totalStaked: stakedBefore + amount,
                creditedPoints: points
            }
        );
        
        emit Stake(msg.sender, amount, points, block.timestamp);
    }

    function unstake() public {
        uint256 stakedTokens = account[msg.sender].totalStaked;

        if (stakedTokens == 0) revert NoStakedTokens();
        if (block.timestamp - account[msg.sender].lastStakedAt < minStakeDuration) {
            revert UnstakingNotPermitted();
        }

        totalUniqueStakers--;
        globalTotalStaked -= stakedTokens;

        account[msg.sender].creditedPoints = totalPoints(msg.sender);
        
        delete account[msg.sender].lastStakedAt;
        delete account[msg.sender].totalStaked;

        IERC20(PLANET).transfer(msg.sender, stakedTokens);

        emit Unstake(msg.sender, stakedTokens, block.timestamp);
    }

    function totalPoints(address wallet) public view returns (uint256) {
        uint256 timePassed = block.timestamp - account[wallet].lastStakedAt;
        uint256 accumulated;
        if (timePassed != block.timestamp) {
            if (timePassed >= maxStakeDurationWithoutNewEntry) {
                return 0;
            }
            accumulated = ((timePassed / cooldown) * account[wallet].totalStaked) / rewardRate;
        }
        return account[wallet].creditedPoints + accumulated;
    }

    /* -------------------------------------------------------------------------- */
    /*                         OWNER RESTRICTED FUNCTIONS                         */
    /* -------------------------------------------------------------------------- */

    function resetWinners(address[] calldata winners) external onlyOwner {
        uint256 length = winners.length;
        for (uint256 i = 0; i < length; i++) {
            account[winners[i]].lastStakedAt = block.timestamp;
            delete account[winners[i]].creditedPoints;
            emit ResetWinner(winners[i]);
        }
        lastWinners = winners;
    }

    function addToLastWinners(address[] calldata winners) external onlyOwner {
        uint256 length = winners.length;
        for (uint256 i = 0; i < length; i++) {
            account[winners[i]].lastStakedAt = block.timestamp;
            delete account[winners[i]].creditedPoints;
            lastWinners.push(winners[i]);
            emit ResetWinner(winners[i]);
        }
    }

    function setMinStake(uint256 newValue) external onlyOwner {
        if (newValue == 0) revert ZeroValue();
        minStake = newValue;
        emit SetMinStake(newValue);
    }

    function setFirstStakeAmount(uint256 newValue) external onlyOwner {
        if (newValue == 0) revert ZeroValue();
        firstStakeAmount = newValue;
        emit SetFirstStakeAmount(newValue);
    }

    function setMinStakeDuration(uint256 newValue) external onlyOwner {
        minStakeDuration = newValue;
        emit SetMinStakeDuration(newValue);
    }

    function setRewardRate(uint256 newValue) external onlyOwner {
        if (newValue == 0) revert ZeroValue();
        rewardRate = newValue;
        emit SetRewardRate(newValue);
    }

    function setStakingEnabled(bool newValue) external onlyOwner {
        stakingEnabled = newValue;
        emit StakingEnabled(newValue);
    }

    function setMaxStakePeriodWithoutNewEntry(uint256 newValue) external onlyOwner {
        maxStakeDurationWithoutNewEntry = newValue;
        emit SetMinStakeDurationWithoutNewEntry(newValue);
    }

    function setCooldown(uint256 newValue) external onlyOwner {
        if (newValue == 0) revert ZeroValue();
        cooldown = newValue;
        emit SetCooldown(newValue);
    }
}

Settings
{
  "remappings": [
    "@chainlink/contracts/=node_modules/@chainlink/contracts/",
    "@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"planet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidStakingAmount","type":"error"},{"inputs":[],"name":"NoStakedTokens","type":"error"},{"inputs":[],"name":"StakingNotEnabled","type":"error"},{"inputs":[],"name":"UnstakingNotPermitted","type":"error"},{"inputs":[],"name":"ZeroValue","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"winner","type":"address"}],"name":"ResetWinner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetCooldown","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetFirstStakeAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMinStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMinStakeDuration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMinStakeDurationWithoutNewEntry","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetRewardRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalCreditedPoints","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"StakingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Unstake","type":"event"},{"inputs":[],"name":"PLANET","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"account","outputs":[{"internalType":"uint256","name":"lastStakedAt","type":"uint256"},{"internalType":"uint256","name":"totalStaked","type":"uint256"},{"internalType":"uint256","name":"creditedPoints","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"winners","type":"address[]"}],"name":"addToLastWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastWinners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxStakeDurationWithoutNewEntry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minStakeDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"winners","type":"address[]"}],"name":"resetWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setFirstStakeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxStakePeriodWithoutNewEntry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinStakeDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setStakingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"totalPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUniqueStakers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405261271060015569d3c21bcecceda100000060025569152d02c7e14af6800000600355620151806004556301dfe20060055534801561004157600080fd5b50604051611247380380611247833981016040819052610060916100ca565b6100693361007a565b6001600160a01b03166080526100fa565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100dc57600080fd5b81516001600160a01b03811681146100f357600080fd5b9392505050565b6080516111246101236000396000818161024801528181610572015261099501526111246000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063787a08a6116100f9578063aafc5d4711610097578063c78287d811610071578063c78287d81461038e578063eb95ddf1146103a1578063f2fde38b146103aa578063fe62dfae146103bd57600080fd5b8063aafc5d4714610355578063adda2c2e14610368578063bce8567e1461037b57600080fd5b80638c80fd90116100d35780638c80fd901461030b5780638da5cb5b1461031e5780639e447fc61461032f578063a694fc3a1461034257600080fd5b8063787a08a6146102e65780637b0a47ee146102ef578063836d6c2e146102f857600080fd5b80634bf9c46d116101665780635b03963f116101405780635b03963f146102825780635fec5c641461028b578063715018a61461029457806373b9aa911461029c57600080fd5b80634bf9c46d146102275780634fc3f41a14610230578063597623541461024357600080fd5b80630fac9100146101ae57806313964295146101d45780631cfff51b146101dd5780632def662014610201578063375b3c0a1461020b5780633aa5d6e914610214575b600080fd5b6101c16101bc366004610f0b565b6103d0565b6040519081526020015b60405180910390f35b6101c160025481565b6000546101f190600160a01b900460ff1681565b60405190151581526020016101cb565b610209610486565b005b6101c160035481565b610209610222366004610f3b565b61061d565b6101c160085481565b61020961023e366004610fb0565b6107ac565b61026a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101cb565b6101c160075481565b6101c160065481565b610209610811565b6102cb6102aa366004610f0b565b60096020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101cb565b6101c160045481565b6101c160015481565b610209610306366004610fb0565b610825565b610209610319366004610fb0565b610862565b6000546001600160a01b031661026a565b61020961033d366004610fb0565b6108c0565b610209610350366004610fb0565b61091e565b610209610363366004610fb0565b610b16565b61026a610376366004610fb0565b610b53565b610209610389366004610fd7565b610b7d565b61020961039c366004610fb0565b610bd2565b6101c160055481565b6102096103b8366004610f0b565b610c30565b6102096103cb366004610f3b565b610cae565b6001600160a01b03811660009081526009602052604081205481906103f5904261100a565b90506000428214610457576005548210610413575060009392505050565b600180546001600160a01b0386166000908152600960205260409020909101546004546104409085611039565b61044a919061104d565b6104549190611039565b90505b6001600160a01b03841660009081526009602052604090206002015461047e908290611064565b949350505050565b33600090815260096020526040812060010154908190036104ba57604051637ed4d00960e01b815260040160405180910390fd5b600654336000908152600960205260409020546104d7904261100a565b10156104f657604051631cbc908b60e31b815260040160405180910390fd5b6008805490600061050683611077565b9190505550806007600082825461051d919061100a565b9091555061052c9050336103d0565b336000818152600960205260408082206002810194909455818455600190930155905163a9059cbb60e01b81526004810191909152602481018290526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156105bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105df919061108e565b506040805182815242602082015233917ff960dbf9e5d0682f7a298ed974e33a28b4464914b7a2bfac12ae419a9afeb280910160405180910390a250565b610625610de9565b8060005b818110156107a6574260096000868685818110610648576106486110ab565b905060200201602081019061065d9190610f0b565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001819055506009600085858481811061069a5761069a6110ab565b90506020020160208101906106af9190610f0b565b6001600160a01b03166001600160a01b0316815260200190815260200160002060020160009055600a8484838181106106ea576106ea6110ab565b90506020020160208101906106ff9190610f0b565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790557fbc675e0810a90781c14191d5ed30b0adedec692e6f8eecc992c16a59522077b7848483818110610764576107646110ab565b90506020020160208101906107799190610f0b565b6040516001600160a01b03909116815260200160405180910390a18061079e816110c1565b915050610629565b50505050565b6107b4610de9565b806000036107d557604051637c946ed760e01b815260040160405180910390fd5b60048190556040518181527f89906a9a10e4d81c0b78fefe0fc1840fba029f85e9e790154ec03b7cc80a6976906020015b60405180910390a150565b610819610de9565b6108236000610e43565b565b61082d610de9565b60058190556040518181527fbbc4bed5b81a91e963fc1272af6913c3af71b7f12c4e5570e63b71d6c53c075490602001610806565b61086a610de9565b8060000361088b57604051637c946ed760e01b815260040160405180910390fd5b60038190556040518181527f8ea0c3c113ec75e9658de181bae81e0f311a2002486a05c5925b200ad7d6447c90602001610806565b6108c8610de9565b806000036108e957604051637c946ed760e01b815260040160405180910390fd5b60018190556040518181527f1946fb78c7ca778b54d82cabaac5ba67cf446f58d0ff1f8ceaebb6150e54e44f90602001610806565b600054600160a01b900460ff166109485760405163a3df9bcf60e01b815260040160405180910390fd5b60035461095590826110da565b156109735760405163026246f560e21b815260040160405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a919061108e565b503360009081526009602052604081206001015490819003610a5f57600254821015610a495760405163026246f560e21b815260040160405180910390fd5b60088054906000610a59836110c1565b91905055505b8160076000828254610a719190611064565b9091555060009050610a82336103d0565b905060405180606001604052804281526020018484610aa19190611064565b815260209081018390523360008181526009835260409081902084518155848401516001820155938101516002909401939093558251868152918201849052428284015291517ff556991011e831bcfac4f406d547e5e32cdd98267efab83935230d5f8d02c4469181900360600190a2505050565b610b1e610de9565b60068190556040518181527fd7bdd99e5d2c42051dc87415036b02df8ef9e26a0d4674bb2c038b545261dd7a90602001610806565b600a8181548110610b6357600080fd5b6000918252602090912001546001600160a01b0316905081565b610b85610de9565b60008054821515600160a01b0260ff60a01b199091161790556040517f280cb161002275204369941f9802ee155e35a137f91f719acae275cbed8a50929061080690831515815260200190565b610bda610de9565b80600003610bfb57604051637c946ed760e01b815260040160405180910390fd5b60028190556040518181527f3f2d5f1f494df75d6ac98bc034debb6aa1e55c1cf05f08e70195fcc68e67379a90602001610806565b610c38610de9565b6001600160a01b038116610ca25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610cab81610e43565b50565b610cb6610de9565b8060005b81811015610ddc574260096000868685818110610cd957610cd96110ab565b9050602002016020810190610cee9190610f0b565b6001600160a01b03166001600160a01b031681526020019081526020016000206000018190555060096000858584818110610d2b57610d2b6110ab565b9050602002016020810190610d409190610f0b565b6001600160a01b03166001600160a01b03168152602001908152602001600020600201600090557fbc675e0810a90781c14191d5ed30b0adedec692e6f8eecc992c16a59522077b7848483818110610d9a57610d9a6110ab565b9050602002016020810190610daf9190610f0b565b6040516001600160a01b03909116815260200160405180910390a180610dd4816110c1565b915050610cba565b506107a6600a8484610e93565b6000546001600160a01b031633146108235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c99565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610ee6579160200282015b82811115610ee65781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190610eb3565b50610ef2929150610ef6565b5090565b5b80821115610ef25760008155600101610ef7565b600060208284031215610f1d57600080fd5b81356001600160a01b0381168114610f3457600080fd5b9392505050565b60008060208385031215610f4e57600080fd5b823567ffffffffffffffff80821115610f6657600080fd5b818501915085601f830112610f7a57600080fd5b813581811115610f8957600080fd5b8660208260051b8501011115610f9e57600080fd5b60209290920196919550909350505050565b600060208284031215610fc257600080fd5b5035919050565b8015158114610cab57600080fd5b600060208284031215610fe957600080fd5b8135610f3481610fc9565b634e487b7160e01b600052601160045260246000fd5b8181038181111561101d5761101d610ff4565b92915050565b634e487b7160e01b600052601260045260246000fd5b60008261104857611048611023565b500490565b808202811582820484141761101d5761101d610ff4565b8082018082111561101d5761101d610ff4565b60008161108657611086610ff4565b506000190190565b6000602082840312156110a057600080fd5b8151610f3481610fc9565b634e487b7160e01b600052603260045260246000fd5b6000600182016110d3576110d3610ff4565b5060010190565b6000826110e9576110e9611023565b50069056fea2646970667358221220ec56a9b7c8a971de21e8843d33b621a529ccf913f9e889caddacec6e9d97535164736f6c634300081300330000000000000000000000002ad9addd0d97ec3cdba27f92bf6077893b76ab0b

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c8063787a08a6116100f9578063aafc5d4711610097578063c78287d811610071578063c78287d81461038e578063eb95ddf1146103a1578063f2fde38b146103aa578063fe62dfae146103bd57600080fd5b8063aafc5d4714610355578063adda2c2e14610368578063bce8567e1461037b57600080fd5b80638c80fd90116100d35780638c80fd901461030b5780638da5cb5b1461031e5780639e447fc61461032f578063a694fc3a1461034257600080fd5b8063787a08a6146102e65780637b0a47ee146102ef578063836d6c2e146102f857600080fd5b80634bf9c46d116101665780635b03963f116101405780635b03963f146102825780635fec5c641461028b578063715018a61461029457806373b9aa911461029c57600080fd5b80634bf9c46d146102275780634fc3f41a14610230578063597623541461024357600080fd5b80630fac9100146101ae57806313964295146101d45780631cfff51b146101dd5780632def662014610201578063375b3c0a1461020b5780633aa5d6e914610214575b600080fd5b6101c16101bc366004610f0b565b6103d0565b6040519081526020015b60405180910390f35b6101c160025481565b6000546101f190600160a01b900460ff1681565b60405190151581526020016101cb565b610209610486565b005b6101c160035481565b610209610222366004610f3b565b61061d565b6101c160085481565b61020961023e366004610fb0565b6107ac565b61026a7f0000000000000000000000002ad9addd0d97ec3cdba27f92bf6077893b76ab0b81565b6040516001600160a01b0390911681526020016101cb565b6101c160075481565b6101c160065481565b610209610811565b6102cb6102aa366004610f0b565b60096020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101cb565b6101c160045481565b6101c160015481565b610209610306366004610fb0565b610825565b610209610319366004610fb0565b610862565b6000546001600160a01b031661026a565b61020961033d366004610fb0565b6108c0565b610209610350366004610fb0565b61091e565b610209610363366004610fb0565b610b16565b61026a610376366004610fb0565b610b53565b610209610389366004610fd7565b610b7d565b61020961039c366004610fb0565b610bd2565b6101c160055481565b6102096103b8366004610f0b565b610c30565b6102096103cb366004610f3b565b610cae565b6001600160a01b03811660009081526009602052604081205481906103f5904261100a565b90506000428214610457576005548210610413575060009392505050565b600180546001600160a01b0386166000908152600960205260409020909101546004546104409085611039565b61044a919061104d565b6104549190611039565b90505b6001600160a01b03841660009081526009602052604090206002015461047e908290611064565b949350505050565b33600090815260096020526040812060010154908190036104ba57604051637ed4d00960e01b815260040160405180910390fd5b600654336000908152600960205260409020546104d7904261100a565b10156104f657604051631cbc908b60e31b815260040160405180910390fd5b6008805490600061050683611077565b9190505550806007600082825461051d919061100a565b9091555061052c9050336103d0565b336000818152600960205260408082206002810194909455818455600190930155905163a9059cbb60e01b81526004810191909152602481018290526001600160a01b037f0000000000000000000000002ad9addd0d97ec3cdba27f92bf6077893b76ab0b169063a9059cbb906044016020604051808303816000875af11580156105bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105df919061108e565b506040805182815242602082015233917ff960dbf9e5d0682f7a298ed974e33a28b4464914b7a2bfac12ae419a9afeb280910160405180910390a250565b610625610de9565b8060005b818110156107a6574260096000868685818110610648576106486110ab565b905060200201602081019061065d9190610f0b565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001819055506009600085858481811061069a5761069a6110ab565b90506020020160208101906106af9190610f0b565b6001600160a01b03166001600160a01b0316815260200190815260200160002060020160009055600a8484838181106106ea576106ea6110ab565b90506020020160208101906106ff9190610f0b565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790557fbc675e0810a90781c14191d5ed30b0adedec692e6f8eecc992c16a59522077b7848483818110610764576107646110ab565b90506020020160208101906107799190610f0b565b6040516001600160a01b03909116815260200160405180910390a18061079e816110c1565b915050610629565b50505050565b6107b4610de9565b806000036107d557604051637c946ed760e01b815260040160405180910390fd5b60048190556040518181527f89906a9a10e4d81c0b78fefe0fc1840fba029f85e9e790154ec03b7cc80a6976906020015b60405180910390a150565b610819610de9565b6108236000610e43565b565b61082d610de9565b60058190556040518181527fbbc4bed5b81a91e963fc1272af6913c3af71b7f12c4e5570e63b71d6c53c075490602001610806565b61086a610de9565b8060000361088b57604051637c946ed760e01b815260040160405180910390fd5b60038190556040518181527f8ea0c3c113ec75e9658de181bae81e0f311a2002486a05c5925b200ad7d6447c90602001610806565b6108c8610de9565b806000036108e957604051637c946ed760e01b815260040160405180910390fd5b60018190556040518181527f1946fb78c7ca778b54d82cabaac5ba67cf446f58d0ff1f8ceaebb6150e54e44f90602001610806565b600054600160a01b900460ff166109485760405163a3df9bcf60e01b815260040160405180910390fd5b60035461095590826110da565b156109735760405163026246f560e21b815260040160405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018290527f0000000000000000000000002ad9addd0d97ec3cdba27f92bf6077893b76ab0b6001600160a01b0316906323b872dd906064016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a919061108e565b503360009081526009602052604081206001015490819003610a5f57600254821015610a495760405163026246f560e21b815260040160405180910390fd5b60088054906000610a59836110c1565b91905055505b8160076000828254610a719190611064565b9091555060009050610a82336103d0565b905060405180606001604052804281526020018484610aa19190611064565b815260209081018390523360008181526009835260409081902084518155848401516001820155938101516002909401939093558251868152918201849052428284015291517ff556991011e831bcfac4f406d547e5e32cdd98267efab83935230d5f8d02c4469181900360600190a2505050565b610b1e610de9565b60068190556040518181527fd7bdd99e5d2c42051dc87415036b02df8ef9e26a0d4674bb2c038b545261dd7a90602001610806565b600a8181548110610b6357600080fd5b6000918252602090912001546001600160a01b0316905081565b610b85610de9565b60008054821515600160a01b0260ff60a01b199091161790556040517f280cb161002275204369941f9802ee155e35a137f91f719acae275cbed8a50929061080690831515815260200190565b610bda610de9565b80600003610bfb57604051637c946ed760e01b815260040160405180910390fd5b60028190556040518181527f3f2d5f1f494df75d6ac98bc034debb6aa1e55c1cf05f08e70195fcc68e67379a90602001610806565b610c38610de9565b6001600160a01b038116610ca25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610cab81610e43565b50565b610cb6610de9565b8060005b81811015610ddc574260096000868685818110610cd957610cd96110ab565b9050602002016020810190610cee9190610f0b565b6001600160a01b03166001600160a01b031681526020019081526020016000206000018190555060096000858584818110610d2b57610d2b6110ab565b9050602002016020810190610d409190610f0b565b6001600160a01b03166001600160a01b03168152602001908152602001600020600201600090557fbc675e0810a90781c14191d5ed30b0adedec692e6f8eecc992c16a59522077b7848483818110610d9a57610d9a6110ab565b9050602002016020810190610daf9190610f0b565b6040516001600160a01b03909116815260200160405180910390a180610dd4816110c1565b915050610cba565b506107a6600a8484610e93565b6000546001600160a01b031633146108235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c99565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610ee6579160200282015b82811115610ee65781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190610eb3565b50610ef2929150610ef6565b5090565b5b80821115610ef25760008155600101610ef7565b600060208284031215610f1d57600080fd5b81356001600160a01b0381168114610f3457600080fd5b9392505050565b60008060208385031215610f4e57600080fd5b823567ffffffffffffffff80821115610f6657600080fd5b818501915085601f830112610f7a57600080fd5b813581811115610f8957600080fd5b8660208260051b8501011115610f9e57600080fd5b60209290920196919550909350505050565b600060208284031215610fc257600080fd5b5035919050565b8015158114610cab57600080fd5b600060208284031215610fe957600080fd5b8135610f3481610fc9565b634e487b7160e01b600052601160045260246000fd5b8181038181111561101d5761101d610ff4565b92915050565b634e487b7160e01b600052601260045260246000fd5b60008261104857611048611023565b500490565b808202811582820484141761101d5761101d610ff4565b8082018082111561101d5761101d610ff4565b60008161108657611086610ff4565b506000190190565b6000602082840312156110a057600080fd5b8151610f3481610fc9565b634e487b7160e01b600052603260045260246000fd5b6000600182016110d3576110d3610ff4565b5060010190565b6000826110e9576110e9611023565b50069056fea2646970667358221220ec56a9b7c8a971de21e8843d33b621a529ccf913f9e889caddacec6e9d97535164736f6c63430008130033

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

0000000000000000000000002ad9addd0d97ec3cdba27f92bf6077893b76ab0b

-----Decoded View---------------
Arg [0] : planet (address): 0x2aD9adDD0d97EC3cDBA27F92bF6077893b76Ab0b

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002ad9addd0d97ec3cdba27f92bf6077893b76ab0b


Loading...
Loading
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.