Address Contract Partially Verified
Address
0x061409C87B9Ed4E20B5422deC073392a401D5106
Balance
0.054127 ETH ($112.06)
Nonce
1
Code Size
11337 bytes
Creator
0x0b41034a...5de0 at tx 0x1b2bacb7...742195
Indexed Transactions
0
Contract Bytecode
11337 bytes
0x6080604052600436106103035760003560e01c80636f4ce42811610190578063bf56b371116100dc578063e96fada211610095578063f84ba65d1161006f578063f84ba65d14610933578063f8821a6214610953578063f887ea4014610969578063fabb0b4f1461098957600080fd5b8063e96fada2146108d3578063f1f3bca3146108f3578063f2fde38b1461091357600080fd5b8063bf56b371146107ea578063bfa21d6a14610800578063c1adf7bc14610820578063c287184e1461084d578063d68601421461086d578063dd62ed3e1461088d57600080fd5b806395d89b4111610149578063a8aa1b3111610123578063a8aa1b3114610775578063a9059cbb14610795578063abe57e70146107b5578063bafe446b146107d557600080fd5b806395d89b41146107125780639b02c4021461073f578063a4b45c001461075557600080fd5b80636f4ce4281461062a5780636fcba3771461065757806370a0823114610677578063715018a6146106ad578063893d20e8146106c25780638da5cb5b146106f457600080fd5b8063492a937b1161024f578063584f969a1161020857806363a803e1116101e257806363a803e1146105bb578063658d4b7f146105d057806367243482146105f05780636ddd17131461061057600080fd5b8063584f969a1461057057806360bba03d1461058557806361e08e72146105a557600080fd5b8063492a937b146104ba57806350713935146104da57806354a1dfc9146104fa57806356a227f21461051a578063571ac8b01461053a5780635804f1e41461055a57600080fd5b8063234e9494116102bc578063313ce56711610296578063313ce5671461043c57806334848b9a14610458578063421dd7c71461047857806346d7edaa1461048d57600080fd5b8063234e9494146103f257806323b872dd146104075780632b112e491461042757600080fd5b80630445b6671461030f57806306fdde0314610338578063095db78f14610376578063095ea7b3146103985780631031e36e146103c857806318160ddd146103dd57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032560245481565b6040519081526020015b60405180910390f35b34801561034457600080fd5b5060408051808201909152600c81526b466f6f7462616c6c20496e7560a01b60208201525b60405161032f919061290d565b34801561038257600080fd5b50610396610391366004612729565b61099f565b005b3480156103a457600080fd5b506103b86103b3366004612691565b610b5b565b604051901515815260200161032f565b3480156103d457600080fd5b50610396610bc8565b3480156103e957600080fd5b50600354610325565b3480156103fe57600080fd5b50610325610c2d565b34801561041357600080fd5b506103b861042236600461261b565b610c4d565b34801561043357600080fd5b50610325610ce2565b34801561044857600080fd5b506040516009815260200161032f565b34801561046457600080fd5b50610396610473366004612856565b610d23565b34801561048457600080fd5b50610396610dc4565b34801561049957600080fd5b506103256104a83660046125a8565b60186020526000908152604090205481565b3480156104c657600080fd5b506103966104d536600461265c565b610e19565b3480156104e657600080fd5b506103966104f5366004612856565b610ed7565b34801561050657600080fd5b50610396610515366004612798565b610f72565b34801561052657600080fd5b5061039661053536600461280f565b610ff5565b34801561054657600080fd5b506103b86105553660046125a8565b611085565b34801561056657600080fd5b50610325601f5481565b34801561057c57600080fd5b50610396611093565b34801561059157600080fd5b506103966105a036600461265c565b6110e8565b3480156105b157600080fd5b5061032560225481565b3480156105c757600080fd5b5061032561113d565b3480156105dc57600080fd5b506103966105eb36600461265c565b611158565b3480156105fc57600080fd5b5061039661060b3660046126bd565b6111ad565b34801561061c57600080fd5b506023546103b89060ff1681565b34801561063657600080fd5b506103256106453660046125a8565b60096020526000908152604090205481565b34801561066357600080fd5b506103966106723660046128b0565b611314565b34801561068357600080fd5b506103256106923660046125a8565b6001600160a01b031660009081526007602052604090205490565b3480156106b957600080fd5b50610396611377565b3480156106ce57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161032f565b34801561070057600080fd5b506000546001600160a01b03166106dc565b34801561071e57600080fd5b5060408051808201909152600481526346696e7560e01b6020820152610369565b34801561074b57600080fd5b50610325601b5481565b34801561076157600080fd5b506103966107703660046125e2565b6113eb565b34801561078157600080fd5b50601d546106dc906001600160a01b031681565b3480156107a157600080fd5b506103b86107b0366004612691565b611443565b3480156107c157600080fd5b506103966107d0366004612834565b611450565b3480156107e157600080fd5b506103256114c1565b3480156107f657600080fd5b50610325601e5481565b34801561080c57600080fd5b506013546106dc906001600160a01b031681565b34801561082c57600080fd5b5061032561083b3660046125a8565b600a6020526000908152604090205481565b34801561085957600080fd5b506103966108683660046127f6565b6114dc565b34801561087957600080fd5b506103966108883660046127da565b611519565b34801561089957600080fd5b506103256108a83660046125e2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156108df57600080fd5b506014546106dc906001600160a01b031681565b3480156108ff57600080fd5b5061032561090e36600461277d565b6115aa565b34801561091f57600080fd5b5061039661092e3660046125a8565b6115f7565b34801561093f57600080fd5b5061039661094e36600461265c565b6116e1565b34801561095f57600080fd5b5061032560255481565b34801561097557600080fd5b506015546106dc906001600160a01b031681565b34801561099557600080fd5b5061032560205481565b3360009081526027602052604090205460ff16806109c757506000546001600160a01b031633145b6109ec5760405162461bcd60e51b81526004016109e390612962565b60405180910390fd5b8015610a015760195460ff16610a0157600080fd5b60005b82811015610b55578115610a9057601b8054906000610a2283612bb4565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea32858584818110610a5b57610a5b612be5565b9050602002016020810190610a7091906125a8565b436002604051610a8394939291906128e2565b60405180910390a1610af0565b60186000858584818110610aa657610aa6612be5565b9050602002016020810190610abb91906125a8565b6001600160a01b0316815260208101919091526040016000205415610af057601b8054906000610aea83612b9d565b91905055505b81610afc576000610afe565b435b60186000868685818110610b1457610b14612be5565b9050602002016020810190610b2991906125a8565b6001600160a01b0316815260208101919091526040016000205580610b4d81612bb4565b915050610a04565b50505050565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bb69086815260200190565b60405180910390a35060015b92915050565b3360009081526027602052604090205460ff1680610bf057506000546001600160a01b031633145b610c0c5760405162461bcd60e51b81526004016109e390612962565b602154610100900460ff1615610c2157600080fd5b6021805460ff19169055565b6000610c3b6009600a612abc565b600554610c489190612a57565b905090565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610ccd576001600160a01b0384166000908152600860209081526040808320338452909152902054610ca8908390612b86565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610cd8848484611736565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610d1691612a3f565b600354610c489190612b86565b3360009081526027602052604090205460ff1680610d4b57506000546001600160a01b031633145b610d675760405162461bcd60e51b81526004016109e390612962565b60215460ff16158015610d7a5750600a83105b610d8357600080fd5b60208390556021805460ff1916600117905543601e55610da38242612a3f565b601c55610db26009600a612abc565b610dbc9082612b67565b601a55505050565b3360009081526027602052604090205460ff1680610dec57506000546001600160a01b031633145b610e085760405162461bcd60e51b81526004016109e390612962565b6019805461ffff1916610100179055565b6000546001600160a01b03163314610e435760405162461bcd60e51b81526004016109e390612999565b601d546001600160a01b0383811691161415610eac5760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b60648201526084016109e3565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f015760405162461bcd60e51b81526004016109e390612999565b600083118015610f115750600082115b8015610f1d5750600081115b8015610f2b57506127108111155b610f3457600080fd5b8083600354610f439190612b67565b610f4d9190612a57565b6004556003548190610f60908490612b67565b610f6a9190612a57565b600555505050565b6000546001600160a01b03163314610f9c5760405162461bcd60e51b81526004016109e390612999565b60008211610fa957600080fd5b6023805461ffff191685151561ff0019161761010085151502179055600354610fd3908390612a57565b602455610fe26009600a612abc565b610fec9082612b67565b60255550505050565b3360009081526027602052604090205460ff168061101d57506000546001600160a01b031633145b6110395760405162461bcd60e51b81526004016109e390612962565b476001600160a01b0382166108fc60646110538685612b67565b61105d9190612a57565b6040518115909202916000818181858888f19350505050158015610b55573d6000803e3d6000fd5b6000610bc282600019610b5b565b3360009081526027602052604090205460ff16806110bb57506000546001600160a01b031633145b6110d75760405162461bcd60e51b81526004016109e390612962565b6021805461ffff1916610101179055565b6000546001600160a01b031633146111125760405162461bcd60e51b81526004016109e390612999565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b600061114b6009600a612abc565b600654610c489190612a57565b6000546001600160a01b031633146111825760405162461bcd60e51b81526004016109e390612999565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111d75760405162461bcd60e51b81526004016109e390612999565b82158015906111e557508083145b6111ee57600080fd5b3360005b8481101561130c576017600087878481811061121057611210612be5565b905060200201602081019061122591906125a8565b6001600160a01b0316815260208101919091526040016000205460ff161580156112945750600d600087878481811061126057611260612be5565b905060200201602081019061127591906125a8565b6001600160a01b0316815260208101919091526040016000205460ff16155b156112fa576112f8828787848181106112af576112af612be5565b90506020020160208101906112c491906125a8565b6112d06009600a612abc565b8787868181106112e2576112e2612be5565b905060200201356112f39190612b67565b611c38565b505b8061130481612bb4565b9150506111f2565b505050505050565b6000546001600160a01b0316331461133e5760405162461bcd60e51b81526004016109e390612999565b600f849055600e8390556113528484612a3f565b6010556011829055601281905561136a600282612a57565b60105410610b5557600080fd5b6000546001600160a01b031633146113a15760405162461bcd60e51b81526004016109e390612999565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114155760405162461bcd60e51b81526004016109e390612999565b601380546001600160a01b039384166001600160a01b03199182161790915560148054929093169116179055565b6000610cdb338484611736565b6000546001600160a01b0316331461147a5760405162461bcd60e51b81526004016109e390612999565b60008211801561148a5750600081115b801561149857506127108111155b6114a157600080fd5b80826003546114b09190612b67565b6114ba9190612a57565b6006555050565b60006114cf6009600a612abc565b600454610c489190612a57565b6000546001600160a01b031633146115065760405162461bcd60e51b81526004016109e390612999565b603c81111561151457600080fd5b602255565b3360009081526027602052604090205460ff168061154157506000546001600160a01b031633145b61155d5760405162461bcd60e51b81526004016109e390612962565b601954610100900460ff161561157257600080fd5b6019805460ff191683151517905562015180811061158f57600080fd5b80601c60008282546115a19190612a3f565b90915550505050565b600043602054601e546115bd9190612a3f565b106115d1576001601254610bc29190612b86565b81156115e757601154601054610bc29190612a3f565b601154601054610bc29190612b86565b6000546001600160a01b031633146116215760405162461bcd60e51b81526004016109e390612999565b6001600160a01b0381166116865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461170b5760405162461bcd60e51b81526004016109e390612999565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60006001600160a01b03841661178e5760405162461bcd60e51b815260206004820152601860248201527f42455032303a207472616e736665722066726f6d20307830000000000000000060448201526064016109e3565b6001600160a01b0383166117dd5760405162461bcd60e51b8152602060048201526016602482015275042455032303a207472616e7366657220746f203078360541b60448201526064016109e3565b600082116118255760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b60448201526064016109e3565b6001600160a01b0384166000908152600760205260409020548211156118845760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016109e3565b601e541580156118ac57506001600160a01b03831660009081526017602052604090205460ff165b15611933576001600160a01b0384166000908152600d602052604090205460ff166119195760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e000000000000000060448201526064016109e3565b61193343601e5542601f556023805460ff19166001179055565b60215460ff166119c0576001600160a01b0384166000908152600d602052604090205460ff168061197c57506001600160a01b0383166000908152600d602052604090205460ff165b6119c05760405162461bcd60e51b81526020600482015260156024820152742a3930b234b733903737ba1037b832b7103cb2ba1760591b60448201526064016109e3565b6119cb848484611cf2565b6001600160a01b03831660009081526017602052604090205460ff16158015611a0257506001546001600160a01b03848116911614155b15611a31576001600160a01b0383166000908152600c602052604090205460ff16611a3157611a318383612047565b60195460ff168015611a44575042601c54115b15611b0e576001600160a01b03841660009081526017602052604090205460ff168015611a7a5750326001600160a01b03841614155b8015611a9c57506001600160a01b038316600090815260186020526040902054155b15611b0e576001600160a01b0383166000908152601860205260408120439055601b805491611aca83612bb4565b91905055507f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea3284436000604051611b0594939291906128e2565b60405180910390a15b60265460ff1615611b2b57611b24848484611c38565b9050610cdb565b6001600160a01b038416600090815260076020526040902054611b4f908390612b86565b6001600160a01b038516600090815260076020908152604080832093909355600b90529081205460ff1615611b845782611b8e565b611b8e84846120cc565b9050611b998461214a565b15611bad578215611bad57611bad836121c1565b6001600160a01b038416600090815260076020526040902054611bd1908290612a3f565b6001600160a01b0380861660008181526007602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c259085815260200190565b60405180910390a3506001949350505050565b6001600160a01b038316600090815260076020526040812054611c5c908390612b86565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611c8c908390612a3f565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ce09086815260200190565b60405180910390a35060019392505050565b6001600160a01b0383166000908152600c602052604090205460ff1680611d4457506001600160a01b03831660009081526017602052604090205460ff16611d3c57600554611d40565b6004545b8111155b611d845760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016109e3565b6001600160a01b0383166000908152600c602052604090205460ff1680611dd057506022546001600160a01b0383166000908152600a60205260409020544391611dcd91612a3f565b11155b611e1c5760405162461bcd60e51b815260206004820152601d60248201527f5472616e736665722072617465206c696d69742065786365656465642e00000060448201526064016109e3565b6001600160a01b03831660009081526018602052604090205415611eff57611e466009600a612abc565b601a54611e539190612b67565b8111158015611e7857506001600160a01b038316600090815260096020526040902054155b8015611e85575042601c54115b611ee35760405162461bcd60e51b815260206004820152602960248201527f57616c6c65742070726f7465637465642c20706c6561736520636f6e746163746044820152681039bab83837b93a1760b91b60648201526084016109e3565b6001600160a01b03831660009081526009602052604090204390555b6001600160a01b03821660009081526017602052604090205460ff1615611f3e5750506001600160a01b03166000908152600960205260409020439055565b6001600160a01b0383166000908152600b602052604090205460ff166120425760195460ff168015611f71575042601c54115b8015611f8b5750326000908152600a602052604090205443145b8015611fad57506001600160a01b038216600090815260186020526040902054155b1561200e576001600160a01b03821660009081526018602052604090819020439081905590517f47e78c0c4ce6dbe67ff01d67de13c04f361afa37858e7056d665001d746855ea9161200591329186916001906128e2565b60405180910390a15b6001600160a01b0382166000818152600a60205260409020439055321461204257326000908152600a602052604090204390555b505050565b6006546001600160a01b0383166000908152600760205260409020548190612070908490612a3f565b11156120425760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b60648201526084016109e3565b6001600160a01b03821660009081526017602052604081205460125460ff9091169082906120f9836115aa565b6121039086612b67565b61210d9190612a57565b30600090815260076020526040812080549293508392909190612131908490612a3f565b9091555061214190508185612b86565b95945050505050565b3360009081526017602052604081205460ff1615801561216d575060265460ff16155b801561217b575060235460ff165b801561219f57506001600160a01b03821660009081526017602052604090205460ff165b8015610bc2575060255430600090815260076020526040902054101592915050565b6026805460ff1916600117905560245460009082106121e2576024546121e4565b815b306000908152600760205260409020549091508111156122105750306000908152600760205260409020545b60006010546002600f54846122259190612b67565b61222f9190612a57565b6122399190612a57565b90506122458183612b86565b6040805160028082526060820183529294506000929091602083019080368337019050509050308160008151811061227f5761227f612be5565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156122d357600080fd5b505afa1580156122e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230b91906125c5565b8160018151811061231e5761231e612be5565b6001600160a01b03928316602091820292909201015260155460405163791ac94760e01b81524792919091169063791ac947906123689087906000908790309042906004016129ce565b600060405180830381600087803b15801561238257600080fd5b505af1158015612396573d6000803e3d6000fd5b50505050600081476123a89190612b86565b905060006002600f546123bb9190612a57565b6010546123c89190612b86565b90506000816002600f54856123dd9190612b67565b6123e79190612a57565b6123f19190612a57565b905060006123ff8285612b86565b90508015612443576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612441573d6000803e3d6000fd5b505b86156124f15760155460135460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990849060c4016060604051808303818588803b1580156124b457600080fd5b505af11580156124c8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124ed9190612882565b5050505b60408051828152602081018490529081018890527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a150506026805460ff1916905550505050505050565b60008083601f84011261255957600080fd5b50813567ffffffffffffffff81111561257157600080fd5b6020830191508360208260051b850101111561258c57600080fd5b9250929050565b803580151581146125a357600080fd5b919050565b6000602082840312156125ba57600080fd5b8135610cdb81612bfb565b6000602082840312156125d757600080fd5b8151610cdb81612bfb565b600080604083850312156125f557600080fd5b823561260081612bfb565b9150602083013561261081612bfb565b809150509250929050565b60008060006060848603121561263057600080fd5b833561263b81612bfb565b9250602084013561264b81612bfb565b929592945050506040919091013590565b6000806040838503121561266f57600080fd5b823561267a81612bfb565b915061268860208401612593565b90509250929050565b600080604083850312156126a457600080fd5b82356126af81612bfb565b946020939093013593505050565b600080600080604085870312156126d357600080fd5b843567ffffffffffffffff808211156126eb57600080fd5b6126f788838901612547565b9096509450602087013591508082111561271057600080fd5b5061271d87828801612547565b95989497509550505050565b60008060006040848603121561273e57600080fd5b833567ffffffffffffffff81111561275557600080fd5b61276186828701612547565b9094509250612774905060208501612593565b90509250925092565b60006020828403121561278f57600080fd5b610cdb82612593565b600080600080608085870312156127ae57600080fd5b6127b785612593565b93506127c560208601612593565b93969395505050506040820135916060013590565b600080604083850312156127ed57600080fd5b6126af83612593565b60006020828403121561280857600080fd5b5035919050565b6000806040838503121561282257600080fd5b82359150602083013561261081612bfb565b6000806040838503121561284757600080fd5b50508035926020909101359150565b60008060006060848603121561286b57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561289757600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156128c657600080fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b039485168152929093166020830152604082015260ff909116606082015260800190565b600060208083528351808285015260005b8181101561293a5785810183015185820160400152820161291e565b8181111561294c576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252601b908201527f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a1e5784516001600160a01b0316835293830193918301916001016129f9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612a5257612a52612bcf565b500190565b600082612a7457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612ab4578160001904821115612a9a57612a9a612bcf565b80851615612aa757918102915b93841c9390800290612a7e565b509250929050565b6000610cdb60ff841683600082612ad557506001610bc2565b81612ae257506000610bc2565b8160018114612af85760028114612b0257612b1e565b6001915050610bc2565b60ff841115612b1357612b13612bcf565b50506001821b610bc2565b5060208310610133831016604e8410600b8410161715612b41575081810a610bc2565b612b4b8383612a79565b8060001904821115612b5f57612b5f612bcf565b029392505050565b6000816000190483118215151615612b8157612b81612bcf565b500290565b600082821015612b9857612b98612bcf565b500390565b600081612bac57612bac612bcf565b506000190190565b6000600019821415612bc857612bc8612bcf565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612c1057600080fd5b5056fea26469706673582212206b2d272356a9de8c118ef6c07a9d557b56cb490212bf78c59171032be35e48d464736f6c63430008070033
Verified Source Code Partial Match
Compiler: v0.8.7+commit.e28d00a7
EVM: london
Optimization: Yes (200 runs)
FootballInu.sol 534 lines
/**
*Submitted for verification at Etherscan.io on 2022-10
*/
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.7;
library Address {
/**
*
*/
function isContract(address account) internal view returns (bool) {
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
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 functionCall(target, data, "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);
}
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");
}
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");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
abstract contract Context {
function _msgSender() internal view returns (address payable) {
return payable(msg.sender);
}
function _msgData() internal view returns (bytes memory) {
this;
return msg.data;
}
}
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);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
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 addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
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() public 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;
}
}
contract FootballInu is IERC20, Ownable {
using Address for address;
address DEAD = 0x000000000000000000000000000000000000dEaD;
address ZERO = 0x0000000000000000000000000000000000000000;
string constant _name = "Football Inu";
string constant _symbol = "Finu";
uint8 constant _decimals = 9;
uint256 _totalSupply = 1_000_000_000 * (10 ** _decimals);
uint256 _maxBuyTxAmount = (_totalSupply * 1) / 500;
uint256 _maxSellTxAmount = (_totalSupply * 1) / 500;
uint256 _maxWalletSize = (_totalSupply * 2) / 100;
mapping (address => uint256) _balances;
mapping (address => mapping (address => uint256)) _allowances;
mapping (address => uint256) public lastSell;
mapping (address => uint256) public lastBuy;
mapping (address => bool) isFeeExempt;
mapping (address => bool) isTxLimitExempt;
mapping (address => bool) liquidityCreator;
uint256 marketingFee = 400;
uint256 liquidityFee = 100;
uint256 totalFee = marketingFee + liquidityFee;
uint256 sellBias = 0;
uint256 feeDenominator = 10000;
address payable public liquidityFeeReceiver = payable(0x898d1f2f6604a2152Aa7bb03828930B19E30f593);
address payable public marketingFeeReceiver = payable(0x898d1f2f6604a2152Aa7bb03828930B19E30f593);
IDEXRouter public router;
address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
mapping (address => bool) liquidityPools;
mapping (address => uint256) public protected;
bool protectionEnabled = true;
bool protectionDisabled = false;
uint256 protectionLimit;
uint256 public protectionCount;
uint256 protectionTimer;
address public pair;
uint256 public launchedAt;
uint256 public launchedTime;
uint256 public deadBlocks;
bool startBullRun = false;
bool pauseDisabled = false;
uint256 public rateLimit = 2;
bool public swapEnabled = false;
bool processEnabled = true;
uint256 public swapThreshold = _totalSupply / 1000;
uint256 public swapMinimum = _totalSupply / 10000;
bool inSwap;
modifier swapping() { inSwap = true; _; inSwap = false; }
mapping (address => bool) teamMember;
modifier onlyTeam() {
require(teamMember[_msgSender()] || msg.sender == owner(), "Caller is not a team member");
_;
}
event ProtectedWallet(address, address, uint256, uint8);
constructor () {
router = IDEXRouter(routerAddress);
pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
liquidityPools[pair] = true;
_allowances[owner()][routerAddress] = type(uint256).max;
_allowances[address(this)][routerAddress] = type(uint256).max;
isFeeExempt[owner()] = true;
liquidityCreator[owner()] = true;
isTxLimitExempt[address(this)] = true;
isTxLimitExempt[owner()] = true;
isTxLimitExempt[routerAddress] = true;
isTxLimitExempt[DEAD] = true;
_balances[owner()] = _totalSupply;
emit Transfer(address(0), owner(), _totalSupply);
}
receive() external payable { }
function totalSupply() external view override returns (uint256) { return _totalSupply; }
function decimals() external pure returns (uint8) { return _decimals; }
function symbol() external pure returns (string memory) { return _symbol; }
function name() external pure returns (string memory) { return _name; }
function getOwner() external view returns (address) { return owner(); }
function maxBuyTxTokens() external view returns (uint256) { return _maxBuyTxAmount / (10 ** _decimals); }
function maxSellTxTokens() external view returns (uint256) { return _maxSellTxAmount / (10 ** _decimals); }
function maxWalletTokens() external view returns (uint256) { return _maxWalletSize / (10 ** _decimals); }
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 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, type(uint256).max);
}
function setTeamMember(address _team, bool _enabled) external onlyOwner {
teamMember[_team] = _enabled;
}
function airdrop(address[] calldata addresses, uint256[] calldata amounts) external onlyOwner {
require(addresses.length > 0 && amounts.length == addresses.length);
address from = msg.sender;
for (uint i = 0; i < addresses.length; i++) {
if(!liquidityPools[addresses[i]] && !liquidityCreator[addresses[i]]) {
_basicTransfer(from, addresses[i], amounts[i] * (10 ** _decimals));
}
}
}
function clearStuckBalance(uint256 amountPercentage, address adr) external onlyTeam {
uint256 amountETH = address(this).balance;
payable(adr).transfer((amountETH * amountPercentage) / 100);
}
function openTrading(uint256 _deadBlocks, uint256 _protection, uint256 _limit) external onlyTeam {
require(!startBullRun && _deadBlocks < 10);
deadBlocks = _deadBlocks;
startBullRun = true;
launchedAt = block.number;
protectionTimer = block.timestamp + _protection;
protectionLimit = _limit * (10 ** _decimals);
}
function pauseTrading() external onlyTeam {
require(!pauseDisabled);
startBullRun = false;
}
function disablePause() external onlyTeam {
pauseDisabled = true;
startBullRun = true;
}
function setProtection(bool _protect, uint256 _addTime) external onlyTeam {
require(!protectionDisabled);
protectionEnabled = _protect;
require(_addTime < 1 days);
protectionTimer += _addTime;
}
function disableProtection() external onlyTeam {
protectionDisabled = true;
protectionEnabled = false;
}
function protectWallet(address[] calldata _wallets, bool _protect) external onlyTeam {
if (_protect) {
require(protectionEnabled);
}
for (uint i = 0; i < _wallets.length; i++) {
if (_protect) {
protectionCount++;
emit ProtectedWallet(tx.origin, _wallets[i], block.number, 2);
}
else {
if (protected[_wallets[i]] != 0)
protectionCount--;
}
protected[_wallets[i]] = _protect ? block.number : 0;
}
}
function transfer(address recipient, uint256 amount) external override returns (bool) {
return _transferFrom(msg.sender, recipient, amount);
}
function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
if(_allowances[sender][msg.sender] != type(uint256).max){
_allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
}
return _transferFrom(sender, recipient, amount);
}
function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
require(sender != address(0), "BEP20: transfer from 0x0");
require(recipient != address(0), "BEP20: transfer to 0x0");
require(amount > 0, "Amount must be > zero");
require(_balances[sender] >= amount, "Insufficient balance");
if(!launched() && liquidityPools[recipient]){ require(liquidityCreator[sender], "Liquidity not added yet."); launch(); }
if(!startBullRun){ require(liquidityCreator[sender] || liquidityCreator[recipient], "Trading not open yet."); }
checkTxLimit(sender, recipient, amount);
if (!liquidityPools[recipient] && recipient != DEAD) {
if (!isTxLimitExempt[recipient]) {
checkWalletLimit(recipient, amount);
}
}
if(protectionEnabled && protectionTimer > block.timestamp) {
if(liquidityPools[sender] && tx.origin != recipient && protected[recipient] == 0) {
protected[recipient] = block.number;
protectionCount++;
emit ProtectedWallet(tx.origin, recipient, block.number, 0);
}
}
if(inSwap){ return _basicTransfer(sender, recipient, amount); }
_balances[sender] = _balances[sender] - amount;
uint256 amountReceived = shouldTakeFee(sender) ? takeFee(recipient, amount) : amount;
if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }
_balances[recipient] = _balances[recipient] + amountReceived;
emit Transfer(sender, recipient, amountReceived);
return true;
}
function launched() internal view returns (bool) {
return launchedAt != 0;
}
function launch() internal {
launchedAt = block.number;
launchedTime = block.timestamp;
swapEnabled = true;
}
function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
_balances[sender] = _balances[sender] - amount;
_balances[recipient] = _balances[recipient] + amount;
emit Transfer(sender, recipient, amount);
return true;
}
function checkWalletLimit(address recipient, uint256 amount) internal view {
uint256 walletLimit = _maxWalletSize;
require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
}
function checkTxLimit(address sender, address recipient, uint256 amount) internal {
require(isTxLimitExempt[sender] || amount <= (liquidityPools[sender] ? _maxBuyTxAmount : _maxSellTxAmount), "TX Limit Exceeded");
require(isTxLimitExempt[sender] || lastBuy[recipient] + rateLimit <= block.number, "Transfer rate limit exceeded.");
if (protected[sender] != 0){
require(amount <= protectionLimit * (10 ** _decimals) && lastSell[sender] == 0 && protectionTimer > block.timestamp, "Wallet protected, please contact support.");
lastSell[sender] = block.number;
}
if (liquidityPools[recipient]) {
lastSell[sender] = block.number;
} else if (shouldTakeFee(sender)) {
if (protectionEnabled && protectionTimer > block.timestamp && lastBuy[tx.origin] == block.number && protected[recipient] == 0) {
protected[recipient] = block.number;
emit ProtectedWallet(tx.origin, recipient, block.number, 1);
}
lastBuy[recipient] = block.number;
if (tx.origin != recipient)
lastBuy[tx.origin] = block.number;
}
}
function shouldTakeFee(address sender) internal view returns (bool) {
return !isFeeExempt[sender];
}
function getTotalFee(bool selling) public view returns (uint256) {
if(launchedAt + deadBlocks >= block.number){ return feeDenominator - 1; }
if (selling) return totalFee + sellBias;
return totalFee - sellBias;
}
function takeFee(address recipient, uint256 amount) internal returns (uint256) {
bool selling = liquidityPools[recipient];
uint256 feeAmount = (amount * getTotalFee(selling)) / feeDenominator;
_balances[address(this)] += feeAmount;
return amount - feeAmount;
}
function shouldSwapBack(address recipient) internal view returns (bool) {
return !liquidityPools[msg.sender]
&& !inSwap
&& swapEnabled
&& liquidityPools[recipient]
&& _balances[address(this)] >= swapMinimum;
}
function swapBack(uint256 amount) internal swapping {
uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
uint256 amountToLiquify = (amountToSwap * liquidityFee / 2) / totalFee;
amountToSwap -= amountToLiquify;
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = router.WETH();
uint256 balanceBefore = address(this).balance;
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
amountToSwap,
0,
path,
address(this),
block.timestamp
);
uint256 amountBNB = address(this).balance - balanceBefore;
uint256 totalBNBFee = totalFee - (liquidityFee / 2);
uint256 amountBNBLiquidity = (amountBNB * liquidityFee / 2) / totalBNBFee;
uint256 amountBNBMarketing = amountBNB - amountBNBLiquidity;
if (amountBNBMarketing > 0)
marketingFeeReceiver.transfer(amountBNBMarketing);
if(amountToLiquify > 0){
router.addLiquidityETH{value: amountBNBLiquidity}(
address(this),
amountToLiquify,
0,
0,
liquidityFeeReceiver,
block.timestamp
);
}
emit FundsDistributed(amountBNBMarketing, amountBNBLiquidity, amountToLiquify);
}
function addLiquidityPool(address lp, bool isPool) external onlyOwner {
require(lp != pair, "Can't alter current liquidity pair");
liquidityPools[lp] = isPool;
}
function setRateLimit(uint256 rate) external onlyOwner {
require(rate <= 60 seconds);
rateLimit = rate;
}
function setTxLimit(uint256 buyNumerator, uint256 sellNumerator, uint256 divisor) external onlyOwner {
require(buyNumerator > 0 && sellNumerator > 0 && divisor > 0 && divisor <= 10000);
_maxBuyTxAmount = (_totalSupply * buyNumerator) / divisor;
_maxSellTxAmount = (_totalSupply * sellNumerator) / divisor;
}
function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
require(numerator > 0 && divisor > 0 && divisor <= 10000);
_maxWalletSize = (_totalSupply * numerator) / divisor;
}
function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
isFeeExempt[holder] = exempt;
}
function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
isTxLimitExempt[holder] = exempt;
}
function setFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
liquidityFee = _liquidityFee;
marketingFee = _marketingFee;
totalFee = _marketingFee + _liquidityFee;
sellBias = _sellBias;
feeDenominator = _feeDenominator;
require(totalFee < feeDenominator / 2);
}
function setFeeReceivers(address _liquidityFeeReceiver, address _marketingFeeReceiver) external onlyOwner {
liquidityFeeReceiver = payable(_liquidityFeeReceiver);
marketingFeeReceiver = payable(_marketingFeeReceiver);
}
function setSwapBackSettings(bool _enabled, bool _processEnabled, uint256 _denominator, uint256 _swapMinimum) external onlyOwner {
require(_denominator > 0);
swapEnabled = _enabled;
processEnabled = _processEnabled;
swapThreshold = _totalSupply / _denominator;
swapMinimum = _swapMinimum * (10 ** _decimals);
}
function getCirculatingSupply() public view returns (uint256) {
return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
}
event FundsDistributed(uint256 marketingBNB, uint256 liquidityBNB, uint256 liquidityTokens);
}
Read Contract
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
deadBlocks 0xfabb0b4f → uint256
decimals 0x313ce567 → uint8
getCirculatingSupply 0x2b112e49 → uint256
getOwner 0x893d20e8 → address
getTotalFee 0xf1f3bca3 → uint256
lastBuy 0xc1adf7bc → uint256
lastSell 0x6f4ce428 → uint256
launchedAt 0xbf56b371 → uint256
launchedTime 0x5804f1e4 → uint256
liquidityFeeReceiver 0xbfa21d6a → address
marketingFeeReceiver 0xe96fada2 → address
maxBuyTxTokens 0xbafe446b → uint256
maxSellTxTokens 0x234e9494 → uint256
maxWalletTokens 0x63a803e1 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
pair 0xa8aa1b31 → address
protected 0x46d7edaa → uint256
protectionCount 0x9b02c402 → uint256
rateLimit 0x61e08e72 → uint256
router 0xf887ea40 → address
swapEnabled 0x6ddd1713 → bool
swapMinimum 0xf8821a62 → uint256
swapThreshold 0x0445b667 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
Write Contract 24 functions
These functions modify contract state and require a wallet transaction to execute.
addLiquidityPool 0x492a937b
address lp
bool isPool
airdrop 0x67243482
address[] addresses
uint256[] amounts
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
approveMax 0x571ac8b0
address spender
returns: bool
clearStuckBalance 0x56a227f2
uint256 amountPercentage
address adr
disablePause 0x584f969a
No parameters
disableProtection 0x421dd7c7
No parameters
openTrading 0x34848b9a
uint256 _deadBlocks
uint256 _protection
uint256 _limit
pauseTrading 0x1031e36e
No parameters
protectWallet 0x095db78f
address[] _wallets
bool _protect
renounceOwnership 0x715018a6
No parameters
setFeeReceivers 0xa4b45c00
address _liquidityFeeReceiver
address _marketingFeeReceiver
setFees 0x6fcba377
uint256 _liquidityFee
uint256 _marketingFee
uint256 _sellBias
uint256 _feeDenominator
setIsFeeExempt 0x658d4b7f
address holder
bool exempt
setIsTxLimitExempt 0xf84ba65d
address holder
bool exempt
setMaxWallet 0xabe57e70
uint256 numerator
uint256 divisor
setProtection 0xd6860142
bool _protect
uint256 _addTime
setRateLimit 0xc287184e
uint256 rate
setSwapBackSettings 0x54a1dfc9
bool _enabled
bool _processEnabled
uint256 _denominator
uint256 _swapMinimum
setTeamMember 0x60bba03d
address _team
bool _enabled
setTxLimit 0x50713935
uint256 buyNumerator
uint256 sellNumerator
uint256 divisor
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
Token Balances (1)
View Transfers →Recent Transactions
No transactions found for this address