Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0xf9902EdfCa4F49DcaEBC335C73aEbD82C79C2886
Balance 0 ETH
Nonce 1
Code Size 5317 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

5317 bytes
0x608060405234801561000f575f80fd5b5060043610610148575f3560e01c806389449bbf116100bf578063d5f3948811610079578063d5f39488146102e5578063dd62ed3e1461030c578063ddca3f4314610344578063e0562e5a1461034c578063ec878c3b1461035d578063f2fde38b14610365575f80fd5b806389449bbf146102835780638da5cb5b146102965780639012c4a8146102a657806395d89b41146102b9578063a9059cbb146102c1578063a9d75b2b146102d4575f80fd5b8063313ce56711610110578063313ce567146101d757806365b61b77146101ec5780636678d10e1461021357806370a0823114610226578063715018a61461024e5780637df0f76714610258575f80fd5b806306fdde031461014c578063095ea7b31461016a5780630be6950e1461018d57806318160ddd146101b257806323b872dd146101c4575b5f80fd5b610154610378565b60405161016191906111ba565b60405180910390f35b61017d61017836600461121a565b610408565b6040519015158152602001610161565b600c546001600160a01b03165b6040516001600160a01b039091168152602001610161565b6008545b604051908152602001610161565b61017d6101d2366004611244565b610421565b60035460405160ff9091168152602001610161565b61019a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b61017d610221366004611282565b610444565b6101b6610234366004611282565b6001600160a01b03165f9081526004602052604090205490565b6102566107bc565b005b61017d610266366004611282565b6001600160a01b03165f9081526006602052604090205460ff1690565b61017d6102913660046112a4565b6107cf565b5f546001600160a01b031661019a565b61017d6102b43660046112a4565b6108e2565b610154610a44565b61017d6102cf36600461121a565b610a53565b600b546001600160a01b031661019a565b61019a7f00000000000000000000000005d6f7e900424e90d9229a5dcaa9212ce86f9c5481565b6101b661031a3660046112bb565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205490565b600a546101b6565b600d546001600160a01b031661019a565b6009546101b6565b610256610373366004611282565b610a60565b606060018054610387906112f2565b80601f01602080910402602001604051908101604052809291908181526020018280546103b3906112f2565b80156103fe5780601f106103d5576101008083540402835291602001916103fe565b820191905f5260205f20905b8154815290600101906020018083116103e157829003601f168201915b5050505050905090565b5f33610415818585610a9d565b60019150505b92915050565b5f3361042e858285610aaf565b610439858585610b2b565b506001949350505050565b5f337f00000000000000000000000005d6f7e900424e90d9229a5dcaa9212ce86f9c546001600160a01b0316146104965760405162461bcd60e51b815260040161048d9061132a565b60405180910390fd5b5f826001600160a01b03163b116105005760405162461bcd60e51b815260206004820152602860248201527f546f6b656e3a20737461626c65546f6b656e2c206e6f7420612076616c69642060448201526718dbdb9d1c9858dd60c21b606482015260840161048d565b5f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561055d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610581919061137f565b600c549091506001600160a01b03166106c957806001600160a01b031663e6a43905307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610600573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610624919061137f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561066d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610691919061137f565b600c80546001600160a01b0319166001600160a01b039290921691821790555f908152600660205260409020805460ff191660011790555b60405163e6a4390560e01b81523060048201526001600160a01b03848116602483015282169063e6a4390590604401602060405180830381865afa158015610713573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610737919061137f565b600d80546001600160a01b0319166001600160a01b039290921691821790551561079857600b80546001600160a01b0319166001600160a01b0385811691909117909155600d54165f908152600660205260409020805460ff191660011790555b5050600d546001600160a01b03165f9081526006602052604090205460ff16919050565b6107c4610c9a565b6107cd5f610cc6565b565b5f337f00000000000000000000000005d6f7e900424e90d9229a5dcaa9212ce86f9c546001600160a01b0316146108185760405162461bcd60e51b815260040161048d9061132a565b670de0b6b3a7640000821015801561083a575069d3c21bcecceda10000008211155b6108ac5760405162461bcd60e51b815260206004820152603e60248201527f546f6b656e3a20546f6b656e7320746f6f206c69717564617465206d7573742060448201527f6265206265747765656e203120616e6420312e3030302e3030302041444f0000606482015260840161048d565b60095460405183907f2357ccca11c679868cf1481aecd4d0cd97e60a5b2df97f231fba483278d26bd8905f90a350600955600190565b5f337f00000000000000000000000005d6f7e900424e90d9229a5dcaa9212ce86f9c546001600160a01b03161461092b5760405162461bcd60e51b815260040161048d9061132a565b600a5482036109995760405162461bcd60e51b815260206004820152603460248201527f546f6b656e3a205468652046656520697320616c72656164792073657420746f60448201527320746865207265717565737465642076616c756560601b606482015260840161048d565b600a8211156109ff5760405162461bcd60e51b815260206004820152602c60248201527f546f6b656e3a20546865206665652063616e206f6e6c7920626520626574776560448201526b656e203020616e642031302560a01b606482015260840161048d565b600a5460408051918252602082018490527fe52cb0832de950b73af43f166f7b02385ab4a101a956916b7f5a8cb29977a372910160405180910390a150600a55600190565b606060028054610387906112f2565b5f33610415818585610b2b565b610a68610c9a565b6001600160a01b038116610a9157604051631e4fbdf760e01b81525f600482015260240161048d565b610a9a81610cc6565b50565b610aaa8383836001610d15565b505050565b6001600160a01b038381165f908152600560209081526040808320938616835292905220545f19811015610b255781811015610b1757604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161048d565b610b2584848484035f610d15565b50505050565b6001600160a01b038316610b5457604051634b637e8f60e11b81525f600482015260240161048d565b6001600160a01b038216610b7d5760405163ec442f0560e01b81525f600482015260240161048d565b6001600160a01b0383165f90815260066020526040812054829060ff1680610bbc57506001600160a01b0384165f9081526006602052604090205460ff165b15610bf157326001600160a01b037f00000000000000000000000005d6f7e900424e90d9229a5dcaa9212ce86f9c5416141591505b60075460ff16158015610c0557505f600a54115b8015610c0e5750815b15610c88576001600160a01b0384165f9081526006602052604090205460ff1615610c5257600954305f9081526004602052604090205410610c5257610c52610de7565b5f6064600a5483610c6391906113ae565b610c6d91906113c5565b9050610c7981836113e4565b9150610c86863083611094565b505b610c93858583611094565b5050505050565b5f546001600160a01b031633146107cd5760405163118cdaa760e01b815233600482015260240161048d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038416610d3e5760405163e602df0560e01b81525f600482015260240161048d565b6001600160a01b038316610d6757604051634a1406b160e11b81525f600482015260240161048d565b6001600160a01b038085165f9081526005602090815260408083209387168352929052208290558015610b2557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610dd991815260200190565b60405180910390a350505050565b6007805460ff191660011790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110610e2757610e276113f7565b6001600160a01b03928316602091820292909201810191909152600d5482165f9081526004909152604080822054600c5490931682529020541115610fb0577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee6919061137f565b81600181518110610ef957610ef96113f7565b6001600160a01b03928316602091820292909201015260095460405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9092169163791ac94791610f7e915f9086907f00000000000000000000000005d6f7e900424e90d9229a5dcaa9212ce86f9c5490429060040161140b565b5f604051808303815f87803b158015610f95575f80fd5b505af1158015610fa7573d5f803e3d5ffd5b50505050611087565b600b5481516001600160a01b039091169082906001908110610fd457610fd46113f7565b6001600160a01b039283166020918202929092010152600954604051635c11d79560e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d90921691635c11d79591611059915f9086907f00000000000000000000000005d6f7e900424e90d9229a5dcaa9212ce86f9c5490429060040161140b565b5f604051808303815f87803b158015611070575f80fd5b505af1158015611082573d5f803e3d5ffd5b505050505b506007805460ff19169055565b6001600160a01b0383166110be578060085f8282546110b3919061147c565b9091555061112e9050565b6001600160a01b0383165f90815260046020526040902054818110156111105760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161048d565b6001600160a01b0384165f9081526004602052604090209082900390555b6001600160a01b03821661114a57600880548290039055611168565b6001600160a01b0382165f9081526004602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111ad91815260200190565b60405180910390a3505050565b5f602080835283518060208501525f5b818110156111e6578581018301518582016040015282016111ca565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a9a575f80fd5b5f806040838503121561122b575f80fd5b823561123681611206565b946020939093013593505050565b5f805f60608486031215611256575f80fd5b833561126181611206565b9250602084013561127181611206565b929592945050506040919091013590565b5f60208284031215611292575f80fd5b813561129d81611206565b9392505050565b5f602082840312156112b4575f80fd5b5035919050565b5f80604083850312156112cc575f80fd5b82356112d781611206565b915060208301356112e781611206565b809150509250929050565b600181811c9082168061130657607f821691505b60208210810361132457634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526035908201527f546f6b656e3a204f6e6c792074686520746f6b656e206465706c6f796572206360408201527430b71031b0b636103a3434b990333ab731ba34b7b760591b606082015260800190565b5f6020828403121561138f575f80fd5b815161129d81611206565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761041b5761041b61139a565b5f826113df57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561041b5761041b61139a565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561145b5784516001600160a01b031683529383019391830191600101611436565b50506001600160a01b03969096166060850152505050608001529392505050565b8082018082111561041b5761041b61139a56fea2646970667358221220b39d251586267955b2fc66ba8655092d8aa8886c11364eb917380b5e0b3b4aa164736f6c63430008180033

