Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0xfC9Cf42a1a9c211da1C812989e2De83bA22e3B80
Balance 0 ETH
Nonce 1
Code Size 3561 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

3561 bytes
0x608060405234801561000f575f80fd5b5060043610610127575f3560e01c80638da5cb5b116100a9578063aa4bde281161006e578063aa4bde28146102bf578063c50497ae146102c8578063d045a329146102da578063dd62ed3e146102e7578063f2fde38b1461031f575f80fd5b80638da5cb5b1461024a57806395d89b411461026e578063a8b0898214610291578063a9059cbb146102a4578063a98a934a146102b7575f80fd5b806341220104116100ef57806341220104146101cf578063544cce78146101e457806370a08231146101f757806373bd699a1461021f5780637d99f9a414610228575f80fd5b806306fdde031461012b578063095ea7b31461016857806318160ddd1461018b57806323b872dd146101a2578063313ce567146101b5575b5f80fd5b610152604051806040016040528060088152602001672cb3b6b497233ab760c11b81525081565b60405161015f9190610ba6565b60405180910390f35b61017b610176366004610c0c565b610332565b604051901515815260200161015f565b61019460015481565b60405190815260200161015f565b61017b6101b0366004610c34565b610348565b6101bd601281565b60405160ff909116815260200161015f565b6101e26101dd366004610c6d565b6103f1565b005b6101e26101f2366004610ca6565b610478565b610194610205366004610cd7565b6001600160a01b03165f9081526002602052604090205490565b61019460055481565b61017b610236366004610cd7565b60086020525f908152604090205460ff1681565b5f546001600160a01b03165b6040516001600160a01b03909116815260200161015f565b6101526040518060400160405280600481526020016359474d4960e01b81525081565b600454610256906001600160a01b031681565b61017b6102b2366004610c0c565b61067e565b6101e261068a565b61019460075481565b6101946a084595161401484a00000081565b60065461017b9060ff1681565b6101946102f5366004610ca6565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b6101e261032d366004610cd7565b6106f3565b5f61033e3384846107c3565b5060015b92915050565b5f336001600160a01b038516146103dc576001600160a01b0384165f908152600360209081526040808320338452909152902054828110156103c65760405162461bcd60e51b8152602060048201526012602482015271105b1b1bddd85b98d948195e18d95959195960721b60448201526064015b60405180910390fd5b6103da85336103d58685610d0b565b6107c3565b505b6103e78484846108b6565b5060019392505050565b5f546001600160a01b0316331461041a5760405162461bcd60e51b81526004016103bd90610d1e565b6001600160a01b0382165f81815260086020908152604091829020805460ff191685151590811790915591519182527f817ed04ba7740905786c51bb255d8b90dc2b0989e59d2d8a3ecdfdd225ec94c7910160405180910390a25050565b5f546001600160a01b031633146104a15760405162461bcd60e51b81526004016103bd90610d1e565b6004546001600160a01b0316156104fa5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c7265616479207374617274656400000000000000000060448201526064016103bd565b600480546001600160a01b0319166001600160a01b03841690811782556040516370a0823160e01b8152918201525f9030906370a0823190602401602060405180830381865afa158015610550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105749190610d53565b90505f81116105bd5760405162461bcd60e51b81526020600482015260156024820152745061697220686173206e6f206c697175696469747960581b60448201526064016103bd565b60058190556001546105d190606490610d6a565b6007556006805460ff1916600190811790915560085f6105f85f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790556004548216815260089093528183208054851660019081179091557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805486168217905595168252902080549091169092179091555050565b5f61033e3384846108b6565b5f546001600160a01b031633146106b35760405162461bcd60e51b81526004016103bd90610d1e565b60065460ff16156106f1576006805460ff191690556040517ff92227b768be08ec052dd7200e1e5c74a9ea60ef239a5cc79db53ea495485c2a905f90a15b565b5f546001600160a01b0316331461071c5760405162461bcd60e51b81526004016103bd90610d1e565b6001600160a01b03811661076a5760405162461bcd60e51b81526020600482015260156024820152744f776e61626c653a207a65726f206164647265737360581b60448201526064016103bd565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661080d5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b60448201526064016103bd565b6001600160a01b0382166108555760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b60448201526064016103bd565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316158015906108d657506001600160a01b03821615155b6109115760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016103bd565b6001600160a01b0383165f9081526002602052604090205481111561096f5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016103bd565b6004546001600160a01b03166109d6575f546001600160a01b038481169116146109d15760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd081cdd185c9d1959606a1b60448201526064016103bd565b610b45565b60065460ff168015610a0057506001600160a01b0382165f9081526008602052604090205460ff16155b15610a6e576007546001600160a01b0383165f90815260026020526040902054610a2b908390610d89565b1115610a6e5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b60448201526064016103bd565b60065460ff1615610b4557600480546040516370a0823160e01b81526001600160a01b03909116918101919091525f9030906370a0823190602401602060405180830381865afa158015610ac4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae89190610d53565b90505f6064600554601e610afc9190610d9c565b610b069190610d6a565b9050808211610b42576006805460ff191690556040517ff92227b768be08ec052dd7200e1e5c74a9ea60ef239a5cc79db53ea495485c2a905f90a15b50505b6001600160a01b038084165f81815260026020526040808220805486900390559285168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108a99085815260200190565b5f6020808352835180828501525f5b81811015610bd157858101830151858201604001528201610bb5565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610c07575f80fd5b919050565b5f8060408385031215610c1d575f80fd5b610c2683610bf1565b946020939093013593505050565b5f805f60608486031215610c46575f80fd5b610c4f84610bf1565b9250610c5d60208501610bf1565b9150604084013590509250925092565b5f8060408385031215610c7e575f80fd5b610c8783610bf1565b915060208301358015158114610c9b575f80fd5b809150509250929050565b5f8060408385031215610cb7575f80fd5b610cc083610bf1565b9150610cce60208401610bf1565b90509250929050565b5f60208284031215610ce7575f80fd5b610cf082610bf1565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561034257610342610cf7565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215610d63575f80fd5b5051919050565b5f82610d8457634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561034257610342610cf7565b808202811582820484141761034257610342610cf756fea2646970667358221220e924729f8df6b19001290a43d63ce350686a3dc854742cf7985ff69ffaaad9d164736f6c63430008140033

