Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0x5e4Fd3a6A409C0D6f278588FDeb9012368aCffae
Balance 0 ETH
Nonce 1
Code Size 10352 bytes
Indexed Transactions 0 (1 on-chain, 1.1% indexed)
External Etherscan · Sourcify

Contract Bytecode

10352 bytes
0x6080604052600436106102555760003560e01c8063715018a611610139578063b6a5d7de116100b6578063dd62ed3e1161007a578063dd62ed3e146106cf578063ea3105d914610715578063f0b37c041461072a578063f2fde38b1461074a578063f887ea401461076a578063fe9fbb801461078f57600080fd5b8063b6a5d7de1461062e578063bc7a28981461064e578063c1f1b1b514610671578063d3f6a1571461068f578063d4698016146106af57600080fd5b80638ea5220f116100fd5780638ea5220f146105a357806395d89b41146105c35780639d9241ec146105d8578063a8aa1b31146105ee578063a9059cbb1461060e57600080fd5b8063715018a61461052457806375f0a8741461053957806378109e54146105595780637d1db4a51461056f578063893d20e81461058557600080fd5b80632f54bf6e116101d257806359b107b91161019657806359b107b9146104575780635c85974f1461046d5780635d0044ca1461048d57806360959b56146104ad5780636ddd1713146104cd57806370a08231146104ee57600080fd5b80632f54bf6e146103a8578063313ce567146103d757806338cc4831146103f35780634623e2921461041a578063571ac8b01461043757600080fd5b806318160ddd1161021957806318160ddd1461031e5780631da1db5e1461033357806323b872dd14610353578063293230b81461037357806329a7b2431461038857600080fd5b80630445b6671461026157806306fdde031461028a578063095ea7b3146102ac5780630d075d9c146102dc5780630f683e90146102fe57600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b5061027760295481565b6040519081526020015b60405180910390f35b34801561029657600080fd5b5061029f6107af565b6040516102819190612137565b3480156102b857600080fd5b506102cc6102c7366004612162565b610841565b6040519015158152602001610281565b3480156102e857600080fd5b506102fc6102f736600461218e565b6108ae565b005b34801561030a57600080fd5b506102fc61031936600461218e565b610973565b34801561032a57600080fd5b50600754610277565b34801561033f57600080fd5b506102fc61034e3660046121ba565b610a21565b34801561035f57600080fd5b506102cc61036e3660046121d3565b610a75565b34801561037f57600080fd5b506102fc610b85565b34801561039457600080fd5b506102fc6103a3366004612222565b610c77565b3480156103b457600080fd5b506102cc6103c3366004612257565b6000546001600160a01b0391821691161490565b3480156103e357600080fd5b5060405160098152602001610281565b3480156103ff57600080fd5b50305b6040516001600160a01b039091168152602001610281565b34801561042657600080fd5b50602454610100900460ff166102cc565b34801561044357600080fd5b506102cc610452366004612257565b610d8b565b34801561046357600080fd5b5061027760145481565b34801561047957600080fd5b506102fc6104883660046121ba565b610d99565b34801561049957600080fd5b506102fc6104a83660046121ba565b610dfb565b3480156104b957600080fd5b506102fc6104c8366004612317565b610e5d565b3480156104d957600080fd5b506028546102cc90600160a01b900460ff1681565b3480156104fa57600080fd5b50610277610509366004612257565b6001600160a01b03166000908152600a602052604090205490565b34801561053057600080fd5b506102fc610e9b565b34801561054557600080fd5b50601e54610402906001600160a01b031681565b34801561056557600080fd5b5061027760095481565b34801561057b57600080fd5b5061027760085481565b34801561059157600080fd5b506000546001600160a01b0316610402565b3480156105af57600080fd5b50601f54610402906001600160a01b031681565b3480156105cf57600080fd5b5061029f610f05565b3480156105e457600080fd5b5061027760185481565b3480156105fa57600080fd5b50602854610402906001600160a01b031681565b34801561061a57600080fd5b506102cc610629366004612162565b610f14565b34801561063a57600080fd5b506102fc610649366004612257565b610f46565b34801561065a57600080fd5b50610663610f97565b60405161028192919061237b565b34801561067d57600080fd5b506028546001600160a01b0316610402565b34801561069b57600080fd5b506102fc6106aa3660046123a0565b6110be565b3480156106bb57600080fd5b50601d54610402906001600160a01b031681565b3480156106db57600080fd5b506102776106ea3660046123a0565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801561072157600080fd5b506102fc611111565b34801561073657600080fd5b506102fc610745366004612257565b61115d565b34801561075657600080fd5b506102fc610765366004612257565b6111a8565b34801561077657600080fd5b506027546104029061010090046001600160a01b031681565b34801561079b57600080fd5b506102cc6107aa366004612257565b61123e565b6060600580546107be906123d9565b80601f01602080910402602001604051908101604052809291908181526020018280546107ea906123d9565b80156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b5050505050905090565b336000818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061089c9086815260200190565b60405180910390a35060015b92915050565b6108b73361123e565b6108dc5760405162461bcd60e51b81526004016108d390612413565b60405180910390fd5b60646108f2826108ec868661125c565b9061125c565b11156108fd57600080fd5b601183905560128290556013819055601554610919908461125c565b601955601654610929908361125c565b601a55601754610939908261125c565b601b5561094d60056108ec8381878761125c565b601455601b54601954601a5461096b92600a926108ec92839161125c565b601c55505050565b61097c3361123e565b6109985760405162461bcd60e51b81526004016108d390612413565b60646109a8826108ec868661125c565b11156109b357600080fd5b6015839055601682905560178190556011546109cf908461125c565b6019556012546109df908361125c565b601a556013546109ef908261125c565b601b55610a0360056108ec8381878761125c565b601855601b54601954601a5461096b92600a926108ec92839161125c565b601e5447906001600160a01b03166108fc6064610a3e858561244e565b610a489190612465565b6040518115909202916000818181858888f19350505050158015610a70573d6000803e3d6000fd5b505050565b60006001600160a01b038416610a9d5760405162461bcd60e51b81526004016108d390612487565b6001600160a01b038316610ac35760405162461bcd60e51b81526004016108d3906124cc565b6007546001600160a01b0385166000908152600b6020908152604080832033845290915290205414610b70576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600b82528381203382529091529190912054610b4b9184906113bd565b6001600160a01b0385166000908152600b602090815260408083203384529091529020555b610b7b8484846113f7565b90505b9392505050565b6000546001600160a01b03163314610baf5760405162461bcd60e51b81526004016108d39061250f565b602454610100900460ff1615610bc457600080fd5b602480544260105561ffff1916610100178155600d546001600160a01b03166000908152600c602052604090819020805460ff19166001179055905490517f2b27db57e94e474754b17ad26b358efda13cbcf4a9bbbc7ec92de2926a941f3491610c389160ff919091161515815260200190565b60405180910390a1604051600181527f9dcb1780788db444ce9b5c04e924c7f3b5641b1c960d06f601954f973c8a43d4906020015b60405180910390a1565b610c803361123e565b610c9c5760405162461bcd60e51b81526004016108d390612413565b60008111610cdc5760405162461bcd60e51b815260206004820152600d60248201526c526174696f20746f6f206c6f7760981b60448201526064016108d3565b600082118015610d0f5750610d0b633b9aca00610d05600a60075461133d90919063ffffffff16565b9061133d565b8211155b610d545760405162461bcd60e51b81526020600482015260166024820152750a8d0e4cae6d0ded8c840e8dede40d8deee5ed0d2ced60531b60448201526064016108d3565b6028805460ff60a01b1916600160a01b85151502179055610d776009600a612613565b610d81908361244e565b602955602a555050565b60006108a882600754610841565b610da23361123e565b610dbe5760405162461bcd60e51b81526004016108d390612413565b6005811015610dcc57600080fd5b601e811115610dda57600080fd5b6103e881600754610deb919061244e565b610df59190612465565b60085550565b610e043361123e565b610e205760405162461bcd60e51b81526004016108d390612413565b6005811015610e2e57600080fd5b601e811115610e3c57600080fd5b6103e881600754610e4d919061244e565b610e579190612465565b60095550565b610e663361123e565b610e825760405162461bcd60e51b81526004016108d390612413565b6022610e8e8382612670565b506023610a708282612670565b6000546001600160a01b03163314610ec55760405162461bcd60e51b81526004016108d39061250f565b600080546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616390602001610c6d565b6060600680546107be906123d9565b60008054336001600160a01b0390911603610f3b57610f34338484611840565b90506108a8565b610f343384846113f7565b6000546001600160a01b03163314610f705760405162461bcd60e51b81526004016108d39061250f565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b60608060226023818054610faa906123d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd6906123d9565b80156110235780601f10610ff857610100808354040283529160200191611023565b820191906000526020600020905b81548152906001019060200180831161100657829003601f168201915b50505050509150808054611036906123d9565b80601f0160208091040260200160405190810160405280929190818152602001828054611062906123d9565b80156110af5780601f10611084576101008083540402835291602001916110af565b820191906000526020600020905b81548152906001019060200180831161109257829003601f168201915b50505050509050915091509091565b6110c73361123e565b6110e35760405162461bcd60e51b81526004016108d390612413565b601e80546001600160a01b039384166001600160a01b031991821617909155601f8054929093169116179055565b61111a3361123e565b6111365760405162461bcd60e51b81526004016108d390612413565b60105461114590610708612730565b42101561115157600080fd5b6027805460ff19169055565b6000546001600160a01b031633146111875760405162461bcd60e51b81526004016108d39061250f565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146111d25760405162461bcd60e51b81526004016108d39061250f565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6001600160a01b031660009081526001602052604090205460ff1690565b6000806112698385612730565b905083811015610b7e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108d3565b6000826000036112cd575060006108a8565b60006112d9838561244e565b9050826112e68583612465565b14610b7e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108d3565b6000610b7e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611926565b6000610b7e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152505b600081848411156113e15760405162461bcd60e51b81526004016108d39190612137565b5060006113ee8486612743565b95945050505050565b60006001600160a01b03841661141f5760405162461bcd60e51b81526004016108d390612487565b6001600160a01b0383166114455760405162461bcd60e51b81526004016108d3906124cc565b6001600160a01b0384166000908152600c602052604090205460ff1615801561148757506001600160a01b0383166000908152600c602052604090205460ff16155b156114da5760245460ff1615156001036114da5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016108d3565b6001600160a01b03841660009081526001602052604090205460ff168061151957506001600160a01b03831660009081526001602052604090205460ff165b1561153057611529848484611840565b9050610b7e565b602b5460ff161561154657611529848484611840565b6001600160a01b03841660009081526001602052604090205460ff1615801561158857506001600160a01b03831660009081526001602052604090205460ff16155b156115db5760245460ff1615156001036115db5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016108d3565b6028546001600160a01b03858116911614801561160157506001600160a01b0383163014155b1561167e5760048054601054604051632d08d26760e11b8152928301526001600160a01b0385811660248401521690635a11a4ce9060440160408051808303816000875af1158015611657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167b9190612756565b50505b60275460ff161561169457611694848484611954565b61169e8284611b30565b156116ac576116ac82611be6565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600a90915291909120546116fe9184906113bd565b6001600160a01b038086166000908152600a60205260408120929092556028548582169116148061173c57506028546001600160a01b038681169116145b6117465782611751565b61175185858561202d565b6001600160a01b0385166000908152600a6020526040902054909150611777908261125c565b6001600160a01b038086166000908152600a6020526040902091909155602854868216911614806117b557506028546001600160a01b038581169116145b80156117ca57506001600160a01b0384163014155b156117e8576001602160008282546117e29190612730565b90915550505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161182d91815260200190565b60405180910390a3506001949350505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600a909152918220546118919184906113bd565b6001600160a01b038086166000908152600a602052604080822093909355908516815220546118c0908361125c565b6001600160a01b038085166000818152600a602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119149086815260200190565b60405180910390a35060019392505050565b600081836119475760405162461bcd60e51b81526004016108d39190612137565b5060006113ee8486612465565b6001600160a01b03831660009081526001602052604090205460ff1615801561198657506001600160a01b0382163014155b801561199b57506001600160a01b0383163014155b80156119b557506002546001600160a01b03838116911614155b80156119cf57506028546001600160a01b03838116911614155b80156119e95750601e546001600160a01b03838116911614155b8015611a035750601d546001600160a01b03838116911614155b15611aa4576001600160a01b0382166000908152600a6020526040902054600954611a2e8383612730565b1115611aa25760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016108d3565b505b60085481111580611acd57506001600160a01b0383166000908152600f602052604090205460ff165b80611af057506001600160a01b0382166000908152600f602052604090205460ff165b610a705760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016108d3565b60008042611b4b60255460265461125c90919063ffffffff16565b602854911191506001600160a01b038481169116148015611b695750805b8015611b785750602b5460ff16155b8015611b8d5750602854600160a01b900460ff165b8015611baa5750602954306000908152600a602052604090205410155b8015611bde5750611bcb6064610d05602a54876112bb90919063ffffffff16565b306000908152600a602052604090205410155b949350505050565b602b805460ff19166001179055602a54600090611c0b90606490610d059085906112bb565b602954909150600a908211611c2557602954915081611c27565b815b50600080601a5411611c3a576000611c5a565b611c5a6002610d05601c54610d05601a54886112bb90919063ffffffff16565b90506000611c68848361137f565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611ca257611ca2612785565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611cea57611cea612785565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815247926101009092049091169063791ac94790611d3990869060009087903090429060040161279b565b600060405180830381600087803b158015611d5357600080fd5b505af1158015611d67573d6000803e3d6000fd5b50505050600080611d81834761137f90919063ffffffff16565b9050600080601a5411611d9657601c54611db1565b601a54611db190611da890600261133d565b601c549061137f565b90506000611dd36002610d0584610d05601a54886112bb90919063ffffffff16565b601b5490915015611e5b576000611df983610d05601b54876112bb90919063ffffffff16565b601f546040519192506001600160a01b031690620186a09083906000818181858888f193505050503d8060008114611e4d576040519150601f19603f3d011682016040523d82523d6000602084013e611e52565b606091505b50600096505050505b8715611f3857602754601d5460405163f305d71960e01b8152306004820152602481018b905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af1158015611ed6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611efb919061280c565b505060408051838152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6000611f4883610d05868d6112bb565b6020546040519192506001600160a01b031690620186a09083906000818181858888f193505050503d8060008114611f9c576040519150601f19603f3d011682016040523d82523d6000602084013e611fa1565b606091505b506000965047915050801561201057601e546040516001600160a01b0390911690620186a09083906000818181858888f193505050503d8060008114612003576040519150601f19603f3d011682016040523d82523d6000602084013e612008565b606091505b506000975050505b5050426026555050602b805460ff19169055505050505050505050565b60285460009081906001600160a01b0385811691161461204f57601454612053565b6018545b905060006120676103e8610d0586856112bb565b306000908152600a6020526040902054909150612084908261125c565b306000818152600a6020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120d59085815260200190565b60405180910390a36120e7848261137f565b9695505050505050565b6000815180845260005b81811015612117576020818501810151868301820152016120fb565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610b7e60208301846120f1565b6001600160a01b038116811461215f57600080fd5b50565b6000806040838503121561217557600080fd5b82356121808161214a565b946020939093013593505050565b6000806000606084860312156121a357600080fd5b505081359360208301359350604090920135919050565b6000602082840312156121cc57600080fd5b5035919050565b6000806000606084860312156121e857600080fd5b83356121f38161214a565b925060208401356122038161214a565b929592945050506040919091013590565b801515811461215f57600080fd5b60008060006060848603121561223757600080fd5b833561224281612214565b95602085013595506040909401359392505050565b60006020828403121561226957600080fd5b8135610b7e8161214a565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261229b57600080fd5b813567ffffffffffffffff808211156122b6576122b6612274565b604051601f8301601f19908116603f011681019082821181831017156122de576122de612274565b816040528381528660208588010111156122f757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561232a57600080fd5b823567ffffffffffffffff8082111561234257600080fd5b61234e8683870161228a565b9350602085013591508082111561236457600080fd5b506123718582860161228a565b9150509250929050565b60408152600061238e60408301856120f1565b82810360208401526113ee81856120f1565b600080604083850312156123b357600080fd5b82356123be8161214a565b915060208301356123ce8161214a565b809150509250929050565b600181811c908216806123ed57607f821691505b60208210810361240d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176108a8576108a8612438565b60008261248257634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600181815b8085111561256a57816000190482111561255057612550612438565b8085161561255d57918102915b93841c9390800290612534565b509250929050565b600082612581575060016108a8565b8161258e575060006108a8565b81600181146125a457600281146125ae576125ca565b60019150506108a8565b60ff8411156125bf576125bf612438565b50506001821b6108a8565b5060208310610133831016604e8410600b84101617156125ed575081810a6108a8565b6125f7838361252f565b806000190482111561260b5761260b612438565b029392505050565b6000610b7e60ff841683612572565b601f821115610a7057600081815260208120601f850160051c810160208610156126495750805b601f850160051c820191505b8181101561266857828155600101612655565b505050505050565b815167ffffffffffffffff81111561268a5761268a612274565b61269e8161269884546123d9565b84612622565b602080601f8311600181146126d357600084156126bb5750858301515b600019600386901b1c1916600185901b178555612668565b600085815260208120601f198616915b82811015612702578886015182559484019460019091019084016126e3565b50858210156127205787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156108a8576108a8612438565b818103818111156108a8576108a8612438565b6000806040838503121561276957600080fd5b825161277481612214565b60208401519092506123ce8161214a565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127eb5784516001600160a01b0316835293830193918301916001016127c6565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561282157600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d9653a6562b4d4cd1dab840cfbfd3d971468f3210b07da15f2a3d695f705484964736f6c63430008110033