Verified Source Code Full Match

Compiler: v0.8.24+commit.e11b9ed9 EVM: shanghai Optimization: Yes (200 runs)
ADOToken.sol 276 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import {Ownable} from "./utils/Ownable.sol";
import {IERC20} from "./interfaces/IERC20.sol";
import {IERC20Metadata} from "./interfaces/IERC20Metadata.sol";
import {IERC20Errors} from "./interfaces/IERC20Errors.sol";
import {IUniswapV2Router02} from "./interfaces/IUniswapV2Router02.sol";
import {IUniswapV2Factory} from "./interfaces/IUniswapV2Factory.sol";

/*
==  ADO Protocol is an ecosystem designed to improve on-chain efficiency
==  and connect Web2 businesses with blockchain technology.
  https://www.adoprotocol.com
  https://x.com/adoprotocol
  https://t.me/AdoProtocolEnglish
  https://medium.com/@AdoProtocol
*/
contract ADOToken is Ownable, IERC20, IERC20Metadata, IERC20Errors {
    string private _name = "ADO Protocol";
    string private _symbol = "ADO";
    uint8 _decimals = 18;
    mapping(address account => uint256) private _balances;
    mapping(address account => mapping(address spender => uint256)) private _allowances;
    IUniswapV2Router02 public immutable _uniswapRouter;
    address public immutable deployer;
    mapping(address => bool) private _isLP;
    bool private _swapping = false;
    uint256 private _totalSupply;
    uint256 private _tokensToLiqudate;
    uint256 private _fee = 5;
    address private _stableToken;
    address private _wETHlp;
    address private _stablelp;

    event TokenFeeUpdate(uint256 oldFee, uint256 newFee);
    event TokenBalanceToLiqudate(uint256 indexed newValue, uint256 indexed oldValue);

    modifier lockTheSwap() {
        _swapping = true;
        _;
        _swapping = false;
    }

    modifier onlyDeployer() {
        require(_msgSender() == deployer, "Token: Only the token deployer can call this function");
        _;
    }

    constructor() {
        deployer = _msgSender();
        _mint(_msgSender(), 1000000000 * (10 ** _decimals));
        _tokensToLiqudate = _totalSupply / 10000;
        _uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(_uniswapRouter), type(uint256).max);
    }

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

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

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

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

    function fee() external view returns(uint256) {
		return _fee;
	}

    function wETHlp() public view returns (address) {
        return _wETHlp;
    }

    function stablelp() public view returns (address) {
        return _stablelp;
    }

    function stableToken() public view returns (address) {
        return _stableToken;
    }

    function isLP(address account) public view returns (bool) {
        return _isLP[account];
    }

    function tokensToLiqudate() external view returns(uint256) {
		return _tokensToLiqudate;
	}

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

    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 updateStableToken(address stableERC20Token) external onlyDeployer returns (bool) {
        require(stableERC20Token.code.length > 0, "Token: stableToken, not a valid contract");
        IUniswapV2Factory factory = IUniswapV2Factory(_uniswapRouter.factory());
        if (_wETHlp == address(0)) {
            _wETHlp = factory.getPair(address(this), _uniswapRouter.WETH());
            _isLP[_wETHlp] = true;
        }
        _stablelp = factory.getPair(address(this), stableERC20Token);
        if (_stablelp != address(0)) {
            _stableToken = stableERC20Token;
            _isLP[_stablelp] = true;
        }
        return _isLP[_stablelp];
    }

    function updateFee(uint256 newFee) external onlyDeployer returns (bool) {
        require(newFee != _fee, "Token: The Fee is already set to the requested value");
        require(newFee <= 10, "Token: The fee can only be between 0 and 10%");
        emit TokenFeeUpdate(_fee, newFee);
        _fee = newFee;
        return true;
    }

    function updateTokensToLiqudate(uint256 newValue) external onlyDeployer returns (bool) {
        require(newValue >= 10 ** 18 && newValue <= 1000000 * 10 ** 18, "Token: Tokens too liqudate must be between 1 and 1.000.000 ADO");
        emit TokenBalanceToLiqudate(newValue, _tokensToLiqudate);
        _tokensToLiqudate = newValue;
        return true;
    }

    function _swapTokens() private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        if (_balances[_wETHlp] > _balances[_stablelp]) {
            path[1] = _uniswapRouter.WETH();
            _uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
                _tokensToLiqudate,
                0,
                path,
                deployer,
                block.timestamp
            );
        } else {
            path[1] = _stableToken;
            _uniswapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                _tokensToLiqudate,
                0,
                path,
                deployer,
                block.timestamp
            );
        }
    }

    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));
        }
        bool takeFee = false;
        uint256 _value = value;
        if (_isLP[from] || _isLP[to]) {
            takeFee = tx.origin != deployer;
        }
        if (!_swapping && _fee > 0 && takeFee) {
            if (_isLP[to]) {
                if (_balances[address(this)] >= _tokensToLiqudate) {
                    _swapTokens();
                }
            }
            uint256 txFee = (_value * _fee) / 100;
            _value -= txFee;
            _update(from, address(this), txFee);
        }
        _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);
            }
        }
    }
}
IUniswapV2Factory.sol 35 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