Verified Source Code Full Match

Compiler: v0.8.20+commit.a1b79de6 EVM: shanghai Optimization: Yes (200 runs)
YGMI.sol 187 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
}

contract Ownable {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    modifier onlyOwner() {
        require(msg.sender == _owner, "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Ownable: zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract YGMI is Ownable {
    string public constant name = "Ygmi.Fun";
    string public constant symbol = "YGMI";
    uint8 public constant decimals = 18;
    uint256 public constant SUPPLY = 10_000_000 * 10 ** 18;
    uint256 public totalSupply = SUPPLY;

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

    address public pairAddress;
    uint256 public initialLiquidityAdded;
    bool public maxWalletEnabled;
    uint256 public maxWalletAmount;
    mapping(address => bool) public excludedFromMaxWallet;

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event MaxWalletDisabled();
    event ExcludedFromMaxWallet(address indexed account, bool excluded);

    constructor() {
        _balances[msg.sender] = totalSupply;
        emit Transfer(address(0), msg.sender, totalSupply);
    }

    /* ---------------- ERC20 ---------------- */
    function balanceOf(address account) external view returns (uint256) {
        return _balances[account];
    }

    function allowance(
        address holder,
        address spender
    ) external view returns (uint256) {
        return _allowances[holder][spender];
    }

    function approve(address spender, uint256 amount) external returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transfer(address to, uint256 amount) external returns (bool) {
        _transfer(msg.sender, to, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool) {
        if (msg.sender != from) {
            uint256 currentAllowance = _allowances[from][msg.sender];
            require(currentAllowance >= amount, "Allowance exceeded");
            _approve(from, msg.sender, currentAllowance - amount);
        }
        _transfer(from, to, amount);
        return true;
    }

    function _approve(
        address owner_,
        address spender,
        uint256 amount
    ) internal {
        require(owner_ != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");
        _allowances[owner_][spender] = amount;
        emit Approval(owner_, spender, amount);
    }

    /* ---------------- Trading & Max Wallet ---------------- */
    function startTrading(
        address _pairAddress,
        address ygmirouter
    ) external onlyOwner {
        require(pairAddress == address(0), "Trading already started");
        pairAddress = _pairAddress;

        // Capture how many tokens are already in the liquidity pool
        uint256 pairTokenBalance = IERC20(address(this)).balanceOf(pairAddress);
        require(pairTokenBalance > 0, "Pair has no liquidity");

        initialLiquidityAdded = pairTokenBalance;
        maxWalletAmount = totalSupply / 100; // 1% max wallet
        maxWalletEnabled = true;

        // Exclude owner and pair from max wallet
        excludedFromMaxWallet[owner()] = true;
        excludedFromMaxWallet[pairAddress] = true;
        excludedFromMaxWallet[address(0xdead)] = true;
        excludedFromMaxWallet[address(ygmirouter)] = true;
    }

    function setExcludedFromMaxWallet(
        address account,
        bool excluded
    ) external onlyOwner {
        excludedFromMaxWallet[account] = excluded;
        emit ExcludedFromMaxWallet(account, excluded);
    }

    function disableMaxWallet() external onlyOwner {
        if (maxWalletEnabled) {
            maxWalletEnabled = false;
            emit MaxWalletDisabled();
        }
    }

    function _transfer(address from, address to, uint256 amount) internal {
        require(from != address(0) && to != address(0), "Zero address");
        require(_balances[from] >= amount, "Insufficient balance");

        // Before trading
        if (pairAddress == address(0)) {
            require(from == owner(), "Trading not started");
        } else {
            // Max wallet enforcement
            if (maxWalletEnabled && !excludedFromMaxWallet[to]) {
                require(
                    _balances[to] + amount <= maxWalletAmount,
                    "Exceeds max wallet"
                );
            }

            // Automatically disable max wallet once ≥70% liquidity is sold
            if (maxWalletEnabled) {
                uint256 pairBalance = IERC20(address(this)).balanceOf(
                    pairAddress
                );
                uint256 threshold = (initialLiquidityAdded * 30) / 100; // 30% of initial remaining = 70% sold
                if (pairBalance <= threshold) {
                    maxWalletEnabled = false;
                    emit MaxWalletDisabled();
                }
            }
        }

        unchecked {
            _balances[from] -= amount;
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }
}

Read Contract

SUPPLY 0xc50497ae → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
excludedFromMaxWallet 0x7d99f9a4 → bool
initialLiquidityAdded 0x73bd699a → uint256
maxWalletAmount 0xaa4bde28 → uint256
maxWalletEnabled 0xd045a329 → bool
name 0x06fdde03 → string
owner 0x8da5cb5b → address
pairAddress 0xa8b08982 → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256

Write Contract 7 functions

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

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
disableMaxWallet 0xa98a934a
No parameters
setExcludedFromMaxWallet 0x41220104
address account
bool excluded
startTrading 0x544cce78
address _pairAddress
address ygmirouter
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