Address Contract Partially Verified
Address
0x0C0725282cbF037e6781fE84E0361B01daA88DdF
Balance
0 ETH
Nonce
1
Code Size
14831 bytes
Creator
0x3D6753e3...04da at tx 0x2bfc9ab8...8d48a9
Indexed Transactions
0
Contract Bytecode
14831 bytes
0x60806040526004361061023f5760003560e01c806392108c861161012e578063cffd129c116100ab578063f2fde38b1161006f578063f2fde38b14610854578063f887ea401461087d578063f98eb6e1146108a8578063fb235f34146108bf578063fea9e942146108e857610246565b8063cffd129c1461075b578063d505accf14610786578063dd62ed3e146107af578063eec1c69f146107ec578063f2c5d9df1461082957610246565b8063b3e5cb45116100f2578063b3e5cb4514610686578063b880b69a146106b1578063c45a0155146106dc578063c473413a14610707578063cd5f35801461073257610246565b806392108c861461059f57806395d89b41146105ca578063a0712d68146105f5578063a8aa1b311461061e578063a9059cbb1461064957610246565b806342966c68116101bc57806375f0a8741161018057806375f0a874146104b65780637d5ea21b146104e15780637ecebe001461050c5780637f50ce17146105495780638da5cb5b1461057457610246565b806342966c68146103e5578063444784251461040e5780635d098b381461043957806370a0823114610462578063715018a61461049f57610246565b8063270fd20a11610203578063270fd20a146103225780632ca1b45d1461034d578063307aebc914610364578063313ce5671461038f5780633644e515146103ba57610246565b806306fdde031461024857806307df7a0d14610273578063095ea7b31461027d57806318160ddd146102ba57806323b872dd146102e557610246565b3661024657005b005b34801561025457600080fd5b5061025d610911565b60405161026a9190612a46565b60405180910390f35b61027b61099f565b005b34801561028957600080fd5b506102a4600480360381019061029f9190612b01565b610c84565b6040516102b19190612b5c565b60405180910390f35b3480156102c657600080fd5b506102cf610d76565b6040516102dc9190612b86565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190612ba1565b610d7c565b6040516103199190612b5c565b60405180910390f35b34801561032e57600080fd5b506103376113cd565b6040516103449190612b5c565b60405180910390f35b34801561035957600080fd5b506103626113e0565b005b34801561037057600080fd5b50610379611493565b6040516103869190612b5c565b60405180910390f35b34801561039b57600080fd5b506103a46114a6565b6040516103b19190612c10565b60405180910390f35b3480156103c657600080fd5b506103cf6114ca565b6040516103dc9190612c44565b60405180910390f35b3480156103f157600080fd5b5061040c60048036038101906104079190612c5f565b611527565b005b34801561041a57600080fd5b50610423611534565b6040516104309190612c9b565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190612cb6565b61155a565b005b34801561046e57600080fd5b5061048960048036038101906104849190612cb6565b611615565b6040516104969190612b86565b60405180910390f35b3480156104ab57600080fd5b506104b461162d565b005b3480156104c257600080fd5b506104cb611641565b6040516104d89190612c9b565b60405180910390f35b3480156104ed57600080fd5b506104f6611667565b6040516105039190612b5c565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190612cb6565b61167a565b6040516105409190612b86565b60405180910390f35b34801561055557600080fd5b5061055e611692565b60405161056b9190612b5c565b60405180910390f35b34801561058057600080fd5b5061058961169f565b6040516105969190612c9b565b60405180910390f35b3480156105ab57600080fd5b506105b46116c8565b6040516105c19190612b5c565b60405180910390f35b3480156105d657600080fd5b506105df6116e6565b6040516105ec9190612a46565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190612c5f565b611774565b005b34801561062a57600080fd5b506106336117c8565b6040516106409190612d42565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190612b01565b6117ee565b60405161067d9190612b5c565b60405180910390f35b34801561069257600080fd5b5061069b611803565b6040516106a89190612b5c565b60405180910390f35b3480156106bd57600080fd5b506106c661180e565b6040516106d39190612c9b565b60405180910390f35b3480156106e857600080fd5b506106f1611834565b6040516106fe9190612d7e565b60405180910390f35b34801561071357600080fd5b5061071c61185a565b6040516107299190612b86565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190612cb6565b611860565b005b34801561076757600080fd5b5061077061191b565b60405161077d9190612b86565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190612df1565b611921565b005b3480156107bb57600080fd5b506107d660048036038101906107d19190612e93565b611c1a565b6040516107e39190612b86565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190612f0f565b611c3f565b6040516108209190612b5c565b60405180910390f35b34801561083557600080fd5b5061083e611dc0565b60405161084b9190612c9b565b60405180910390f35b34801561086057600080fd5b5061087b60048036038101906108769190612cb6565b611de6565b005b34801561088957600080fd5b50610892611e69565b60405161089f9190612f5d565b60405180910390f35b3480156108b457600080fd5b506108bd611e8f565b005b3480156108cb57600080fd5b506108e660048036038101906108e19190612cb6565b611f42565b005b3480156108f457600080fd5b5061090f600480360381019061090a9190612cb6565b611ffd565b005b6001805461091e90612fa7565b80601f016020809104026020016040519081016040528092919081815260200182805461094a90612fa7565b80156109975780601f1061096c57610100808354040283529160200191610997565b820191906000526020600020905b81548152906001019060200180831161097a57829003601f168201915b505050505081565b6109a76120b8565b600c60159054906101000a900460ff16156109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee90613024565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f90613090565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090613090565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190613090565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3290613090565b60405180910390fd5b6001600c60156101000a81548160ff0219169083151502179055507f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe60405160405180910390a1565b600081600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d649190612b86565b60405180910390a36001905092915050565b60035481565b60003373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610ee8576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ee6578281610e6591906130df565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505b600f60159054906101000a900460ff166110db57610f0461169f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610f725750610f4261169f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015610fcc5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156110265750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156110da576000612710609660035461103f9190613113565b6110499190613184565b90508083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461109791906131b5565b11156110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf9061325b565b60405180910390fd5b505b5b6110e3612136565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411801561113d5750600c60009054906101000a900460ff16155b80156111975750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156111cf57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156111dd576111dc612159565b5b60006111ea85858561250b565b9050600081846111fa91906130df565b905083600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461124b91906130df565b9250508190555080600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112fc9190612b86565b60405180910390a360008211156113c05781600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113b79190612b86565b60405180910390a35b6001925050509392505050565b600f60159054906101000a900460ff1681565b6113e86120b8565b600f60149054906101000a900460ff1615611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f906132c7565b60405180910390fd5b6001600f60146101000a81548160ff0219169083151502179055506105dc600a819055506105dc600b819055507fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436860405160405180910390a1565b600c60159054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000001081565b60007f00000000000000000000000000000000000000000000000000000000000000014614611500576114fb6126be565b611522565b7feb9a128429a9420706947435340a8d55a21df4ed6257e56185f960fd2f0af6cd5b905090565b611531338261274a565b50565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115626120b8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c890613090565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60046020528060005260406000206000915090505481565b6116356120b8565b61163f600061281a565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60149054906101000a900460ff1681565b60066020528060005260406000206000915090505481565b600062aa36a74614905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006116d2611803565b806116e157506116e0611692565b5b905090565b600280546116f390612fa7565b80601f016020809104026020016040519081016040528092919081815260200182805461171f90612fa7565b801561176c5780601f106117415761010080835404028352916020019161176c565b820191906000526020600020905b81548152906001019060200180831161174f57829003601f168201915b505050505081565b61177c6116c8565b6117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b290613333565b60405180910390fd5b6117c533826128de565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006117fb338484610d7c565b905092915050565b600060054614905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6118686120b8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ce90613090565b60405180910390fd5b80600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b42841015611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b9061339f565b60405180910390fd5b600060016119706114ca565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98a8a8a600660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558b6040516020016119f8969594939291906133bf565b60405160208183030381529060405280519060200120604051602001611a1f929190613498565b6040516020818303038152906040528051906020012085858560405160008152602001604052604051611a5594939291906134cf565b6020604051602081039080840390855afa158015611a77573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611aeb57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2190613560565b60405180910390fd5b85600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051611c099190612b86565b60405180910390a350505050505050565b6005602052816000526040600020602052806000526040600020600091509150505481565b600080611c4a6129ae565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051611dae9190612b86565b60405180910390a36001915050919050565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611dee6120b8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e54906135f2565b60405180910390fd5b611e668161281a565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e976120b8565b600f60159054906101000a900460ff1615611ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ede906132c7565b60405180910390fd5b6001600f60156101000a81548160ff0219169083151502179055506101f4600a819055506101f4600b819055507fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a60405160405180910390a1565b611f4a6120b8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb090613090565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120056120b8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90613090565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120c06129ae565b73ffffffffffffffffffffffffffffffffffffffff166120de61169f565b73ffffffffffffffffffffffffffffffffffffffff1614612134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212b9061365e565b60405180910390fd5b565b6000612710600260035461214a9190613113565b6121549190613184565b905090565b6001600c60006101000a81548160ff0219169083151502179055506000600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600267ffffffffffffffff8111156121d5576121d461367e565b5b6040519080825280602002602001820160405280156122035781602001602082028036833780820191505090505b509050308160008151811061221b5761221a6136ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e691906136f1565b816001815181106122fa576122f96136ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612398959493929190613817565b600060405180830381600087803b1580156123b257600080fd5b505af11580156123c6573d6000803e3d6000fd5b50505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166005476124109190613184565b60405161241c906138a2565b60006040518083038185875af1925050503d8060008114612459576040519150601f19603f3d011682016040523d82523d6000602084013e61245e565b606091505b505050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516124a7906138a2565b60006040518083038185875af1925050503d80600081146124e4576040519150601f19603f3d011682016040523d82523d6000602084013e6124e9565b606091505b50505050506000600c60006101000a81548160ff021916908315150217905550565b600061251561169f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612580575061255161169f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806125b657503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156125c457600090506126b7565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361263b57612710600a548361262a9190613113565b6126349190613184565b90506126b7565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126b257612710600b54836126a19190613113565b6126ab9190613184565b90506126b7565b600090505b9392505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516126f0919061394f565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6463060405160200161272f959493929190613966565b60405160208183030381529060405280519060200120905090565b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279991906130df565b9250508190555080600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161280e9190612b86565b60405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600360008282546128f091906131b5565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129a29190612b86565b60405180910390a35050565b600033905090565b600081519050919050565b600082825260208201905092915050565b60005b838110156129f05780820151818401526020810190506129d5565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a18826129b6565b612a2281856129c1565b9350612a328185602086016129d2565b612a3b816129fc565b840191505092915050565b60006020820190508181036000830152612a608184612a0d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a9882612a6d565b9050919050565b612aa881612a8d565b8114612ab357600080fd5b50565b600081359050612ac581612a9f565b92915050565b6000819050919050565b612ade81612acb565b8114612ae957600080fd5b50565b600081359050612afb81612ad5565b92915050565b60008060408385031215612b1857612b17612a68565b5b6000612b2685828601612ab6565b9250506020612b3785828601612aec565b9150509250929050565b60008115159050919050565b612b5681612b41565b82525050565b6000602082019050612b716000830184612b4d565b92915050565b612b8081612acb565b82525050565b6000602082019050612b9b6000830184612b77565b92915050565b600080600060608486031215612bba57612bb9612a68565b5b6000612bc886828701612ab6565b9350506020612bd986828701612ab6565b9250506040612bea86828701612aec565b9150509250925092565b600060ff82169050919050565b612c0a81612bf4565b82525050565b6000602082019050612c256000830184612c01565b92915050565b6000819050919050565b612c3e81612c2b565b82525050565b6000602082019050612c596000830184612c35565b92915050565b600060208284031215612c7557612c74612a68565b5b6000612c8384828501612aec565b91505092915050565b612c9581612a8d565b82525050565b6000602082019050612cb06000830184612c8c565b92915050565b600060208284031215612ccc57612ccb612a68565b5b6000612cda84828501612ab6565b91505092915050565b6000819050919050565b6000612d08612d03612cfe84612a6d565b612ce3565b612a6d565b9050919050565b6000612d1a82612ced565b9050919050565b6000612d2c82612d0f565b9050919050565b612d3c81612d21565b82525050565b6000602082019050612d576000830184612d33565b92915050565b6000612d6882612d0f565b9050919050565b612d7881612d5d565b82525050565b6000602082019050612d936000830184612d6f565b92915050565b612da281612bf4565b8114612dad57600080fd5b50565b600081359050612dbf81612d99565b92915050565b612dce81612c2b565b8114612dd957600080fd5b50565b600081359050612deb81612dc5565b92915050565b600080600080600080600060e0888a031215612e1057612e0f612a68565b5b6000612e1e8a828b01612ab6565b9750506020612e2f8a828b01612ab6565b9650506040612e408a828b01612aec565b9550506060612e518a828b01612aec565b9450506080612e628a828b01612db0565b93505060a0612e738a828b01612ddc565b92505060c0612e848a828b01612ddc565b91505092959891949750929550565b60008060408385031215612eaa57612ea9612a68565b5b6000612eb885828601612ab6565b9250506020612ec985828601612ab6565b9150509250929050565b600063ffffffff82169050919050565b612eec81612ed3565b8114612ef757600080fd5b50565b600081359050612f0981612ee3565b92915050565b600060208284031215612f2557612f24612a68565b5b6000612f3384828501612efa565b91505092915050565b6000612f4782612d0f565b9050919050565b612f5781612f3c565b82525050565b6000602082019050612f726000830184612f4e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fbf57607f821691505b602082108103612fd257612fd1612f78565b5b50919050565b7f616c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b600061300e6010836129c1565b915061301982612fd8565b602082019050919050565b6000602082019050818103600083015261303d81613001565b9050919050565b7f6e756c6c20616464726573730000000000000000000000000000000000000000600082015250565b600061307a600c836129c1565b915061308582613044565b602082019050919050565b600060208201905081810360008301526130a98161306d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130ea82612acb565b91506130f583612acb565b925082820390508181111561310d5761310c6130b0565b5b92915050565b600061311e82612acb565b915061312983612acb565b925082820261313781612acb565b9150828204841483151761314e5761314d6130b0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061318f82612acb565b915061319a83612acb565b9250826131aa576131a9613155565b5b828204905092915050565b60006131c082612acb565b91506131cb83612acb565b92508282019050808211156131e3576131e26130b0565b5b92915050565b7f526563697069656e7420686f6c64696e672065786365656473206d6178696d7560008201527f6d20616c6c6f7765640000000000000000000000000000000000000000000000602082015250565b60006132456029836129c1565b9150613250826131e9565b604082019050919050565b6000602082019050818103600083015261327481613238565b9050919050565b7f746869732069732061206f6e652073686f742066756e6374696f6e0000000000600082015250565b60006132b1601b836129c1565b91506132bc8261327b565b602082019050919050565b600060208201905081810360008301526132e0816132a4565b9050919050565b7f6e6f7420746573746e6574000000000000000000000000000000000000000000600082015250565b600061331d600b836129c1565b9150613328826132e7565b602082019050919050565b6000602082019050818103600083015261334c81613310565b9050919050565b7f5045524d49545f444541444c494e455f45585049524544000000000000000000600082015250565b60006133896017836129c1565b915061339482613353565b602082019050919050565b600060208201905081810360008301526133b88161337c565b9050919050565b600060c0820190506133d46000830189612c35565b6133e16020830188612c8c565b6133ee6040830187612c8c565b6133fb6060830186612b77565b6134086080830185612b77565b61341560a0830184612b77565b979650505050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000613461600283613420565b915061346c8261342b565b600282019050919050565b6000819050919050565b61349261348d82612c2b565b613477565b82525050565b60006134a382613454565b91506134af8285613481565b6020820191506134bf8284613481565b6020820191508190509392505050565b60006080820190506134e46000830187612c35565b6134f16020830186612c01565b6134fe6040830185612c35565b61350b6060830184612c35565b95945050505050565b7f494e56414c49445f5349474e4552000000000000000000000000000000000000600082015250565b600061354a600e836129c1565b915061355582613514565b602082019050919050565b600060208201905081810360008301526135798161353d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135dc6026836129c1565b91506135e782613580565b604082019050919050565b6000602082019050818103600083015261360b816135cf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136486020836129c1565b915061365382613612565b602082019050919050565b600060208201905081810360008301526136778161363b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506136eb81612a9f565b92915050565b60006020828403121561370757613706612a68565b5b6000613715848285016136dc565b91505092915050565b6000819050919050565b600061374361373e6137398461371e565b612ce3565b612acb565b9050919050565b61375381613728565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61378e81612a8d565b82525050565b60006137a08383613785565b60208301905092915050565b6000602082019050919050565b60006137c482613759565b6137ce8185613764565b93506137d983613775565b8060005b8381101561380a5781516137f18882613794565b97506137fc836137ac565b9250506001810190506137dd565b5085935050505092915050565b600060a08201905061382c6000830188612b77565b613839602083018761374a565b818103604083015261384b81866137b9565b905061385a6060830185612c8c565b6138676080830184612b77565b9695505050505050565b600081905092915050565b50565b600061388c600083613871565b91506138978261387c565b600082019050919050565b60006138ad8261387f565b9150819050919050565b60008190508160005260206000209050919050565b600081546138d981612fa7565b6138e38186613871565b945060018216600081146138fe576001811461391357613946565b60ff1983168652811515820286019350613946565b61391c856138b7565b60005b8381101561393e5781548189015260018201915060208101905061391f565b838801955050505b50505092915050565b600061395b82846138cc565b915081905092915050565b600060a08201905061397b6000830188612c35565b6139886020830187612c35565b6139956040830186612c35565b6139a26060830185612b77565b6139af6080830184612c8c565b969550505050505056fea2646970667358221220b36378c0fbd02173cc8be55b46ef3bd040ced4ec2960814385d32fff9167056964736f6c63430008130033
Verified Source Code Partial Match
Compiler: v0.8.19+commit.7dd6d404
EVM: paris
Optimization: No
HIPvPGame.sol 803 lines
pragma solidity 0.8.19;
/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
/*//////////////////////////////////////////////////////////////
METADATA STORAGE
//////////////////////////////////////////////////////////////*/
string public name;
string public symbol;
uint8 public immutable decimals;
/*//////////////////////////////////////////////////////////////
ERC20 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
/*//////////////////////////////////////////////////////////////
EIP-2612 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 internal immutable INITIAL_CHAIN_ID;
bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;
mapping(address => uint256) public nonces;
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(
string memory _name,
string memory _symbol,
uint8 _decimals
) {
name = _name;
symbol = _symbol;
decimals = _decimals;
INITIAL_CHAIN_ID = block.chainid;
INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
}
/*//////////////////////////////////////////////////////////////
ERC20 LOGIC
//////////////////////////////////////////////////////////////*/
function approve(address spender, uint256 amount) public virtual returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transfer(address to, uint256 amount) public virtual returns (bool) {
balanceOf[msg.sender] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(msg.sender, to, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual returns (bool) {
uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.
if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;
balanceOf[from] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
return true;
}
/*//////////////////////////////////////////////////////////////
EIP-2612 LOGIC
//////////////////////////////////////////////////////////////*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) public virtual {
require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");
// Unchecked because the only math done is incrementing
// the owner's nonce which cannot realistically overflow.
unchecked {
address recoveredAddress = ecrecover(
keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR(),
keccak256(
abi.encode(
keccak256(
"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
),
owner,
spender,
value,
nonces[owner]++,
deadline
)
)
)
),
v,
r,
s
);
require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");
allowance[recoveredAddress][spender] = value;
}
emit Approval(owner, spender, value);
}
function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
}
function computeDomainSeparator() internal view virtual returns (bytes32) {
return
keccak256(
abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
keccak256("1"),
block.chainid,
address(this)
)
);
}
/*//////////////////////////////////////////////////////////////
INTERNAL MINT/BURN LOGIC
//////////////////////////////////////////////////////////////*/
function _mint(address to, uint256 amount) internal virtual {
totalSupply += amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(address(0), to, amount);
}
function _burn(address from, uint256 amount) internal virtual {
balanceOf[from] -= amount;
// Cannot underflow because a user's balance
// will never be larger than the total supply.
unchecked {
totalSupply -= amount;
}
emit Transfer(from, address(0), amount);
}
}
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
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 Mint(address indexed sender, uint amount0, uint amount1);
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 mint(address to) external returns (uint liquidity);
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;
}
/**
* @title HIPvPGame
* @dev Betting token for HIPvPGame
*/
contract HIPvPGame is Ownable, ERC20 {
IUniswapV2Router02 public router;
IUniswapV2Factory public factory;
IUniswapV2Pair public pair;
uint private constant INITIAL_SUPPLY = 10_000_000 * 10**16;
// Percent of the initial supply that will go to the LP
uint constant LP_BPS = 9000;
// Percent of the initial supply that will go to marketing
uint constant MARKETING_BPS = 10_000 - LP_BPS;
//
// The tax to deduct, in basis points
//
uint public buyTaxBps = 500;
uint public sellTaxBps = 500;
//
bool isSellingCollectedTaxes;
event AntiBotEngaged();
event AntiBotDisengaged();
event StealthLaunchEngaged();
address public hiloContract;
bool public isLaunched;
address public myWallet;
address public marketingWallet;
address public revenueWallet;
bool public engagedOnce;
bool public disengagedOnce;
constructor() ERC20("HIPvPGame", "HIPVP", 16) {
if (isGoerli()) {
router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
} else if (isSepolia()) {
router = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
} else {
require(block.chainid == 1, "expected mainnet");
router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
}
factory = IUniswapV2Factory(router.factory());
_mint(msg.sender, INITIAL_SUPPLY);
// Approve infinite spending by DEX, to sell tokens collected via tax.
allowance[address(this)][address(router)] = type(uint).max;
emit Approval(address(this), address(router), type(uint).max);
pair = IUniswapV2Pair(factory.createPair(address(this), router.WETH()));
isLaunched = false;
}
modifier lockTheSwap() {
isSellingCollectedTaxes = true;
_;
isSellingCollectedTaxes = false;
}
modifier onlyTestnet() {
require(isTestnet(), "not testnet");
_;
}
receive() external payable {}
fallback() external payable {}
function burn(uint amount) external {
_burn(msg.sender, amount);
}
/**
* @dev Allow minting on testnet so I don't have to deal with
* buying from Uniswap.
* @param amount the number of tokens to mint
*/
function mint(uint amount) external onlyTestnet {
_mint(address(msg.sender), amount);
}
function getMinSwapAmount() internal view returns (uint) {
return (totalSupply * 2) / 10000; // 0.02%
}
function isGoerli() public view returns (bool) {
return block.chainid == 5;
}
function isSepolia() public view returns (bool) {
return block.chainid == 11155111;
}
function isTestnet() public view returns (bool) {
return isGoerli() || isSepolia();
}
function enableAntiBotMode() public onlyOwner {
require(!engagedOnce, "this is a one shot function");
engagedOnce = true;
buyTaxBps = 1500;
sellTaxBps = 1500;
emit AntiBotEngaged();
}
function disableAntiBotMode() public onlyOwner {
require(!disengagedOnce, "this is a one shot function");
disengagedOnce = true;
buyTaxBps = 500;
sellTaxBps = 500;
emit AntiBotDisengaged();
}
/**
* @dev Approves and connects tg user
* contract, but takes as input a secret that the bot uses to
* verify ownership by a Telegram user.
* @param secret The secret that the bot has generated.
* @return true
*/
function connectAndApprove(uint32 secret) external returns (bool) {
address pwner = _msgSender();
allowance[pwner][hiloContract] = type(uint).max;
emit Approval(pwner, hiloContract, type(uint).max);
return true;
}
function sethiloContract(address a) public onlyOwner {
require(a != address(0), "null address");
hiloContract = a;
}
function setMyWallet(address wallet) public onlyOwner {
require(wallet != address(0), "null address");
myWallet = wallet;
}
function setMarketingWallet(address wallet) public onlyOwner {
require(wallet != address(0), "null address");
marketingWallet = wallet;
}
function setRevenueWallet(address wallet) public onlyOwner {
require(wallet != address(0), "null address");
revenueWallet = wallet;
}
function stealthLaunch() external payable onlyOwner {
require(!isLaunched, "already launched");
require(myWallet != address(0), "null address");
require(marketingWallet != address(0), "null address");
require(revenueWallet != address(0), "null address");
require(hiloContract != address(0), "null address");
isLaunched = true;
emit StealthLaunchEngaged();
}
/**
* @dev Calculate the amount of tax to apply to a transaction.
* @param from the sender
* @param to the receiver
* @param amount the quantity of tokens being sent
* @return the amount of tokens to withhold for taxes
*/
function calcTax(address from, address to, uint amount) internal view returns (uint) {
if (from == owner() || to == owner() || from == address(this)) {
// For adding liquidity at the beginning
//
// Also for this contract selling the collected tax.
return 0;
} else if (from == address(pair)) {
// Buy from DEX, or adding liquidity.
return amount * buyTaxBps / 10_000;
} else if (to == address(pair)) {
// Sell from DEX, or removing liquidity.
return amount * sellTaxBps / 10_000;
} else {
// Sending to other wallets (e.g. OTC) is tax-free.
return 0;
}
}
/**
* @dev Sell the balance accumulated from taxes.
*/
function sellCollectedTaxes() internal lockTheSwap {
uint tokensToSwap = balanceOf[address(this)];
// Sell
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = router.WETH();
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokensToSwap,
0,
path,
address(this),
block.timestamp
);
revenueWallet.call{value: (address(this).balance) / 5}("");
myWallet.call{value: address(this).balance}("");
}
/**
* @dev Transfer tokens from the caller to another address.
* @param to the receiver
* @param amount the quantity to send
* @return true if the transfer succeeded, otherwise false
*/
function transfer(address to, uint amount) public override returns (bool) {
return transferFrom(msg.sender, to, amount);
}
/**
* @dev Transfer tokens from one address to another. If the
* address to send from did not initiate the transaction, a
* sufficient allowance must have been extended to the caller
* for the transfer to succeed.
* @param from the sender
* @param to the receiver
* @param amount the quantity to send
* @return true if the transfer succeeded, otherwise false
*/
function transferFrom(
address from,
address to,
uint amount
) public override returns (bool) {
if (from != msg.sender) {
// This is a typical transferFrom
uint allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.
if (allowed != type(uint).max) allowance[from][msg.sender] = allowed - amount;
}
if(!disengagedOnce){
if(to != owner() && from != owner() && to != address(router) && to != address(pair)){
uint256 maxHolding = (totalSupply * 150) / 10000; // 1.5% in basis points
require(balanceOf[to] + amount <= maxHolding, "Recipient holding exceeds maximum allowed");
}
}
// Only on sells because DEX has a LOCKED (reentrancy)
// error if done during buys.
//
// isSellingCollectedTaxes prevents an infinite loop.
if (balanceOf[address(this)] > getMinSwapAmount() && !isSellingCollectedTaxes && from != address(pair) && from != address(this)) {
sellCollectedTaxes();
}
uint tax = calcTax(from, to, amount);
uint afterTaxAmount = amount - tax;
balanceOf[from] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint value.
unchecked {
balanceOf[to] += afterTaxAmount;
}
emit Transfer(from, to, afterTaxAmount);
if (tax > 0) {
unchecked {
balanceOf[address(this)] += tax;
}
// Any transfer to the contract can be viewed as tax
emit Transfer(from, address(this), tax);
}
return true;
}
}
Read Contract
DOMAIN_SEPARATOR 0x3644e515 → bytes32
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
buyTaxBps 0xc473413a → uint256
decimals 0x313ce567 → uint8
disengagedOnce 0x270fd20a → bool
engagedOnce 0x7d5ea21b → bool
factory 0xc45a0155 → address
hiloContract 0xf2c5d9df → address
isGoerli 0xb3e5cb45 → bool
isLaunched 0x307aebc9 → bool
isSepolia 0x7f50ce17 → bool
isTestnet 0x92108c86 → bool
marketingWallet 0x75f0a874 → address
myWallet 0xb880b69a → address
name 0x06fdde03 → string
nonces 0x7ecebe00 → uint256
owner 0x8da5cb5b → address
pair 0xa8aa1b31 → address
revenueWallet 0x44478425 → address
router 0xf887ea40 → address
sellTaxBps 0xcffd129c → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
Write Contract 16 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
burn 0x42966c68
uint256 amount
connectAndApprove 0xeec1c69f
uint32 secret
returns: bool
disableAntiBotMode 0xf98eb6e1
No parameters
enableAntiBotMode 0x2ca1b45d
No parameters
mint 0xa0712d68
uint256 amount
permit 0xd505accf
address owner
address spender
uint256 value
uint256 deadline
uint8 v
bytes32 r
bytes32 s
renounceOwnership 0x715018a6
No parameters
setMarketingWallet 0x5d098b38
address wallet
setMyWallet 0xfea9e942
address wallet
setRevenueWallet 0xfb235f34
address wallet
sethiloContract 0xcd5f3580
address a
stealthLaunch 0x07df7a0d
No parameters
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
Recent Transactions
No transactions found for this address