Address Contract Partially Verified
Address
0xE23311294467654E0CaB14cD32A169A41be5ca8E
Balance
0.040025 ETH
Nonce
1
Code Size
16871 bytes
Creator
0x181b2c67...f934 at tx 0x805bbaf5...d2affe
Indexed Transactions
0
Contract Bytecode
16871 bytes
0x60806040526004361061028c5760003560e01c80636ed705f81161015a578063b2bdfa7b116100c1578063dfbf53ae1161007a578063dfbf53ae146109d5578063e0f07e3a14610a00578063e745b25414610a2b578063ea2f0b3714610a56578063f2fde38b14610a7f578063fa716d1314610aa857610293565b8063b2bdfa7b146108c5578063b7e03264146108f0578063c49b9a801461091b578063c57a6c4414610944578063d12a76881461096d578063dd62ed3e1461099857610293565b80638cf57cb9116101135780638cf57cb9146107a15780638da5cb5b146107cc578063906e9dd0146107f757806395d89b4114610820578063a457c2d71461084b578063a9059cbb1461088857610293565b80636ed705f8146106a157806370a08231146106cc578063715018a61461070957806375e924e714610720578063889b408c1461074b5780638c0b5e221461077657610293565b806339509351116101fe57806350ccd796116101b757806350ccd796146105a55780635e00e679146105ce5780635eb04347146105f75780635ec01e4d1461062057806366b77e8a1461064b57806369d1d03a1461067657610293565b806339509351146104935780633b3dca76146104d0578063437823ec146104fb57806349bd5a5e146105245780634a74bb021461054f57806350a368bd1461057a57610293565b806318160ddd1161025057806318160ddd1461038157806318cefa36146103ac57806323b872dd146103e9578063313ce5671461042657806333759dfb1461045157806333a99e041461047c57610293565b8063043a28ee1461029857806306e8781a146102c357806306fdde03146102ee578063095ea7b3146103195780631694505e1461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610ad3565b6040516102ba9190613254565b60405180910390f35b3480156102cf57600080fd5b506102d8610ad9565b6040516102e59190613254565b60405180910390f35b3480156102fa57600080fd5b50610303610adf565b6040516103109190613308565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b91906133b9565b610b71565b60405161034d9190613414565b60405180910390f35b34801561036257600080fd5b5061036b610b8f565b604051610378919061348e565b60405180910390f35b34801561038d57600080fd5b50610396610bb3565b6040516103a39190613254565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce91906134a9565b610bbd565b6040516103e091906134e5565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613500565b610bfc565b60405161041d9190613414565b60405180910390f35b34801561043257600080fd5b5061043b610cd5565b604051610448919061356f565b60405180910390f35b34801561045d57600080fd5b50610466610cec565b6040516104739190613254565b60405180910390f35b34801561048857600080fd5b50610491610cf2565b005b34801561049f57600080fd5b506104ba60048036038101906104b591906133b9565b610e18565b6040516104c79190613414565b60405180910390f35b3480156104dc57600080fd5b506104e5610ecb565b6040516104f29190613254565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d919061358a565b610ed1565b005b34801561053057600080fd5b50610539610fc1565b60405161054691906134e5565b60405180910390f35b34801561055b57600080fd5b50610564610fe5565b6040516105719190613414565b60405180910390f35b34801561058657600080fd5b5061058f610ff8565b60405161059c9190613254565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c791906134a9565b610ffe565b005b3480156105da57600080fd5b506105f560048036038101906105f091906135f5565b61109d565b005b34801561060357600080fd5b5061061e600480360381019061061991906134a9565b611176565b005b34801561062c57600080fd5b50610635611215565b6040516106429190613254565b60405180910390f35b34801561065757600080fd5b50610660611315565b60405161066d9190613254565b60405180910390f35b34801561068257600080fd5b5061068b61131b565b6040516106989190613254565b60405180910390f35b3480156106ad57600080fd5b506106b6611321565b6040516106c39190613254565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee919061358a565b611327565b6040516107009190613254565b60405180910390f35b34801561071557600080fd5b5061071e611370565b005b34801561072c57600080fd5b506107356114c3565b6040516107429190613254565b60405180910390f35b34801561075757600080fd5b506107606114c9565b60405161076d9190613254565b60405180910390f35b34801561078257600080fd5b5061078b6114cf565b6040516107989190613254565b60405180910390f35b3480156107ad57600080fd5b506107b66114d5565b6040516107c39190613631565b60405180910390f35b3480156107d857600080fd5b506107e16114fb565b6040516107ee91906134e5565b60405180910390f35b34801561080357600080fd5b5061081e600480360381019061081991906135f5565b611524565b005b34801561082c57600080fd5b506108356115fd565b6040516108429190613308565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d91906133b9565b61168f565b60405161087f9190613414565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa91906133b9565b61175c565b6040516108bc9190613414565b60405180910390f35b3480156108d157600080fd5b506108da61177a565b6040516108e791906134e5565b60405180910390f35b3480156108fc57600080fd5b506109056117a0565b60405161091291906134e5565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190613678565b6117ca565b005b34801561095057600080fd5b5061096b600480360381019061096691906134a9565b6118b3565b005b34801561097957600080fd5b50610982611952565b60405161098f9190613254565b60405180910390f35b3480156109a457600080fd5b506109bf60048036038101906109ba91906136a5565b611958565b6040516109cc9190613254565b60405180910390f35b3480156109e157600080fd5b506109ea6119df565b6040516109f791906134e5565b60405180910390f35b348015610a0c57600080fd5b50610a15611a05565b604051610a229190613631565b60405180910390f35b348015610a3757600080fd5b50610a40611a2b565b604051610a4d9190613254565b60405180910390f35b348015610a6257600080fd5b50610a7d6004803603810190610a78919061358a565b611a31565b005b348015610a8b57600080fd5b50610aa66004803603810190610aa1919061358a565b611b21565b005b348015610ab457600080fd5b50610abd611ce2565b604051610aca9190613254565b60405180910390f35b60135481565b600f5481565b606060018054610aee90613714565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1a90613714565b8015610b675780601f10610b3c57610100808354040283529160200191610b67565b820191906000526020600020905b815481529060010190602001808311610b4a57829003601f168201915b5050505050905090565b6000610b85610b7e611d46565b8484611d4e565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600854905090565b60078181548110610bcd57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c09848484611f17565b610cca84610c15611d46565b610cc58560405180606001604052806028815260200161416560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c7b611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611d4e565b600190509392505050565b6000600360009054906101000a900460ff16905090565b60185481565b610cfa611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613791565b60405180910390fd5b610d8f611215565b601e819055506007601e5481548110610dab57610daa6137b1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610ec1610e25611d46565b84610ebc8560056000610e36611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b611d4e565b6001905092915050565b601e5481565b610ed9611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90613791565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea81565b601a60159054906101000a900460ff1681565b60105481565b611006611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90613791565b60405180910390fd5b8060098190555050565b6110a5611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613791565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61117e611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290613791565b60405180910390fd5b80601c8190555050565b60008043423360405160200161122b9190613828565b6040516020818303038152906040528051906020012060001c61124e91906138a1565b45424160405160200161126191906138fb565b6040516020818303038152906040528051906020012060001c61128491906138a1565b44426112909190613916565b61129a9190613916565b6112a49190613916565b6112ae9190613916565b6112b89190613916565b6040516020016112c8919061398d565b6040516020818303038152906040528051906020012060001c9050600780549050600780549050826112fa91906138a1565b61130491906139a8565b8161130f9190613a02565b91505090565b60115481565b60155481565b60165481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611378611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fc90613791565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60095481565b60175481565b601c5481565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61152c611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090613791565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606002805461160c90613714565b80601f016020809104026020016040519081016040528092919081815260200182805461163890613714565b80156116855780601f1061165a57610100808354040283529160200191611685565b820191906000526020600020905b81548152906001019060200180831161166857829003601f168201915b5050505050905090565b600061175261169c611d46565b8461174d8560405180606001604052806025815260200161418d60259139600560006116c6611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b611d4e565b6001905092915050565b6000611770611769611d46565b8484611f17565b6001905092915050565b601d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117d2611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690613791565b60405180910390fd5b80601a60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516118a89190613414565b60405180910390a150565b6118bb611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90613791565b60405180910390fd5b80601b8190555050565b601b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611a39611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90613791565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611b29611d46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90613791565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613aa8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b6000808284611cf79190613916565b905083811015611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390613b14565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db490613ba6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2390613c38565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f0a9190613254565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613cca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613d5c565b60405180910390fd5b611ffd6114fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561206b575061203b6114fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156120b657601c548111156120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac90613dc8565b60405180910390fd5b5b60006120c130611327565b90506000601b5482101590508080156120e75750601d60009054906101000a900460ff16155b801561213f57507f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156121575750601a60159054906101000a900460ff165b1561235f576001601d60006101000a81548160ff02191690831515021790555060006121b66018546121a8612199601554601454611ce890919063ffffffff16565b86612cd690919063ffffffff16565b612d5090919063ffffffff16565b905060004790506121c682612d9a565b60006121db8247612fd790919063ffffffff16565b9050600061221c6121f9601454601554611ce890919063ffffffff16565b61220e60145485612cd690919063ffffffff16565b612d5090919063ffffffff16565b905060006122338284612fd790919063ffffffff16565b9050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561229d573d6000803e3d6000fd5b50601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612306573d6000803e3d6000fd5b5060006123326018546123246017548b612cd690919063ffffffff16565b612d5090919063ffffffff16565b905061233d81613021565b6000601d60006101000a81548160ff0219169083151502179055505050505050505b6000601d60009054906101000a900460ff16159050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124155750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561241f57600090505b7f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156124c757507f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156124d157600090505b80156125da577f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361255857600f54600a81905550601054600b81905550601254600d81905550601154600c81905550601354600e819055505b7f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036125d957601454600a81905550601554600b81905550601754600d81905550601654600c81905550601854600e819055505b5b80156129f657600061260a60646125fc600e5488612cd690919063ffffffff16565b612d5090919063ffffffff16565b90506000612637600e54612629600c5485612cd690919063ffffffff16565b612d5090919063ffffffff16565b9050600061264e8388612fd790919063ffffffff16565b90506126bc8760405180606001604052806026815260200161413f60269139600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061275181600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127e683600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061287b82600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161291b9190613254565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129809190613254565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129e69190613254565b60405180910390a3505050612ba0565b612a628460405180606001604052806026815260200161413f60269139600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c729092919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612af784600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce890919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612b979190613254565b60405180910390a35b7f0000000000000000000000007bf1bc920e0e21e3b83a2ab589099191f0c441ea73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612c6a57600954612bff86611327565b1115612c69576007859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b505050505050565b6000838311158290612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb19190613308565b60405180910390fd5b5060008385612cc99190613a02565b9050809150509392505050565b6000808303612ce85760009050612d4a565b60008284612cf691906139a8565b9050828482612d0591906138a1565b14612d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3c90613e5a565b60405180910390fd5b809150505b92915050565b6000612d9283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130f7565b905092915050565b6000600267ffffffffffffffff811115612db757612db6613e7a565b5b604051908082528060200260200182016040528015612de55781602001602082028036833780820191505090505b5090503081600081518110612dfd57612dfc6137b1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec69190613ebe565b81600181518110612eda57612ed96137b1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f3f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d4e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612fa1959493929190613fe4565b600060405180830381600087803b158015612fbb57600080fd5b505af1158015612fcf573d6000803e3d6000fd5b505050505050565b600061301983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c72565b905092915050565b6001601a60146101000a81548160ff0219169083151502179055506000613052600283612d5090919063ffffffff16565b905060006130698284612fd790919063ffffffff16565b9050600047905061307983612d9a565b600061308e8247612fd790919063ffffffff16565b905061309a838261315a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516130cd9392919061403e565b60405180910390a1505050506000601a60146101000a81548160ff02191690831515021790555050565b6000808311829061313e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131359190613308565b60405180910390fd5b506000838561314d91906138a1565b9050809150509392505050565b613185307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d4e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806131cf6114fb565b426040518863ffffffff1660e01b81526004016131f196959493929190614075565b60606040518083038185885af115801561320f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061323491906140eb565b5050505050565b6000819050919050565b61324e8161323b565b82525050565b60006020820190506132696000830184613245565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132a957808201518184015260208101905061328e565b838111156132b8576000848401525b50505050565b6000601f19601f8301169050919050565b60006132da8261326f565b6132e4818561327a565b93506132f481856020860161328b565b6132fd816132be565b840191505092915050565b6000602082019050818103600083015261332281846132cf565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061335a8261332f565b9050919050565b61336a8161334f565b811461337557600080fd5b50565b60008135905061338781613361565b92915050565b6133968161323b565b81146133a157600080fd5b50565b6000813590506133b38161338d565b92915050565b600080604083850312156133d0576133cf61332a565b5b60006133de85828601613378565b92505060206133ef858286016133a4565b9150509250929050565b60008115159050919050565b61340e816133f9565b82525050565b60006020820190506134296000830184613405565b92915050565b6000819050919050565b600061345461344f61344a8461332f565b61342f565b61332f565b9050919050565b600061346682613439565b9050919050565b60006134788261345b565b9050919050565b6134888161346d565b82525050565b60006020820190506134a3600083018461347f565b92915050565b6000602082840312156134bf576134be61332a565b5b60006134cd848285016133a4565b91505092915050565b6134df8161334f565b82525050565b60006020820190506134fa60008301846134d6565b92915050565b6000806000606084860312156135195761351861332a565b5b600061352786828701613378565b935050602061353886828701613378565b9250506040613549868287016133a4565b9150509250925092565b600060ff82169050919050565b61356981613553565b82525050565b60006020820190506135846000830184613560565b92915050565b6000602082840312156135a05761359f61332a565b5b60006135ae84828501613378565b91505092915050565b60006135c28261332f565b9050919050565b6135d2816135b7565b81146135dd57600080fd5b50565b6000813590506135ef816135c9565b92915050565b60006020828403121561360b5761360a61332a565b5b6000613619848285016135e0565b91505092915050565b61362b816135b7565b82525050565b60006020820190506136466000830184613622565b92915050565b613655816133f9565b811461366057600080fd5b50565b6000813590506136728161364c565b92915050565b60006020828403121561368e5761368d61332a565b5b600061369c84828501613663565b91505092915050565b600080604083850312156136bc576136bb61332a565b5b60006136ca85828601613378565b92505060206136db85828601613378565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061372c57607f821691505b60208210810361373f5761373e6136e5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061377b60208361327a565b915061378682613745565b602082019050919050565b600060208201905081810360008301526137aa8161376e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160601b9050919050565b60006137f8826137e0565b9050919050565b600061380a826137ed565b9050919050565b61382261381d8261334f565b6137ff565b82525050565b60006138348284613811565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138ac8261323b565b91506138b78361323b565b9250826138c7576138c6613843565b5b828204905092915050565b60006138dd826137ed565b9050919050565b6138f56138f0826135b7565b6138d2565b82525050565b600061390782846138e4565b60148201915081905092915050565b60006139218261323b565b915061392c8361323b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561396157613960613872565b5b828201905092915050565b6000819050919050565b6139876139828261323b565b61396c565b82525050565b60006139998284613976565b60208201915081905092915050565b60006139b38261323b565b91506139be8361323b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139f7576139f6613872565b5b828202905092915050565b6000613a0d8261323b565b9150613a188361323b565b925082821015613a2b57613a2a613872565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a9260268361327a565b9150613a9d82613a36565b604082019050919050565b60006020820190508181036000830152613ac181613a85565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613afe601b8361327a565b9150613b0982613ac8565b602082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b9060248361327a565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c2260228361327a565b9150613c2d82613bc6565b604082019050919050565b60006020820190508181036000830152613c5181613c15565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613cb460258361327a565b9150613cbf82613c58565b604082019050919050565b60006020820190508181036000830152613ce381613ca7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d4660238361327a565b9150613d5182613cea565b604082019050919050565b60006020820190508181036000830152613d7581613d39565b9050919050565b7f5472616e73616374696f6e2073697a65206c696d697420726561636865640000600082015250565b6000613db2601e8361327a565b9150613dbd82613d7c565b602082019050919050565b60006020820190508181036000830152613de181613da5565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e4460218361327a565b9150613e4f82613de8565b604082019050919050565b60006020820190508181036000830152613e7381613e37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050613eb881613361565b92915050565b600060208284031215613ed457613ed361332a565b5b6000613ee284828501613ea9565b91505092915050565b6000819050919050565b6000613f10613f0b613f0684613eeb565b61342f565b61323b565b9050919050565b613f2081613ef5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f5b8161334f565b82525050565b6000613f6d8383613f52565b60208301905092915050565b6000602082019050919050565b6000613f9182613f26565b613f9b8185613f31565b9350613fa683613f42565b8060005b83811015613fd7578151613fbe8882613f61565b9750613fc983613f79565b925050600181019050613faa565b5085935050505092915050565b600060a082019050613ff96000830188613245565b6140066020830187613f17565b81810360408301526140188186613f86565b905061402760608301856134d6565b6140346080830184613245565b9695505050505050565b60006060820190506140536000830186613245565b6140606020830185613245565b61406d6040830184613245565b949350505050565b600060c08201905061408a60008301896134d6565b6140976020830188613245565b6140a46040830187613f17565b6140b16060830186613f17565b6140be60808301856134d6565b6140cb60a0830184613245565b979650505050505050565b6000815190506140e58161338d565b92915050565b6000806000606084860312156141045761410361332a565b5b6000614112868287016140d6565b9350506020614123868287016140d6565b9250506040614134868287016140d6565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122041e839e0742fccf4649e6c79499784e1615583c94ec3351b62e1a96828e5c74764736f6c634300080d0033
Verified Source Code Partial Match
Compiler: v0.8.13+commit.abaa5c0e
EVM: london
Optimization: No
CRNOTOKEN.sol 753 lines
/**
██████╗██████╗ ███╗ ██╗ ██████╗
██╔════╝██╔══██╗████╗ ██║██╔═══██╗
██║ ██████╔╝██╔██╗ ██║██║ ██║
██║ ██╔══██╗██║╚██╗██║██║ ██║
╚██████╗██║ ██║██║ ╚████║╚██████╔╝
╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝
*/
//SPDX-License-Identifier: MIT
pragma solidity 0.8.13;
interface IERC20 {
function totalSupply() external view returns (uint);
function balanceOf(address account) external view returns (uint);
function transfer(address recipient, uint amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint amount) external returns (bool);
function transferFrom(address sender, address recipient, uint amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint value);
event Approval(address indexed owner, address indexed spender, uint value);
}
library SafeMath {
function add(uint a, uint b) internal pure returns (uint) {
uint c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint a, uint b) internal pure returns (uint) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
require(b <= a, errorMessage);
uint c = a - b;
return c;
}
function mul(uint a, uint b) internal pure returns (uint) {
if (a == 0) {
return 0;
}
uint c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint a, uint b) internal pure returns (uint) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint c = a / b;
return c;
}
}
contract Context {
constructor () { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address) {
return msg.sender;
}
}
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 () {
_owner = msg.sender ;
emit OwnershipTransferred(address(0), _owner);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
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 {
emit OwnershipTransferred(_owner, address(0));
_owner = 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");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
contract ERC20Detailed {
string private _name;
string private _symbol;
uint8 private _decimals;
constructor (string memory tname, string memory tsymbol, uint8 tdecimals) {
_name = tname;
_symbol = tsymbol;
_decimals = tdecimals;
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != 0x0 && codehash != accountHash);
}
}
library SafeERC20 {
using SafeMath for uint;
using Address for address;
function safeTransfer(IERC20 token, address to, uint value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint value) internal {
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 callOptionalReturn(IERC20 token, bytes memory data) private {
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
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;
}
contract CRNOTOKEN is Context, Ownable, IERC20, ERC20Detailed {
using SafeERC20 for IERC20;
using Address for address;
using SafeMath for uint256;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
mapping (address => uint) internal _balances;
mapping (address => mapping (address => uint)) internal _allowances;
mapping (address => bool) private _isExcludedFromFee;
address[] public lotteryEligibles;
uint256 internal _totalSupply;
uint256 public lotteryEligibilityLimit = 100 * 10**18;
uint256 private marketingFee;
uint256 private rewardFee;
uint256 private burnFee;
uint256 private liquidityFee;
uint256 private totalFee;
uint256 public BUYmarketingFee = 2;
uint256 public BUYrewardFee = 2;
uint256 public BUYburnFee = 1;
uint256 public BUYliquidityFee = 1;
uint256 public BUYtotalFee = BUYliquidityFee.add(BUYmarketingFee).add(BUYrewardFee).add(BUYburnFee);
uint256 public SELLmarketingFee = 6;
uint256 public SELLrewardFee = 3;
uint256 public SELLburnFee = 1;
uint256 public SELLliquidityFee = 2;
uint256 public SELLtotalFee = SELLliquidityFee.add(SELLmarketingFee).add(SELLrewardFee).add(SELLburnFee);
address payable public marketingaddress = payable(0x64fBA66D58442bE0605d3f44b8680B566f667505);
address payable public rewardAddress = payable(0xc69DA5a56a5c0e9d34d35C88e9619008BA5e5200);
bool inSwapAndLiquify;
bool public swapAndLiquifyEnabled = true;
uint256 public numTokensSellToAddToLiquidity = 1000 * 10**18;
uint256 public maxTxAmount = 1000000 * 10**18;
event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
event SwapAndLiquifyEnabledUpdated(bool enabled);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
bool private swapping;
modifier lockTheSwap {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
address public _owner;
constructor () ERC20Detailed("Chronoly", "CRNO", 18) {
_owner = msg.sender ;
_totalSupply = 1000000000 * (10**18);
_balances[_owner] = _totalSupply;
//uniswapv3 router = 0xE592427A0AEce92De3Edee1F18E0157C05861564
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
// Create a uniswap pair for this new token
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
// set the rest of the contract variables
uniswapV2Router = _uniswapV2Router;
//exclude owner and this contract from fee
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
_isExcludedFromFee[marketingaddress] = true;
_isExcludedFromFee[rewardAddress] = true;
emit Transfer(address(0), _msgSender(), _totalSupply);
}
function totalSupply() public view override returns (uint) {
return _totalSupply;
}
function balanceOf(address account) public view override returns (uint) {
return _balances[account];
}
function transfer(address recipient, uint amount) public override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address towner, address spender) public view override returns (uint) {
return _allowances[towner][spender];
}
function approve(address spender, uint amount) public override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint amount) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function increaseAllowance(address spender, uint addedValue) public returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint subtractedValue) public returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
function setMarketingAddress(address payable wallet) external onlyOwner
{
marketingaddress = wallet;
}
function setRewardAddress(address payable wallet) external onlyOwner
{
rewardAddress = wallet;
}
function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
swapAndLiquifyEnabled = _enabled;
emit SwapAndLiquifyEnabledUpdated(_enabled);
}
function changeNumTokensSellToAddToLiquidity(uint256 _numTokensSellToAddToLiquidity) external onlyOwner
{
numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity;
}
function excludeFromFee(address account) public onlyOwner {
_isExcludedFromFee[account] = true;
}
function includeInFee(address account) public onlyOwner {
_isExcludedFromFee[account] = false;
}
function changeLotteryEligibilityLimit(uint256 _number) external onlyOwner
{
lotteryEligibilityLimit = _number;
}
function changeMaxTxLimit(uint256 _number) external onlyOwner
{
maxTxAmount = _number;
}
//to recieve ETH from uniswapV2Router when swaping
receive() external payable {}
function _transfer(address sender, address recipient, uint amount) internal{
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
if(sender != owner() && recipient != owner())
{
require(amount <= maxTxAmount, "Transaction size limit reached");
}
// is the token balance of this contract address over the min number of
// tokens that we need to initiate a swap + liquidity lock?
// also, don't get caught in a circular liquidity event.
// also, don't swap & liquify if sender is uniswap pair.
uint256 contractTokenBalance = balanceOf(address(this));
bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
if (
overMinTokenBalance &&
!swapping &&
sender != uniswapV2Pair &&
swapAndLiquifyEnabled
) {
swapping = true;
uint256 walletTokens = contractTokenBalance.mul(SELLmarketingFee.add(SELLrewardFee)).div(SELLtotalFee);
uint256 contractBalance = address(this).balance;
swapTokensForEth(walletTokens);
uint256 newBalance = address(this).balance.sub(contractBalance);
uint256 marketingShare = newBalance.mul(SELLmarketingFee).div(SELLrewardFee.add(SELLmarketingFee));
uint256 rewardShare = newBalance.sub(marketingShare);
payable(marketingaddress).transfer(marketingShare);
payable(rewardAddress).transfer(rewardShare);
uint256 swapTokens = contractTokenBalance.mul(SELLliquidityFee).div(SELLtotalFee);
swapAndLiquify(swapTokens);
swapping = false;
}
//indicates if fee should be deducted from transfer
bool takeFee = !swapping;
//if any account belongs to _isExcludedFromFee account then remove the fee
if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
takeFee = false;
}
if(sender != uniswapV2Pair && recipient != uniswapV2Pair)
{
takeFee = false;
}
if(takeFee){
if(sender == uniswapV2Pair)
{
marketingFee = BUYmarketingFee;
rewardFee = BUYrewardFee;
liquidityFee = BUYliquidityFee;
burnFee = BUYburnFee;
totalFee = BUYtotalFee;
}
if(recipient == uniswapV2Pair)
{
marketingFee = SELLmarketingFee;
rewardFee = SELLrewardFee;
liquidityFee = SELLliquidityFee;
burnFee = SELLburnFee;
totalFee = SELLtotalFee;
}
}
if(takeFee)
{
uint256 taxAmount = amount.mul(totalFee).div(100);
uint256 burnAmount = taxAmount.mul(burnFee).div(totalFee);
uint256 TotalSent = amount.sub(taxAmount);
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(TotalSent);
_balances[address(this)] = _balances[address(this)].add(taxAmount);
_balances[address(0)] = _balances[address(0)].add(burnAmount);
emit Transfer(sender, recipient, TotalSent);
emit Transfer(sender, address(this), taxAmount);
emit Transfer(sender, address(0), burnAmount);
}
else
{
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
if(sender == uniswapV2Pair)
{
if(balanceOf(recipient) > lotteryEligibilityLimit)
{lotteryEligibles.push(recipient);}
}
}
uint256 public rand;
address public winner;
function selectWinner() external onlyOwner
{
rand = random();
winner = lotteryEligibles[rand];
}
function random() public view returns(uint256){
uint256 seed = uint256(keccak256(abi.encodePacked(
block.timestamp + block.difficulty +
((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (block.timestamp)) +
block.gaslimit +
((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) +
block.number
)));
return (seed - ((seed / lotteryEligibles.length) * lotteryEligibles.length));
}
function showWinner() external view returns(address)
{
// selectWinner();
return winner;
}
function swapAndLiquify(uint256 tokens) private lockTheSwap {
// split the contract balance into halves
uint256 half = tokens.div(2);
uint256 otherHalf = tokens.sub(half);
// capture the contract's current ETH balance.
// this is so that we can capture exactly the amount of ETH that the
// swap creates, and not make the liquidity event include any ETH that
// has been manually sent to the contract
uint256 initialBalance = address(this).balance;
// swap tokens for ETH
swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
// how much ETH did we just swap into?
uint256 newBalance = address(this).balance.sub(initialBalance);
// add liquidity to uniswap
addLiquidity(otherHalf, newBalance);
emit SwapAndLiquify(half, newBalance, otherHalf);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
owner(),
block.timestamp
);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function _approve(address towner, address spender, uint amount) internal {
require(towner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[towner][spender] = amount;
emit Approval(towner, spender, amount);
}
}
Read Contract
BUYburnFee 0x66b77e8a → uint256
BUYliquidityFee 0xfa716d13 → uint256
BUYmarketingFee 0x06e8781a → uint256
BUYrewardFee 0x50a368bd → uint256
BUYtotalFee 0x043a28ee → uint256
SELLburnFee 0x6ed705f8 → uint256
SELLliquidityFee 0x889b408c → uint256
SELLmarketingFee 0xe745b254 → uint256
SELLrewardFee 0x69d1d03a → uint256
SELLtotalFee 0x33759dfb → uint256
_owner 0xb2bdfa7b → address
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
lotteryEligibilityLimit 0x75e924e7 → uint256
lotteryEligibles 0x18cefa36 → address
marketingaddress 0xe0f07e3a → address
maxTxAmount 0x8c0b5e22 → uint256
name 0x06fdde03 → string
numTokensSellToAddToLiquidity 0xd12a7688 → uint256
owner 0x8da5cb5b → address
rand 0x3b3dca76 → uint256
random 0x5ec01e4d → uint256
rewardAddress 0x8cf57cb9 → address
showWinner 0xb7e03264 → address
swapAndLiquifyEnabled 0x4a74bb02 → bool
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address
winner 0xdfbf53ae → address
Write Contract 16 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
changeLotteryEligibilityLimit 0x50ccd796
uint256 _number
changeMaxTxLimit 0x5eb04347
uint256 _number
changeNumTokensSellToAddToLiquidity 0xc57a6c44
uint256 _numTokensSellToAddToLiquidity
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
excludeFromFee 0x437823ec
address account
includeInFee 0xea2f0b37
address account
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
renounceOwnership 0x715018a6
No parameters
selectWinner 0x33a99e04
No parameters
setMarketingAddress 0x906e9dd0
address wallet
setRewardAddress 0x5e00e679
address wallet
setSwapAndLiquifyEnabled 0xc49b9a80
bool _enabled
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
Token Balances (2)
View Transfers →Recent Transactions
No transactions found for this address