Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0xc75d41E691A24F8f7161791cd375174069455BDc
Balance 0 ETH
Nonce 1
Code Size 8475 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

8475 bytes
0x608060405234801561001057600080fd5b50600436106101005760003560e01c80637ecebe0011610097578063d505accf11610066578063d505accf146102d7578063dd62ed3e146102f3578063e367bb7014610323578063fc4727181461033f57610100565b80637ecebe001461023d57806395d89b411461026d5780639cd441da1461028b578063a9059cbb146102a757610100565b8063313ce567116100d3578063313ce567146101a15780633644e515146101bf5780633e617f66146101dd57806370a082311461020d57610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461015357806323b872dd14610171575b600080fd5b61010d61035d565b60405161011a9190611479565b60405180910390f35b61013d60048036038101906101389190611539565b6103eb565b60405161014a9190611594565b60405180910390f35b61015b6104dd565b60405161016891906115be565b60405180910390f35b61018b600480360381019061018691906115d9565b6104e3565b6040516101989190611594565b60405180910390f35b6101a961072d565b6040516101b69190611648565b60405180910390f35b6101c7610751565b6040516101d4919061167c565b60405180910390f35b6101f760048036038101906101f29190611697565b6107ae565b6040516102049190611594565b60405180910390f35b610227600480360381019061022291906116c4565b6107ce565b60405161023491906115be565b60405180910390f35b610257600480360381019061025291906116c4565b6107e6565b60405161026491906115be565b60405180910390f35b6102756107fe565b6040516102829190611479565b60405180910390f35b6102a560048036038101906102a091906116f1565b61088c565b005b6102c160048036038101906102bc9190611539565b610be5565b6040516102ce9190611594565b60405180910390f35b6102f160048036038101906102ec9190611789565b610cf9565b005b61030d6004803603810190610308919061182b565b610ff2565b60405161031a91906115be565b60405180910390f35b61033d600480360381019061033891906118d0565b611017565b005b610347611269565b60405161035491906115be565b60405180910390f35b6000805461036a9061194c565b80601f01602080910402602001604051908101604052809291908181526020018280546103969061194c565b80156103e35780601f106103b8576101008083540402835291602001916103e3565b820191906000526020600020905b8154815290600101906020018083116103c657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104cb91906115be565b60405180910390a36001905092915050565b60025481565b600080600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461061957828161059891906119ac565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461066891906119ac565b9250508190555082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161071991906115be565b60405180910390a360019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000001281565b60007f000000000000000000000000000000000000000000000000000000000000000146146107875761078261128d565b6107a9565b7fbb0daa1cfb34f43601f8338fdf8af4ff06a5c0c6c0b19bfab94b5842878f292b5b905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60056020528060005260406000206000915090505481565b6001805461080b9061194c565b80601f01602080910402602001604051908101604052809291908181526020018280546108379061194c565b80156108845780601f1061085957610100808354040283529160200191610884565b820191906000526020600020905b81548152906001019060200180831161086757829003601f168201915b505050505081565b6108973330846104e3565b5081600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016109a296959493929190611a34565b60606040518083038185885af11580156109c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109e59190611aaa565b5050506000600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610b34576000600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610b5a90611b2e565b60006040518083038185875af1925050503d8060008114610b97576040519150601f19603f3d011682016040523d82523d6000602084013e610b9c565b606091505b5050905080610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd790611b8f565b60405180910390fd5b505050565b600081600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c3691906119ac565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ce791906115be565b60405180910390a36001905092915050565b42841015610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390611bfb565b60405180910390fd5b60006001610d48610751565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98a8a8a600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558b604051602001610dd096959493929190611c1b565b60405160208183030381529060405280519060200120604051602001610df7929190611cf4565b6040516020818303038152906040528051906020012085858560405160008152602001604052604051610e2d9493929190611d2b565b6020604051602081039080840390855afa158015610e4f573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015610ec357508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef990611dbc565b60405180910390fd5b85600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051610fe191906115be565b60405180910390a350505050505050565b6004602052816000526040600020602052806000526040600020600091509150505481565b620151807f000000000000000000000000000000000000000000000000000000006454425b6110469190611ddc565b421061105157600080fd5b60005b82829050811015611243573373ffffffffffffffffffffffffffffffffffffffff1673026224a2940bfe258d0dbe947919b62fe321f04273ffffffffffffffffffffffffffffffffffffffff16636352211e8585858181106110b9576110b8611e10565b5b905060200201356040518263ffffffff1660e01b81526004016110dc91906115be565b602060405180830381865afa1580156110f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111d9190611e54565b73ffffffffffffffffffffffffffffffffffffffff1614611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90611ecd565b60405180910390fd5b6007600084848481811061118a57611189611e10565b5b90506020020135815260200190815260200160002060009054906101000a900460ff16156111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e490611f39565b60405180910390fd5b60016007600085858581811061120657611205611e10565b5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508061123c90611f59565b9050611054565b5061126533683635c9adc5dea00000848490506112609190611fa1565b611319565b5050565b7f000000000000000000000000000000000000000000000000000000006454425b81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516112bf919061207b565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646306040516020016112fe959493929190612092565b60405160208183030381529060405280519060200120905090565b806002600082825461132b9190611ddc565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113dd91906115be565b60405180910390a35050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611423578082015181840152602081019050611408565b60008484015250505050565b6000601f19601f8301169050919050565b600061144b826113e9565b61145581856113f4565b9350611465818560208601611405565b61146e8161142f565b840191505092915050565b600060208201905081810360008301526114938184611440565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114d0826114a5565b9050919050565b6114e0816114c5565b81146114eb57600080fd5b50565b6000813590506114fd816114d7565b92915050565b6000819050919050565b61151681611503565b811461152157600080fd5b50565b6000813590506115338161150d565b92915050565b600080604083850312156115505761154f61149b565b5b600061155e858286016114ee565b925050602061156f85828601611524565b9150509250929050565b60008115159050919050565b61158e81611579565b82525050565b60006020820190506115a96000830184611585565b92915050565b6115b881611503565b82525050565b60006020820190506115d360008301846115af565b92915050565b6000806000606084860312156115f2576115f161149b565b5b6000611600868287016114ee565b9350506020611611868287016114ee565b925050604061162286828701611524565b9150509250925092565b600060ff82169050919050565b6116428161162c565b82525050565b600060208201905061165d6000830184611639565b92915050565b6000819050919050565b61167681611663565b82525050565b6000602082019050611691600083018461166d565b92915050565b6000602082840312156116ad576116ac61149b565b5b60006116bb84828501611524565b91505092915050565b6000602082840312156116da576116d961149b565b5b60006116e8848285016114ee565b91505092915050565b600080604083850312156117085761170761149b565b5b600061171685828601611524565b925050602061172785828601611524565b9150509250929050565b61173a8161162c565b811461174557600080fd5b50565b60008135905061175781611731565b92915050565b61176681611663565b811461177157600080fd5b50565b6000813590506117838161175d565b92915050565b600080600080600080600060e0888a0312156117a8576117a761149b565b5b60006117b68a828b016114ee565b97505060206117c78a828b016114ee565b96505060406117d88a828b01611524565b95505060606117e98a828b01611524565b94505060806117fa8a828b01611748565b93505060a061180b8a828b01611774565b92505060c061181c8a828b01611774565b91505092959891949750929550565b600080604083850312156118425761184161149b565b5b6000611850858286016114ee565b9250506020611861858286016114ee565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126118905761188f61186b565b5b8235905067ffffffffffffffff8111156118ad576118ac611870565b5b6020830191508360208202830111156118c9576118c8611875565b5b9250929050565b600080602083850312156118e7576118e661149b565b5b600083013567ffffffffffffffff811115611905576119046114a0565b5b6119118582860161187a565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061196457607f821691505b6020821081036119775761197661191d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006119b782611503565b91506119c283611503565b92508282039050818111156119da576119d961197d565b5b92915050565b6119e9816114c5565b82525050565b6000819050919050565b6000819050919050565b6000611a1e611a19611a14846119ef565b6119f9565b611503565b9050919050565b611a2e81611a03565b82525050565b600060c082019050611a4960008301896119e0565b611a5660208301886115af565b611a636040830187611a25565b611a706060830186611a25565b611a7d60808301856119e0565b611a8a60a08301846115af565b979650505050505050565b600081519050611aa48161150d565b92915050565b600080600060608486031215611ac357611ac261149b565b5b6000611ad186828701611a95565b9350506020611ae286828701611a95565b9250506040611af386828701611a95565b9150509250925092565b600081905092915050565b50565b6000611b18600083611afd565b9150611b2382611b08565b600082019050919050565b6000611b3982611b0b565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000611b796010836113f4565b9150611b8482611b43565b602082019050919050565b60006020820190508181036000830152611ba881611b6c565b9050919050565b7f5045524d49545f444541444c494e455f45585049524544000000000000000000600082015250565b6000611be56017836113f4565b9150611bf082611baf565b602082019050919050565b60006020820190508181036000830152611c1481611bd8565b9050919050565b600060c082019050611c30600083018961166d565b611c3d60208301886119e0565b611c4a60408301876119e0565b611c5760608301866115af565b611c6460808301856115af565b611c7160a08301846115af565b979650505050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000611cbd600283611c7c565b9150611cc882611c87565b600282019050919050565b6000819050919050565b611cee611ce982611663565b611cd3565b82525050565b6000611cff82611cb0565b9150611d0b8285611cdd565b602082019150611d1b8284611cdd565b6020820191508190509392505050565b6000608082019050611d40600083018761166d565b611d4d6020830186611639565b611d5a604083018561166d565b611d67606083018461166d565b95945050505050565b7f494e56414c49445f5349474e4552000000000000000000000000000000000000600082015250565b6000611da6600e836113f4565b9150611db182611d70565b602082019050919050565b60006020820190508181036000830152611dd581611d99565b9050919050565b6000611de782611503565b9150611df283611503565b9250828201905080821115611e0a57611e0961197d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050611e4e816114d7565b92915050565b600060208284031215611e6a57611e6961149b565b5b6000611e7884828501611e3f565b91505092915050565b7f4e6f7420796f7572206c6f627321000000000000000000000000000000000000600082015250565b6000611eb7600e836113f4565b9150611ec282611e81565b602082019050919050565b60006020820190508181036000830152611ee681611eaa565b9050919050565b7f416c726561647920627574746572656421000000000000000000000000000000600082015250565b6000611f236011836113f4565b9150611f2e82611eed565b602082019050919050565b60006020820190508181036000830152611f5281611f16565b9050919050565b6000611f6482611503565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f9657611f9561197d565b5b600182019050919050565b6000611fac82611503565b9150611fb783611503565b9250828202611fc581611503565b91508282048414831517611fdc57611fdb61197d565b5b5092915050565b60008190508160005260206000209050919050565b600081546120058161194c565b61200f8186611afd565b9450600182166000811461202a576001811461203f57612072565b60ff1983168652811515820286019350612072565b61204885611fe3565b60005b8381101561206a5781548189015260018201915060208101905061204b565b838801955050505b50505092915050565b60006120878284611ff8565b915081905092915050565b600060a0820190506120a7600083018861166d565b6120b4602083018761166d565b6120c1604083018661166d565b6120ce60608301856115af565b6120db60808301846119e0565b969550505050505056fea264697066735822122000c40586ec8ff9ba41efd27712b10c048df2d2dcfdada31f285391ae1a9ae18564736f6c63430008120033

