Address Contract Partially Verified
Address
0xAE36155a55F04a696b8362777620027882B31dB5
Balance
0.847962 ETH
Nonce
1
Code Size
10975 bytes
Creator
0x5C1a9596...c1a5 at tx 0xee6880da...504cc6
Indexed Transactions
0
Contract Bytecode
10975 bytes
0x6080604052600436106103035760003560e01c80637d1db4a511610190578063c5930482116100dc578063dee6a01611610095578063ef0658f21161006f578063ef0658f214610910578063f0f165af14610926578063f2fde38b14610946578063fe575a871461096657600080fd5b8063dee6a016146108b0578063ea2f0b37146108d0578063ec28438a146108f057600080fd5b8063c59304821461080a578063ca48dd7314610824578063cbff46171461083a578063d0d41fe114610850578063dd46706414610870578063dd62ed3e1461089057600080fd5b806395d89b4111610149578063a69df4b511610123578063a69df4b514610795578063a9059cbb146107aa578063b24cf5d7146107ca578063c49b9a80146107ea57600080fd5b806395d89b411461074b578063a073d37f14610760578063a457c2d71461077557600080fd5b80637d1db4a514610689578063842884171461069f578063845a51ec146106d85780638a8c523c146106f85780638da5cb5b1461070d578063929793911461072b57600080fd5b8063437823ec1161024f578063557ed1ba116102085780636c0a24eb116101e25780636c0a24eb1461060857806370a082311461061e578063715018a614610654578063728d41c91461066957600080fd5b8063557ed1ba146105c0578063602bc62b146105d3578063690d8320146105e857600080fd5b8063437823ec146104e557806349bd5a5e146105055780634a74bb02146105255780634ada218b146105465780634c14c0b3146105675780635342acb41461058757600080fd5b80632d5a5d34116102bc5780633950935111610296578063395093511461046f5780633a40799e1461048f5780633ad10ef6146104a55780634127bcc6146104c557600080fd5b80632d5a5d341461040b578063313ce5671461042d578063382e901d1461044f57600080fd5b806306fdde031461030f578063095ea7b31461033a5780631694505e1461036a57806318160ddd146103b657806323b872dd146103d5578063283f7820146103f557600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461099f565b604051610331919061287e565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461272c565b610a31565b6040519015158152602001610331565b34801561037657600080fd5b5061039e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610331565b3480156103c257600080fd5b506008545b604051908152602001610331565b3480156103e157600080fd5b5061035a6103f03660046126bd565b610a4b565b34801561040157600080fd5b506103c760105481565b34801561041757600080fd5b5061042b6104263660046126fe565b610a6f565b005b34801561043957600080fd5b50600c5460405160ff9091168152602001610331565b34801561045b57600080fd5b5061042b61046a366004612684565b610b93565b34801561047b57600080fd5b5061035a61048a36600461272c565b610cab565b34801561049b57600080fd5b506103c7600e5481565b3480156104b157600080fd5b5060045461039e906001600160a01b031681565b3480156104d157600080fd5b5061042b6104e03660046127c4565b610ccd565b3480156104f157600080fd5b5061042b61050036600461264a565b610dc0565b34801561051157600080fd5b5060175461039e906001600160a01b031681565b34801561053157600080fd5b5060175461035a90600160b01b900460ff1681565b34801561055257600080fd5b5060175461035a90600160a01b900460ff1681565b34801561057357600080fd5b5061042b6105823660046126fe565b610e0e565b34801561059357600080fd5b5061035a6105a236600461264a565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156105cc57600080fd5b50426103c7565b3480156105df57600080fd5b506002546103c7565b3480156105f457600080fd5b5061042b61060336600461264a565b610ecb565b34801561061457600080fd5b506103c760155481565b34801561062a57600080fd5b506103c761063936600461264a565b6001600160a01b031660009081526005602052604090205490565b34801561066057600080fd5b5061042b610fb6565b34801561067557600080fd5b5061042b610684366004612792565b611018565b34801561069557600080fd5b506103c760145481565b3480156106ab57600080fd5b5061035a6106ba36600461264a565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156106e457600080fd5b5060035461039e906001600160a01b031681565b34801561070457600080fd5b5061042b611047565b34801561071957600080fd5b506000546001600160a01b031661039e565b34801561073757600080fd5b5061042b610746366004612792565b6110d2565b34801561075757600080fd5b5061032461113d565b34801561076c57600080fd5b506016546103c7565b34801561078157600080fd5b5061035a61079036600461272c565b61114c565b3480156107a157600080fd5b5061042b6111c7565b3480156107b657600080fd5b5061035a6107c536600461272c565b6112cd565b3480156107d657600080fd5b5061042b6107e536600461264a565b6112db565b3480156107f657600080fd5b5061042b610805366004612758565b611327565b34801561081657600080fd5b5060135461035a9060ff1681565b34801561083057600080fd5b506103c7600f5481565b34801561084657600080fd5b506103c760125481565b34801561085c57600080fd5b5061042b61086b36600461264a565b6113a9565b34801561087c57600080fd5b5061042b61088b366004612792565b6113f5565b34801561089c57600080fd5b506103c76108ab366004612684565b61147a565b3480156108bc57600080fd5b5061042b6108cb366004612758565b6114a5565b3480156108dc57600080fd5b5061042b6108eb36600461264a565b61153f565b3480156108fc57600080fd5b5061042b61090b366004612792565b61158a565b34801561091c57600080fd5b506103c7600d5481565b34801561093257600080fd5b5061042b610941366004612792565b6115b9565b34801561095257600080fd5b5061042b61096136600461264a565b6115e8565b34801561097257600080fd5b5061035a61098136600461264a565b6001600160a01b031660009081526007602052604090205460ff1690565b6060600a80546109ae906129fc565b80601f01602080910402602001604051908101604052809291908181526020018280546109da906129fc565b8015610a275780601f106109fc57610100808354040283529160200191610a27565b820191906000526020600020905b815481529060010190602001808311610a0a57829003601f168201915b5050505050905090565b600033610a3f8185856116c0565b60019150505b92915050565b600033610a598582856117e4565b610a6485858561185e565b506001949350505050565b6000546001600160a01b03163314610aa25760405162461bcd60e51b8152600401610a99906128d6565b60405180910390fd5b6001600160a01b03821660009081526007602052604090205460ff1615158115151415610ae15760405162461bcd60e51b8152600401610a99906128b1565b6017546001600160a01b0383811691161415610b3f5760405162461bcd60e51b815260206004820152601e60248201527f63616e206e6f7420626c61636b6c69737420756e6973776170207061697200006044820152606401610a99565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917f1d3a0f423a29cb00c6d792b5a695e34683386c493edbcf344426b5da5adf0e4491a35050565b6000546001600160a01b03163314610bbd5760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b038216301415610c165760405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f74207769746864726177207468697320746f6b656e00000000006044820152606401610a99565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c5857600080fd5b505afa158015610c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9091906127ab565b9050610ca66001600160a01b0384168383611bef565b505050565b600033610a3f818585610cbe838361147a565b610cc89190612960565b6116c0565b6000546001600160a01b03163314610cf75760405162461bcd60e51b8152600401610a99906128d6565b6000610d0d82610d078686611c41565b90611c41565b905060c8811115610d605760405162461bcd60e51b815260206004820152601e60248201527f63616e7420736574206665657320746f206d6f7265207468616e2032302500006044820152606401610a99565b600f849055600e839055600d8290556010805460115581905560408051858152602081018590529081018390527fcf8a1e1d5f09cf3c97dbb653cd9a4d7aace9292fbc1bb8211febf2d400febbdd9060600160405180910390a150505050565b6000546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610e385760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03821660009081526018602052604090205460ff1615158115151415610e775760405162461bcd60e51b8152600401610a99906128b1565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917f8c55f11b6d19d56c8b1800eb4e8b56441df993e14634fe86cd24b1c9bff545d391a35050565b6000546001600160a01b03163314610ef55760405162461bcd60e51b8152600401610a99906128d6565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610f42576040519150601f19603f3d011682016040523d82523d6000602084013e610f47565b606091505b5050905080610fb25760405162461bcd60e51b815260206004820152603160248201527f756e61626c6520746f2073656e642076616c75652c20726563697069656e74206044820152701b585e481a185d99481c995d995c9d1959607a1b6064820152608401610a99565b5050565b6000546001600160a01b03163314610fe05760405162461bcd60e51b8152600401610a99906128d6565b600080546040516001600160a01b0390911690600080516020612a8a833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110425760405162461bcd60e51b8152600401610a99906128d6565b601555565b6000546001600160a01b031633146110715760405162461bcd60e51b8152600401610a99906128d6565b601754600160a01b900460ff16156110bd5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610a99565b6017805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146110fc5760405162461bcd60e51b8152600401610a99906128d6565b60125460408051918252602082018390527fbd246d9b8c3d3843cdfe86c1eef754015151cca52383afcf47cfe2e30389233e910160405180910390a1601255565b6060600b80546109ae906129fc565b6000338161115a828661147a565b9050838110156111ba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a99565b610a6482868684036116c0565b6001546001600160a01b0316331461122d5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a99565b600254421161127e5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a99565b600154600080546040516001600160a01b039384169390911691600080516020612a8a83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600033610a3f81858561185e565b6000546001600160a01b031633146113055760405162461bcd60e51b8152600401610a99906128d6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113515760405162461bcd60e51b8152600401610a99906128d6565b60178054821515600160b01b0260ff60b01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061139e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146113d35760405162461bcd60e51b8152600401610a99906128d6565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461141f5760405162461bcd60e51b8152600401610a99906128d6565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561144e8142612960565b600255600080546040516001600160a01b0390911690600080516020612a8a833981519152908390a350565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6000546001600160a01b031633146114cf5760405162461bcd60e51b8152600401610a99906128d6565b60135460ff16151581151514156114f85760405162461bcd60e51b8152600401610a99906128b1565b6013805460ff19168215159081179091556040514381527f0ca71f7802e05294b7e4e083e369742fd573c5868ff991712ae1ee8af26233159060200160405180910390a250565b6000546001600160a01b031633146115695760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146115b45760405162461bcd60e51b8152600401610a99906128d6565b601455565b6000546001600160a01b031633146115e35760405162461bcd60e51b8152600401610a99906128d6565b601655565b6000546001600160a01b031633146116125760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b0381166116775760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a99565b600080546040516001600160a01b0380851693921691600080516020612a8a83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a99565b6001600160a01b0382166117835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a99565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006117f0848461147a565b90506000198114611858578181101561184b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a99565b61185884848484036116c0565b50505050565b6001600160a01b0383166118c25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a99565b6001600160a01b03831660009081526007602052604090205460ff16156119195760405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b6044820152606401610a99565b6001600160a01b03821660009081526007602052604090205460ff16156119705760405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b6044820152606401610a99565b6001600160a01b03831660009081526009602052604090205460019060ff16806119b257506001600160a01b03831660009081526009602052604090205460ff165b156119bf57506000611b09565b601454821115611a225760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a99565b601754600160a01b900460ff16611a745760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd081cdd185c9d195960521b6044820152606401610a99565b6001600160a01b03831660009081526018602052604090205460ff16611b09576015546001600160a01b038416600090815260056020526040902054611abb908490612960565b1115611b095760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d697400000000006044820152606401610a99565b3060009081526005602052604090205460165481108015908190611b375750601754600160a81b900460ff16155b8015611b4c5750601754600160b01b900460ff165b8015611b6657506017546001600160a01b03878116911614155b15611b7f578015611b7f576016549150611b7f82611ca7565b6001600160a01b0380861660009081526018602052604080822054928916825290205460ff9182169116158015611bb4575080155b15611bbe57600093505b60135460ff16158015611bcf575080155b15611bd957600093505b611be68787878785611dbc565b50505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610ca6908490611f42565b600080611c4e8385612960565b905083811015611ca05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a99565b9392505050565b6017805460ff60a81b1916600160a81b179055601054600f54600091611cdd91600291611cd79182908790612014565b90612093565b90506000611ceb83836120d5565b905047611cf782612117565b6000611d0347836120d5565b90506000611d29611d206002600f5461209390919063ffffffff16565b601054906120d5565b90508415611d5857611d5885611d536002611cd785611cd7600f548961201490919063ffffffff16565b61231f565b600354600d54611d82916001600160a01b031690611d7d908490611cd7908790612014565b61240e565b600454600e54611da7916001600160a01b031690611d7d908490611cd7908790612014565b50506017805460ff60a81b1916905550505050565b81611dc957611dc9612444565b6001600160a01b03851660009081526005602052604090205483811015611e415760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a99565b6000611e4d858461245a565b90506000611e5b82876129b9565b6001600160a01b03808a166000908152600560205260408082208a88039055918a16815281812080548401905530815220805484019055905084611ea457611ea4601154601055565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ee991815260200190565b60405180910390a38115611f385760405182815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050505050505050565b6000611f97826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124a79092919063ffffffff16565b805190915015610ca65780806020019051810190611fb59190612775565b610ca65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a99565b60008261202357506000610a45565b600061202f838561299a565b90508261203c8583612978565b14611ca05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a99565b6000611ca083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124b6565b6000611ca083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124ed565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061214c5761214c612a4d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121c557600080fd5b505afa1580156121d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fd9190612667565b8160018151811061221057612210612a4d565b60200260200101906001600160a01b031690816001600160a01b03168152505061225b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116c0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906122b0908590600090869030904290600401612924565b600060405180830381600087803b1580156122ca57600080fd5b505af11580156122de573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161231392919061290b565b60405180910390a15050565b61234a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116c0565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b1580156123ce57600080fd5b505af11580156123e2573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061240791906127f0565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610ca6573d6000803e3d6000fd5b60105461244d57565b6010805460115560009055565b6000806124786103e8611cd76010548761201490919063ffffffff16565b905082612485578061249f565b61249f600a611cd76012548461201490919063ffffffff16565b949350505050565b606061249f848460008561251e565b600081836124d75760405162461bcd60e51b8152600401610a99919061287e565b5060006124e48486612978565b95945050505050565b600081848411156125115760405162461bcd60e51b8152600401610a99919061287e565b5060006124e484866129b9565b606061252985612611565b6125755760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a99565b600080866001600160a01b031685876040516125919190612862565b60006040518083038185875af1925050503d80600081146125ce576040519150601f19603f3d011682016040523d82523d6000602084013e6125d3565b606091505b509150915081156125e757915061249f9050565b8051156125f75780518082602001fd5b8360405162461bcd60e51b8152600401610a99919061287e565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061249f575050151592915050565b60006020828403121561265c57600080fd5b8135611ca081612a63565b60006020828403121561267957600080fd5b8151611ca081612a63565b6000806040838503121561269757600080fd5b82356126a281612a63565b915060208301356126b281612a63565b809150509250929050565b6000806000606084860312156126d257600080fd5b83356126dd81612a63565b925060208401356126ed81612a63565b929592945050506040919091013590565b6000806040838503121561271157600080fd5b823561271c81612a63565b915060208301356126b281612a7b565b6000806040838503121561273f57600080fd5b823561274a81612a63565b946020939093013593505050565b60006020828403121561276a57600080fd5b8135611ca081612a7b565b60006020828403121561278757600080fd5b8151611ca081612a7b565b6000602082840312156127a457600080fd5b5035919050565b6000602082840312156127bd57600080fd5b5051919050565b6000806000606084860312156127d957600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561280557600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b838110156128575781516001600160a01b031687529582019590820190600101612832565b509495945050505050565b600082516128748184602087016129d0565b9190910192915050565b602081526000825180602084015261289d8160408501602087016129d0565b601f01601f19169190910160400192915050565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061249f604083018461281e565b85815284602082015260a06040820152600061294360a083018661281e565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561297357612973612a37565b500190565b60008261299557634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156129b4576129b4612a37565b500290565b6000828210156129cb576129cb612a37565b500390565b60005b838110156129eb5781810151838201526020016129d3565b838111156118585750506000910152565b600181811c90821680612a1057607f821691505b60208210811415612a3157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612a7857600080fd5b50565b8015158114612a7857600080fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220fb6281334e7c41a8ec4f00860ef90e49e853a901fb905173b861cf51668c368464736f6c63430008070033
Verified Source Code Partial Match
Compiler: v0.8.7+commit.e28d00a7
EVM: london
Optimization: Yes (200 runs)
Kishimoto.sol 957 lines
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.7;
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return payable(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;
}
}
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 IERC20Permit {
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
function nonces(address owner) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
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;
}
}
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");
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
contract Ownable is Context {
address private _owner;
address private _previousOwner;
uint256 private _lockTime;
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;
}
function getUnlockTime() public view returns (uint256) {
return _lockTime;
}
function getTime() public view returns (uint256) {
return block.timestamp;
}
function lock(uint256 time) public virtual onlyOwner {
_previousOwner = _owner;
_owner = address(0);
_lockTime = block.timestamp + time;
emit OwnershipTransferred(_owner, address(0));
}
function unlock() public virtual {
require(_previousOwner == msg.sender, "You don't have permission to unlock");
require(block.timestamp > _lockTime , "Contract is locked until 7 days");
emit OwnershipTransferred(_owner, _previousOwner);
_owner = _previousOwner;
}
}
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
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(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
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, uint value);
event Transfer(address indexed from, address indexed to, uint 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 (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint 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 (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
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 (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
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 removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
contract Kishimoto is Context, IERC20, Ownable {
using SafeMath for uint256;
using Address for address;
using SafeERC20 for IERC20;
address payable public rewardPoolAddress = payable(0x3cD9C25A96a73A226699C45970485F2dDD360ACE); // reward Pool Address
address payable public devAddress = payable(0xF55bF7dA3deA7a3D9078150abf3a2637d71d9413); // Dev Address
mapping(address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
mapping (address => bool) private _isBlacklisted;
uint256 private _totalSupply = 100 * 10**9 * 10**9; // 100 Bn tokens
mapping (address => bool) private _isExcludedFromFee;
string private _name = "Kishimoto";
string private _symbol = "KISHIMOTO";
uint8 private _decimals = 9;
uint256 public rewardPoolDivisor = 35;
uint256 public devDivisor = 35;
uint256 public autoLpDivisor = 10;
uint256 public _totalFee = 80; // rewardPoolDivisor + devDivisor + autoLpDivisor
uint256 private _previousTotalFee = _totalFee;
uint256 public sellFactor = 10; // divided by 10
bool public isBuyTaxEnabled = true;
uint256 public _maxTxAmount = 3 * 10**8 * 10**9;
uint256 public _maxWalletAmount = 1 * 10**9 * 10**9;
uint256 private minimumTokensBeforeSwap = 1 * 10**4 * 10**9;
IUniswapV2Router02 public immutable uniswapV2Router;
address public uniswapV2Pair;
bool public tradingEnabled = false;
bool inSwapAndLiquify;
bool public swapAndLiquifyEnabled = false;
mapping (address => bool) private automatedMarketMaker;
event FeesUpdated(uint256 autoLpDivisor, uint256 devDivisor, uint256 rewardPoolDivisor);
event SellFactorUpdated(uint256 previousSellFactor, uint256 newSellFactor);
event BuyTaxEnabled(bool indexed enable, uint256 blockNumber);
event AutomatedMarketMakerEnable(address indexed account, bool indexed enable);
event AccountBlacklisted(address indexed account, bool indexed blacklist);
event SwapAndLiquifyEnabledUpdated(bool enabled);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
event SwapTokensForETH(
uint256 amountIn,
address[] path
);
modifier lockTheSwap {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
constructor () {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
uniswapV2Router = _uniswapV2Router;
automatedMarketMaker[uniswapV2Pair] = true;
_balances[owner()] = _totalSupply;
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
emit Transfer(address(0), owner(), _totalSupply);
}
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 _totalSupply;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, 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) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function minimumTokensBeforeSwapAmount() public view returns (uint256) {
return minimumTokensBeforeSwap;
}
function isBlacklisted(address account) external view returns(bool) {
return _isBlacklisted[account];
}
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 _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function _transfer(
address from,
address to,
uint256 amount
) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(!_isBlacklisted[from], "Not Allowed");
require(!_isBlacklisted[to], "Not Allowed");
bool takeFee = true;
//if any account belongs to _isExcludedFromFee account then remove the fee
if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
takeFee = false;
} else {
require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
require(tradingEnabled, "Trading is not started");
if (!automatedMarketMaker[to]) {
require(_balances[to] + amount <= _maxWalletAmount, "Wallet amount exceeds limit");
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
if (overMinimumTokenBalance && !inSwapAndLiquify && swapAndLiquifyEnabled && from != uniswapV2Pair) {
if (overMinimumTokenBalance) {
contractTokenBalance = minimumTokensBeforeSwap;
swapTokens(contractTokenBalance);
}
}
bool isSell = automatedMarketMaker[to];
if(!automatedMarketMaker[from] && !isSell) {
takeFee = false;
}
if(!isBuyTaxEnabled && !isSell) {
takeFee = false;
}
_tokenTransfer(from,to,amount,takeFee,isSell);
}
function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
uint256 amountToLiquify = contractTokenBalance.mul(autoLpDivisor).div(_totalFee).div(2);
uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);
uint256 initialBalance = address(this).balance;
swapTokensForEth(amountToSwap);
uint256 transferredBalance = address(this).balance.sub(initialBalance);
uint256 totalETHFee = _totalFee.sub(autoLpDivisor.div(2));
// adding liquidity
if(amountToLiquify > 0) // enabling to set autoLP tax to zero
addLiquidity(amountToLiquify, transferredBalance.mul(autoLpDivisor).div(totalETHFee).div(2));
//Send to rewardPool and dev address
transferToAddressETH(rewardPoolAddress, transferredBalance.mul(rewardPoolDivisor).div(totalETHFee));
transferToAddressETH(devAddress, transferredBalance.mul(devDivisor).div(totalETHFee));
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this), // The contract
block.timestamp
);
emit SwapTokensForETH(tokenAmount, path);
}
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 _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee, bool isSell) private {
if(!takeFee)
removeAllFee();
_beforeTokenTransfer(sender, recipient, amount);
uint256 fromBalance = _balances[sender];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
uint256 fees = calculateTotalFee(amount, isSell);
uint256 amountToTransfer = amount - fees;
unchecked {
_balances[sender] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[recipient] += amountToTransfer;
_balances[address(this)] += fees;
}
if(!takeFee)
restoreAllFee();
emit Transfer(sender, recipient, amountToTransfer);
if(fees > 0) {
emit Transfer(sender, address(this), fees);
}
_afterTokenTransfer(sender, recipient, amount);
}
function calculateTotalFee(uint256 _amount, bool _isSell) private view returns (uint256) {
uint256 fees = _amount.mul(_totalFee).div(10**3);
return _isSell ? fees.mul(sellFactor).div(10) : fees;
}
function removeAllFee() private {
if(_totalFee == 0) return;
_previousTotalFee = _totalFee;
_totalFee = 0;
}
function restoreAllFee() private {
_totalFee = _previousTotalFee;
}
function isAutomatedMarketMaker(address account) external view returns(bool) {
return automatedMarketMaker[account];
}
function enableAutomatedMarketMaker(address account, bool enable) external onlyOwner {
require (automatedMarketMaker[account] != enable, "Already set");
automatedMarketMaker[account] = enable;
emit AutomatedMarketMakerEnable(account, enable);
}
function isExcludedFromFee(address account) public view returns(bool) {
return _isExcludedFromFee[account];
}
function excludeFromFee(address account) public onlyOwner {
_isExcludedFromFee[account] = true;
}
function includeInFee(address account) public onlyOwner {
_isExcludedFromFee[account] = false;
}
function updateFeeDivisor(uint256 newAutoLpDivisor, uint256 newDevDivisor, uint256 newrewardPoolDivisor) external onlyOwner {
uint256 newTotalFee = newAutoLpDivisor.add(newDevDivisor).add(newrewardPoolDivisor);
require( newTotalFee <= 200, "cant set fees to more than 20%");
autoLpDivisor = newAutoLpDivisor;
devDivisor = newDevDivisor;
rewardPoolDivisor = newrewardPoolDivisor;
_previousTotalFee = _totalFee;
_totalFee = newTotalFee;
emit FeesUpdated(newAutoLpDivisor, newDevDivisor, newrewardPoolDivisor);
}
function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
_maxTxAmount = maxTxAmount;
}
function setMaxWalletLimit(uint256 maxWalletLimit) external onlyOwner() {
_maxWalletAmount = maxWalletLimit;
}
function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
}
function setRewardPoolAddress(address _rewardPoolAddress) external onlyOwner() {
rewardPoolAddress = payable(_rewardPoolAddress);
}
function setDevAddress(address _devAddress) external onlyOwner() {
devAddress = payable(_devAddress);
}
function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
swapAndLiquifyEnabled = _enabled;
emit SwapAndLiquifyEnabledUpdated(_enabled);
}
function updateSellFactor(uint256 _sellFactor) external onlyOwner {
emit SellFactorUpdated(sellFactor, _sellFactor);
sellFactor = _sellFactor;
}
function setBuyTaxEnabled(bool _enable) external onlyOwner {
require(isBuyTaxEnabled != _enable, "Already set");
isBuyTaxEnabled = _enable;
emit BuyTaxEnabled(_enable, block.number);
}
function withdrawUnsupportedTokens(address token, address recipient) external onlyOwner {
require(token != address(this), "Can not withdraw this token");
uint256 contractBalance = IERC20(token).balanceOf(address(this));
IERC20(token).safeTransfer(recipient, contractBalance);
}
function enableTrading() external onlyOwner {
require (!tradingEnabled, "Already enabled");
tradingEnabled = true;
}
function blacklistAccount(address account, bool blacklist) external onlyOwner {
require (_isBlacklisted[account] != blacklist, "Already set");
require(account != uniswapV2Pair, "can not blacklist uniswap pair");
_isBlacklisted[account] = blacklist;
emit AccountBlacklisted(account, blacklist);
}
function transferToAddressETH(address payable recipient, uint256 amount) private {
recipient.transfer(amount);
}
function withdrawETH(address recipient) external onlyOwner {
(bool success, ) = recipient.call{ value: address(this).balance }("");
require(success, "unable to send value, recipient may have reverted");
}
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
//to recieve ETH from uniswapV2Router when swaping
receive() external payable {}
}
Read Contract
_maxTxAmount 0x7d1db4a5 → uint256
_maxWalletAmount 0x6c0a24eb → uint256
_totalFee 0x283f7820 → uint256
allowance 0xdd62ed3e → uint256
autoLpDivisor 0xca48dd73 → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
devAddress 0x3ad10ef6 → address
devDivisor 0x3a40799e → uint256
getTime 0x557ed1ba → uint256
getUnlockTime 0x602bc62b → uint256
isAutomatedMarketMaker 0x84288417 → bool
isBlacklisted 0xfe575a87 → bool
isBuyTaxEnabled 0xc5930482 → bool
isExcludedFromFee 0x5342acb4 → bool
minimumTokensBeforeSwapAmount 0xa073d37f → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
rewardPoolAddress 0x845a51ec → address
rewardPoolDivisor 0xef0658f2 → uint256
sellFactor 0xcbff4617 → uint256
swapAndLiquifyEnabled 0x4a74bb02 → bool
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
tradingEnabled 0x4ada218b → bool
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address
Write Contract 25 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
blacklistAccount 0x2d5a5d34
address account
bool blacklist
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
enableAutomatedMarketMaker 0x4c14c0b3
address account
bool enable
enableTrading 0x8a8c523c
No parameters
excludeFromFee 0x437823ec
address account
includeInFee 0xea2f0b37
address account
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
lock 0xdd467064
uint256 time
renounceOwnership 0x715018a6
No parameters
setBuyTaxEnabled 0xdee6a016
bool _enable
setDevAddress 0xd0d41fe1
address _devAddress
setMaxTxAmount 0xec28438a
uint256 maxTxAmount
setMaxWalletLimit 0x728d41c9
uint256 maxWalletLimit
setNumTokensSellToAddToLiquidity 0xf0f165af
uint256 _minimumTokensBeforeSwap
setRewardPoolAddress 0xb24cf5d7
address _rewardPoolAddress
setSwapAndLiquifyEnabled 0xc49b9a80
bool _enabled
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
unlock 0xa69df4b5
No parameters
updateFeeDivisor 0x4127bcc6
uint256 newAutoLpDivisor
uint256 newDevDivisor
uint256 newrewardPoolDivisor
updateSellFactor 0x92979391
uint256 _sellFactor
withdrawETH 0x690d8320
address recipient
withdrawUnsupportedTokens 0x382e901d
address token
address recipient
Token Balances (1)
View Transfers →Recent Transactions
No transactions found for this address