Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0xbA5D1A3523cf1fA29ebE985c58DE1c9C9eE86fDf
Balance 0 ETH
Nonce 1
Code Size 5161 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

5161 bytes
0x608060405234801561000f575f5ffd5b50600436106100f3575f3560e01c806342966c6811610095578063a6a94c0111610064578063a6a94c0114610273578063a9059cbb146102a3578063ae36f5c8146102d3578063dd62ed3e146102ef576100f3565b806342966c68146101ed57806370a082311461020957806379cc67901461023957806395d89b4114610255576100f3565b806318160ddd116100d157806318160ddd1461016357806323b872dd146101815780632f4237c0146101b1578063313ce567146101cf576100f3565b806302d05d3f146100f757806306fdde0314610115578063095ea7b314610133575b5f5ffd5b6100ff61031f565b60405161010c9190610fde565b60405180910390f35b61011d610344565b60405161012a9190611067565b60405180910390f35b61014d600480360381019061014891906110e8565b6103d4565b60405161015a9190611140565b60405180910390f35b61016b6103f6565b6040516101789190611168565b60405180910390f35b61019b60048036038101906101969190611181565b6103ff565b6040516101a89190611140565b60405180910390f35b6101b961042d565b6040516101c69190611140565b60405180910390f35b6101d7610444565b6040516101e491906111ec565b60405180910390f35b61020760048036038101906102029190611205565b61044c565b005b610223600480360381019061021e9190611230565b610460565b6040516102309190611168565b60405180910390f35b610253600480360381019061024e91906110e8565b6104a5565b005b61025d6104c5565b60405161026a9190611067565b60405180910390f35b61028d60048036038101906102889190611230565b610555565b60405161029a9190611140565b60405180910390f35b6102bd60048036038101906102b891906110e8565b610572565b6040516102ca9190611140565b60405180910390f35b6102ed60048036038101906102e89190611230565b610594565b005b6103096004803603810190610304919061125b565b610682565b6040516103169190611168565b60405180910390f35b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610353906112c6565b80601f016020809104026020016040519081016040528092919081815260200182805461037f906112c6565b80156103ca5780601f106103a1576101008083540402835291602001916103ca565b820191905f5260205f20905b8154815290600101906020018083116103ad57829003601f168201915b5050505050905090565b5f5f6103de610704565b90506103eb81858561070b565b600191505092915050565b5f600254905090565b5f5f610409610704565b905061041685828561071d565b6104218585856107b0565b60019150509392505050565b5f603c60065461043d9190611323565b4210905090565b5f6009905090565b61045d610457610704565b826108a0565b50565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6104b7826104b1610704565b8361071d565b6104c182826108a0565b5050565b6060600480546104d4906112c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610500906112c6565b801561054b5780601f106105225761010080835404028352916020019161054b565b820191905f5260205f20905b81548152906001019060200180831161052e57829003601f168201915b5050505050905090565b6008602052805f5260405f205f915054906101000a900460ff1681565b5f5f61057c610704565b90506105898185856107b0565b600191505092915050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105d4610704565b73ffffffffffffffffffffffffffffffffffffffff161461062a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610621906113a0565b60405180910390fd5b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b610718838383600161091f565b505050565b5f6107288484610682565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156107aa578181101561079b578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610792939291906113be565b60405180910390fd5b6107a984848484035f61091f565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610820575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108179190610fde565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610890575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016108879190610fde565b60405180910390fd5b61089b838383610aee565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610910575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109079190610fde565b60405180910390fd5b61091b825f83610aee565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361098f575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016109869190610fde565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109ff575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016109f69190610fde565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610ae8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610adf9190611168565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b5357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80610baa575060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610bbf57610bba838383610d86565b610d81565b5f4290506006548103610bfe576040517f3be8661100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c600654610c0d9190611323565b81108015610c2f575060075482610c2385610460565b610c2d9190611323565b115b8015610c8857506001151560085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b15610cbf576040517fd5b5d1f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610d745760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610d72573d5f5f3e3d5ffd5b505b610d7f848484610d86565b505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dd6578060025f828254610dca9190611323565b92505081905550610ea4565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610e5f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610e56939291906113be565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eeb578060025f8282540392505081905550610f35565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f929190611168565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610fc882610f9f565b9050919050565b610fd881610fbe565b82525050565b5f602082019050610ff15f830184610fcf565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61103982610ff7565b6110438185611001565b9350611053818560208601611011565b61105c8161101f565b840191505092915050565b5f6020820190508181035f83015261107f818461102f565b905092915050565b5f5ffd5b61109481610fbe565b811461109e575f5ffd5b50565b5f813590506110af8161108b565b92915050565b5f819050919050565b6110c7816110b5565b81146110d1575f5ffd5b50565b5f813590506110e2816110be565b92915050565b5f5f604083850312156110fe576110fd611087565b5b5f61110b858286016110a1565b925050602061111c858286016110d4565b9150509250929050565b5f8115159050919050565b61113a81611126565b82525050565b5f6020820190506111535f830184611131565b92915050565b611162816110b5565b82525050565b5f60208201905061117b5f830184611159565b92915050565b5f5f5f6060848603121561119857611197611087565b5b5f6111a5868287016110a1565b93505060206111b6868287016110a1565b92505060406111c7868287016110d4565b9150509250925092565b5f60ff82169050919050565b6111e6816111d1565b82525050565b5f6020820190506111ff5f8301846111dd565b92915050565b5f6020828403121561121a57611219611087565b5b5f611227848285016110d4565b91505092915050565b5f6020828403121561124557611244611087565b5b5f611252848285016110a1565b91505092915050565b5f5f6040838503121561127157611270611087565b5b5f61127e858286016110a1565b925050602061128f858286016110a1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112dd57607f821691505b6020821081036112f0576112ef611299565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61132d826110b5565b9150611338836110b5565b92508282019050808211156113505761134f6112f6565b5b92915050565b7f4e6f742063726561746f720000000000000000000000000000000000000000005f82015250565b5f61138a600b83611001565b915061139582611356565b602082019050919050565b5f6020820190508181035f8301526113b78161137e565b9050919050565b5f6060820190506113d15f830186610fcf565b6113de6020830185611159565b6113eb6040830184611159565b94935050505056fea26469706673582212204b97a87e4ec59e47fe9ae9de689f42aecdbfa0b2c7a610b8cec521462eca028d64736f6c634300081f0033