Verified Source Code Full Match

Compiler: v0.8.18+commit.87f61d96 EVM: paris Optimization: No
Shrimp.sol 435 lines
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /*//////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*//////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*//////////////////////////////////////////////////////////////
                            EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*//////////////////////////////////////////////////////////////
                               ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*//////////////////////////////////////////////////////////////
                             EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}

interface ERC721 {
    function ownerOf(uint256 id) external view returns (address owner);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure 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);
}



// pragma solidity >=0.6.2;

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

///@author 0xmons
///@author RobAnon
contract Shrimp is ERC20 {

    address constant private LOBS = 0x026224A2940bFE258D0dbE947919B62fE321F042;
    address constant private IVAN = 0xA7D5DDc1b8557914F158076b228AA91eF613f1D5;
    address constant private DEVS = 0xd9D455A8b8B9AEda2dA66c52B80c90ef423409df;
    address constant private MULTI = 0x0A51F0009980F6AacE317BF9d9592117302cD117;

    uint immutable public LUNCH_DATE;
    uint constant private CLAM_PERIOD = 24 hours; 

    IUniswapV2Router02 private uniswapV2Router;

    mapping(uint256 => bool) public hasBeenDippedInButter;

    constructor() ERC20("Butter", "$BUTTER", 18) {
        _mint(DEVS, 10000 ether);
        _mint(MULTI, 6_900_000 ether);
        _mint(IVAN, 10000 ether);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            // Create a uniswap pair for this new token
        IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        LUNCH_DATE = block.timestamp;
    }
  
    function butterMe(uint256[] calldata ids) external {

        require(block.timestamp < LUNCH_DATE + CLAM_PERIOD);

        for (uint i; i < ids.length; ++i) {
            require(ERC721(LOBS).ownerOf(ids[i]) == msg.sender, "Not your lobs!");
            require(!hasBeenDippedInButter[ids[i]], "Already buttered!");
            hasBeenDippedInButter[ids[i]] = true;
        }

        _mint(msg.sender, ids.length * (1000 ether));
  }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) public {
        // Move tokens in
        transferFrom(msg.sender, address(this), tokenAmount);
        // approve token transfer to cover all possible scenarios
        allowance[address(this)][address(uniswapV2Router)] = tokenAmount;

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
        // Zero out any approval that didn't get set back to zero
        if(allowance[address(this)][address(uniswapV2Router)] > 0) {
            allowance[address(this)][address(uniswapV2Router)] = 0;
        }
        // Refund any extra ETH
        (bool success, ) = msg.sender.call{value:address(this).balance}("");
        require(success, "Transfer failed.");
    }

}

Read Contract

DOMAIN_SEPARATOR 0x3644e515 → bytes32
LUNCH_DATE 0xfc472718 → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
hasBeenDippedInButter 0x3e617f66 → bool
name 0x06fdde03 → string
nonces 0x7ecebe00 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256

Write Contract 6 functions

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

addLiquidity 0x9cd441da
uint256 tokenAmount
uint256 ethAmount
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
butterMe 0xe367bb70
uint256[] ids
permit 0xd505accf
address owner
address spender
uint256 value
uint256 deadline
uint8 v
bytes32 r
bytes32 s
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool

Recent Transactions

No transactions found for this address