Address Contract Partially Verified
Address
0xBA8Fa89EE8C713a6758f9c7BB3cC23cC033AaB1C
Balance
0.000000000 ETH
Nonce
1
Code Size
10285 bytes
Creator
0x6c12e40E...52ca at tx 0xb8554622...86be35
Indexed Transactions
0
Contract Bytecode
10285 bytes
0x60806040526004361061031e5760003560e01c80639a7a23d6116101ab578063c8c8ebe4116100f7578063e884f26011610095578063f2fde38b1161006f578063f2fde38b1461094d578063f8b45b051461096d578063fe50984614610983578063fe67dd10146109a357600080fd5b8063e884f26014610902578063ef8700e514610917578063f023f5731461092d57600080fd5b8063d257b34f116100d1578063d257b34f14610870578063d85ba06314610890578063dd62ed3e146108a6578063e2f45605146108ec57600080fd5b8063c8c8ebe41461082f578063cfbb613114610845578063d1d138351461085a57600080fd5b8063b62496f511610164578063c02466681161013e578063c0246668146107b5578063c04a5414146107d5578063c18bc195146107f5578063c876d0b91461081557600080fd5b8063b62496f514610751578063bbc0c74214610781578063bc5f30f2146107a057600080fd5b80639a7a23d6146106b0578063a42e6d55146106d0578063a457c2d7146106e5578063a9059cbb14610705578063aecf1a5314610725578063b20414111461073b57600080fd5b806349bd5a5e1161026a5780636ddd17131161022357806375562e66116101fd57806375562e66146106475780637571336a1461065d5780638da5cb5b1461067d57806395d89b411461069b57600080fd5b80636ddd1713146105dc57806370a08231146105fc578063715018a61461063257600080fd5b806349bd5a5e146104ff5780634a62bb65146105335780634fbee1931461054d5780634fe926181461058657806366ca9b83146105a65780636a486a8e146105c657600080fd5b806318160ddd116102d757806323b872dd116102b157806323b872dd1461048d57806327c8f835146104ad578063313ce567146104c357806339509351146104df57600080fd5b806318160ddd1461043857806318a94cf114610457578063203e727e1461046d57600080fd5b806302dbd8f81461032a5780630614117a1461034c57806306fdde0314610361578063095ea7b31461038c57806310d5de53146103bc5780631694505e146103ec57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034a61034536600461243a565b6109c3565b005b34801561035857600080fd5b5061034a610a63565b34801561036d57600080fd5b50610376610ac9565b604051610383919061245c565b60405180910390f35b34801561039857600080fd5b506103ac6103a73660046124c6565b610b5b565b6040519015158152602001610383565b3480156103c857600080fd5b506103ac6103d73660046124f2565b60176020526000908152604090205460ff1681565b3480156103f857600080fd5b506104207f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610383565b34801561044457600080fd5b506002545b604051908152602001610383565b34801561046357600080fd5b5061044960125481565b34801561047957600080fd5b5061034a61048836600461250f565b610b71565b34801561049957600080fd5b506103ac6104a8366004612528565b610c4e565b3480156104b957600080fd5b5061042061dead81565b3480156104cf57600080fd5b5060405160128152602001610383565b3480156104eb57600080fd5b506103ac6104fa3660046124c6565b610cf8565b34801561050b57600080fd5b506104207f000000000000000000000000841f94c9a5e7a4d20dea614074e854dafa01dbcd81565b34801561053f57600080fd5b50600b546103ac9060ff1681565b34801561055957600080fd5b506103ac6105683660046124f2565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561059257600080fd5b50600754610420906001600160a01b031681565b3480156105b257600080fd5b5061034a6105c136600461243a565b610d34565b3480156105d257600080fd5b5061044960115481565b3480156105e857600080fd5b50600b546103ac9062010000900460ff1681565b34801561060857600080fd5b506104496106173660046124f2565b6001600160a01b031660009081526020819052604090205490565b34801561063e57600080fd5b5061034a610dc7565b34801561065357600080fd5b5061044960105481565b34801561066957600080fd5b5061034a610678366004612569565b610dfd565b34801561068957600080fd5b506005546001600160a01b0316610420565b3480156106a757600080fd5b50610376610e52565b3480156106bc57600080fd5b5061034a6106cb366004612569565b610e61565b3480156106dc57600080fd5b506103ac610f3d565b3480156106f157600080fd5b506103ac6107003660046124c6565b610fad565b34801561071157600080fd5b506103ac6107203660046124c6565b611046565b34801561073157600080fd5b5061044960135481565b34801561074757600080fd5b50610449600f5481565b34801561075d57600080fd5b506103ac61076c3660046124f2565b60186020526000908152604090205460ff1681565b34801561078d57600080fd5b50600b546103ac90610100900460ff1681565b3480156107ac57600080fd5b5061034a611053565b3480156107c157600080fd5b5061034a6107d0366004612569565b611090565b3480156107e157600080fd5b50600654610420906001600160a01b031681565b34801561080157600080fd5b5061034a61081036600461250f565b611119565b34801561082157600080fd5b50600d546103ac9060ff1681565b34801561083b57600080fd5b5061044960085481565b34801561085157600080fd5b5061034a6111ea565b34801561086657600080fd5b5061044960155481565b34801561087c57600080fd5b506103ac61088b36600461250f565b61121e565b34801561089c57600080fd5b50610449600e5481565b3480156108b257600080fd5b506104496108c13660046125a7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108f857600080fd5b5061044960095481565b34801561090e57600080fd5b506103ac611370565b34801561092357600080fd5b5061044960145481565b34801561093957600080fd5b5061034a6109483660046124f2565b6113e0565b34801561095957600080fd5b5061034a6109683660046124f2565b61142c565b34801561097957600080fd5b50610449600a5481565b34801561098f57600080fd5b5061034a61099e36600461243a565b6114c4565b3480156109af57600080fd5b5061034a6109be3660046124f2565b611568565b6005546001600160a01b031633146109f65760405162461bcd60e51b81526004016109ed906125d5565b60405180910390fd5b60128290556013819055610a0a8183612620565b601181905560191015610a5f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016109ed565b5050565b6005546001600160a01b03163314610a8d5760405162461bcd60e51b81526004016109ed906125d5565b6006546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610ac6573d6000803e3d6000fd5b50565b606060038054610ad890612638565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0490612638565b8015610b515780601f10610b2657610100808354040283529160200191610b51565b820191906000526020600020905b815481529060010190602001808311610b3457829003601f168201915b5050505050905090565b6000610b683384846115b4565b50600192915050565b6005546001600160a01b03163314610b9b5760405162461bcd60e51b81526004016109ed906125d5565b670de0b6b3a76400006103e8610bb060025490565b610bbb906001612673565b610bc59190612692565b610bcf9190612692565b811015610c365760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084016109ed565b610c4881670de0b6b3a7640000612673565b60085550565b6000610c5b8484846116d8565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ce05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109ed565b610ced85338584036115b4565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b68918590610d2f908690612620565b6115b4565b6005546001600160a01b03163314610d5e5760405162461bcd60e51b81526004016109ed906125d5565b600f8290556010819055610d728183612620565b600e81905560191015610a5f5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016109ed565b6005546001600160a01b03163314610df15760405162461bcd60e51b81526004016109ed906125d5565b610dfb6000611ee1565b565b6005546001600160a01b03163314610e275760405162461bcd60e51b81526004016109ed906125d5565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b606060048054610ad890612638565b6005546001600160a01b03163314610e8b5760405162461bcd60e51b81526004016109ed906125d5565b7f000000000000000000000000841f94c9a5e7a4d20dea614074e854dafa01dbcd6001600160a01b0316826001600160a01b03161415610f335760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109ed565b610a5f8282611f33565b6006546000906001600160a01b0316331480610f6357506005546001600160a01b031633145b610f9d5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016109ed565b50600b805460ff19169055600190565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561102f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109ed565b61103c33858584036115b4565b5060019392505050565b6000610b683384846116d8565b6005546001600160a01b0316331461107d5760405162461bcd60e51b81526004016109ed906125d5565b600b805462ffff00191662010100179055565b6005546001600160a01b031633146110ba5760405162461bcd60e51b81526004016109ed906125d5565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146111435760405162461bcd60e51b81526004016109ed906125d5565b670de0b6b3a76400006103e861115860025490565b611163906005612673565b61116d9190612692565b6111779190612692565b8110156111d25760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b60648201526084016109ed565b6111e481670de0b6b3a7640000612673565b600a5550565b6006546001600160a01b031633148061120d57506007546001600160a01b031633145b61121657600080fd5b610dfb611f87565b6005546000906001600160a01b0316331461124b5760405162461bcd60e51b81526004016109ed906125d5565b620186a061125860025490565b611263906001612673565b61126d9190612692565b8210156112da5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109ed565b6103e86112e660025490565b6112f1906005612673565b6112fb9190612692565b8211156113675760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109ed565b50600955600190565b6006546000906001600160a01b031633148061139657506005546001600160a01b031633145b6113d05760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016109ed565b50600d805460ff19169055600190565b6005546001600160a01b0316331461140a5760405162461bcd60e51b81526004016109ed906125d5565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114565760405162461bcd60e51b81526004016109ed906125d5565b6001600160a01b0381166114bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ed565b610ac681611ee1565b6005546001600160a01b031633146114ee5760405162461bcd60e51b81526004016109ed906125d5565b6114f982600a612673565b915061150681600a612673565b9050611513600283612692565b600f55611521600283612692565b6010819055600f546115339190612620565b600e55611541600282612692565b60125561154f600282612692565b60138190556012546115619190612620565b6011555050565b6005546001600160a01b031633146115925760405162461bcd60e51b81526004016109ed906125d5565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109ed565b6001600160a01b0382166116775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109ed565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116fe5760405162461bcd60e51b81526004016109ed906126b4565b6001600160a01b0382166117245760405162461bcd60e51b81526004016109ed906126f9565b8061173a57611735838360006120fa565b505050565b600b5460ff1615611bf7576005546001600160a01b0384811691161480159061177157506005546001600160a01b03838116911614155b801561178557506001600160a01b03821615155b801561179c57506001600160a01b03821661dead14155b80156117b25750600554600160a01b900460ff16155b15611bf757600b54610100900460ff1661184a576001600160a01b03831660009081526016602052604090205460ff168061180557506001600160a01b03821660009081526016602052604090205460ff165b61184a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109ed565b600d5460ff1615611991576005546001600160a01b038381169116148015906118a557507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156118e357507f000000000000000000000000841f94c9a5e7a4d20dea614074e854dafa01dbcd6001600160a01b0316826001600160a01b031614155b1561199157326000908152600c6020526040902054431161197e5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016109ed565b326000908152600c602052604090204390555b6001600160a01b03831660009081526018602052604090205460ff1680156119d257506001600160a01b03821660009081526017602052604090205460ff16155b15611ab657600854811115611a475760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016109ed565b600a546001600160a01b038316600090815260208190526040902054611a6d9083612620565b1115611ab15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109ed565b611bf7565b6001600160a01b03821660009081526018602052604090205460ff168015611af757506001600160a01b03831660009081526017602052604090205460ff16155b15611b6d57600854811115611ab15760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016109ed565b6001600160a01b03821660009081526017602052604090205460ff16611bf757600a546001600160a01b038316600090815260208190526040902054611bb39083612620565b1115611bf75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109ed565b3060009081526020819052604090205460095481108015908190611c235750600b5462010000900460ff165b8015611c365750600b54610100900460ff165b8015611c4c5750600554600160a01b900460ff16155b8015611c7157506001600160a01b03851660009081526018602052604090205460ff16155b8015611c9657506001600160a01b03851660009081526016602052604090205460ff16155b8015611cbb57506001600160a01b03841660009081526016602052604090205460ff16155b15611ce9576005805460ff60a01b1916600160a01b179055611cdb611f87565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526016602052604090205460ff600160a01b909204821615911680611d3757506001600160a01b03851660009081526016602052604090205460ff165b15611d40575060005b60008115611ecd576001600160a01b03861660009081526018602052604090205460ff168015611d7257506000601154115b15611e0157611d986103e8611d926011548861224f90919063ffffffff16565b90612262565b905060115460125482611dab9190612673565b611db59190612692565b60146000828254611dc69190612620565b9091555050601154601354611ddb9083612673565b611de59190612692565b60156000828254611df69190612620565b90915550611eaf9050565b6001600160a01b03871660009081526018602052604090205460ff168015611e2b57506000600e54115b15611eaf57611e4b6103e8611d92600e548861224f90919063ffffffff16565b9050600e54600f5482611e5e9190612673565b611e689190612692565b60146000828254611e799190612620565b9091555050600e54601054611e8e9083612673565b611e989190612692565b60156000828254611ea99190612620565b90915550505b8015611ec057611ec08730836120fa565b611eca818661273c565b94505b611ed88787876120fa565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b3060009081526020819052604081205490506000601554601454611fab9190612620565b90506000821580611fba575081155b15611fc457505050565b600954611fd2906014612673565b831115611fea57600954611fe7906014612673565b92505b8247611ff58261226e565b6000612001478361242e565b9050600061201e86611d926014548561224f90919063ffffffff16565b9050600061203b87611d926015548661224f90919063ffffffff16565b6000601481905560158190556006546040519293506001600160a01b031691849181818185875af1925050503d8060008114612093576040519150601f19603f3d011682016040523d82523d6000602084013e612098565b606091505b50506007546040519197506001600160a01b0316908290600081818185875af1925050503d80600081146120e8576040519150601f19603f3d011682016040523d82523d6000602084013e6120ed565b606091505b5050505050505050505050565b6001600160a01b0383166121205760405162461bcd60e51b81526004016109ed906126b4565b6001600160a01b0382166121465760405162461bcd60e51b81526004016109ed906126f9565b6001600160a01b038316600090815260208190526040902054818110156121be5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109ed565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906121f5908490612620565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161224191815260200190565b60405180910390a350505050565b600061225b8284612673565b9392505050565b600061225b8284612692565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122a3576122a3612753565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612321573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123459190612769565b8160018151811061235857612358612753565b60200260200101906001600160a01b031690816001600160a01b0316815250506123a3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846115b4565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123f8908590600090869030904290600401612786565b600060405180830381600087803b15801561241257600080fd5b505af1158015612426573d6000803e3d6000fd5b505050505050565b600061225b828461273c565b6000806040838503121561244d57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156124895785810183015185820160400152820161246d565b8181111561249b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ac657600080fd5b600080604083850312156124d957600080fd5b82356124e4816124b1565b946020939093013593505050565b60006020828403121561250457600080fd5b813561225b816124b1565b60006020828403121561252157600080fd5b5035919050565b60008060006060848603121561253d57600080fd5b8335612548816124b1565b92506020840135612558816124b1565b929592945050506040919091013590565b6000806040838503121561257c57600080fd5b8235612587816124b1565b91506020830135801515811461259c57600080fd5b809150509250929050565b600080604083850312156125ba57600080fd5b82356125c5816124b1565b9150602083013561259c816124b1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156126335761263361260a565b500190565b600181811c9082168061264c57607f821691505b6020821081141561266d57634e487b7160e01b600052602260045260246000fd5b50919050565b600081600019048311821515161561268d5761268d61260a565b500290565b6000826126af57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561274e5761274e61260a565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561277b57600080fd5b815161225b816124b1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127d65784516001600160a01b0316835293830193918301916001016127b1565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208c6316b85dbd1e5fdfb60cba7abf7e2185a24c8b634c922e2876ff0c721f21cf64736f6c634300080a0033
Verified Source Code Partial Match
Compiler: v0.8.10+commit.fc410830
EVM: london
Optimization: Yes (200 runs)
OnChainBattles.sol 652 lines
/*
https://onchainbattles.com/
https://t.me/OnChainBattles
https://x.com/onchainbattles
*/
// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;
pragma solidity >= 0.4.22 <0.9.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
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 IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}
library SafeMath {
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 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 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 IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint256);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint256 value);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to) external returns (uint256 amount0, uint256 amount1);
function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Router02 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external;
}
contract OnChainBattles is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
address public constant deadAddress = address(0xdead);
bool private swapping;
address public developmentWallet;
address public prizeWallet;
uint256 public maxTransactionAmount;
uint256 public swapTokensAtAmount;
uint256 public maxWallet;
bool public limitsInEffect = true;
bool public tradingActive = false;
bool public swapEnabled = false;
// Anti-bot and anti-whale mappings and variables
mapping(address => uint256) private _holderLastTransferTimestamp;
bool public transferDelayEnabled = true;
uint256 public buyTotalFees;
uint256 public buyDevelopmentFee;
uint256 public buyPrizeFee;
uint256 public sellTotalFees;
uint256 public sellDevelopmentFee;
uint256 public sellPrizeFee;
uint256 public tokensForDevelopment;
uint256 public tokensForPrize;
// exclude from fees and max transaction amount
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) public _isExcludedMaxTransactionAmount;
// store addresses that a automatic market maker pairs
mapping(address => bool) public automatedMarketMakerPairs;
event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
modifier onlyDeveloper() {
require(developmentWallet == msg.sender || msg.sender == owner(), "Not allowed");
_;
}
constructor() ERC20("OnChainBattles", "OCB") {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
excludeFromMaxTransaction(address(_uniswapV2Router), true);
uniswapV2Router = _uniswapV2Router;
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
excludeFromMaxTransaction(address(uniswapV2Pair), true);
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
uint256 _buyDevelopmentFee = 10;
uint256 _buyPrizeFee = 10;
uint256 _sellDevelopmentFee = 10;
uint256 _sellPrizeFee = 10;
uint256 totalSupply = 50000000 * 1e18; // 50 million tokens
maxTransactionAmount = (totalSupply * 15) / 1000; // 1.5% max transaction
maxWallet = (totalSupply * 15) / 1000; // 1.5% max wallet
swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap threshold
buyDevelopmentFee = _buyDevelopmentFee;
buyPrizeFee = _buyPrizeFee;
buyTotalFees = buyDevelopmentFee + buyPrizeFee;
sellDevelopmentFee = _sellDevelopmentFee;
sellPrizeFee = _sellPrizeFee;
sellTotalFees = sellDevelopmentFee + sellPrizeFee;
developmentWallet = address(0x16da41dEFbcdB8407922D1197e0414ad9fF2E6D0);
prizeWallet = address(0x2624c85a8Cf6334482a3C417AE9fCFb847798d88);
excludeFromFees(owner(), true);
excludeFromFees(developmentWallet, true);
excludeFromFees(prizeWallet, true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
excludeFromMaxTransaction(owner(), true);
excludeFromMaxTransaction(developmentWallet, true);
excludeFromMaxTransaction(prizeWallet, true);
excludeFromMaxTransaction(address(0xdead), true);
_mint(msg.sender, totalSupply);
}
receive() external payable {}
// Once trading is active, no one can disable it
function letTheBattleBegin() external onlyOwner {
tradingActive = true;
swapEnabled = true;
}
function removeBattleLimits() external onlyDeveloper returns (bool) {
limitsInEffect = false;
return true;
}
function disableTransferDelay() external onlyDeveloper returns (bool) {
transferDelayEnabled = false;
return true;
}
function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
swapTokensAtAmount = newAmount;
return true;
}
function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
require(newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%");
maxTransactionAmount = newNum * (10**18);
}
function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
require(newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%");
maxWallet = newNum * (10**18);
}
function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
function updateBuyFees(uint256 _developmentFee, uint256 _prizeFee) external onlyOwner {
buyDevelopmentFee = _developmentFee;
buyPrizeFee = _prizeFee;
buyTotalFees = buyDevelopmentFee + buyPrizeFee;
require(buyTotalFees <= 25, "Must keep fees at 25% or less");
}
function updateSellFees(uint256 _developmentFee, uint256 _prizeFee) external onlyOwner {
sellDevelopmentFee = _developmentFee;
sellPrizeFee = _prizeFee;
sellTotalFees = sellDevelopmentFee + sellPrizeFee;
require(sellTotalFees <= 25, "Must keep fees at 25% or less");
}
function setEasyTax(uint256 buyTax,uint256 sellTax) external onlyOwner {
buyTax = buyTax*10;
sellTax = sellTax*10;
buyDevelopmentFee = buyTax / 2;
buyPrizeFee = buyTax / 2;
buyTotalFees = buyDevelopmentFee + buyPrizeFee;
sellDevelopmentFee = sellTax / 2;
sellPrizeFee = sellTax / 2;
sellTotalFees = sellDevelopmentFee + sellPrizeFee;
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function _transfer(address from, address to, uint256 amount) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
if (limitsInEffect) {
if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
if (!tradingActive) {
require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
}
// at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
if (transferDelayEnabled) {
if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed.");
_holderLastTransferTimestamp[tx.origin] = block.number;
}
}
//when buy
if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
}
//when sell
else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
} else if (!_isExcludedMaxTransactionAmount[to]) {
require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (canSwap && swapEnabled && tradingActive && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
swapping = true;
swapBack();
swapping = false;
}
bool takeFee = !swapping;
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
if (takeFee) {
// on sell
if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
fees = amount.mul(sellTotalFees).div(1000);
tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
tokensForPrize += (fees * sellPrizeFee) / sellTotalFees;
}
// on buy
else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
fees = amount.mul(buyTotalFees).div(1000);
tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
tokensForPrize += (fees * buyPrizeFee) / buyTotalFees;
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
function recoverETH() external onlyOwner {
payable(developmentWallet).transfer(address(this).balance);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
uint256 totalTokensToSwap = tokensForDevelopment + tokensForPrize;
bool success;
if (contractBalance == 0 || totalTokensToSwap == 0) {
return;
}
if (contractBalance > swapTokensAtAmount * 20) {
contractBalance = swapTokensAtAmount * 20;
}
uint256 amountToSwapForETH = contractBalance;
uint256 initialETHBalance = address(this).balance;
swapTokensForEth(amountToSwapForETH);
uint256 ethBalance = address(this).balance.sub(initialETHBalance);
uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
uint256 ethForPrize = ethBalance.mul(tokensForPrize).div(totalTokensToSwap);
tokensForDevelopment = 0;
tokensForPrize = 0;
(success, ) = address(developmentWallet).call{value: ethForDevelopment}("");
(success, ) = address(prizeWallet).call{value: ethForPrize}("");
}
function doTheManualSwap() external {
require(msg.sender == developmentWallet || msg.sender == prizeWallet);
swapBack();
}
function updateDevelopmentWallet(address newWallet) external onlyOwner {
developmentWallet = newWallet;
}
function updatePrizeWallet(address newWallet) external onlyOwner {
prizeWallet = newWallet;
}
}
Read Contract
_isExcludedMaxTransactionAmount 0x10d5de53 → bool
allowance 0xdd62ed3e → uint256
automatedMarketMakerPairs 0xb62496f5 → bool
balanceOf 0x70a08231 → uint256
buyDevelopmentFee 0xb2041411 → uint256
buyPrizeFee 0x75562e66 → uint256
buyTotalFees 0xd85ba063 → uint256
deadAddress 0x27c8f835 → address
decimals 0x313ce567 → uint8
developmentWallet 0xc04a5414 → address
isExcludedFromFees 0x4fbee193 → bool
limitsInEffect 0x4a62bb65 → bool
maxTransactionAmount 0xc8c8ebe4 → uint256
maxWallet 0xf8b45b05 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
prizeWallet 0x4fe92618 → address
sellDevelopmentFee 0x18a94cf1 → uint256
sellPrizeFee 0xaecf1a53 → uint256
sellTotalFees 0x6a486a8e → uint256
swapEnabled 0x6ddd1713 → bool
swapTokensAtAmount 0xe2f45605 → uint256
symbol 0x95d89b41 → string
tokensForDevelopment 0xef8700e5 → uint256
tokensForPrize 0xd1d13835 → uint256
totalSupply 0x18160ddd → uint256
tradingActive 0xbbc0c742 → bool
transferDelayEnabled 0xc876d0b9 → bool
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address
Write Contract 23 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
disableTransferDelay 0xe884f260
No parameters
returns: bool
doTheManualSwap 0xcfbb6131
No parameters
excludeFromFees 0xc0246668
address account
bool excluded
excludeFromMaxTransaction 0x7571336a
address updAds
bool isEx
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
letTheBattleBegin 0xbc5f30f2
No parameters
recoverETH 0x0614117a
No parameters
removeBattleLimits 0xa42e6d55
No parameters
returns: bool
renounceOwnership 0x715018a6
No parameters
setAutomatedMarketMakerPair 0x9a7a23d6
address pair
bool value
setEasyTax 0xfe509846
uint256 buyTax
uint256 sellTax
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateBuyFees 0x66ca9b83
uint256 _developmentFee
uint256 _prizeFee
updateDevelopmentWallet 0xf023f573
address newWallet
updateMaxTxnAmount 0x203e727e
uint256 newNum
updateMaxWalletAmount 0xc18bc195
uint256 newNum
updatePrizeWallet 0xfe67dd10
address newWallet
updateSellFees 0x02dbd8f8
uint256 _developmentFee
uint256 _prizeFee
updateSwapTokensAtAmount 0xd257b34f
uint256 newAmount
returns: bool
Recent Transactions
No transactions found for this address