Address Contract Verified
Address
0xd8CbC86E320dFE325439f0f923e1F288b713097c
Balance
0 ETH
Nonce
1
Code Size
9084 bytes
Creator
0x6B72750F...9c74 at tx 0x28f8f9ac...51f1af
Indexed Transactions
0
Contract Bytecode
9084 bytes
0x60806040526004361061023f5760003560e01c806350faa48f1161012e57806395d89b41116100ab578063d5f394881161006f578063d5f394881461066a578063d9058bd51461068a578063dc13b31c146106aa578063dd62ed3e146106c0578063f2fde38b1461070657600080fd5b806395d89b41146105d5578063a457c2d7146105ea578063a9059cbb1461060a578063b2abbbc41461062a578063ca72a4e71461064a57600080fd5b806370a08231116100f257806370a0823114610542578063715018a614610562578063794ac1491461057757806381230a83146105975780638da5cb5b146105b757600080fd5b806350faa48f146104a857806351bc3c85146104c85780635342acb4146104dd57806354a5df1f146105165780636c0a24eb1461052c57600080fd5b806327a14fc2116101bc578063441d801f11610180578063441d801f146104315780634706240214610451578063482e53ff1461046757806348fad6381461047d5780634b94f50e1461049357600080fd5b806327a14fc2146103995780632aca3e7d146103b95780632b14ca56146103d9578063313ce567146103ef578063395093511461041157600080fd5b8063139196f711610203578063139196f7146102ec5780631694505e1461030c57806318160ddd146103445780631f61fd5a1461036357806323b872dd1461037957600080fd5b806306e99fef1461024b57806306fdde031461026257806307ebec271461028d57806308003f78146102b7578063095ea7b3146102cc57600080fd5b3661024657005b600080fd5b34801561025757600080fd5b50610260610726565b005b34801561026e57600080fd5b5061027761078c565b6040516102849190611d99565b60405180910390f35b34801561029957600080fd5b506012546102a79060ff1681565b6040519015158152602001610284565b3480156102c357600080fd5b5061026061081e565b3480156102d857600080fd5b506102a76102e7366004611dfc565b6108ea565b3480156102f857600080fd5b50610260610307366004611e28565b610901565b34801561031857600080fd5b5060015461032c906001600160a01b031681565b6040516001600160a01b039091168152602001610284565b34801561035057600080fd5b50600b545b604051908152602001610284565b34801561036f57600080fd5b5061035560135481565b34801561038557600080fd5b506102a7610394366004611e45565b610a12565b3480156103a557600080fd5b506102606103b4366004611e86565b610a7b565b3480156103c557600080fd5b506102606103d4366004611e9f565b610aaa565b3480156103e557600080fd5b50610355600f5481565b3480156103fb57600080fd5b50600a5460405160ff9091168152602001610284565b34801561041d57600080fd5b506102a761042c366004611dfc565b610aef565b34801561043d57600080fd5b5061026061044c366004611ecf565b610b25565b34801561045d57600080fd5b50610355600e5481565b34801561047357600080fd5b5061035560145481565b34801561048957600080fd5b5061035560165481565b34801561049f57600080fd5b50610355610b5f565b3480156104b457600080fd5b5060025461032c906001600160a01b031681565b3480156104d457600080fd5b50610260610ce0565b3480156104e957600080fd5b506102a76104f8366004611e28565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561052257600080fd5b5061035560115481565b34801561053857600080fd5b50610355600c5481565b34801561054e57600080fd5b5061035561055d366004611e28565b610d09565b34801561056e57600080fd5b50610260610d24565b34801561058357600080fd5b50610260610592366004611f55565b610d98565b3480156105a357600080fd5b506102606105b2366004611e9f565b610dd5565b3480156105c357600080fd5b506000546001600160a01b031661032c565b3480156105e157600080fd5b50610277610e0a565b3480156105f657600080fd5b506102a7610605366004611dfc565b610e19565b34801561061657600080fd5b506102a7610625366004611dfc565b610e68565b34801561063657600080fd5b50610260610645366004611e86565b610e75565b34801561065657600080fd5b50610260610665366004611e28565b610ea4565b34801561067657600080fd5b5060105461032c906001600160a01b031681565b34801561069657600080fd5b506102606106a5366004611e9f565b610f7f565b3480156106b657600080fd5b5061035560155481565b3480156106cc57600080fd5b506103556106db366004611f72565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561071257600080fd5b50610260610721366004611e28565b610fb4565b6000546001600160a01b031633146107595760405162461bcd60e51b815260040161075090611fab565b60405180910390fd5b6040514790339082156108fc029083906000818181858888f19350505050158015610788573d6000803e3d6000fd5b5050565b60606008805461079b90611fe0565b80601f01602080910402602001604051908101604052809291908181526020018280546107c790611fe0565b80156108145780601f106107e957610100808354040283529160200191610814565b820191906000526020600020905b8154815290600101906020018083116107f757829003601f168201915b5050505050905090565b6016544210156108825760405162461bcd60e51b815260206004820152602960248201527f4e657874206275726e2074696d65206973206e6f7420647565207965742c206260448201526819481c185d1a595b9d60ba1b6064820152608401610750565b60125460ff166108e05760405162461bcd60e51b8152602060048201526024808201527f4275726e696e6720746f6b656e732069732063757272656e746c792064697361604482015263189b195960e21b6064820152608401610750565b6108e861109e565b565b60006108f73384846111da565b5060015b92915050565b6000546001600160a01b0316331461092b5760405162461bcd60e51b815260040161075090611fab565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610974573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610998919061201a565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156109e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0c9190612033565b50505050565b6000610a1f8484846112fe565b610a718433610a6c856040518060600160405280602881526020016122fa602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611787565b6111da565b5060019392505050565b6000546001600160a01b03163314610aa55760405162461bcd60e51b815260040161075090611fab565b600c55565b6000546001600160a01b03163314610ad45760405162461bcd60e51b815260040161075090611fab565b60198190556018829055610ae88282612066565b6017555050565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916108f7918590610a6c90866117c1565b6000546001600160a01b03163314610b4f5760405162461bcd60e51b815260040161075090611fab565b610b5a838383611827565b505050565b604080516002808252606082018352600092839291906020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf1919061208f565b81600081518110610c0457610c046120ac565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610c3857610c386120ac565b6001600160a01b03928316602091820292909201015260015460115460405163d06ca61f60e01b8152919092169163d06ca61f91610c7b91908590600401612106565b600060405180830381865afa158015610c98573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cc09190810190612127565b600181518110610cd257610cd26120ac565b602002602001015191505090565b6000610ceb30610d09565b90508015610d0657600d5460ff16610d0657610d0681611891565b50565b6001600160a01b031660009081526005602052604090205490565b6000546001600160a01b03163314610d4e5760405162461bcd60e51b815260040161075090611fab565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610dc25760405162461bcd60e51b815260040161075090611fab565b6012805460ff1916911515919091179055565b6000546001600160a01b03163314610dff5760405162461bcd60e51b815260040161075090611fab565b600e91909155600f55565b60606009805461079b90611fe0565b60006108f73384610a6c85604051806060016040528060258152602001612322602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611787565b60006108f73384846112fe565b6000546001600160a01b03163314610e9f5760405162461bcd60e51b815260040161075090611fab565b601155565b6000546001600160a01b03163314610ece5760405162461bcd60e51b815260040161075090611fab565b6002546001600160a01b031615610f325760405162461bcd60e51b815260206004820152602260248201527f556e69737761705632506169722068617320616c7265616479206265656e2073604482015261195d60f21b6064820152608401610750565b600154600b54610f4f9130916001600160a01b03909116906111da565b600280546001600160a01b039092166001600160a01b031992831681179091556003805490921617905542601655565b6000546001600160a01b03163314610fa95760405162461bcd60e51b815260040161075090611fab565b601391909155601455565b6000546001600160a01b03163314610fde5760405162461bcd60e51b815260040161075090611fab565b6001600160a01b0381166110435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610750565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600d805460ff191660011790556002546000906110c3906001600160a01b0316610d09565b905060006110dc6014548361197590919063ffffffff16565b905080156111cc576002546110fa906001600160a01b0316826119b7565b600360009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561114a57600080fd5b505af115801561115e573d6000803e3d6000fd5b505060155461117092509050826117c1565b60155560135461118c9061118590603c611aa4565b42906117c1565b60168190556040805183815260208101929092527f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d910160405180910390a15b5050600d805460ff19169055565b6001600160a01b03831661123c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610750565b6001600160a01b03821661129d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610750565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113625760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610750565b6001600160a01b0382166113c45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610750565b600081116114265760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610750565b6001600160a01b038316600090815260076020526040812054819060ff1615801561146a57506001600160a01b03841660009081526007602052604090205460ff16155b801561148457506000546001600160a01b03868116911614155b801561149e57506000546001600160a01b03858116911614155b6010549091506001600160a01b038681169116148015906114cd57506010546001600160a01b03858116911614155b80156114e257506001600160a01b0385163014155b80156114f757506001600160a01b0384163014155b1561169c57801561169c576002546001600160a01b0390811690861603611584576115386064611532600e5486611aa490919063ffffffff16565b90611975565b915060006115468484611b26565b9050600061155d8261155788610d09565b906117c1565b9050600c548111156115815760405162461bcd60e51b8152600401610750906121e5565b50505b6002546001600160a01b038681169116148015906115af57506002546001600160a01b038581169116145b1561161e5760165442101580156115c8575060125460ff165b156115da576115d561109e565b61161e565b60006115e530610d09565b9050801561161c5760006115f7610b5f565b905080821015801561160c5750600d5460ff16155b1561161a5761161a81611891565b505b505b6002546001600160a01b0386811691161480159061164a57506002546001600160a01b03858116911614155b1561169c57600061165a86610d09565b9050600061166786610d09565b9050600c54821115801561167d5750600c548111155b6116995760405162461bcd60e51b8152600401610750906121e5565b50505b60006116a88484611b26565b6001600160a01b0387166000908152600560205260409020549091506116ce9085611b26565b6001600160a01b0380881660009081526005602052604080822093909355908716815220546116fd90826117c1565b6001600160a01b03861660009081526005602052604080822092909255308152205461172990846117c1565b3060009081526005602090815260409182902092909255518281526001600160a01b0387811692908916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050505050565b600081848411156117ab5760405162461bcd60e51b81526004016107509190611d99565b5060006117b8848661222a565b95945050505050565b6000806117ce8385612066565b9050838110156118205760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610750565b9392505050565b60005b82811015610a0c576000848483818110611846576118466120ac565b905060200201602081019061185b9190611e28565b6001600160a01b03166000908152600760205260409020805460ff191684151517905550806118898161223d565b91505061182a565b6000601754601954836118a49190612256565b6118ae919061226d565b90506000601754601854846118c39190612256565b6118cd919061226d565b90506000821561191e5760006118e460028561226d565b905060006118f2828661222a565b905047925061190082611b68565b8247111561191b5761191b81611916854761222a565b611cba565b50505b8115610a0c5761192d82611b68565b4715610a0c5760045460405147916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561196d573d6000803e3d6000fd5b505050505050565b600061182083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d6b565b6001600160a01b038216611a175760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610750565b600b54611a249082611b26565b600b556001600160a01b038216600090815260056020526040902054611a4a9082611b26565b6001600160a01b0383166000818152600560205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a989085815260200190565b60405180910390a35050565b600082600003611ab6575060006108fb565b6000611ac28385612256565b905082611acf858361226d565b146118205760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610750565b600061182083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611787565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b9d57611b9d6120ac565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1a919061208f565b81600181518110611c2d57611c2d6120ac565b6001600160a01b039283166020918202929092010152600154611c5391309116846111da565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c8c90859060009086903090429060040161228f565b600060405180830381600087803b158015611ca657600080fd5b505af115801561196d573d6000803e3d6000fd5b600154611cd29030906001600160a01b0316846111da565b60015460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611d3f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d6491906122cb565b5050505050565b60008183611d8c5760405162461bcd60e51b81526004016107509190611d99565b5060006117b8848661226d565b600060208083528351808285015260005b81811015611dc657858101830151858201604001528201611daa565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d0657600080fd5b60008060408385031215611e0f57600080fd5b8235611e1a81611de7565b946020939093013593505050565b600060208284031215611e3a57600080fd5b813561182081611de7565b600080600060608486031215611e5a57600080fd5b8335611e6581611de7565b92506020840135611e7581611de7565b929592945050506040919091013590565b600060208284031215611e9857600080fd5b5035919050565b60008060408385031215611eb257600080fd5b50508035926020909101359150565b8015158114610d0657600080fd5b600080600060408486031215611ee457600080fd5b833567ffffffffffffffff80821115611efc57600080fd5b818601915086601f830112611f1057600080fd5b813581811115611f1f57600080fd5b8760208260051b8501011115611f3457600080fd5b60209283019550935050840135611f4a81611ec1565b809150509250925092565b600060208284031215611f6757600080fd5b813561182081611ec1565b60008060408385031215611f8557600080fd5b8235611f9081611de7565b91506020830135611fa081611de7565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611ff457607f821691505b60208210810361201457634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561202c57600080fd5b5051919050565b60006020828403121561204557600080fd5b815161182081611ec1565b634e487b7160e01b600052601160045260246000fd5b808201808211156108fb576108fb612050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156120a157600080fd5b815161182081611de7565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156120fb5781516001600160a01b0316875295820195908201906001016120d6565b509495945050505050565b82815260406020820152600061211f60408301846120c2565b949350505050565b6000602080838503121561213a57600080fd5b825167ffffffffffffffff8082111561215257600080fd5b818501915085601f83011261216657600080fd5b81518181111561217857612178612079565b8060051b604051601f19603f8301168101818110858211171561219d5761219d612079565b6040529182528482019250838101850191888311156121bb57600080fd5b938501935b828510156121d9578451845293850193928501926121c0565b98975050505050505050565b60208082526025908201527f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c6574206040820152641b1a5b5a5d60da1b606082015260800190565b818103818111156108fb576108fb612050565b60006001820161224f5761224f612050565b5060010190565b80820281158282048414176108fb576108fb612050565b60008261228a57634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a0604082015260006122ae60a08301866120c2565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156122e057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e16efb6bde6298dfc6b32f8bb3f8625fb8776a97ba98bf6876b833517859b68b64736f6c63430008110033
Verified Source Code Full Match
Compiler: v0.8.17+commit.8df45f5f
EVM: london
Optimization: Yes (200 runs)
ETHFIRE.sol 646 lines
pragma solidity ^0.8.17;
// SPDX-License-Identifier: Unlicensed
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);
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
abstract contract Context {
//function _msgSender() internal view virtual returns (address payable) {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this;
// silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
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");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(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");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{value : weiValue}(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
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;
}
}
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 IUniswapV2Factory {
function createPair(address tokenA, address tokenB) external returns (address pair);
function getPair(address token0, address token1) external view returns (address);
}
interface IUniswapV2Router02 {
function factory() external pure returns (address);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external payable returns (uint[] memory amounts);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function WETH() external pure returns (address);
}
contract ETHFIRE is Context, IERC20, Ownable {
using SafeMath for uint256;
using Address for address;
modifier lockTheSwap {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
event TokensBurned(uint256, uint256);
IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
address public marketPair = address(0);
IUniswapV2Pair private v2Pair;
address private feeOne = 0x82f1dDa2aaE8E086600da180FE6Fa87C423e0B87;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) private _isExcludedFromFee;
string private _name = "ETH FIRE";
string private _symbol = "EFIRE";
uint8 private _decimals = 18;
uint256 private _tTotal = 1e8 * 1e18;
uint256 public _maxWalletAmount = (_tTotal * 2) / 100;
bool inSwapAndLiquify;
uint256 public buyFee = 5;
uint256 public sellFee = 5;
address public deployer;
uint256 public ethPriceToSwap = 0.01 ether;
bool public isBurnEnabled = true;
uint256 public burnFrequencynMinutes = 30;
uint256 public burnRateInBasePoints = 100; //100 = 1%
uint256 public tokensBurnedSinceLaunch = 0;
uint public nextLiquidityBurnTimeStamp;
uint256 totalShare = 50;
uint256 feeShare = 30;
uint256 lpShare = 20;
constructor () {
address tokenOwner = 0x6B72750Fdae81972A095b8600FE69683C1E19c74;
_balances[tokenOwner] = _tTotal;
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[msg.sender] = true;
_isExcludedFromFee[address(uniswapV2Router)] = true;
_isExcludedFromFee[address(this)] = true;
_isExcludedFromFee[tokenOwner] = true;
_isExcludedFromFee[feeOne] = true;
deployer = tokenOwner;
transferOwnership(deployer);
emit Transfer(address(0), tokenOwner, _tTotal);
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function setShares(uint256 _feeShar, uint256 _lpShare) public onlyOwner{
lpShare = _lpShare;
feeShare = _feeShar;
totalShare = _lpShare + _feeShar;
}
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
function setTaxFees(uint256 buy, uint256 sell) external onlyOwner {
buyFee = buy;
sellFee = sell;
}
function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
addRemoveFee(addresses, isExcludeFromFee);
}
function setBurnSettings(uint256 frequencyInMinutes, uint256 burnBasePoints) external onlyOwner {
burnFrequencynMinutes = frequencyInMinutes;
burnRateInBasePoints = burnBasePoints;
}
function burnTokensFromLiquidityPool() private lockTheSwap {
uint liquidity = balanceOf(marketPair);
uint tokenBurnAmount = liquidity.div(burnRateInBasePoints);
if(tokenBurnAmount > 0) {
//burn tokens from LP and update liquidity pool price
_burn(marketPair, tokenBurnAmount);
v2Pair.sync();
tokensBurnedSinceLaunch = tokensBurnedSinceLaunch.add(tokenBurnAmount);
nextLiquidityBurnTimeStamp = block.timestamp.add(burnFrequencynMinutes.mul(60));
emit TokensBurned(tokenBurnAmount, nextLiquidityBurnTimeStamp);
}
}
function enableDisableBurnToken(bool _enabled) public onlyOwner {
isBurnEnabled = _enabled;
}
function burnTokens() external {
require(block.timestamp >= nextLiquidityBurnTimeStamp, "Next burn time is not due yet, be patient");
require(isBurnEnabled, "Burning tokens is currently disabled");
burnTokensFromLiquidityPool();
}
function addRemoveFee(address[] calldata addresses, bool flag) private {
for (uint256 i = 0; i < addresses.length; i++) {
address addr = addresses[i];
_isExcludedFromFee[addr] = flag;
}
}
function _burn(address account, uint256 value) internal {
require(account != address(0), "ERC20: burn from the zero address");
_tTotal = _tTotal.sub(value);
_balances[account] = _balances[account].sub(value);
emit Transfer(account, address(0), value);
}
function openTrading(address _pair) external onlyOwner() {
require(marketPair == address(0),"UniswapV2Pair has already been set");
_approve(address(this), address(uniswapV2Router), _tTotal);
marketPair = _pair;
v2Pair = IUniswapV2Pair(marketPair);
nextLiquidityBurnTimeStamp = block.timestamp;
}
function isExcludedFromFee(address account) public view returns (bool) {
return _isExcludedFromFee[account];
}
function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
_maxWalletAmount = maxWalletAmount;
}
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 _transfer(address from, address to, uint256 amount) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
uint256 taxAmount = 0;
bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
if(from != deployer && to != deployer && from != address(this) && to != address(this)) {
if(takeFees) {
if (from == marketPair) {
taxAmount = amount.mul(buyFee).div(100);
uint256 amountToHolder = amount.sub(taxAmount);
uint256 holderBalance = balanceOf(to).add(amountToHolder);
require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
}
if (from != marketPair && to == marketPair) {
if(block.timestamp >= nextLiquidityBurnTimeStamp && isBurnEnabled) {
burnTokensFromLiquidityPool();
} else {
uint256 contractTokenBalance = balanceOf(address(this));
if (contractTokenBalance > 0) {
uint256 tokenAmount = getTokenPrice();
if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify) {
swapTokensForEth(tokenAmount);
}
}
}
}
if (from != marketPair && to != marketPair) {
uint256 fromBalance = balanceOf(from);
uint256 toBalance = balanceOf(to);
require(fromBalance <= _maxWalletAmount && toBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
}
}
}
uint256 transferAmount = amount.sub(taxAmount);
_balances[from] = _balances[from].sub(amount);
_balances[to] = _balances[to].add(transferAmount);
_balances[address(this)] = _balances[address(this)].add(taxAmount);
emit Transfer(from, to, transferAmount);
}
function manualSwap() external {
uint256 contractTokenBalance = balanceOf(address(this));
if (contractTokenBalance > 0) {
if (!inSwapAndLiquify) {
swapTokensForEth(contractTokenBalance);
}
}
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
uint256 lpTokens = (tokenAmount * lpShare) / totalShare;
uint256 feeTokens = (tokenAmount * feeShare) / totalShare;
uint256 beforeBalance;
if(lpTokens > 0){
uint256 firstHalf = lpTokens / 2;
uint256 secondHalf = lpTokens - firstHalf;
beforeBalance = address(this).balance;
swapToETH(firstHalf);
if(address(this).balance > beforeBalance){
addLiquidity(secondHalf, address(this).balance - beforeBalance);
}
}
if(feeTokens > 0) {
swapToETH(feeTokens);
if(address(this).balance > 0) {
uint256 ethBalance = address(this).balance;
payable(feeOne).transfer(ethBalance);
}
}
}
function swapToETH(uint256 tokensAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokensAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokensAmount,
0,
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
address(this),
block.timestamp
);
}
function getTokenPrice() public view returns (uint256) {
address[] memory path = new address[](2);
path[0] = uniswapV2Router.WETH();
path[1] = address(this);
return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1];
}
function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
ethPriceToSwap = ethPriceToSwap_;
}
receive() external payable {}
function sendEth() external onlyOwner {
uint256 ethBalance = address(this).balance;
payable(msg.sender).transfer(ethBalance);
}
function sendERC20Tokens(address contractAddress) external onlyOwner {
IERC20 erc20Token = IERC20(contractAddress);
uint256 balance = erc20Token.balanceOf(address(this));
erc20Token.transfer(msg.sender, balance);
}
}
Read Contract
_maxWalletAmount 0x6c0a24eb → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
burnFrequencynMinutes 0x1f61fd5a → uint256
burnRateInBasePoints 0x482e53ff → uint256
buyFee 0x47062402 → uint256
decimals 0x313ce567 → uint8
deployer 0xd5f39488 → address
ethPriceToSwap 0x54a5df1f → uint256
getTokenPrice 0x4b94f50e → uint256
isBurnEnabled 0x07ebec27 → bool
isExcludedFromFee 0x5342acb4 → bool
marketPair 0x50faa48f → address
name 0x06fdde03 → string
nextLiquidityBurnTimeStamp 0x48fad638 → uint256
owner 0x8da5cb5b → address
sellFee 0x2b14ca56 → uint256
symbol 0x95d89b41 → string
tokensBurnedSinceLaunch 0xdc13b31c → uint256
totalSupply 0x18160ddd → uint256
uniswapV2Router 0x1694505e → address
Write Contract 19 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
burnTokens 0x08003f78
No parameters
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
enableDisableBurnToken 0x794ac149
bool _enabled
excludeIncludeFromFee 0x441d801f
address[] addresses
bool isExcludeFromFee
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
manualSwap 0x51bc3c85
No parameters
openTrading 0xca72a4e7
address _pair
renounceOwnership 0x715018a6
No parameters
sendERC20Tokens 0x139196f7
address contractAddress
sendEth 0x06e99fef
No parameters
setBurnSettings 0xd9058bd5
uint256 frequencyInMinutes
uint256 burnBasePoints
setEthPriceToSwap 0xb2abbbc4
uint256 ethPriceToSwap_
setMaxWalletAmount 0x27a14fc2
uint256 maxWalletAmount
setShares 0x2aca3e7d
uint256 _feeShar
uint256 _lpShare
setTaxFees 0x81230a83
uint256 buy
uint256 sell
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
Recent Transactions
No transactions found for this address