Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x421Feccb5d681049281141A74818C0a005659CB4
Balance 0 ETH
Nonce 1
Code Size 10558 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

10558 bytes
0x6080604052600436106101c65760003560e01c8063751039fc116100f7578063bbc0c74211610095578063dd62ed3e11610064578063dd62ed3e14610669578063f2fde38b146106a6578063f5648a4f146106cf578063f8b45b05146106e6576101cd565b8063bbc0c7421461059b578063c1ec8d4b146105c6578063cb96372814610603578063d936547e1461062c576101cd565b806395d89b41116100d157806395d89b41146104cb578063a457c2d7146104f6578063a9059cbb14610533578063ad5c464814610570576101cd565b8063751039fc146104725780638a8c523c146104895780638da5cb5b146104a0576101cd565b8063313ce567116101645780635b16ebb71161013e5780635b16ebb7146103b6578063664a1ad6146103f357806370a082311461041e578063715018a61461045b576101cd565b8063313ce56714610323578063395093511461034e5780634a62bb651461038b576101cd565b806316f0115b116101a057806316f0115b1461026557806318160ddd1461029057806320d83055146102bb57806323b872dd146102e6576101cd565b806306fdde03146101d2578063095ea7b3146101fd5780630dc913061461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e7610711565b6040516101f49190611c7f565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190611d3a565b6107a3565b6040516102319190611d95565b60405180910390f35b34801561024657600080fd5b5061024f6107c1565b60405161025c9190611e0f565b60405180910390f35b34801561027157600080fd5b5061027a6107e5565b6040516102879190611e39565b60405180910390f35b34801561029c57600080fd5b506102a561080b565b6040516102b29190611e63565b60405180910390f35b3480156102c757600080fd5b506102d0610815565b6040516102dd9190611e63565b60405180910390f35b3480156102f257600080fd5b5061030d60048036038101906103089190611e7e565b61081b565b60405161031a9190611d95565b60405180910390f35b34801561032f57600080fd5b50610338610913565b6040516103459190611eed565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190611d3a565b61091c565b6040516103829190611d95565b60405180910390f35b34801561039757600080fd5b506103a06109c8565b6040516103ad9190611d95565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190611f08565b6109db565b6040516103ea9190611d95565b60405180910390f35b3480156103ff57600080fd5b506104086109fb565b6040516104159190611e39565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190611f08565b610a21565b6040516104529190611e63565b60405180910390f35b34801561046757600080fd5b50610470610a6a565b005b34801561047e57600080fd5b50610487610bbd565b005b34801561049557600080fd5b5061049e610c6f565b005b3480156104ac57600080fd5b506104b5610d21565b6040516104c29190611e39565b60405180910390f35b3480156104d757600080fd5b506104e0610d4a565b6040516104ed9190611c7f565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190611d3a565b610ddc565b60405161052a9190611d95565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190611d3a565b610ec7565b6040516105679190611d95565b60405180910390f35b34801561057c57600080fd5b50610585610ee5565b6040516105929190611f56565b60405180910390f35b3480156105a757600080fd5b506105b0610f09565b6040516105bd9190611d95565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190611f08565b610f1c565b6040516105fa9190611d95565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190611f08565b610f3c565b005b34801561063857600080fd5b50610653600480360381019061064e9190611f08565b6110a8565b6040516106609190611d95565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b9190611f71565b6110c8565b60405161069d9190611e63565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c89190611f08565b61114f565b005b3480156106db57600080fd5b506106e4611310565b005b3480156106f257600080fd5b506106fb6113a3565b6040516107089190611e63565b60405180910390f35b60606004805461072090611fe0565b80601f016020809104026020016040519081016040528092919081815260200182805461074c90611fe0565b80156107995780601f1061076e57610100808354040283529160200191610799565b820191906000526020600020905b81548152906001019060200180831161077c57829003601f168201915b5050505050905090565b60006107b76107b06113a9565b84846113b1565b6001905092915050565b7f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b600b5481565b600061082884848461157a565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108736113a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea90612083565b60405180910390fd5b610907856108ff6113a9565b8584036113b1565b60019150509392505050565b60006012905090565b60006109be6109296113a9565b8484600260006109376113a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109b991906120d2565b6113b1565b6001905092915050565b600d60009054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a726113a9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af690612152565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610bc56113a9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990612152565b60405180910390fd5b6000600d60006101000a81548160ff021916908315150217905550565b610c776113a9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90612152565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610d5990611fe0565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8590611fe0565b8015610dd25780601f10610da757610100808354040283529160200191610dd2565b820191906000526020600020905b815481529060010190602001808311610db557829003601f168201915b5050505050905090565b60008060026000610deb6113a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f906121e4565b60405180910390fd5b610ebc610eb36113a9565b858584036113b1565b600191505092915050565b6000610edb610ed46113a9565b848461157a565b6001905092915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b600d60019054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f7c9190611e39565b602060405180830381865afa158015610f99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbd9190612219565b905060008111611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff9906122b8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161105f9291906122d8565b6020604051808303816000875af115801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a2919061232d565b50505050565b60086020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6111576113a9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db90612152565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a906123cc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516113589061241d565b60006040518083038185875af1925050503d8060008114611395576040519150601f19603f3d011682016040523d82523d6000602084013e61139a565b606091505b50508091505050565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611420576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611417906124a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690612536565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161156d9190611e63565b60405180910390a3505050565b600d60009054906101000a900460ff1680156115e05750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156116365750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561197357600d60019054906101000a900460ff1661168a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611681906125a2565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561172d5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156117d457600b54811115611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90612634565b60405180910390fd5b600c5461178383610a21565b8261178e91906120d2565b11156117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906126a0565b60405180910390fd5b611972565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156118775750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156118c657600b548111156118c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b890612732565b60405180910390fd5b611971565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661197057600c5461192383610a21565b8261192e91906120d2565b111561196f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611966906126a0565b60405180910390fd5b5b5b5b5b61197e838383611983565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e9906127c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890612856565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf906128e8565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b7d91906120d2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611be19190611e63565b60405180910390a350505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c29578082015181840152602081019050611c0e565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c5182611bef565b611c5b8185611bfa565b9350611c6b818560208601611c0b565b611c7481611c35565b840191505092915050565b60006020820190508181036000830152611c998184611c46565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cd182611ca6565b9050919050565b611ce181611cc6565b8114611cec57600080fd5b50565b600081359050611cfe81611cd8565b92915050565b6000819050919050565b611d1781611d04565b8114611d2257600080fd5b50565b600081359050611d3481611d0e565b92915050565b60008060408385031215611d5157611d50611ca1565b5b6000611d5f85828601611cef565b9250506020611d7085828601611d25565b9150509250929050565b60008115159050919050565b611d8f81611d7a565b82525050565b6000602082019050611daa6000830184611d86565b92915050565b6000819050919050565b6000611dd5611dd0611dcb84611ca6565b611db0565b611ca6565b9050919050565b6000611de782611dba565b9050919050565b6000611df982611ddc565b9050919050565b611e0981611dee565b82525050565b6000602082019050611e246000830184611e00565b92915050565b611e3381611cc6565b82525050565b6000602082019050611e4e6000830184611e2a565b92915050565b611e5d81611d04565b82525050565b6000602082019050611e786000830184611e54565b92915050565b600080600060608486031215611e9757611e96611ca1565b5b6000611ea586828701611cef565b9350506020611eb686828701611cef565b9250506040611ec786828701611d25565b9150509250925092565b600060ff82169050919050565b611ee781611ed1565b82525050565b6000602082019050611f026000830184611ede565b92915050565b600060208284031215611f1e57611f1d611ca1565b5b6000611f2c84828501611cef565b91505092915050565b6000611f4082611ddc565b9050919050565b611f5081611f35565b82525050565b6000602082019050611f6b6000830184611f47565b92915050565b60008060408385031215611f8857611f87611ca1565b5b6000611f9685828601611cef565b9250506020611fa785828601611cef565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ff857607f821691505b60208210810361200b5761200a611fb1565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061206d602883611bfa565b915061207882612011565b604082019050919050565b6000602082019050818103600083015261209c81612060565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120dd82611d04565b91506120e883611d04565b9250828201905080821115612100576120ff6120a3565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061213c602083611bfa565b915061214782612106565b602082019050919050565b6000602082019050818103600083015261216b8161212f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006121ce602583611bfa565b91506121d982612172565b604082019050919050565b600060208201905081810360008301526121fd816121c1565b9050919050565b60008151905061221381611d0e565b92915050565b60006020828403121561222f5761222e611ca1565b5b600061223d84828501612204565b91505092915050565b7f416d6f756e742073686f756c642062652067726561746572207468616e207a6560008201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b60006122a2602283611bfa565b91506122ad82612246565b604082019050919050565b600060208201905081810360008301526122d181612295565b9050919050565b60006040820190506122ed6000830185611e2a565b6122fa6020830184611e54565b9392505050565b61230a81611d7a565b811461231557600080fd5b50565b60008151905061232781612301565b92915050565b60006020828403121561234357612342611ca1565b5b600061235184828501612318565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123b6602683611bfa565b91506123c18261235a565b604082019050919050565b600060208201905081810360008301526123e5816123a9565b9050919050565b600081905092915050565b50565b60006124076000836123ec565b9150612412826123f7565b600082019050919050565b6000612428826123fa565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061248e602483611bfa565b915061249982612432565b604082019050919050565b600060208201905081810360008301526124bd81612481565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612520602283611bfa565b915061252b826124c4565b604082019050919050565b6000602082019050818103600083015261254f81612513565b9050919050565b7f54726164696e67206e6f74206163746976650000000000000000000000000000600082015250565b600061258c601283611bfa565b915061259782612556565b602082019050919050565b600060208201905081810360008301526125bb8161257f565b9050919050565b7f427579207472616e7366657220616d74206578636565647320746865206d617860008201527f206275792e000000000000000000000000000000000000000000000000000000602082015250565b600061261e602583611bfa565b9150612629826125c2565b604082019050919050565b6000602082019050818103600083015261264d81612611565b9050919050565b7f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000600082015250565b600061268a601883611bfa565b915061269582612654565b602082019050919050565b600060208201905081810360008301526126b98161267d565b9050919050565b7f53656c6c207472616e7366657220616d74206578636565647320746865206d6160008201527f782073656c6c2e00000000000000000000000000000000000000000000000000602082015250565b600061271c602783611bfa565b9150612727826126c0565b604082019050919050565b6000602082019050818103600083015261274b8161270f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006127ae602583611bfa565b91506127b982612752565b604082019050919050565b600060208201905081810360008301526127dd816127a1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612840602383611bfa565b915061284b826127e4565b604082019050919050565b6000602082019050818103600083015261286f81612833565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006128d2602683611bfa565b91506128dd82612876565b604082019050919050565b60006020820190508181036000830152612901816128c5565b905091905056fea26469706673582212200d4cf1d0a5f41e684559f81bb790bdfa8bac6183b395a8125dace002a1398fc464736f6c63430008130033

Verified Source Code Partial Match

Compiler: v0.8.19+commit.7dd6d404 EVM: paris Optimization: No
MEM.sol 643 lines
/**

Introducing pepe in a book of memes: 
an experimental project poised to redefine web3 culture by amalgamating memes, 
decentralized storage designed for degen shitcoin trading and gambling.


https://t.me/darkfarms1


*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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

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

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

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

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

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

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

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(
        address account,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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
            );
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    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 {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

interface IUniswapV3Router {
    function factory() external view returns (address);
}

interface IUniswapV3Factory {
    function createPool(
        address tokenA,
        address tokenB,
        uint24 fee
    ) external returns (address pool);
}

contract MEM is Ownable, ERC20 {
    IUniswapV3Router public immutable v3Router;
    address public pool;
    IERC20 public immutable WETH;

    mapping(address => bool) public isPool;
    mapping(address => bool) public whitelisted;
    mapping(address => bool) public isMaxTxExempt;
    address public fundWallet;
    uint256 public maxTransactionAmt;
    uint256 public maxWallet;

    bool public limitsInEffect = false;
    bool public tradingActive = true;

    receive() external payable {}

    constructor() ERC20("pepe in a book of memes", "MEM") {
        uint256 totalSupply = 1_000_000_000_000 * 1e18;
        address wethContract;
        address _v3Router;
        // @dev assumes WETH pair
        if (block.chainid == 1) {
            wethContract = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
            _v3Router = 0xE592427A0AEce92De3Edee1F18E0157C05861564;
        } else if (block.chainid == 5) {
            wethContract = 0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6;
            _v3Router = 0xE592427A0AEce92De3Edee1F18E0157C05861564;
        } else {
            revert("Chain not configured");
        }

        WETH = IERC20(wethContract);
        v3Router = IUniswapV3Router(_v3Router);
        pool = IUniswapV3Factory(v3Router.factory()).createPool(
            address(this),
            address(WETH),
            10000
        );
        isPool[pool] = true;
        fundWallet = msg.sender;
        whitelisted[msg.sender] = true;
        whitelisted[address(v3Router)] = true;
        whitelisted[address(0xdead)] = true;

        isMaxTxExempt[msg.sender] = true;
        isMaxTxExempt[address(v3Router)] = true;
        isMaxTxExempt[address(0xdead)] = true;

        maxTransactionAmt = (totalSupply * 1) / 100; // @dev update
        maxWallet = (totalSupply * 1) / 100; // @dev update

        _createInitialSupply(msg.sender, totalSupply);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (limitsInEffect && !whitelisted[to] && !whitelisted[from]) {
            require(tradingActive, "Trading not active");
            //when buy
            if (isPool[from] && !isMaxTxExempt[to]) {
                require(
                    amount <= maxTransactionAmt,
                    "Buy transfer amt exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Cannot Exceed max wallet"
                );
            }
            //when sell
            else if (isPool[to] && !isMaxTxExempt[from]) {
                require(
                    amount <= maxTransactionAmt,
                    "Sell transfer amt exceeds the max sell."
                );
            }
            //when transfer
            else if (!isMaxTxExempt[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Cannot Exceed max wallet"
                );
            }
        }
        super._transfer(from, to, amount);
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

    function withdrawStuckETH() external {
        bool success;
        (success, ) = address(fundWallet).call{value: address(this).balance}(
            ""
        );
    }

    function withdrawStuckTokens(address tokenAddress) external {
        address tokenAdd = address(tokenAddress);
        uint256 tokenBalance = IERC20(tokenAdd).balanceOf(address(this));
        require(tokenBalance > 0, "Amount should be greater than zero");
        IERC20(tokenAdd).transfer(fundWallet, tokenBalance);
    }
}

Read Contract

WETH 0xad5c4648 → address
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
fundWallet 0x664a1ad6 → address
isMaxTxExempt 0xc1ec8d4b → bool
isPool 0x5b16ebb7 → bool
limitsInEffect 0x4a62bb65 → bool
maxTransactionAmt 0x20d83055 → uint256
maxWallet 0xf8b45b05 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
pool 0x16f0115b → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
tradingActive 0xbbc0c742 → bool
v3Router 0x0dc91306 → address
whitelisted 0xd936547e → bool

Write Contract 11 functions

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

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
enableTrading 0x8a8c523c
No parameters
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
removeLimits 0x751039fc
No parameters
renounceOwnership 0x715018a6
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
withdrawStuckETH 0xf5648a4f
No parameters
withdrawStuckTokens 0xcb963728
address tokenAddress

Recent Transactions

No transactions found for this address