Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x22062DC3F5446492CE71b723113FcaF168A593bC
Balance 0 ETH
Nonce 1
Code Size 6381 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

6381 bytes
0x608060405234801561000f575f80fd5b5060043610610109575f3560e01c8063715018a6116100a0578063a9059cbb1161006f578063a9059cbb146102a7578063d505accf146102d7578063dd62ed3e146102f3578063f2fde38b14610323578063fca3b5aa1461033f57610109565b8063715018a6146102315780637ecebe001461023b5780638da5cb5b1461026b57806395d89b411461028957610109565b8063313ce567116100dc578063313ce567146101a95780633644e515146101c757806340c10f19146101e557806370a082311461020157610109565b806306fdde031461010d578063095ea7b31461012b57806318160ddd1461015b57806323b872dd14610179575b5f80fd5b61011561035b565b6040516101229190611127565b60405180910390f35b610145600480360381019061014091906111d8565b6103e6565b6040516101529190611230565b60405180910390f35b6101636104d3565b6040516101709190611258565b60405180910390f35b610193600480360381019061018e9190611271565b6104d9565b6040516101a09190611230565b60405180910390f35b6101b1610714565b6040516101be91906112dc565b60405180910390f35b6101cf610738565b6040516101dc919061130d565b60405180910390f35b6101ff60048036038101906101fa91906111d8565b610794565b005b61021b60048036038101906102169190611326565b610822565b6040516102289190611258565b60405180910390f35b610239610837565b005b61025560048036038101906102509190611326565b61084a565b6040516102629190611258565b60405180910390f35b61027361085f565b6040516102809190611360565b60405180910390f35b610291610887565b60405161029e9190611127565b60405180910390f35b6102c160048036038101906102bc91906111d8565b610913565b6040516102ce9190611230565b60405180910390f35b6102f160048036038101906102ec91906113cd565b610a20565b005b61030d6004803603810190610308919061146a565b610d0d565b60405161031a9190611258565b60405180910390f35b61033d60048036038101906103389190611326565b610d2d565b005b61035960048036038101906103549190611326565b610db1565b005b5f8054610367906114d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610393906114d5565b80156103de5780601f106103b5576101008083540402835291602001916103de565b820191905f5260205f20905b8154815290600101906020018083116103c157829003601f168201915b505050505081565b5f8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104c19190611258565b60405180910390a36001905092915050565b60025481565b5f8060045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106065782816105899190611532565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b8260035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106529190611532565b925050819055508260035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516107009190611258565b60405180910390a360019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000001281565b5f7f0000000000000000000000000000000000000000000000000000000000000001461461076d57610768610e11565b61078f565b7fb24a75eac4d1ddb67710b59e6608dfab55d8cf696e8391a62392e52de6a88d065b905090565b60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610814576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081e8282610e9b565b5050565b6003602052805f5260405f205f915090505481565b61083f610f66565b6108485f610fed565b565b6005602052805f5260405f205f915090505481565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60018054610894906114d5565b80601f01602080910402602001604051908101604052809291908181526020018280546108c0906114d5565b801561090b5780601f106108e25761010080835404028352916020019161090b565b820191905f5260205f20905b8154815290600101906020018083116108ee57829003601f168201915b505050505081565b5f8160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109609190611532565b925050819055508160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a0e9190611258565b60405180910390a36001905092915050565b42841015610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a906115af565b60405180910390fd5b5f6001610a6e610738565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98a8a8a60055f8f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050558b604051602001610af3969594939291906115cd565b60405160208183030381529060405280519060200120604051602001610b1a9291906116a0565b604051602081830303815290604052805190602001208585856040515f8152602001604052604051610b4f94939291906116d6565b6020604051602081039080840390855afa158015610b6f573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610be257508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890611763565b60405180910390fd5b8560045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051610cfc9190611258565b60405180910390a350505050505050565b6004602052815f5260405f20602052805f5260405f205f91509150505481565b610d35610f66565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610da5575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610d9c9190611360565b60405180910390fd5b610dae81610fed565b50565b610db9610f66565b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f604051610e41919061181d565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc64630604051602001610e80959493929190611833565b60405160208183030381529060405280519060200120905090565b8060025f828254610eac9190611884565b925050819055508060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f5a9190611258565b60405180910390a35050565b610f6e6110b0565b73ffffffffffffffffffffffffffffffffffffffff16610f8c61085f565b73ffffffffffffffffffffffffffffffffffffffff1614610feb57610faf6110b0565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610fe29190611360565b60405180910390fd5b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6110f9826110b7565b61110381856110c1565b93506111138185602086016110d1565b61111c816110df565b840191505092915050565b5f6020820190508181035f83015261113f81846110ef565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6111748261114b565b9050919050565b6111848161116a565b811461118e575f80fd5b50565b5f8135905061119f8161117b565b92915050565b5f819050919050565b6111b7816111a5565b81146111c1575f80fd5b50565b5f813590506111d2816111ae565b92915050565b5f80604083850312156111ee576111ed611147565b5b5f6111fb85828601611191565b925050602061120c858286016111c4565b9150509250929050565b5f8115159050919050565b61122a81611216565b82525050565b5f6020820190506112435f830184611221565b92915050565b611252816111a5565b82525050565b5f60208201905061126b5f830184611249565b92915050565b5f805f6060848603121561128857611287611147565b5b5f61129586828701611191565b93505060206112a686828701611191565b92505060406112b7868287016111c4565b9150509250925092565b5f60ff82169050919050565b6112d6816112c1565b82525050565b5f6020820190506112ef5f8301846112cd565b92915050565b5f819050919050565b611307816112f5565b82525050565b5f6020820190506113205f8301846112fe565b92915050565b5f6020828403121561133b5761133a611147565b5b5f61134884828501611191565b91505092915050565b61135a8161116a565b82525050565b5f6020820190506113735f830184611351565b92915050565b611382816112c1565b811461138c575f80fd5b50565b5f8135905061139d81611379565b92915050565b6113ac816112f5565b81146113b6575f80fd5b50565b5f813590506113c7816113a3565b92915050565b5f805f805f805f60e0888a0312156113e8576113e7611147565b5b5f6113f58a828b01611191565b97505060206114068a828b01611191565b96505060406114178a828b016111c4565b95505060606114288a828b016111c4565b94505060806114398a828b0161138f565b93505060a061144a8a828b016113b9565b92505060c061145b8a828b016113b9565b91505092959891949750929550565b5f80604083850312156114805761147f611147565b5b5f61148d85828601611191565b925050602061149e85828601611191565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806114ec57607f821691505b6020821081036114ff576114fe6114a8565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61153c826111a5565b9150611547836111a5565b925082820390508181111561155f5761155e611505565b5b92915050565b7f5045524d49545f444541444c494e455f455850495245440000000000000000005f82015250565b5f6115996017836110c1565b91506115a482611565565b602082019050919050565b5f6020820190508181035f8301526115c68161158d565b9050919050565b5f60c0820190506115e05f8301896112fe565b6115ed6020830188611351565b6115fa6040830187611351565b6116076060830186611249565b6116146080830185611249565b61162160a0830184611249565b979650505050505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f61166a60028361162c565b915061167582611636565b600282019050919050565b5f819050919050565b61169a611695826112f5565b611680565b82525050565b5f6116aa8261165e565b91506116b68285611689565b6020820191506116c68284611689565b6020820191508190509392505050565b5f6080820190506116e95f8301876112fe565b6116f660208301866112cd565b61170360408301856112fe565b61171060608301846112fe565b95945050505050565b7f494e56414c49445f5349474e45520000000000000000000000000000000000005f82015250565b5f61174d600e836110c1565b915061175882611719565b602082019050919050565b5f6020820190508181035f83015261177a81611741565b9050919050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f81546117a9816114d5565b6117b38186611781565b9450600182165f81146117cd57600181146117e257611814565b60ff1983168652811515820286019350611814565b6117eb8561178b565b5f5b8381101561180c578154818901526001820191506020810190506117ed565b838801955050505b50505092915050565b5f611828828461179d565b915081905092915050565b5f60a0820190506118465f8301886112fe565b61185360208301876112fe565b61186060408301866112fe565b61186d6060830185611249565b61187a6080830184611351565b9695505050505050565b5f61188e826111a5565b9150611899836111a5565b92508282019050808211156118b1576118b0611505565b5b9291505056fea2646970667358221220ed0a1bf65f7b37d2e87255c200bc052a1f37978d4be180637393a7f72d7234d164736f6c634300081a0033

