Contract 0x51318B7D00db7ACc4026C88c3952B66278B6A67F 6

 

Contract Overview

PlutusDAO: PLS Token
Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1bae5c764cf010939645e386d84ed6a0bf80f8e73c69c4d6df84809df87d8d86Approve567322982023-01-30 21:08:4920 mins ago0x617ee7c8d25928ac1fe906d186338610a912f942 IN  PlutusDAO: PLS Token0 ETH0.00004704
0xaa389fe909e7fee2ea333441d85ee94631c223948fb27f4ade96c9273c91e763Approve567320312023-01-30 21:07:0522 mins ago0x5094725e368ffee3e88f9ddc44545ec12bc4c020 IN  PlutusDAO: PLS Token0 ETH0.00004632
0x99489e6caa665c8dcdc2d6b0aff3b3204f31b55dd60551d43e3d74f32b806256Approve567313162023-01-30 21:03:1625 mins ago0x81fd82b125b863c1ddb8aad1f313a16df0308b23 IN  PlutusDAO: PLS Token0 ETH0.00005017
0xb2ae6c44ba51f60acd4e0b4eec5691dc21902624df9eb013af3573067d0bffd8Transfer567291702023-01-30 20:51:2837 mins ago0x0543c0ae43a4bd1b05ada1e5bd203ef38d5c107f IN  PlutusDAO: PLS Token0 ETH0.00005094
0x0470d5d7f693fb8d7965083442ad7b08e9ea8144f62f50e9ac6db708aa3969efApprove567274382023-01-30 20:41:3247 mins ago0xe3f6a7c196ba124a49a3b2798bb838236b87481e IN  PlutusDAO: PLS Token0 ETH0.00005458
0x9ca134aa751398820fe358ef9c55a0b509e570f98d2a1fd3b1fc185d89f8a3deTransfer567242932023-01-30 20:24:341 hr 4 mins ago0x81aa9cd79e5c3caa99635092632378d85edad08f IN  PlutusDAO: PLS Token0 ETH0.00005599
0xd93e3968b6aab3ee518e258143f5280bf0d5111ab309d9218b2262d1db33d263Approve567221822023-01-30 20:13:131 hr 15 mins ago0x4daf8ce9d729ca4f121381ec4b22123627c1c004 IN  PlutusDAO: PLS Token0 ETH0.00005993
0x1e5b6be532407eb317133bde1367237e0a8a575edb8559445bcd5b1d57b32095Approve567195172023-01-30 20:00:081 hr 29 mins ago0x05ff25c26352ce316c183fa226ed4de4b07e9e6f IN  PlutusDAO: PLS Token0 ETH0.00006687
0x6c16767e58957005e1efb600cd02450e26d2ca7d4b03cf1526bd29180bc57489Approve567186552023-01-30 19:55:131 hr 33 mins ago0xd124362be5d250183bf0a702b11353e5fd01a82b IN  PlutusDAO: PLS Token0 ETH0.00006656
0xd5a69fd2c7e6fea8459a6108723a66370fee8c827936af8b9a583027bde0c154Approve567160162023-01-30 19:41:241 hr 47 mins ago0x048507466b4804734f494540d52544783333dcc3 IN  PlutusDAO: PLS Token0 ETH0.00006614
0x620b3ff75b3e150b992b9382175d0957617d1205dad237707d640916e0f74aafApprove567153592023-01-30 19:38:201 hr 50 mins ago0x281a615c99e6ac62e6420b8d04d6504e2c1de07f IN  PlutusDAO: PLS Token0 ETH0.00007556
0x91fd4ef63a7e63b6803c9445ee6275c053e65e3e7d091c93de37b0e7ac2f12d5Approve567139592023-01-30 19:31:411 hr 57 mins ago0x7d8e4b2b6a436f55c67a3001c1a9a6a219f3e1d3 IN  PlutusDAO: PLS Token0 ETH0.00016588
0xdd3e759f23c8138ce753685b3782a4b91b58499870321f7072476e2aafd8a5eaApprove567137022023-01-30 19:30:271 hr 58 mins ago0x048507466b4804734f494540d52544783333dcc3 IN  PlutusDAO: PLS Token0 ETH0.0000624
0x75419345539c8af379f65d14c714725c54025073ec6394de1a1e08a6b91dcb6aApprove567128002023-01-30 19:25:492 hrs 3 mins ago0x26527c1d397e522f809d0ef217538120824ee73a IN  PlutusDAO: PLS Token0 ETH0.0000192
0x5ebd224eb0dfda277bfccacbe30e341846b1e4b04bb6e62665c0d770740daac5Approve567121562023-01-30 19:23:052 hrs 6 mins ago0xc6ee43721dc3416c5dbc7f571fecebc33633c8e4 IN  PlutusDAO: PLS Token0 ETH0.00001932
0xf3aa1fde024ef69541f8c27804ec007880245ea780f7e6fd9e84dce467213b73Approve567104342023-01-30 19:15:432 hrs 13 mins ago0x1afce66b24b1c66e44efbc15c46bd7874d512a09 IN  PlutusDAO: PLS Token0 ETH0.00003768
0xde67000c9df668f43d7e4bb2bf66a3f5c7907e896fd18a8d9a8c94bcfc26bf7cApprove567098372023-01-30 19:13:092 hrs 16 mins ago0x1bc2c44b4c863feac4686275949733c48e6bfc78 IN  PlutusDAO: PLS Token0 ETH0.00003836
0x4fca010e550a9d940844c5bb01d5b9770e02b54529b45e562ec7db8a8f432188Approve567081012023-01-30 19:05:232 hrs 23 mins ago0xaab49d377152da55b0a26a0c1b067094685a82a9 IN  PlutusDAO: PLS Token0 ETH0.00004355
0xfdde53e01ee36c79560ac1cc7edca18d6680ae400281ffffab32bb0e0d034e1cApprove567061742023-01-30 18:54:512 hrs 34 mins ago0x67e02f84c3b82e04ce972911bfc82f3c595bbfb1 IN  PlutusDAO: PLS Token0 ETH0.00004161
0x2b34fa09630b9749a643460b372ae0cddd4ee98ea8215b8ac55e5f2ab61739d1Approve567048642023-01-30 18:47:392 hrs 41 mins ago0xa8659f1358974c26657063980e8e85e6843ec7fc IN  PlutusDAO: PLS Token0 ETH0.00003997
0x2497186157fe2b9d4f734deb70d5bce77b7e32bc42d209dcab167fa42a181349Approve567042432023-01-30 18:44:262 hrs 44 mins ago0x0ae35463425481b3a40e1a80f43567dfe4c6d34d IN  PlutusDAO: PLS Token0 ETH0.00003997
0xca784865cc6ac2afa34d41737e1dfb5e59a7dbffb61a503e988b8af0714411b4Approve567029972023-01-30 18:37:472 hrs 51 mins ago0xb3b076f5bc00e9cf7c2391bee104417176077708 IN  PlutusDAO: PLS Token0 ETH0.00004162
0x9101ad9658319721c60a484cee4bb7ed19af866733e3558aa0bf72c32cc2c447Approve567021042023-01-30 18:33:312 hrs 55 mins ago0x03d5c85b7a16a15452e5ac06ef075004a52ad1e2 IN  PlutusDAO: PLS Token0 ETH0.00004237
0xf4b7a682328cee5e28f4fa9bcb45fef7959699dde729f032074e777899bb2d0dApprove566994402023-01-30 18:20:463 hrs 8 mins ago0x435b7d470767cb121f37dd296b2ac7913fdf5427 IN  PlutusDAO: PLS Token0 ETH0.00003674
0xa6216d6e756327030b321db77cb1e9ff23295318511c08c30db2eb3d6ac4d8f2Transfer566966672023-01-30 18:07:383 hrs 21 mins ago0xc5491c37f81bcaf0343644a13b79f2d659dd7c7c IN  PlutusDAO: PLS Token0 ETH0.00003316
[ Download CSV Export 

OVERVIEW

Plutus is a governance aggregator with the goal of amassing governance power in the Dopex/Jones ecosystem through the capture of veDPX and veJONES. The veAsset voting power will be controlled by the PLS token.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd1abfa1e55072465b7da8897b85a3044477c9535a2f99d5dc7000d8875f24b38567354772023-01-30 21:27:401 min ago 0x88c09e2897c36c9ce5a4f75feb184280453f4691 PlutusDAO: PLS Token0 ETH
0xd1abfa1e55072465b7da8897b85a3044477c9535a2f99d5dc7000d8875f24b38567354772023-01-30 21:27:401 min ago Plutus DAO: PLS-ETH SLP PlutusDAO: PLS Token0 ETH
0xd1abfa1e55072465b7da8897b85a3044477c9535a2f99d5dc7000d8875f24b38567354772023-01-30 21:27:401 min ago SushiSwap: Router PlutusDAO: PLS Token0 ETH
0xd1abfa1e55072465b7da8897b85a3044477c9535a2f99d5dc7000d8875f24b38567354772023-01-30 21:27:401 min ago 0x88c09e2897c36c9ce5a4f75feb184280453f4691 PlutusDAO: PLS Token0 ETH
0xd1abfa1e55072465b7da8897b85a3044477c9535a2f99d5dc7000d8875f24b38567354772023-01-30 21:27:401 min ago 0x88c09e2897c36c9ce5a4f75feb184280453f4691 PlutusDAO: PLS Token0 ETH
0xd1abfa1e55072465b7da8897b85a3044477c9535a2f99d5dc7000d8875f24b38567354772023-01-30 21:27:401 min ago Plutus DAO: PLS-ETH SLP PlutusDAO: PLS Token0 ETH
0xd1abfa1e55072465b7da8897b85a3044477c9535a2f99d5dc7000d8875f24b38567354772023-01-30 21:27:401 min ago Plutus DAO: PLS-ETH SLP PlutusDAO: PLS Token0 ETH
0xd1abfa1e55072465b7da8897b85a3044477c9535a2f99d5dc7000d8875f24b38567354772023-01-30 21:27:401 min ago Plutus DAO: PLS-ETH SLP PlutusDAO: PLS Token0 ETH
0x8e314ab64c2fc2ca8e2a23631958ca6846e965b86c735b7b0e4211f003dde392567352412023-01-30 21:26:033 mins ago 0x0a2854fbbd9b3ef66f17d47284e7f899b9509330 PlutusDAO: PLS Token0 ETH
0x8e314ab64c2fc2ca8e2a23631958ca6846e965b86c735b7b0e4211f003dde392567352412023-01-30 21:26:033 mins ago Plutus DAO: PLS-ETH SLP PlutusDAO: PLS Token0 ETH
0x8e314ab64c2fc2ca8e2a23631958ca6846e965b86c735b7b0e4211f003dde392567352412023-01-30 21:26:033 mins ago 0x64768a3a2453f1e8de9e43e92d65fc36e4c9872d PlutusDAO: PLS Token0 ETH
0x8e314ab64c2fc2ca8e2a23631958ca6846e965b86c735b7b0e4211f003dde392567352412023-01-30 21:26:033 mins ago 0x1111111254eeb25477b68fb85ed929f73a960582 PlutusDAO: PLS Token0 ETH
0x8e314ab64c2fc2ca8e2a23631958ca6846e965b86c735b7b0e4211f003dde392567352412023-01-30 21:26:033 mins ago 0x0a2854fbbd9b3ef66f17d47284e7f899b9509330 PlutusDAO: PLS Token0 ETH
0x8e314ab64c2fc2ca8e2a23631958ca6846e965b86c735b7b0e4211f003dde392567352412023-01-30 21:26:033 mins ago 0x9dda6ef3d919c9bc8885d5560999a3640431e8e6 PlutusDAO: PLS Token0 ETH
0xf753f1f175e5f0ac50ea7d21f2f28c5bb6b89560ec683ec950d006e264bdb2ab567350522023-01-30 21:24:574 mins ago 0x1a17abd48cd5fafba8eb70c6527d552a1e9b2914 PlutusDAO: PLS Token0 ETH
0x86b8da29f5e9c914a529d784b2b170bc1a33e86278908c5f07ff51ee9ff6fd02567343172023-01-30 21:20:308 mins ago Plutus DAO: PLS-ETH SLP PlutusDAO: PLS Token0 ETH
0x86b8da29f5e9c914a529d784b2b170bc1a33e86278908c5f07ff51ee9ff6fd02567343172023-01-30 21:20:308 mins ago SushiSwap: Router PlutusDAO: PLS Token0 ETH
0x86b8da29f5e9c914a529d784b2b170bc1a33e86278908c5f07ff51ee9ff6fd02567343172023-01-30 21:20:308 mins ago 0x6024c3e62d8e774a498f7911ae6874b1afda4364 PlutusDAO: PLS Token0 ETH
0x86b8da29f5e9c914a529d784b2b170bc1a33e86278908c5f07ff51ee9ff6fd02567343172023-01-30 21:20:308 mins ago Plutus DAO: PLS-ETH SLP PlutusDAO: PLS Token0 ETH
0x86b8da29f5e9c914a529d784b2b170bc1a33e86278908c5f07ff51ee9ff6fd02567343172023-01-30 21:20:308 mins ago SushiSwap: Router PlutusDAO: PLS Token0 ETH
0x86b8da29f5e9c914a529d784b2b170bc1a33e86278908c5f07ff51ee9ff6fd02567343172023-01-30 21:20:308 mins ago 0x6024c3e62d8e774a498f7911ae6874b1afda4364 PlutusDAO: PLS Token0 ETH
0x86b8da29f5e9c914a529d784b2b170bc1a33e86278908c5f07ff51ee9ff6fd02567343172023-01-30 21:20:308 mins ago 0x6024c3e62d8e774a498f7911ae6874b1afda4364 PlutusDAO: PLS Token0 ETH
0x86b8da29f5e9c914a529d784b2b170bc1a33e86278908c5f07ff51ee9ff6fd02567343172023-01-30 21:20:308 mins ago 0x6024c3e62d8e774a498f7911ae6874b1afda4364 PlutusDAO: PLS Token0 ETH
0x86b8da29f5e9c914a529d784b2b170bc1a33e86278908c5f07ff51ee9ff6fd02567343172023-01-30 21:20:308 mins ago 0x6024c3e62d8e774a498f7911ae6874b1afda4364 PlutusDAO: PLS Token0 ETH
0x86b8da29f5e9c914a529d784b2b170bc1a33e86278908c5f07ff51ee9ff6fd02567343172023-01-30 21:20:308 mins ago Plutus DAO: MasterChef PlutusDAO: PLS Token0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PlutusToken

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 7 : PlutusToken.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
import '@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol';
import '@openzeppelin/contracts/access/Ownable.sol';

// private tge: 4_200_000
// team alloc: 12_000_000
// public tge: 10_000_000
// bonding: 10_000_000
// ops: 13_800_000
// liq mining: 15_000_000
// platform rewards: 35_000_000

contract PlutusToken is ERC20 {
  address public operator;
  uint256 public constant FIXED_SUPPLY = 100_000_000 * 1e18;

  constructor() ERC20('Plutus', 'PLS') {
    operator = msg.sender;
  }

  function setOperator(address _operator) external {
    require(msg.sender == operator, 'Unauthorized');

    operator = _operator;
  }

  function mint(address _to, uint256 _amount) external {
    require(_amount + totalSupply() <= FIXED_SUPPLY, 'Supply Cap reached');
    require(msg.sender == operator, 'Unauthorized');

    _mint(_to, _amount);
  }

  function burn(address _from, uint256 _amount) external {
    require(msg.sender == operator, 'Unauthorized');

    _burn(_from, _amount);
  }
}

File 2 of 7 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 3 of 7 : ERC20Burnable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `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);

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

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

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

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

pragma solidity ^0.8.0;

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

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

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

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FIXED_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405180604001604052806006815260200165506c7574757360d01b81525060405180604001604052806003815260200162504c5360e81b81525081600390805190602001906200006592919062000096565b5080516200007b90600490602084019062000096565b5050600580546001600160a01b031916331790555062000179565b828054620000a4906200013c565b90600052602060002090601f016020900481019282620000c8576000855562000113565b82601f10620000e357805160ff191683800117855562000113565b8280016001018555821562000113579182015b8281111562000113578251825591602001919060010190620000f6565b506200012192915062000125565b5090565b5b8082111562000121576000815560010162000126565b600181811c908216806200015157607f821691505b602082108114156200017357634e487b7160e01b600052602260045260246000fd5b50919050565b610e4880620001896000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610224578063b3ab15fb14610237578063c969943e1461024a578063dd62ed3e1461025c57600080fd5b806370a08231146101cd57806395d89b41146101f65780639dc29fac146101fe578063a457c2d71461021157600080fd5b8063313ce567116100d3578063313ce5671461016b578063395093511461017a57806340c10f191461018d578063570ca735146101a257600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd1461014657806323b872dd14610158575b600080fd5b61010d610295565b60405161011a9190610c66565b60405180910390f35b610136610131366004610cd7565b610327565b604051901515815260200161011a565b6002545b60405190815260200161011a565b610136610166366004610d01565b61033f565b6040516012815260200161011a565b610136610188366004610cd7565b610363565b6101a061019b366004610cd7565b6103a2565b005b6005546101b5906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b61014a6101db366004610d3d565b6001600160a01b031660009081526020819052604090205490565b61010d61046b565b6101a061020c366004610cd7565b61047a565b61013661021f366004610cd7565b6104cd565b610136610232366004610cd7565b610577565b6101a0610245366004610d3d565b610585565b61014a6a52b7d2dcc80cd2e400000081565b61014a61026a366004610d5f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546102a490610d92565b80601f01602080910402602001604051908101604052809291908181526020018280546102d090610d92565b801561031d5780601f106102f25761010080835404028352916020019161031d565b820191906000526020600020905b81548152906001019060200180831161030057829003601f168201915b5050505050905090565b600033610335818585610608565b5060019392505050565b60003361034d858285610761565b6103588585856107f3565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610335908290869061039d908790610de3565b610608565b6a52b7d2dcc80cd2e40000006103b760025490565b6103c19083610de3565b11156104145760405162461bcd60e51b815260206004820152601260248201527f537570706c79204361702072656163686564000000000000000000000000000060448201526064015b60405180910390fd5b6005546001600160a01b0316331461045d5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015260640161040b565b6104678282610a0a565b5050565b6060600480546102a490610d92565b6005546001600160a01b031633146104c35760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015260640161040b565b6104678282610ae9565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091908381101561056a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161040b565b6103588286868403610608565b6000336103358185856107f3565b6005546001600160a01b031633146105ce5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015260640161040b565b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6001600160a01b0383166106835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161040b565b6001600160a01b0382166106ff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161040b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146107ed57818110156107e05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161040b565b6107ed8484848403610608565b50505050565b6001600160a01b03831661086f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161040b565b6001600160a01b0382166108eb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161040b565b6001600160a01b0383166000908152602081905260409020548181101561097a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161040b565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906109b1908490610de3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109fd91815260200190565b60405180910390a36107ed565b6001600160a01b038216610a605760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161040b565b8060026000828254610a729190610de3565b90915550506001600160a01b03821660009081526020819052604081208054839290610a9f908490610de3565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610b655760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161040b565b6001600160a01b03821660009081526020819052604090205481811015610bf45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161040b565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610c23908490610dfb565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610754565b600060208083528351808285015260005b81811015610c9357858101830151858201604001528201610c77565b81811115610ca5576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610cd257600080fd5b919050565b60008060408385031215610cea57600080fd5b610cf383610cbb565b946020939093013593505050565b600080600060608486031215610d1657600080fd5b610d1f84610cbb565b9250610d2d60208501610cbb565b9150604084013590509250925092565b600060208284031215610d4f57600080fd5b610d5882610cbb565b9392505050565b60008060408385031215610d7257600080fd5b610d7b83610cbb565b9150610d8960208401610cbb565b90509250929050565b600181811c90821680610da657607f821691505b60208210811415610dc757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610df657610df6610dcd565b500190565b600082821015610e0d57610e0d610dcd565b50039056fea2646970667358221220f1d45ee96bd9f0f6479083f92fefee4f0e2b13f2a4535048a87dfd1030f8293b64736f6c63430008090033

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