Verified Source Code Partial Match

Compiler: v0.8.17+commit.8df45f5f EVM: london Optimization: Yes (200 runs)
StandardTokerrContract.sol 640 lines
/*

This contract is brought to you by Tokerr Factory
Join us at https://t.me/tokrethchannel
*/

pragma solidity ^0.8.16;

//SPDX-License-Identifier: MIT


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    function renounceOwnership() public onlyOwner() {
        owner = address(0);
        emit OwnershipTransferred(address(0));
    }

    event OwnershipTransferred(address owner);
}

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

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

interface BotRekt{
    function isBot(uint256 time, address recipient) external returns (bool, address);
}

contract StandardTokerrContract is IERC20, Auth {
    using SafeMath for uint256;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    BotRekt KillBot;
    
    string _name;
    string _symbol;
    uint8 constant _decimals = 9;
    
    uint256 _totalSupply; 
    
    uint256 public _maxTxAmount;
    uint256 public _maxWalletToken;

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

    mapping (address => bool) lpProvider;
    address creator;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;

    uint256 launchTime;
    

    //fees are set with a 10x multiplier to allow for 2.5 etc. Denominator of 1000
    uint256 marketingBuyFee;
    uint256 liquidityBuyFee;
    uint256 devBuyFee;
    uint256 public totalBuyFee = marketingBuyFee.add(liquidityBuyFee).add(devBuyFee);

    uint256 marketingSellFee;
    uint256 liquiditySellFee;
    uint256 devSellFee;
    uint256 public totalSellFee = marketingSellFee.add(liquiditySellFee).add(devSellFee);

    uint256 marketingFee = marketingBuyFee.add(marketingSellFee);
    uint256 liquidityFee = liquidityBuyFee.add(liquiditySellFee);
    uint256 devFee = devBuyFee.add(devSellFee);

    uint256 totalFee = liquidityFee.add(marketingFee).add(devFee);

    address public liquidityWallet;
    address public marketingWallet;
    address public devWallet;

    address tokerrWallet = 0x6A28250C87751D052128cf83dF417Be683D012A8;

    uint256 transferCount = 1;

    string telegram;
    string website;

    //one time trade lock
    bool lockTilStart = true;
    bool lockUsed = false;

    //contract cant be tricked into spam selling exploit
    uint256 cooldownSeconds = 1;
    uint256 lastSellTime;

    event LockTilStartUpdated(bool enabled);

    bool limits = true;

    IDEXRouter public router;
    address public pair;

    bool public swapEnabled = true;
    uint256 public swapThreshold;
    uint256 swapRatio = 40;

    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    event TradeStarted(bool trading);


    constructor (uint[] memory numbers, address[] memory addresses, string[] memory names, 
                address antiBot, address builder) Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IDEXFactory(router.factory()).createPair(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, address(this));

        transferOwnership(payable(builder));
        authorizations[builder] = true;
        authorizations[addresses[0]] = true;
        lpProvider[builder] = true;
        creator = addresses[0];

        KillBot = BotRekt(antiBot);

        _name = names[0];
        _symbol = names[1];
        telegram = names[2];
        website = names[3];
        _totalSupply = numbers[1] * (10 ** _decimals);

        _allowances[address(this)][address(router)] = _totalSupply;

        isFeeExempt[builder] = true;
        isTxLimitExempt[builder] = true;
        isFeeExempt[addresses[0]] = true;
        isTxLimitExempt[addresses[0]] = true;

        swapThreshold = _totalSupply.mul(10).div(100000);

        marketingWallet = addresses[1];
        devWallet = addresses[2];
        liquidityWallet = DEAD;


        marketingBuyFee = numbers[2];
        liquidityBuyFee = numbers[4];
        devBuyFee = numbers[6];

        totalBuyFee = marketingBuyFee.add(liquidityBuyFee).add(devBuyFee).add(5);
        require(totalBuyFee <= 105, "Buy tax too high!"); //10% buy tax

        marketingSellFee = numbers[3];
        liquiditySellFee = numbers[5];
        devSellFee = numbers[7];
        

        totalSellFee = marketingSellFee.add(liquiditySellFee).add(devSellFee).add(5);
        require(totalSellFee <= 105, "Sell tax too high!"); //10% sell tax

        marketingFee = marketingBuyFee.add(marketingSellFee);
        liquidityFee = liquidityBuyFee.add(liquiditySellFee);
        devFee = devBuyFee.add(devSellFee);

        totalFee = liquidityFee.add(marketingFee).add(devFee).add(10);

        _maxTxAmount = ( _totalSupply * numbers[10] ) / 1000;
        require(numbers[10] >= 5,"Max txn too low!"); //0.5% max txn
        require(numbers[10] <= 30,"Max txn too high!"); //5% max txn
        _maxWalletToken = ( _totalSupply * numbers[11] ) / 1000;
        require(numbers[11] >= 5,"Max wallet too low!"); //0.5% max wallet
        require(numbers[11] <= 30,"Max wallet too high!"); //5% max wallet

        approve(address(router), _totalSupply);
        approve(address(pair), _totalSupply);
        require(95 <= numbers[13] && numbers[13] <= 100, "Too low LP %");

        require(block.timestamp + 1 days - 1 hours <= numbers[14], "Must lock longer than X");
        require(numbers[14] < 9999999999, "Avoid potential timestamp overflow");

        uint256 lpDiv;

        //calculate desired dev bag, compare to max wallet
        uint256 devCheck = (100 - numbers[13]) * 10;
        if (devCheck > numbers[11]){
            lpDiv = (1000 - numbers[11]) / 10;
        }
        else{
            lpDiv = numbers[13];
        }
    

        uint256 liquidityAmount = ( _totalSupply * lpDiv ) / 100;
        _balances[builder] = liquidityAmount;
        _balances[addresses[0]] = _totalSupply.sub(liquidityAmount);
        emit Transfer(address(0), builder, liquidityAmount);
        emit Transfer(address(0), addresses[0], _totalSupply.sub(liquidityAmount));
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function getPair() external view returns (address){return pair;}

    function aboutMe() external view returns (string memory,string memory){
        return (telegram,website);
    }

    function updateAboutMe(string memory _telegram,string memory _website) external authorized{
        telegram = _telegram;
        website = _website;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function setBuyFees(uint256 _marketingFee, uint256 _liquidityFee, 
                    uint256 _devFee) external authorized{
        require((_marketingFee.add(_liquidityFee).add(_devFee)) <= 100);
        marketingBuyFee = _marketingFee;
        liquidityBuyFee = _liquidityFee;
        devBuyFee = _devFee;

        marketingFee = marketingSellFee.add(_marketingFee);
        liquidityFee = liquiditySellFee.add(_liquidityFee);
        devFee = devSellFee.add(_devFee);

        totalBuyFee = _marketingFee.add(_liquidityFee).add(_devFee).add(5);
        totalFee = liquidityFee.add(marketingFee).add(devFee).add(10);
    }
    
    function setSellFees(uint256 _marketingFee, uint256 _liquidityFee, 
                    uint256 _devFee) external authorized{
        require((_marketingFee.add(_liquidityFee).add(_devFee)) <= 100);
        marketingSellFee = _marketingFee;
        liquiditySellFee = _liquidityFee;
        devSellFee = _devFee;

        marketingFee = marketingBuyFee.add(_marketingFee);
        liquidityFee = liquidityBuyFee.add(_liquidityFee);
        devFee = devBuyFee.add(_devFee);

        totalSellFee = _marketingFee.add(_liquidityFee).add(_devFee).add(5);
        totalFee = liquidityFee.add(marketingFee).add(devFee).add(10);
    }

    function setWallets(address _marketingWallet, address _devWallet) external authorized {
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

    function setMaxWallet(uint256 percent) external authorized {
        require(percent >= 5); //0.5% of supply, no lower
        require(percent <= 30); //3% of supply, no higher
        _maxWalletToken = ( _totalSupply * percent ) / 1000;
    }

    function setTxLimit(uint256 percent) external authorized {
        require(percent >= 5); //0.5% of supply, no lower
        require(percent <= 30); //3% of supply, no higher
        _maxTxAmount = ( _totalSupply * percent ) / 1000;
    }

    function getAddress() external view returns (address){
        return address(this);
    }

    
    function clearStuckBalance(uint256 amountPercentage) external  {
        uint256 amountETH = address(this).balance;
        payable(marketingWallet).transfer(amountETH * amountPercentage / 100);
    }

    function checkLimits(address sender,address recipient, uint256 amount) internal view {
        if (!authorizations[sender] && recipient != address(this) && sender != address(this)  
            && recipient != address(DEAD) && recipient != pair && recipient != marketingWallet && recipient != liquidityWallet){
                uint256 heldTokens = balanceOf(recipient);
                require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
            }

        require(amount <= _maxTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
    }

    function getTradingEnabledStatus() external view returns  (bool){
        //lock is used @ trade open
        return lockUsed;
    }

    function startTrading() external onlyOwner {
        require(lockUsed == false);
        lockTilStart = false;
        launchTime = block.timestamp;
        lockUsed = true;
        lpProvider[creator] = true;

        emit LockTilStartUpdated(lockTilStart);
        emit TradeStarted(true);
    }

    //cant call this til half an hour after launch to prevent prepump
    function liftMax() external authorized {
        require(block.timestamp >= launchTime + 1800);
        limits = false;
    }
    
    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function setTokenSwapSettings(bool _enabled, uint256 _threshold, uint256 _ratio) external authorized {
        require(_ratio > 0, "Ratio too low");
        require(_threshold > 0 && _threshold <= _totalSupply.div(10).div(10**9), "Threshold too low/high");
        swapEnabled = _enabled;
        swapThreshold = _threshold * (10 ** _decimals);
        swapRatio = _ratio;

    }
    
    function shouldTokenSwap(uint256 amount, address recipient) internal view returns (bool) {

        bool timeToSell = lastSellTime.add(cooldownSeconds) < block.timestamp;

        return recipient == pair
        && timeToSell
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold
        && _balances[address(this)] >= amount.mul(swapRatio).div(100);
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {

        uint256 _totalFee;

        _totalFee = (recipient == pair) ? totalSellFee : totalBuyFee;

        uint256 feeAmount = amount.mul(_totalFee).div(1000);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);

        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function tokenSwap(uint256 _amount) internal swapping {

        uint256 amount = _amount.mul(swapRatio).div(100);
        //0.5% buy and sell, both sets of taxes added together in swap
        uint256 tokerr = 10;

        (amount > swapThreshold) ? amount : amount = swapThreshold;

        uint256 amountToLiquify = (liquidityFee > 0) ? amount.mul(liquidityFee).div(totalFee).div(2) : 0;

        uint256 amountToSwap = amount.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        bool tmpSuccess;

        uint256 amountETH = address(this).balance.sub(balanceBefore);
        uint256 totalETHFee = (liquidityFee > 0) ? totalFee.sub(liquidityFee.div(2)) : totalFee;
        

        uint256 amountETHLiquidity = amountETH.mul(liquidityFee).div(totalETHFee).div(2);
        if (devFee > 0){
            uint256 amountETHDev = amountETH.mul(devFee).div(totalETHFee);
            
            (tmpSuccess,) = payable(devWallet).call{value: amountETHDev, gas: 100000}("");
            tmpSuccess = false;
        }

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityWallet,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
        //after other fees are allocated, tokerrFee is calculated and taken before marketing
        uint256 tokerrFee = amountETH.mul(tokerr).div(totalETHFee);
        (tmpSuccess,) = payable(tokerrWallet).call{value: tokerrFee, gas: 100000}("");
        tmpSuccess = false;

        uint256 amountETHMarketing = address(this).balance;
        if(amountETHMarketing > 0){
            (tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 100000}("");
            tmpSuccess = false;
        }

        lastSellTime = block.timestamp;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        if (owner == msg.sender){
            return _basicTransfer(msg.sender, recipient, amount);
        }
        else {
            return _transferFrom(msg.sender, recipient, amount);
        }
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        if(_allowances[sender][msg.sender] != _totalSupply){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(!lpProvider[sender] && !lpProvider[recipient]){
            require(lockTilStart != true,"Trading not open yet");
        }


        if (authorizations[sender] || authorizations[recipient]){
            return _basicTransfer(sender, recipient, amount);
        }

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(lockTilStart != true,"Trading not open yet");
        }
        
        if (sender == pair && recipient != address(this)){

            KillBot.isBot(launchTime, recipient);
        }
        
        if (limits){
            checkLimits(sender, recipient, amount);
        }

        if(shouldTokenSwap(amount, recipient)){ tokenSwap(amount); }
        
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        uint256 amountReceived = (recipient == pair || sender == pair) ? takeFee(sender, recipient, amount) : amount;


        

        _balances[recipient] = _balances[recipient].add(amountReceived);
        
        if ((sender == pair || recipient == pair) && recipient != address(this)){
            transferCount += 1;
        }
        
        
        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    event AutoLiquify(uint256 amountETH, uint256 amountCoin);
}

Read Contract

_maxTxAmount 0x7d1db4a5 → uint256
_maxWalletToken 0x78109e54 → uint256
aboutMe 0xbc7a2898 → string, string
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
devWallet 0x8ea5220f → address
getAddress 0x38cc4831 → address
getOwner 0x893d20e8 → address
getPair 0xc1f1b1b5 → address
getTradingEnabledStatus 0x4623e292 → bool
isAuthorized 0xfe9fbb80 → bool
isOwner 0x2f54bf6e → bool
liquidityWallet 0xd4698016 → address
marketingWallet 0x75f0a874 → address
name 0x06fdde03 → string
pair 0xa8aa1b31 → address
router 0xf887ea40 → address
swapEnabled 0x6ddd1713 → bool
swapThreshold 0x0445b667 → uint256
symbol 0x95d89b41 → string
totalBuyFee 0x59b107b9 → uint256
totalSellFee 0x9d9241ec → uint256
totalSupply 0x18160ddd → uint256

Write Contract 18 functions

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

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
approveMax 0x571ac8b0
address spender
returns: bool
authorize 0xb6a5d7de
address adr
clearStuckBalance 0x1da1db5e
uint256 amountPercentage
liftMax 0xea3105d9
No parameters
renounceOwnership 0x715018a6
No parameters
setBuyFees 0x0d075d9c
uint256 _marketingFee
uint256 _liquidityFee
uint256 _devFee
setMaxWallet 0x5d0044ca
uint256 percent
setSellFees 0x0f683e90
uint256 _marketingFee
uint256 _liquidityFee
uint256 _devFee
setTokenSwapSettings 0x29a7b243
bool _enabled
uint256 _threshold
uint256 _ratio
setTxLimit 0x5c85974f
uint256 percent
setWallets 0xd3f6a157
address _marketingWallet
address _devWallet
startTrading 0x293230b8
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address adr
unauthorize 0xf0b37c04
address adr
updateAboutMe 0x60959b56
string _telegram
string _website

Recent Transactions

This address has 1 on-chain transactions, but only 1.1% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →