Address Contract Partially Verified
Address
0x421Feccb5d681049281141A74818C0a005659CB4
Balance
0 ETH
Nonce
1
Code Size
10558 bytes
Creator
0xf39CaAc4...c1f6 at tx 0x471b736f...6076d5
Indexed Transactions
0
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