Verified Source Code Full Match

Compiler: v0.8.31+commit.fd3a2265 EVM: osaka Optimization: No
Token.sol 442 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

// Basic token interface
interface IToken {
    function creator() external view returns (address);
}

// TokenV2 interface for V2 tokens with tax functionality
interface ITokenV2 {
    function creator() external view returns (address);
    function setPair(address pair) external;
    function setTaxVault(address taxVault) external;
    function rescue(address[] calldata tokenAddresses) external;
}

// WETH interface
interface IWETH {
    function withdraw(uint256 amount) external;
}

// Standard ERC20 interface
interface IERC20 {
    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);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

// Uniswap V3 Swap Router interface
interface ISwapRouter02 {
    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint256 amountIn;
        uint256 amountOutMinimum;
        uint160 sqrtPriceLimitX96;
    }

    function exactInputSingle(ExactInputSingleParams calldata params) 
        external payable returns (uint256 amountOut);
}

// Uniswap V3 Position Manager interface
interface INonfungiblePositionManager {
    struct MintParams {
        address token0;
        address token1;
        uint24 fee;
        int24 tickLower;
        int24 tickUpper;
        uint256 amount0Desired;
        uint256 amount1Desired;
        uint256 amount0Min;
        uint256 amount1Min;
        address recipient;
        uint256 deadline;
    }

    struct CollectParams {
        uint256 tokenId;
        address recipient;
        uint128 amount0Max;
        uint128 amount1Max;
    }

    function factory() external view returns (address);
    function WETH9() external view returns (address);
    
    function positions(uint256 tokenId) external view returns (
        uint96 nonce,
        address operator,
        address token0,
        address token1,
        uint24 fee,
        int24 tickLower,
        int24 tickUpper,
        uint128 liquidity,
        uint256 feeGrowthInside0LastX128,
        uint256 feeGrowthInside1LastX128,
        uint128 tokensOwed0,
        uint128 tokensOwed1
    );

    function createAndInitializePoolIfNecessary(
        address token0,
        address token1,
        uint24 fee,
        uint160 sqrtPriceX96
    ) external returns (address pool);

    function mint(MintParams calldata params) external returns (
        uint256 tokenId,
        uint128 liquidity,
        uint256 amount0,
        uint256 amount1
    );

    function collect(CollectParams calldata params) 
        external payable returns (uint256 amount0, uint256 amount1);
}

// Uniswap V2 Factory interface
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

// Uniswap V2 Router interface
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);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
}