Verified Source Code Partial Match

Compiler: v0.8.26+commit.8a97fa7a EVM: cancun Optimization: No
FLKToken.sol 30 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

import {ERC20} from "../../lib/solmate/src/tokens/ERC20.sol";
import {Ownable} from "../../lib/openzeppelin-contracts/contracts/access/Ownable.sol";
import {OWNER, STARTING_SUPPLY, NAME, SYMBOL} from "./Config.sol";

/// @notice The FLK token
contract FLKToken is ERC20, Ownable {
    error InvalidSender();

    mapping(address => bool) isMinter;

    modifier onlyMinter() {
        if (!isMinter[msg.sender]) revert InvalidSender();
        _;
    }

    constructor() ERC20(NAME, SYMBOL, 18) Ownable(OWNER) {
        _mint(OWNER, STARTING_SUPPLY);
    }

    function mint(address to, uint256 amount) external onlyMinter {
        _mint(to, amount);
    }

    function setMinter(address minter) external onlyOwner {
        isMinter[minter] = true;
    }
}
ERC20.sol 206 lines
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /*//////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*//////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*//////////////////////////////////////////////////////////////
                            EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*//////////////////////////////////////////////////////////////
                               ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*//////////////////////////////////////////////////////////////
                             EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}
Ownable.sol 100 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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);
    }
}
Config.sol 10 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

address constant OWNER = address(0x91cF969cd005D04F625F50A33DcD7E8D4fe39f02);

uint256 constant STARTING_SUPPLY = 100000000000000000000000000;

string constant NAME = "Fleek";

string constant SYMBOL = "FLK";
Context.sol 28 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

Read Contract

DOMAIN_SEPARATOR 0x3644e515 → bytes32
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
name 0x06fdde03 → string
nonces 0x7ecebe00 → uint256
owner 0x8da5cb5b → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256

Write Contract 8 functions

These functions modify contract state and require a wallet transaction to execute.

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
mint 0x40c10f19
address to
uint256 amount
permit 0xd505accf
address owner
address spender
uint256 value
uint256 deadline
uint8 v
bytes32 r
bytes32 s
renounceOwnership 0x715018a6
No parameters
setMinter 0xfca3b5aa
address minter
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner

Recent Transactions

No transactions found for this address