Address Contract Verified
Address
0x2b87d5D3a7eBBc34615869b9AB7D6E9321DF75A3
Balance
0.351367 ETH
Nonce
1
Code Size
13225 bytes
Creator
0x0D0126cf...8e57 at tx 0xcbd6fa66...661cc3
Indexed Transactions
0
Contract Bytecode
13225 bytes
0x6080604052600436106102345760003560e01c806370a082311161012e578063b6a5d7de116100ab578063f319ae771161006f578063f319ae771461073c578063f887ea401461075c578063fac1b9bc14610790578063fc5ea5e6146107b0578063fe9fbb80146107d057600080fd5b8063b6a5d7de1461069c578063b9a45aac146106bc578063dd62ed3e146106dc578063f0b37c04146106fc578063f2fde38b1461071c57600080fd5b80638e5c3ad3116100f25780638e5c3ad3146105d857806395d89b41146105f8578063a457c2d714610628578063a8aa1b3114610648578063a9059cbb1461067c57600080fd5b806370a082311461051f578063715018a6146105555780637d1db4a51461056a57806382aa7c68146105805780638da5cb5b146105a057600080fd5b806339264b66116101bc5780634a5a863a116101805780634a5a863a14610496578063569c9b33146104b65780636b7f8b90146104c95780636c0a24eb146104e9578063706f6937146104ff57600080fd5b806339264b66146103dd57806339509351146103fd5780633bbac5791461041d57806340005fbe14610456578063455a43961461047657600080fd5b806323b872dd1161020357806323b872dd146102fb5780632b112e491461031b5780632f54bf6e14610330578063313ce5671461035f578063357c13541461037b57600080fd5b806306fdde0314610240578063095ea7b3146102845780630eefe44b146102b457806318160ddd146102d657600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b506040805180820190915260098152680a682a6a2aa82a886960bb1b60208201525b60405161027b9190612d79565b60405180910390f35b34801561029057600080fd5b506102a461029f366004612dc4565b6107f0565b604051901515815260200161027b565b3480156102c057600080fd5b506102d46102cf366004612e04565b610806565b005b3480156102e257600080fd5b50670e049984505034005b60405190815260200161027b565b34801561030757600080fd5b506102a4610316366004612e3d565b610968565b34801561032757600080fd5b506102ed61098b565b34801561033c57600080fd5b506102a461034b366004612e7e565b6000546001600160a01b0391821691161490565b34801561036b57600080fd5b506040516009815260200161027b565b34801561038757600080fd5b506103bd610396366004612e9b565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161027b565b3480156103e957600080fd5b506102d46103f8366004612e3d565b6109d2565b34801561040957600080fd5b506102a4610418366004612dc4565b610acf565b34801561042957600080fd5b506102a4610438366004612e7e565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561046257600080fd5b506102d4610471366004612eb6565b610af0565b34801561048257600080fd5b506102d4610491366004612f0f565b610c0c565b3480156104a257600080fd5b506102d46104b1366004612f48565b610cc5565b6102d46104c4366004612f74565b610d48565b3480156104d557600080fd5b506102d46104e4366004612fab565b611194565b3480156104f557600080fd5b506102ed60035481565b34801561050b57600080fd5b506102d461051a366004613014565b611230565b34801561052b57600080fd5b506102ed61053a366004612e7e565b6001600160a01b031660009081526004602052604090205490565b34801561056157600080fd5b506102d461143a565b34801561057657600080fd5b506102ed60025481565b34801561058c57600080fd5b506102d461059b366004613080565b6114a5565b3480156105ac57600080fd5b506000546105c0906001600160a01b031681565b6040516001600160a01b03909116815260200161027b565b3480156105e457600080fd5b506102d46105f3366004613099565b611561565b34801561060457600080fd5b506040805180820190915260078152660a6a2aa82a886960cb1b602082015261026e565b34801561063457600080fd5b506102a4610643366004612dc4565b6115ed565b34801561065457600080fd5b506105c07f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb81565b34801561068857600080fd5b506102a4610697366004612dc4565b611667565b3480156106a857600080fd5b506102d46106b7366004612e7e565b611674565b3480156106c857600080fd5b506102d46106d7366004612f0f565b6116c0565b3480156106e857600080fd5b506102ed6106f73660046130ba565b611779565b34801561070857600080fd5b506102d4610717366004612e7e565b6117a4565b34801561072857600080fd5b506102d4610737366004612e7e565b6117ea565b34801561074857600080fd5b506102d46107573660046130e8565b6118a1565b34801561076857600080fd5b506105c07f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561079c57600080fd5b506102d46107ab366004612f0f565b611a1f565b3480156107bc57600080fd5b506102d46107cb3660046130e8565b611ad8565b3480156107dc57600080fd5b506102a46107eb366004612e7e565b611be7565b60006107fd338484611c05565b50600192915050565b61080f33611be7565b6108345760405162461bcd60e51b815260040161082b9061310a565b60405180910390fd5b61084c60146108466127106003611d21565b90611d2d565b6108608261085a8686611d39565b90611d39565b11156108ae5760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e203135250000000000604482015260640161082b565b6000600b60008660028111156108c6576108c661312f565b60028111156108d7576108d761312f565b81526020810191909152604001600020600181018590558381556002810183905590506109088261085a8686611d39565b600382015584600281111561091f5761091f61312f565b60408051868152602081018690529081018490527fb1a90344459b408c97dc6c9427767fbcdb7fdf83182ce17a8d019839e88e8b05906060015b60405180910390a25050505050565b6000610975843384611d45565b610980848484611dbf565b5060015b9392505050565b61dead600090815260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546109cd90670e0499845050340090612164565b905090565b6109db33611be7565b6109f75760405162461bcd60e51b815260040161082b9061310a565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190613145565b90506000610a766127106108468486611d21565b9050610a8c6001600160a01b0386168583612170565b604080516001600160a01b038681168252602082018490528716917fc3770890217b5014eb50f7ffe9521ca4e970a55a8795d24ba3933f962440e1b89101610959565b60006107fd338484610ae13388611779565b610aeb9190613174565b611c05565b610af933611be7565b610b155760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b038316610b3b5760405162461bcd60e51b815260040161082b9061318c565b6001600160a01b038216610b615760405162461bcd60e51b815260040161082b9061318c565b6001600160a01b038116610b875760405162461bcd60e51b815260040161082b9061318c565b601880546001600160a01b038581166001600160a01b0319928316811790935560168054868316908416811790915560178054928616929093168217909255604080519384526020840192909252908201527ff4653be65455600571e0a73c497c13dd50347f1cd9ba7b16a1710b6184bb644c906060015b60405180910390a1505050565b610c1533611be7565b610c315760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03821660009081526008602052604090205481151560ff909116151503610c715760405162461bcd60e51b815260040161082b906131b2565b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f4728de7c6a4e2755a2f42b3034ce94f4a011aaff9d1af55ed984db300dea942091a35050565b610cce33611be7565b610cea5760405162461bcd60e51b815260040161082b9061310a565b601483905560138290556012819055610d078161085a8585611d39565b60155560408051848152602081018490529081018290527fdb99cc69484cb3ee77f3036657c45f45b65191334cd61d9276977d3c9595ae3990606001610bff565b610d5133611be7565b610d6d5760405162461bcd60e51b815260040161082b9061310a565b82610f535780610dbf5760405162461bcd60e51b815260206004820152601b60248201527f43616e7420776974686472617720626e622066726f6d20706f6f6c0000000000604482015260640161082b565b3491507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4491906131d7565b6001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e7e57600080fd5b505af1158015610e92573d6000803e3d6000fd5b5050505050610f4e7f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb837f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3e91906131d7565b6001600160a01b03169190612170565b6110dd565b801561101d573360009081526004602052604081208054849290610f789084906131f4565b90915550506001600160a01b037f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb1660009081526004602052604081208054849290610fc5908490613174565b90915550506040518281527f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b03169033906000805160206133548339815191529060200160405180910390a36110dd565b6001600160a01b037f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb16600090815260046020526040812080548492906110659084906131f4565b90915550503360009081526004602052604081208054849290611089908490613174565b909155505060405182815233906001600160a01b037f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb16906000805160206133548339815191529060200160405180910390a35b7f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561113857600080fd5b505af115801561114c573d6000803e3d6000fd5b505050508015158315157fec46d2f046373c0e186ac781e1c6b18401e1b4dc15463c351938e04dd1027e7d8460405161118791815260200190565b60405180910390a3505050565b61119d33611be7565b6111b95760405162461bcd60e51b815260040161082b9061310a565b801515600f60019054906101000a900460ff161515036111eb5760405162461bcd60e51b815260040161082b906131b2565b600f805461ff001916610100831515908102919091179091556040517f2f0beb716d08015c80504ade37e31a64305599dd9a32d0172637a4bf9726dbd090600090a250565b61123933611be7565b6112555760405162461bcd60e51b815260040161082b9061310a565b828181146112a55760405162461bcd60e51b815260206004820152601760248201527f6172726179206c656e677468206d69736d617463686564000000000000000000604482015260640161082b565b6000805b828110156113d2578484828181106112c3576112c361320b565b90506020020135600460008989858181106112e0576112e061320b565b90506020020160208101906112f59190612e7e565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546113249190613174565b90915550859050848281811061133c5761133c61320b565b905060200201358261134e9190613174565b91508686828181106113625761136261320b565b90506020020160208101906113779190612e7e565b6001600160a01b0316336000805160206133548339815191528787858181106113a2576113a261320b565b905060200201356040516113b891815260200190565b60405180910390a3806113ca81613221565b9150506112a9565b5033600090815260046020526040812080548392906113f29084906131f4565b9091555050604080518381526020810183905233917f2b644e2cd640daf5b246ed5491ab2dfb5e8d9b4c6fd5398b985b5fbf1a0e25a4910160405180910390a2505050505050565b61144333611be7565b61145f5760405162461bcd60e51b815260040161082b9061310a565b604051600081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1600080546001600160a01b0319169055565b6114ae33611be7565b6114ca5760405162461bcd60e51b815260040161082b9061310a565b60095460ff16156115105760405162461bcd60e51b815260206004820152601060248201526f416c726561647920456e61626c65642160801b604482015260640161082b565b6009805460ff19166001179055600a54600003611535576115314282611d39565b600a555b6040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150565b61156a33611be7565b6115865760405162461bcd60e51b815260040161082b9061310a565b600c805460ff191685151590811790915560108490556011839055600e82905560408051858152602081018590529081018390527feec54a1ebff8aabde12af12da4f2afccb0265aaf1d568498f7329cbae546850f9060600160405180910390a250505050565b6000806115fa3385611779565b90508281101561165a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161082b565b6109803385858403611c05565b60006107fd338484611dbf565b61167d33611be7565b6116995760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6116c933611be7565b6116e55760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03821660009081526007602052604090205481151560ff9091161515036117255760405162461bcd60e51b815260040161082b906131b2565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91a35050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6117ad33611be7565b6117c95760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6117f333611be7565b61180f5760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b0381166118355760405162461bcd60e51b815260040161082b9061318c565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6118aa33611be7565b6118c65760405162461bcd60e51b815260040161082b9061310a565b600182101561192a5760405162461bcd60e51b815260206004820152602a60248201527f4d61782074786e206c696d69742063616e6e6f74206265206c657373207468616044820152696e20302e30303030312560b01b606482015260840161082b565b6207a12081101561198d5760405162461bcd60e51b815260206004820152602760248201527f4d61782057616c6c6574206c696d69742063616e6e6f74206265206c657373206044820152667468616e20352560c81b606482015260840161082b565b6000629896806119a584670e0499845050340061323a565b6119af9190613259565b90506000629896806119c984670e0499845050340061323a565b6119d39190613259565b6002839055600381905560408051848152602081018390529192507fb6cf947475d47632612a3265c7bc83f5cfed7429546220bfb088c3634f91c229910160405180910390a150505050565b611a2833611be7565b611a445760405162461bcd60e51b815260040161082b9061310a565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611a845760405162461bcd60e51b815260040161082b906131b2565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917f1c6168ae13717a8cda4e1c9276a36c39333240268ba173a5a844201a8f4baa9991a35050565b611ae133611be7565b611afd5760405162461bcd60e51b815260040161082b9061310a565b476000611b0e836108468487611d21565b90506000611b1d826004611d2d565b601954909150611b36906001600160a01b0316826121c7565b601a54611b4c906001600160a01b0316826121c7565b601b54611b62906001600160a01b0316826121c7565b601c54611b78906001600160a01b0316826121c7565b601954601a54601b54601c54604080516001600160a01b0395861681529385166020850152918416838301529290921660608201526080810184905290517fa08f91be8aba9066a7bc396851b6d781cef0ae989dbcab9c649d4c6bceb3bee99181900360a00190a15050505050565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b038316611c675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082b565b6001600160a01b038216611cc85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082b565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611187565b6000610984828461323a565b60006109848284613259565b60006109848284613174565b6000611d518484611779565b90506000198114611db95781811015611dac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161082b565b611db98484848403611c05565b50505050565b611dca83838361226b565b6001600160a01b03831660009081526007602052604090205460019060ff1680611e0c57506001600160a01b03831660009081526007602052604090205460ff165b15611e1957506000611f70565b60095460ff16611e5f5760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc814185d5cd959607a1b604482015260640161082b565b600254821115611ec25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161082b565b7f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b0316836001600160a01b031614611f70576003546001600160a01b038416600090815260046020526040902054611f22908490613174565b1115611f705760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d69740000000000604482015260640161082b565b60007f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b0316856001600160a01b03160361202157600090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316846001600160a01b031614158015611ff35750600a544211155b1561201c576001600160a01b0384166000908152600660205260409020805460ff191660011790555b612066565b7f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b0316846001600160a01b03160361206257506001612066565b5060025b600d54612074906001611d39565b600d5561208185846123fb565b1561209757612091601054612498565b6000600d555b6001600160a01b0385166000908152600460205260409020546120ba9084612164565b6001600160a01b038616600090815260046020526040812091909155826120e157836120ec565b6120ec868584612579565b6001600160a01b0386166000908152600460205260409020549091506121129082611d39565b6001600160a01b038087166000818152600460205260409081902093909355915190881690600080516020613354833981519152906121549085815260200190565b60405180910390a3505050505050565b600061098482846131f4565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526121c2908490612845565b505050565b806000036121d3575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612220576040519150601f19603f3d011682016040523d82523d6000602084013e612225565b606091505b50509050806121c25760405162461bcd60e51b81526020600482015260126024820152710aadcc2c4d8ca40e8de40e6cadcc8408aa8960731b604482015260640161082b565b6001600160a01b03831660009081526008602052604090205460ff16156122c15760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b604482015260640161082b565b6001600160a01b03821660009081526008602052604090205460ff16156123175760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b604482015260640161082b565b600081116123795760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161082b565b6001600160a01b0383166000908152600460205260409020548111156121c25760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161082b565b60115460105430600090815260046020526040812054600f5491938510159211159060ff1615801561242f5750600c5460ff165b80156124385750815b80156124485750600e54600d5410155b80156124515750805b801561248f57507f00000000000000000000000033be7e145cb7e7170dc2be27a77767129c33cccb6001600160a01b0316856001600160a01b031614155b95945050505050565b600f805460ff191660011790556015546013546000916124c2916002916108469182908790611d21565b905060006124d08383612164565b9050476124dc82612917565b60006124e84783612164565b9050600061250e6125056002601354611d2d90919063ffffffff16565b60155490612164565b9050841561253d5761253d8561253860026108468561084660135489611d2190919063ffffffff16565b612ad7565b601854601254612567916001600160a01b031690612562908490610846908790611d21565b6121c7565b5050600f805460ff1916905550505050565b600080600b60008460028111156125925761259261312f565b60028111156125a3576125a361312f565b81526020808201929092526040908101600090812082516080810184528154815260018201548186015260028201548185015260039091015460608201526001600160a01b03891682526006909352908120549192509060ff1680156126105750600f54610100900460ff165b61261e57816060015161262b565b61262b60646127106131f4565b90508060000361263f578492505050610984565b60006126516127106108468885611d21565b9050600061267083610846866020015185611d2190919063ffffffff16565b9050600061268f84610846876000015186611d2190919063ffffffff16565b905060006126a7826126a18686612164565b90612164565b9050821561274c5761dead60005260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546126e69084611d39565b61dead600081905260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd919091556040516001600160a01b038c1690600080516020613354833981519152906127439087815260200190565b60405180910390a35b81156127c5576017546001600160a01b03166000908152600460205260409020546127779083611d39565b601780546001600160a01b03908116600090815260046020908152604091829020949094559154915185815291811692908d1691600080516020613354833981519152910160405180910390a35b801561282d57306000908152600460205260409020546127e59082611d39565b30600081815260046020526040908190209290925590516001600160a01b038c1690600080516020613354833981519152906128249085815260200190565b60405180910390a35b6128378985612164565b9a9950505050505050505050565b600061289a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612bbd9092919063ffffffff16565b8051909150156121c257808060200190518101906128b8919061327b565b6121c25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161082b565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061294c5761294c61320b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ee91906131d7565b81600181518110612a0157612a0161320b565b60200260200101906001600160a01b031690816001600160a01b031681525050612a4c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c05565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612aa1908590600090869030904290600401613298565b600060405180830381600087803b158015612abb57600080fd5b505af1158015612acf573d6000803e3d6000fd5b505050505050565b612b02307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c05565b60165460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015612b91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bb69190613309565b5050505050565b6060612bcc8484600085612bd4565b949350505050565b606082471015612c355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161082b565b600080866001600160a01b03168587604051612c519190613337565b60006040518083038185875af1925050503d8060008114612c8e576040519150601f19603f3d011682016040523d82523d6000602084013e612c93565b606091505b5091509150612ca487838387612caf565b979650505050505050565b60608315612d1e578251600003612d17576001600160a01b0385163b612d175760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161082b565b5081612bcc565b612bcc8383815115612d335781518083602001fd5b8060405162461bcd60e51b815260040161082b9190612d79565b60005b83811015612d68578181015183820152602001612d50565b83811115611db95750506000910152565b6020815260008251806020840152612d98816040850160208701612d4d565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612dc157600080fd5b50565b60008060408385031215612dd757600080fd5b8235612de281612dac565b946020939093013593505050565b803560038110612dff57600080fd5b919050565b60008060008060808587031215612e1a57600080fd5b612e2385612df0565b966020860135965060408601359560600135945092505050565b600080600060608486031215612e5257600080fd5b8335612e5d81612dac565b92506020840135612e6d81612dac565b929592945050506040919091013590565b600060208284031215612e9057600080fd5b813561098481612dac565b600060208284031215612ead57600080fd5b61098482612df0565b600080600060608486031215612ecb57600080fd5b8335612ed681612dac565b92506020840135612ee681612dac565b91506040840135612ef681612dac565b809150509250925092565b8015158114612dc157600080fd5b60008060408385031215612f2257600080fd5b8235612f2d81612dac565b91506020830135612f3d81612f01565b809150509250929050565b600080600060608486031215612f5d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f8957600080fd5b8335612f9481612f01565b9250602084013591506040840135612ef681612f01565b600060208284031215612fbd57600080fd5b813561098481612f01565b60008083601f840112612fda57600080fd5b50813567ffffffffffffffff811115612ff257600080fd5b6020830191508360208260051b850101111561300d57600080fd5b9250929050565b6000806000806040858703121561302a57600080fd5b843567ffffffffffffffff8082111561304257600080fd5b61304e88838901612fc8565b9096509450602087013591508082111561306757600080fd5b5061307487828801612fc8565b95989497509550505050565b60006020828403121561309257600080fd5b5035919050565b600080600080608085870312156130af57600080fd5b8435612e2381612f01565b600080604083850312156130cd57600080fd5b82356130d881612dac565b91506020830135612f3d81612dac565b600080604083850312156130fb57600080fd5b50508035926020909101359150565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561315757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156131875761318761315e565b500190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b6000602082840312156131e957600080fd5b815161098481612dac565b6000828210156132065761320661315e565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600182016132335761323361315e565b5060010190565b60008160001904831182151516156132545761325461315e565b500290565b60008261327657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561328d57600080fd5b815161098481612f01565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132e85784516001600160a01b0316835293830193918301916001016132c3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561331e57600080fd5b8351925060208401519150604084015190509250925092565b60008251613349818460208701612d4d565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208ec8253a86f205492147aa8780c855fc3a969eec8e3d5155e876ca457216924b64736f6c634300080e0033
Verified Source Code Full Match
Compiler: v0.8.14+commit.80d49f37
EVM: london
Optimization: Yes (200 runs)
Sasquatch.sol 1218 lines
/**
https://t.me/SasquatchPortal
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;
library SafeMath {
function tryAdd(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
function trySub(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
function tryMul(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
// 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 (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
function tryDiv(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
function tryMod(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, 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 from,
address to,
uint256 amount
) external returns (bool);
}
library Address {
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
(bool success, ) = recipient.call{value: amount}("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
function functionCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
0,
"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"
);
(bool success, bytes memory returndata) = target.call{value: value}(
data
);
return
verifyCallResultFromTarget(
target,
success,
returndata,
errorMessage
);
}
function functionStaticCall(
address target,
bytes memory data
) internal view returns (bytes memory) {
return
functionStaticCall(
target,
data,
"Address: low-level static call failed"
);
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return
verifyCallResultFromTarget(
target,
success,
returndata,
errorMessage
);
}
function functionDelegateCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return
functionDelegateCall(
target,
data,
"Address: low-level delegate call failed"
);
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return
verifyCallResultFromTarget(
target,
success,
returndata,
errorMessage
);
}
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(
bytes memory returndata,
string memory errorMessage
) private pure {
// 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
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
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);
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
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"
);
}
}
}
abstract contract Auth {
address public owner;
mapping(address => bool) internal authorizations;
constructor(address _owner) {
owner = _owner;
authorizations[_owner] = true;
}
modifier onlyOwner() {
require(isOwner(msg.sender), "!OWNER");
_;
}
modifier authorized() {
require(isAuthorized(msg.sender), "!AUTHORIZED");
_;
}
function authorize(address adr) public authorized {
authorizations[adr] = true;
}
function unauthorize(address adr) public authorized {
authorizations[adr] = false;
}
function isOwner(address account) public view returns (bool) {
return account == owner;
}
function isAuthorized(address adr) public view returns (bool) {
return authorizations[adr];
}
function transferOwnership(address payable adr) public authorized {
require(adr != address(0), "Zero Address");
owner = adr;
authorizations[adr] = true;
emit OwnershipTransferred(adr);
}
function renounceOwnership() external authorized {
emit OwnershipTransferred(address(0));
owner = address(0);
}
event OwnershipTransferred(address owner);
}
interface IFactory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
}
interface IRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
)
external
payable
returns (uint amountToken, uint amountETH, uint liquidity);
function 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;
}
interface IPair {
function sync() external;
}
interface IWeth {
function deposit() external payable;
}
contract Sasquatch is IERC20, Auth {
using SafeMath for uint256;
using SafeERC20 for IERC20;
string private constant _name = "SASQUATCH";
string private constant _symbol = "SQUATCH";
uint8 private constant _decimals = 9;
uint256 private constant _totalSupply = 1010101010000000000;
address constant DEAD = 0x000000000000000000000000000000000000dEaD;
uint256 public _maxTxAmount = (_totalSupply * 10000) / 10000;
uint256 public _maxWalletAmount = (_totalSupply * 10000) / 10000;
mapping(address => uint256) _balances;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) _isBot;
mapping(address => bool) isWhitelisted;
mapping(address => bool) isBlacklisted;
IRouter public immutable router;
address public immutable pair;
bool tradingEnabled = false;
uint256 startedTime;
uint256 constant feeDenominator = 10000;
struct Fee {
uint256 stakingFee;
uint256 burnFee;
uint256 liquidFee;
uint256 totalFee;
}
enum TransactionType {
BUY,
SELL,
TRANSFER
}
mapping(TransactionType => Fee) public fees;
bool swapAndLiquifyEnabled = false;
uint256 swapTimes;
uint256 minTransactionsBeforeSwap = 7;
bool swapping;
bool antiBotEnabled = true;
uint256 swapThreshold = (_totalSupply * 300) / 100000;
uint256 _minTokenAmount = (_totalSupply * 15) / 100000;
uint256 marketing_divisor = 50;
uint256 liquidity_divisor = 50;
uint256 team_divisor = 0;
uint256 total_divisor = 100;
address liquidity_receiver;
address staking_receiver;
address marketing_receiver;
address team1_receiver;
address team2_receiver;
address team3_receiver;
address team4_receiver;
event WhitelistUpdated(address indexed account, bool indexed whitelisted);
event BotUpdated(address indexed account, bool indexed isBot);
event BlacklistedUpdated(address indexed account, bool indexed blacklisted);
event AntiBotStateUpdated(bool indexed enabled);
event TradingEnabled();
event TradingDisabled();
event SwapBackSettingsUpdated(
bool indexed enabled,
uint256 threshold,
uint256 minLimit,
uint256 _minTransactions
);
event MaxLimitsUpdated(uint256 maxTxAmount, uint256 maxWalletAmount);
event UnsupportedTokensRecoverd(
address indexed token,
address receiver,
uint256 amount
);
event DivisorsUpdated(uint256 team, uint256 liquidity, uint256 marketing);
event TeamFundsDistributed(
address team1,
address team2,
address team3,
address team4,
uint256 amount
);
event FeesUpdated(
TransactionType indexed transactionType,
uint256 burnFee,
uint256 stakingFee,
uint256 swapAndLiquifyFee
);
event FeesAddressesUpdated(
address marketing,
address liquidity,
address staking
);
event TeamAddressesUpdated(
address team1,
address team2,
address team3,
address team4
);
event ForceAdjustedLP(bool indexed sasquatch, uint256 amount, bool indexed add);
event TokensAirdroped(
address indexed sender,
uint256 length,
uint256 airdropedAmount
);
modifier lockTheSwap() {
swapping = true;
_;
swapping = false;
}
constructor() Auth(msg.sender) {
IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
address _pair = IFactory(_router.factory()).createPair(
address(this),
_router.WETH()
);
router = _router;
pair = _pair;
// initilasing Fees
fees[TransactionType.SELL] = Fee(200, 0, 100, 0);
fees[TransactionType.BUY] = Fee(300, 0, 0, 0);
fees[TransactionType.TRANSFER] = Fee(0, 0, 0, 0);
isBlacklisted[address(0)] = true;
isWhitelisted[msg.sender] = true;
isWhitelisted[address(this)] = true;
liquidity_receiver = address(this);
team1_receiver = msg.sender;
team2_receiver = msg.sender;
team3_receiver = msg.sender;
team4_receiver = msg.sender;
staking_receiver = msg.sender;
marketing_receiver = msg.sender;
_balances[msg.sender] = _totalSupply;
emit Transfer(address(0), msg.sender, _totalSupply);
}
receive() external payable {}
function name() public pure returns (string memory) {
return _name;
}
function symbol() public pure returns (string memory) {
return _symbol;
}
function decimals() public pure returns (uint8) {
return _decimals;
}
function totalSupply() public pure override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function transfer(
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function allowance(
address owner,
address spender
) public view override returns (uint256) {
return _allowances[owner][spender];
}
function isBot(address _address) public view returns (bool) {
return _isBot[_address];
}
function approve(
address spender,
uint256 amount
) public override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function getCirculatingSupply() public view returns (uint256) {
return _totalSupply.sub(balanceOf(DEAD));
}
function whitelistAddress(
address _address,
bool _whitelist
) external authorized {
require(isWhitelisted[_address] != _whitelist, "Already set");
isWhitelisted[_address] = _whitelist;
emit WhitelistUpdated(_address, _whitelist);
}
function blacklistAddress(
address _address,
bool _blacklist
) external authorized {
require(isBlacklisted[_address] != _blacklist, "Already set");
isBlacklisted[_address] = _blacklist;
emit BlacklistedUpdated(_address, _blacklist);
}
function updateBot(address _address, bool isBot_) external authorized {
require(_isBot[_address] != isBot_, "Already set");
_isBot[_address] = isBot_;
emit BotUpdated(_address, isBot_);
}
function enableAntiBot(bool _enable) external authorized {
require(antiBotEnabled != _enable, "Already set");
antiBotEnabled = _enable;
emit AntiBotStateUpdated(_enable);
}
function enableTrading(uint256 _input) external authorized {
require(!tradingEnabled, "Already Enabled!");
tradingEnabled = true;
if (startedTime == 0)
// initialise only once
startedTime = block.timestamp.add(_input);
emit TradingEnabled();
}
function updateSwapBackSettings(
bool _enabled,
uint256 _threshold,
uint256 _minLimit,
uint256 _minTransactionsBeforeSwap
) external authorized {
swapAndLiquifyEnabled = _enabled;
swapThreshold = _threshold;
_minTokenAmount = _minLimit;
minTransactionsBeforeSwap = _minTransactionsBeforeSwap;
emit SwapBackSettingsUpdated(
_enabled,
_threshold,
_minLimit,
_minTransactionsBeforeSwap
);
}
function transferFrom(
address from,
address to,
uint256 amount
) public override returns (bool) {
_spendAllowance(from, msg.sender, amount);
_transfer(from, to, amount);
return true;
}
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
_approve(
msg.sender,
spender,
allowance(msg.sender, spender) + addedValue
);
return true;
}
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
uint256 currentAllowance = allowance(msg.sender, spender);
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(msg.sender, spender, currentAllowance - subtractedValue);
}
return true;
}
function _approve(address owner, address spender, uint256 amount) internal {
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 sender,
address recipient,
uint256 amount
) private {
preTxCheck(sender, recipient, amount);
bool takeFee = true;
if (isWhitelisted[sender] || isWhitelisted[recipient]) {
takeFee = false;
} else {
require(tradingEnabled, "Trading is Paused");
require(
amount <= _maxTxAmount,
"Transfer amount exceeds the maxTxAmount."
);
if (recipient != pair) {
require(
_balances[recipient] + amount <= _maxWalletAmount,
"Wallet amount exceeds limit"
);
}
}
TransactionType transactionType;
if (sender == pair) {
transactionType = TransactionType.BUY;
if (
recipient != address(router) && block.timestamp <= startedTime
) {
_isBot[recipient] = true;
}
} else if (recipient == pair) {
transactionType = TransactionType.SELL;
} else {
transactionType = TransactionType.TRANSFER;
}
swapTimes = swapTimes.add(1);
if (shouldSwapBack(sender, amount)) {
swapAndLiquify(swapThreshold);
swapTimes = 0;
}
_balances[sender] = _balances[sender].sub(amount);
uint256 amountReceived = takeFee
? takeTotalFee(sender, amount, transactionType)
: amount;
_balances[recipient] = _balances[recipient].add(amountReceived);
emit Transfer(sender, recipient, amountReceived);
}
function preTxCheck(
address sender,
address recipient,
uint256 amount
) internal view {
require(!isBlacklisted[sender], "Blackisted");
require(!isBlacklisted[recipient], "Blackisted");
require(amount > 0, "Transfer amount must be greater than zero");
require(
amount <= balanceOf(sender),
"You are trying to transfer more than your balance"
);
}
function takeTotalFee(
address sender,
uint256 amount,
TransactionType transactionType
) internal returns (uint256) {
Fee memory fee = fees[transactionType];
uint256 totalFees = _isBot[sender] && antiBotEnabled
? (feeDenominator - 100)
: fee.totalFee; // 99% fees if bot
if (totalFees == 0) {
return amount;
}
uint256 feeAmount = (amount.mul(totalFees)).div(feeDenominator);
uint256 burnAmount = (feeAmount.mul(fee.burnFee)).div(totalFees);
uint256 stakingAmount = (feeAmount.mul(fee.stakingFee)).div(totalFees);
uint256 liquidAmount = feeAmount.sub(burnAmount).sub(stakingAmount);
if (burnAmount > 0) {
_balances[address(DEAD)] = _balances[address(DEAD)].add(burnAmount);
emit Transfer(sender, address(DEAD), burnAmount);
}
if (stakingAmount > 0) {
_balances[address(staking_receiver)] = _balances[
address(staking_receiver)
].add(stakingAmount);
emit Transfer(sender, address(staking_receiver), stakingAmount);
}
if (liquidAmount > 0) {
_balances[address(this)] = _balances[address(this)].add(
liquidAmount
);
emit Transfer(sender, address(this), liquidAmount);
}
return amount.sub(feeAmount);
}
function updateMaxLimits(
uint256 _transaction,
uint256 _wallet
) external authorized {
require(
_transaction >= 1,
"Max txn limit cannot be less than 0.00001%"
);
require(_wallet >= 500000, "Max Wallet limit cannot be less than 5%");
uint256 newTxLimit = (_totalSupply * _transaction) / 10000000;
uint256 newWalletLimit = (_totalSupply * _wallet) / 10000000;
_maxTxAmount = newTxLimit;
_maxWalletAmount = newWalletLimit;
emit MaxLimitsUpdated(_maxTxAmount, _maxWalletAmount);
}
function recoverUnsupportedTokens(
address _token,
address _receiver,
uint256 _percentage
) external authorized {
uint256 amount = IERC20(_token).balanceOf(address(this));
uint256 amountToWithdraw = amount.mul(_percentage).div(10000);
IERC20(_token).safeTransfer(_receiver, amountToWithdraw);
emit UnsupportedTokensRecoverd(_token, _receiver, amountToWithdraw);
}
function shouldSwapBack(
address sender,
uint256 amount
) internal view returns (bool) {
bool aboveMin = amount >= _minTokenAmount;
bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
return
!swapping &&
swapAndLiquifyEnabled &&
aboveMin &&
swapTimes >= minTransactionsBeforeSwap &&
aboveThreshold &&
sender != pair;
}
function swapAndLiquify(uint256 tokens) private lockTheSwap {
uint256 amountToLiquify = tokens
.mul(liquidity_divisor)
.div(total_divisor)
.div(2);
uint256 amountToSwap = tokens.sub(amountToLiquify);
uint256 initialBalance = address(this).balance;
swapTokensForETH(amountToSwap);
uint256 deltaBalance = address(this).balance.sub(initialBalance);
uint256 totalETHFee = total_divisor.sub(liquidity_divisor.div(2));
if (amountToLiquify > 0) {
addLiquidity(
amountToLiquify,
deltaBalance.mul(liquidity_divisor).div(totalETHFee).div(2)
);
}
// transfer ETH to marketing, teamFunds stay in contract for future distribution.
transferETH(
marketing_receiver,
deltaBalance.mul(marketing_divisor).div(totalETHFee)
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
_approve(address(this), address(router), tokenAmount);
router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0,
0,
liquidity_receiver,
block.timestamp
);
}
function swapTokensForETH(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = router.WETH();
_approve(address(this), address(router), tokenAmount);
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
function transferETH(address recipient, uint256 amount) private {
if (amount == 0) return;
(bool success, ) = payable(recipient).call{value: amount}("");
require(success, "Unable to send ETH");
}
function airdropTokens(
address[] calldata accounts,
uint256[] calldata amounts
) external authorized {
uint256 length = accounts.length;
require(length == amounts.length, "array length mismatched");
uint256 airdropAmount = 0;
for (uint256 i = 0; i < length; i++) {
// updating balance directly instead of calling transfer to save gas
_balances[accounts[i]] += amounts[i];
airdropAmount += amounts[i];
emit Transfer(msg.sender, accounts[i], amounts[i]);
}
_balances[msg.sender] -= airdropAmount;
emit TokensAirdroped(msg.sender, length, airdropAmount);
}
function forceAdjustLP(
bool sasquatch,
uint256 amount,
bool add
) external payable authorized {
if (!sasquatch) {
require(add, "Cant withdraw bnb from pool");
amount = msg.value;
IWeth(router.WETH()).deposit{value: amount}();
IERC20(router.WETH()).safeTransfer(pair, amount);
} else {
if (add) {
_balances[msg.sender] -= amount;
_balances[pair] += amount;
emit Transfer(msg.sender, pair, amount);
} else {
_balances[pair] -= amount;
_balances[msg.sender] += amount;
emit Transfer(pair, msg.sender, amount);
}
}
IPair(pair).sync();
emit ForceAdjustedLP(sasquatch, amount, add);
}
function updateDivisors(
uint256 _team,
uint256 _liquidity,
uint256 _marketing
) external authorized {
team_divisor = _team;
liquidity_divisor = _liquidity;
marketing_divisor = _marketing;
total_divisor = _team.add(_liquidity).add(_marketing);
emit DivisorsUpdated(_team, _liquidity, _marketing);
}
function distributeTeamFunds(
uint256 _numerator,
uint256 _denominator
) external authorized {
uint256 ethAmount = address(this).balance;
uint256 distributeAmount = ethAmount.mul(_numerator).div(_denominator);
uint256 amountToSend = distributeAmount.div(4);
transferETH(team1_receiver, amountToSend);
transferETH(team2_receiver, amountToSend);
transferETH(team3_receiver, amountToSend);
transferETH(team4_receiver, amountToSend);
emit TeamFundsDistributed(
team1_receiver,
team2_receiver,
team3_receiver,
team4_receiver,
distributeAmount
);
}
function updateFee(
TransactionType transactionType,
uint256 _burnFee,
uint256 _stakingFee,
uint256 _swapAndLiquifyFee
) external authorized {
require(
_burnFee.add(_stakingFee).add(_swapAndLiquifyFee) <=
feeDenominator.mul(3).div(20),
"Tax cannot be more than 15%"
);
Fee storage fee = fees[transactionType];
fee.burnFee = _burnFee;
fee.stakingFee = _stakingFee;
fee.liquidFee = _swapAndLiquifyFee;
fee.totalFee = _burnFee.add(_stakingFee).add(_swapAndLiquifyFee);
emit FeesUpdated(
transactionType,
_burnFee,
_stakingFee,
_swapAndLiquifyFee
);
}
function updateFeesAddresses(
address _marketing,
address _liquidity,
address _staking
) external authorized {
require(_marketing != address(0), "Zero Address");
require(_liquidity != address(0), "Zero Address");
require(_staking != address(0), "Zero Address");
marketing_receiver = _marketing;
liquidity_receiver = _liquidity;
staking_receiver = _staking;
emit FeesAddressesUpdated(_marketing, _liquidity, _staking);
}
}
Read Contract
_maxTxAmount 0x7d1db4a5 → uint256
_maxWalletAmount 0x6c0a24eb → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
fees 0x357c1354 → uint256, uint256, uint256, uint256
getCirculatingSupply 0x2b112e49 → uint256
isAuthorized 0xfe9fbb80 → bool
isBot 0x3bbac579 → bool
isOwner 0x2f54bf6e → bool
name 0x06fdde03 → string
owner 0x8da5cb5b → address
pair 0xa8aa1b31 → address
router 0xf887ea40 → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
Write Contract 23 functions
These functions modify contract state and require a wallet transaction to execute.
airdropTokens 0x706f6937
address[] accounts
uint256[] amounts
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
authorize 0xb6a5d7de
address adr
blacklistAddress 0x455a4396
address _address
bool _blacklist
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
distributeTeamFunds 0xfc5ea5e6
uint256 _numerator
uint256 _denominator
enableAntiBot 0x6b7f8b90
bool _enable
enableTrading 0x82aa7c68
uint256 _input
forceAdjustLP 0x569c9b33
bool sasquatch
uint256 amount
bool add
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
recoverUnsupportedTokens 0x39264b66
address _token
address _receiver
uint256 _percentage
renounceOwnership 0x715018a6
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address adr
unauthorize 0xf0b37c04
address adr
updateBot 0xfac1b9bc
address _address
bool isBot_
updateDivisors 0x4a5a863a
uint256 _team
uint256 _liquidity
uint256 _marketing
updateFee 0x0eefe44b
uint8 transactionType
uint256 _burnFee
uint256 _stakingFee
uint256 _swapAndLiquifyFee
updateFeesAddresses 0x40005fbe
address _marketing
address _liquidity
address _staking
updateMaxLimits 0xf319ae77
uint256 _transaction
uint256 _wallet
updateSwapBackSettings 0x8e5c3ad3
bool _enabled
uint256 _threshold
uint256 _minLimit
uint256 _minTransactionsBeforeSwap
whitelistAddress 0xb9a45aac
address _address
bool _whitelist
Recent Transactions
No transactions found for this address