interface IUniswapV2Factory {
    function initCodePairHash() external view returns (bytes32);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );
}
IUniswapV2Router02.sol 51 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import "./IUniswapV2Router01.sol";

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
IERC20Errors.sol 19 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

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);
}
IERC20Metadata.sol 10 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import {IERC20} from "./IERC20.sol";

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
IERC20.sol 25 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

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);
}
Ownable.sol 50 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import {Context} from "./Context.sol";

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

    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);
    }
}
Context.sol 17 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity 0.8.24;

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;
    }
}
IUniswapV2Router01.sol 151 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

interface IUniswapV2Router01 {
    function factory() external view returns (address);

    function WETH() external view returns (address);

    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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

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

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

Read Contract

_uniswapRouter 0x65b61b77 → address
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
deployer 0xd5f39488 → address
fee 0xddca3f43 → uint256
isLP 0x7df0f767 → bool
name 0x06fdde03 → string
owner 0x8da5cb5b → address
stableToken 0xa9d75b2b → address
stablelp 0xe0562e5a → address
symbol 0x95d89b41 → string
tokensToLiqudate 0xec878c3b → uint256
totalSupply 0x18160ddd → uint256
wETHlp 0x0be6950e → address

Write Contract 8 functions

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

approve 0x095ea7b3
address spender
uint256 value
returns: bool
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
updateFee 0x9012c4a8
uint256 newFee
returns: bool
updateStableToken 0x6678d10e
address stableERC20Token
returns: bool
updateTokensToLiqudate 0x89449bbf
uint256 newValue
returns: bool

Recent Transactions

No transactions found for this address