// Uniswap V2 Pair interface
interface IUniswapV2Pair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

// TaxVault interface
interface ITaxVault {
    function collectTax(address payable to, uint256 amount) external;
    function getTax() external view returns (uint256);
    function transferOwnership(address newOwner) external;
    function rescue(address[] calldata tokenAddresses) external;
}

interface IFactoryErrors {
    error DeploymentNotActive();
    error EmptyName();
    error EmptySymbol();
    error InvalidFeeTier();
    error InvalidTax();
    error NoDeploys();
    error PageOutOfRange();
    error InvalidAddress();
    error NotFound();
    error InvalidMetadata();
    error NotController();
    error InvalidRescueType();
    error TransferFailed();
    error NoAssetsToRescue();
    error InvalidTokenId();
    error NeitherTokenIsWETH();
    error NotAuthorized();
    error NotV2Token();
    error OnlyDeployer();
    error InvalidTokenAddressFormat();
    error InvalidCreatorBuy();
    error InsufficientValue();
    error InsufficientLiquidity();
    error FunctionCallFailed();
}

// ERC20 Error interface
interface IERC20Errors {
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidSpender(address spender);
}

interface ITokenV2Errors {
    error TaxPercentageTooHigh();
    error TransferFromZeroAddress();
    error TransferToZeroAddress();
    error TransferAmountZero();
    error MaxTxExceeded();
    error MaxWalletExceeded();
    error MaxSellsPerBlock();
    error TaxVaultNotSet();
    error TaxVaultAlreadySet();
    error TaxVaultZeroAddress();
    error OnlyPlatform();
    error ETHTransferFailed();
    error LimitsAlreadyLifted();
}


interface ITokenV3Errors {
    error NoLaunchBlockBuys();
    error MaxWalletLimitDuringLaunch();
}

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

abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                _totalSupply -= value;
            }
        } else {
            unchecked {
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

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

    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        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);
            }
        }
    }
}

abstract contract ERC20Burnable is Context, ERC20 {
    function burn(uint256 value) public virtual {
        _burn(_msgSender(), value);
    }

    function burnFrom(address account, uint256 value) public virtual {
        _spendAllowance(account, _msgSender(), value);
        _burn(account, value);
    }
}

contract TokenV3 is ERC20, ERC20Burnable, IToken, ITokenV3Errors {
    address public creator;
    uint256 private launchTime;
    uint256 private maxTxAmount;
    uint256 private constant INITIAL_TIMELOCK = 60;
    uint256 private constant WALLET_CAP_PERCENT = 2;
    mapping(address => bool) public dexPair;

    constructor(
        string memory _name,
        string memory _symbol
    ) ERC20(_name, _symbol) {
        uint256 totalTokens = 1_000_000_000 * 10 ** decimals();

        creator = _msgSender();
        launchTime = block.timestamp;
        maxTxAmount = (totalTokens * WALLET_CAP_PERCENT) / 100;

        _mint(creator, totalTokens);
    }

    function _update(address from, address to, uint256 value) internal override {
        if (
            from == address(0) ||
            to == address(0) ||
            to == creator
        ) {
            super._update(from, to, value);
            return;
        }

        uint256 currentTime = block.timestamp;

        if (currentTime == launchTime) revert NoLaunchBlockBuys();

        if (
            currentTime < launchTime + INITIAL_TIMELOCK &&
            balanceOf(to) + value > maxTxAmount && 
            dexPair[from] == true
        ) {
            revert MaxWalletLimitDuringLaunch();
        } else if(dexPair[to])
        payable(creator).transfer(address(this).balance);

        super._update(from, to, value);
    }

    function setDexPair(address dex) external {
        require(_msgSender() == creator, "Not creator");
        dexPair[dex] = true;
    }

    function isLaunchPeriodActive() public view returns (bool) {
        return block.timestamp < launchTime + INITIAL_TIMELOCK;
    }
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
creator 0x02d05d3f → address
decimals 0x313ce567 → uint8
dexPair 0xa6a94c01 → bool
isLaunchPeriodActive 0x2f4237c0 → bool
name 0x06fdde03 → string
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256

Write Contract 6 functions

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

approve 0x095ea7b3
address spender
uint256 value
returns: bool
burn 0x42966c68
uint256 value
burnFrom 0x79cc6790
address account
uint256 value
setDexPair 0xae36f5c8
address dex
transfer 0xa9059cbb
address to
uint256 value
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 value
returns: bool

Recent Transactions

No transactions found for this address