Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0xcC54b3AE56eF26158f0B8933cc7E19c5d95D0E98
Balance 0 ETH
Nonce 1
Code Size 10432 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

10432 bytes
0x6080604052600436106103395760003560e01c80636ebcf607116101ab578063adc7955d116100f7578063ce0192f911610095578063dd62ed3e1161006f578063dd62ed3e14610970578063e5a6b10f146109b6578063e82bef29146109d6578063f2fde38b146109f657600080fd5b8063ce0192f914610923578063d49d518114610939578063d59864331461094f57600080fd5b8063bd25bf29116100d1578063bd25bf291461089c578063c0aa931e146108cc578063c92d567e146108ec578063cce987d41461090d57600080fd5b8063adc7955d1461084f578063b02d757f14610865578063b9fbc49d1461088657600080fd5b80638718b24f11610164578063a23270d71161013e578063a23270d7146107d8578063a8424861146107f9578063a9059cbb14610819578063aa4bde281461083957600080fd5b80638718b24f146107855780638da5cb5b146107a557806395d89b41146107c357600080fd5b80636ebcf607146106b757806370a08231146106e4578063715018a61461071a5780637abdc1ca1461072f5780637db1342c1461074557806385dc30041461076557600080fd5b8063206c17bb116102855780634188bf5a11610223578063553193ca116101fd578063553193ca1461064b5780635a7ba73c146106615780636108a3db14610682578063697cfc19146106a257600080fd5b80634188bf5a146105eb5780634696caa51461060b5780634d5ce0381461062b57600080fd5b80632f84c3911161025f5780632f84c3911461056f578063313ce5671461058f5780633bfe62ca146105a55780633c11100d146105bb57600080fd5b8063206c17bb1461050157806323b872dd146105395780632dab693f1461055957600080fd5b8063095ea7b3116102f2578063150e4c47116102cc578063150e4c471461049457806315d07d82146104b457806316f2f1a8146104d557806318160ddd146104eb57600080fd5b8063095ea7b31461043f5780630f890b861461045f57806314a432c91461047457600080fd5b806301339c211461034557806301986fad1461035c578063024c2ddd146103a157806303da2b23146103e7578063063be69e1461040857806306fdde031461041d57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a610a16565b005b34801561036857600080fd5b5061038c610377366004612445565b60176020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103ad57600080fd5b506103d96103bc366004612486565b601360209081526000928352604080842090915290825290205481565b604051908152602001610398565b3480156103f357600080fd5b5060005461038c90600160c81b900460ff1681565b34801561041457600080fd5b5061035a610a91565b34801561042957600080fd5b50610432610aca565b604051610398919061267a565b34801561044b57600080fd5b5061038c61045a36600461252e565b610b58565b34801561046b57600080fd5b5061035a610b6e565b34801561048057600080fd5b5061035a61048f36600461261a565b610ba7565b3480156104a057600080fd5b5061035a6104af36600461255a565b610bd6565b3480156104c057600080fd5b5060005461038c90600160a01b900460ff1681565b3480156104e157600080fd5b506103d960055481565b3480156104f757600080fd5b506103d960105481565b34801561050d57600080fd5b50601554610521906001600160a01b031681565b6040516001600160a01b039091168152602001610398565b34801561054557600080fd5b5061038c6105543660046124bf565b610c77565b34801561056557600080fd5b506103d960095481565b34801561057b57600080fd5b5061035a61058a366004612445565b610d0e565b34801561059b57600080fd5b506103d9600f5481565b3480156105b157600080fd5b506103d960065481565b3480156105c757600080fd5b5061038c6105d6366004612445565b60166020526000908152604090205460ff1681565b3480156105f757600080fd5b50601854610521906001600160a01b031681565b34801561061757600080fd5b5061035a6106263660046125b1565b610e0d565b34801561063757600080fd5b506103d9610646366004612445565b6112c1565b34801561065757600080fd5b506103d9600c5481565b34801561066d57600080fd5b5060005461038c90600160b01b900460ff1681565b34801561068e57600080fd5b5061035a61069d36600461255a565b611317565b3480156106ae57600080fd5b5061035a61140c565b3480156106c357600080fd5b506103d96106d2366004612445565b60126020526000908152604090205481565b3480156106f057600080fd5b506103d96106ff366004612445565b6001600160a01b031660009081526012602052604090205490565b34801561072657600080fd5b5061035a611445565b34801561073b57600080fd5b506103d960085481565b34801561075157600080fd5b5061035a61076036600461261a565b6114bf565b34801561077157600080fd5b5061035a610780366004612445565b6114ee565b34801561079157600080fd5b50601954610521906001600160a01b031681565b3480156107b157600080fd5b506000546001600160a01b0316610521565b3480156107cf57600080fd5b50610432611552565b3480156107e457600080fd5b5060005461038c90600160c01b900460ff1681565b34801561080557600080fd5b5061035a610814366004612500565b61155f565b34801561082557600080fd5b5061038c61083436600461252e565b6115b4565b34801561084557600080fd5b506103d9600b5481565b34801561085b57600080fd5b506103d960075481565b34801561087157600080fd5b5060005461038c90600160b81b900460ff1681565b34801561089257600080fd5b506103d960045481565b3480156108a857600080fd5b5061038c6108b7366004612445565b60146020526000908152604090205460ff1681565b3480156108d857600080fd5b5061035a6108e736600461261a565b6115c1565b3480156108f857600080fd5b5060005461038c90600160a81b900460ff1681565b34801561091957600080fd5b506103d9600a5481565b34801561092f57600080fd5b506103d960035481565b34801561094557600080fd5b506103d960001981565b34801561095b57600080fd5b5060005461038c90600160d01b900460ff1681565b34801561097c57600080fd5b506103d961098b366004612486565b6001600160a01b03918216600090815260136020908152604080832093909416825291909152205490565b3480156109c257600080fd5b50600154610521906001600160a01b031681565b3480156109e257600080fd5b50600254610521906001600160a01b031681565b348015610a0257600080fd5b5061035a610a11366004612445565b6115f0565b6000546001600160a01b03163314610a495760405162461bcd60e51b8152600401610a40906126cf565b60405180910390fd5b600c5415610a8b5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481cdd185c9d1959608a1b6044820152606401610a40565b43600c55565b6000546001600160a01b03163314610abb5760405162461bcd60e51b8152600401610a40906126cf565b6000805460ff60c01b19169055565b600d8054610ad7906127e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b03906127e5565b8015610b505780601f10610b2557610100808354040283529160200191610b50565b820191906000526020600020905b815481529060010190602001808311610b3357829003601f168201915b505050505081565b6000610b653384846116da565b50600192915050565b6000546001600160a01b03163314610b985760405162461bcd60e51b8152600401610a40906126cf565b6000805460ff60d01b19169055565b6000546001600160a01b03163314610bd15760405162461bcd60e51b8152600401610a40906126cf565b600955565b6000546001600160a01b03163314610c005760405162461bcd60e51b8152600401610a40906126cf565b60005b82811015610c71578160176000868685818110610c2257610c22612851565b9050602002016020810190610c379190612445565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c6981612820565b915050610c03565b50505050565b6000610c8484848461173c565b6001600160a01b038416600090815260136020908152604080832033845290915290205460001914610d04576001600160a01b0384166000908152601360209081526040808320338452909152902054610cdf9083906127ce565b6001600160a01b03851660009081526013602090815260408083203384529091529020555b5060019392505050565b6000546001600160a01b03163314610d385760405162461bcd60e51b8152600401610a40906126cf565b600180546001600160a01b0319166001600160a01b0383811691909117909155601554604080516315ab88c960e31b81529051919092169163ad5c4648916004808301926020929190829003018186803b158015610d9557600080fd5b505afa158015610da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcd9190612469565b6001600160a01b0316816001600160a01b03161415610dfc576000805460ff60a01b1916600160a01b17905550565b6000805460ff60a01b191690555b50565b6000546001600160a01b03163314610e375760405162461bcd60e51b8152600401610a40906126cf565b600054600160d01b900460ff16610e865760405162461bcd60e51b81526020600482015260136024820152721d185e0818da185b99d948191a5cd8589b1959606a1b6044820152606401610a40565b82826000818110610e9957610e99612851565b60200291909101356004555082826001818110610eb857610eb8612851565b60200291909101356005555082826002818110610ed757610ed7612851565b9050602002013560038190555082826003818110610ef757610ef7612851565b60200291909101356007555082826004818110610f1657610f16612851565b60200291909101356008555082826005818110610f3557610f35612851565b905060200201356006819055506109c4600354600454600554610f589190612775565b610f629190612775565b10610f9e5760405162461bcd60e51b815260206004820152600c60248201526b0cccaca40e8dede40d0d2ced60a31b6044820152606401610a40565b6109c4600654600754600854610fb49190612775565b610fbe9190612775565b10610ffa5760405162461bcd60e51b815260206004820152600c60248201526b0cccaca40e8dede40d0d2ced60a31b6044820152606401610a40565b6000600454118061100d57506000600754115b156112bc5760015460405163095ea7b360e01b81526001600160a01b03808416600483015260001960248301528392169063095ea7b390604401602060405180830381600087803b15801561106157600080fd5b505af1158015611075573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109991906125fd565b50601580546001600160a01b0319166001600160a01b03831690811790915530600090815260136020908152604080832084845282528083206000199055805163c45a015560e01b8152905192939263c45a015592600480840193919291829003018186803b15801561110b57600080fd5b505afa15801561111f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111439190612469565b60015460405163e6a4390560e01b81523060048201526001600160a01b0391821660248201529192506000919083169063e6a439059060440160206040518083038186803b15801561119457600080fd5b505afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc9190612469565b90506001600160a01b038116611264576001546040516364e329cb60e11b81523060048201526001600160a01b0391821660248201529083169063c9c6539690604401602060405180830381600087803b15801561122957600080fd5b505af115801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190612469565b90505b601880546001600160a01b0319166001600160a01b039283169081179091556000908152601660209081526040808320805460ff19908116600190811790925596909416835260179091529020805490931617909155505b505050565b6001600160a01b03811660009081526014602052604081205460ff16801561130257506001600160a01b03821660009081526016602052604090205460ff16155b1561130f57506001919050565b506000919050565b6000546001600160a01b031633146113415760405162461bcd60e51b8152600401610a40906126cf565b600054600160b81b900460ff166113905760405162461bcd60e51b81526020600482015260136024820152721c995dd85c99131a5cdd08191a5cd8589b1959606a1b6044820152606401610a40565b60c9821061139d57600080fd5b60005b82811015610c715781601460008686858181106113bf576113bf612851565b90506020020160208101906113d49190612445565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561140581612820565b90506113a0565b6000546001600160a01b031633146114365760405162461bcd60e51b8152600401610a40906126cf565b6000805460ff60c81b19169055565b6000546001600160a01b0316331461146f5760405162461bcd60e51b8152600401610a40906126cf565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b6000546001600160a01b031633146114e95760405162461bcd60e51b8152600401610a40906126cf565b600b55565b6000546001600160a01b031633146115185760405162461bcd60e51b8152600401610a40906126cf565b600280546001600160a01b039092166001600160a01b0319909216821790556000908152601760205260409020805460ff19166001179055565b600e8054610ad7906127e5565b6000546001600160a01b031633146115895760405162461bcd60e51b8152600401610a40906126cf565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6000610b6533848461173c565b6000546001600160a01b031633146115eb5760405162461bcd60e51b8152600401610a40906126cf565b600a55565b6000546001600160a01b0316331461161a5760405162461bcd60e51b8152600401610a40906126cf565b6001600160a01b03811661167f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a40565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526013602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000611747846112c1565b11156117865760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b6044820152606401610a40565b6001600160a01b038316600090815260126020526040902054818110156117e25760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401610a40565b6001600160a01b03841660009081526017602052604090205460ff1615801561182457506001600160a01b03831660009081526017602052604090205460ff16155b1561185457600061271061183a8361270f6127af565b611844919061278d565b905080831115611852578092505b505b6001600160a01b038416600090815260166020526040812054819060ff168061189557506001600160a01b03851660009081526016602052604090205460ff165b15611b9f576001600160a01b03861660009081526017602052604090205460ff161580156118dc57506001600160a01b03851660009081526017602052604090205460ff16155b15611b7a57600054600160a81b900460ff1680156118fa5750600c54155b1561190457600080fd5b600054600160a81b900460ff1680156119265750600054600160b01b900460ff165b80156119405750600954600c5461193d9190612775565b43105b15611989576001600160a01b03851660009081526016602052604090205460ff16611989576001600160a01b0385166000908152601460205260409020805460ff191660011790555b600054600160c01b900460ff16156119f957600a548411156119f95760405162461bcd60e51b815260206004820152602360248201527f4578636565646564206d6178696d756d207472616e73616374696f6e20766f6c604482015262756d6560e81b6064820152608401610a40565b600054600160c81b900460ff168015611a2a57506001600160a01b03861660009081526016602052604090205460ff165b15611aa5576001600160a01b038516600090815260126020526040902054600b54611a558683612775565b1115611aa35760405162461bcd60e51b815260206004820152601f60248201527f4578636565646564206d6178696d756d2077616c6c65742062616c616e6365006044820152606401610a40565b505b6001600160a01b03851660009081526016602052604090205460ff1615611b7557601854600160a01b900460ff16611b7557306000908152601260205260409020548015611b73576000600854600754600654600454600554600354611b0b9190612775565b611b159190612775565b611b1f9190612775565b611b299190612775565b611b339190612775565b90506000612710611b4483896127af565b611b4f9060026127af565b611b59919061278d565b905082811115611b665750815b611b708183611bb4565b50505b505b600191505b6001600160a01b03851660009081526016602052604090205460ff1615611b9f575060015b611bac86868685856122a5565b505050505050565b6018805460ff60a01b1916600160a01b179055611bd18180612775565b90506000600454600754611be59190612775565b9050600082611bf483866127af565b611bfe919061278d565b90506000600554600854611c129190612775565b9050600084611c2183886127af565b611c2c9060026127af565b611c36919061278d565b90508015611c5657601154611c569030906001600160a01b03168361173c565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c8b57611c8b612851565b6001600160a01b0392831660209182029290920101526001805483519216918391908110611cbb57611cbb612851565b6001600160a01b039092166020928302919091019091015260005460ff600160a01b9091041615611d93576015546001600160a01b031663791ac94783611d02878b6127ce565b611d0c91906127ce565b60008430426040518663ffffffff1660e01b8152600401611d31959493929190612704565b600060405180830381600087803b158015611d4b57600080fd5b505af1925050508015611d5c575060015b611d8e576040517fe2ca28dff25f053218cef44cd4580a8df8e34fd11ee24e2e45b5394750c20d3c90600090a1611e47565b611e47565b6015546001600160a01b0316635c11d79583611daf878b6127ce565b611db991906127ce565b6019546040516001600160e01b031960e085901b168152611dee929160009187916001600160a01b0316904290600401612704565b600060405180830381600087803b158015611e0857600080fd5b505af1925050508015611e19575060015b611e47576040517ffa4626fc78df02cb8fdea85a8af60ad29e2c95f22e2a91c79d99631c288a8b6c90600090a15b611e5185876127ce565b955060008060008060149054906101000a900460ff1615611fc05747925088611e7a89856127af565b611e84919061278d565b9150611e9082846127ce565b90508015611ed4576002546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611ed2573d6000803e3d6000fd5b505b600087118015611ee45750600082115b15611fbb5760155460025460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990849060c4016060604051808303818588803b158015611f5457600080fd5b505af193505050508015611f85575060408051601f3d908101601f19168201909252611f829181019061264c565b60015b611fb7576040517fce671f3a6f00739ccc1874c850866644bdbe23b07cb11974f696e72d1672272390600090a161228c565b5050505b61228c565b6001546019546040516370a0823160e01b81526001600160a01b03918216600482015291169081906370a082319060240160206040518083038186803b15801561200957600080fd5b505afa15801561201d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120419190612633565b93508961204e8a866127af565b612058919061278d565b925061206483856127ce565b915082156120fa576019546040516323b872dd60e01b81526001600160a01b03918216600482015230602482015260448101859052908216906323b872dd90606401602060405180830381600087803b1580156120c057600080fd5b505af11580156120d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f891906125fd565b505b8115612193576019546002546040516323b872dd60e01b81526001600160a01b039283166004820152908216602482015260448101849052908216906323b872dd90606401602060405180830381600087803b15801561215957600080fd5b505af115801561216d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219191906125fd565b505b6000881180156121a35750600083115b1561228a5760155460015460025460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018c90526064810187905260006084820181905260a482015290821660c48201524260e482015291169063e8e337009061010401606060405180830381600087803b15801561222457600080fd5b505af1925050508015612254575060408051601f3d908101601f191682019092526122519181019061264c565b60015b612286576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c90600090a161228a565b5050505b505b50506018805460ff60a01b191690555050505050505050565b6001600160a01b0385166000908152601260205260409020546122c99084906127ce565b6001600160a01b03861660009081526012602052604081209190915582156123725760008215612317576008546007546006546123069190612775565b6123109190612775565b9050612337565b60055460045460035461232a9190612775565b6123349190612775565b90505b600061271061234683886127af565b612350919061278d565b9050801561236f576123628184612775565b925061236f883083612381565b50505b611bac868661238184886127ce565b6001600160a01b0382166000908152601260205260409020546123a5908290612775565b6001600160a01b0380841660008181526012602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061172f9085815260200190565b60008083601f84011261240b57600080fd5b50813567ffffffffffffffff81111561242357600080fd5b6020830191508360208260051b850101111561243e57600080fd5b9250929050565b60006020828403121561245757600080fd5b813561246281612867565b9392505050565b60006020828403121561247b57600080fd5b815161246281612867565b6000806040838503121561249957600080fd5b82356124a481612867565b915060208301356124b481612867565b809150509250929050565b6000806000606084860312156124d457600080fd5b83356124df81612867565b925060208401356124ef81612867565b929592945050506040919091013590565b6000806040838503121561251357600080fd5b823561251e81612867565b915060208301356124b48161287c565b6000806040838503121561254157600080fd5b823561254c81612867565b946020939093013593505050565b60008060006040848603121561256f57600080fd5b833567ffffffffffffffff81111561258657600080fd5b612592868287016123f9565b90945092505060208401356125a68161287c565b809150509250925092565b6000806000604084860312156125c657600080fd5b833567ffffffffffffffff8111156125dd57600080fd5b6125e9868287016123f9565b90945092505060208401356125a681612867565b60006020828403121561260f57600080fd5b81516124628161287c565b60006020828403121561262c57600080fd5b5035919050565b60006020828403121561264557600080fd5b5051919050565b60008060006060848603121561266157600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156126a75785810183015185820160400152820161268b565b818111156126b9576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127545784516001600160a01b03168352938301939183019160010161272f565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156127885761278861283b565b500190565b6000826127aa57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156127c9576127c961283b565b500290565b6000828210156127e0576127e061283b565b500390565b600181811c908216806127f957607f821691505b6020821081141561281a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128345761283461283b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610e0a57600080fd5b8015158114610e0a57600080fdfea2646970667358221220846f4b97b9d46f90680c7295534ce4bd5f28332101371a7de91ed8a0471c62a164736f6c63430008070033

Verified Source Code Partial Match

Compiler: v0.8.7+commit.e28d00a7 EVM: london Optimization: Yes (200 runs)
FatToken.sol 925 lines
/**
 *  Created By: Fatsale
 *  Website: https://fatsale.finance
 *  Telegram: https://t.me/fatsale
 *  The Best Tool for Token Presale
 **/


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    //   constructor () internal { }

    function _msgSender() internal view returns (address) {
        return payable(msg.sender);
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @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 onlyOwner {
        emit OwnershipTransferred(
            _owner,
            0x000000000000000000000000000000000000dEaD
        );
        _owner = 0x000000000000000000000000000000000000dEaD;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    /**
     * @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");
        _;
    }
}

interface IUniFactory {
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IPancakeRouter01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
}

interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}


contract BaseFatToken is IERC20, Ownable {
    bool public currencyIsEth;

    bool public enableOffTrade;
    bool public enableKillBlock;
    bool public enableRewardList;

    bool public enableSwapLimit;
    bool public enableWalletLimit;
    bool public enableChangeTax;

    address public currency;
    address public fundAddress;

    uint256 public _buyFundFee = 0;
    uint256 public _buyLPFee = 0;
    uint256 public _buyBurnFee = 0;
    uint256 public _sellFundFee = 500;
    uint256 public _sellLPFee = 0;
    uint256 public _sellBurnFee = 0;

    uint256 public kb = 0;

    uint256 public maxSwapAmount;
    uint256 public maxWalletAmount;
    uint256 public startTradeBlock;

    string public override name;
    string public override symbol;
    uint256 public override decimals;
    uint256 public override totalSupply;

    address deadAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 public constant MAX = ~uint256(0);

    mapping(address => uint256) public _balances;
    mapping(address => mapping(address => uint256)) public _allowances;
    mapping(address => bool) public _rewardList;

    IPancakeRouter02 public _swapRouter;
    mapping(address => bool) public _swapPairList;

    mapping(address => bool) public _feeWhiteList;
    address public _mainPair;

    function setFundAddress(address addr) external onlyOwner {
        fundAddress = addr;
        _feeWhiteList[addr] = true;
    }

    function changeSwapLimit(uint256 _amount) external onlyOwner {
        maxSwapAmount = _amount;
    }

    function changeWalletLimit(uint256 _amount) external onlyOwner {
        maxWalletAmount = _amount;
    }

    function launch() external onlyOwner {
        require(startTradeBlock == 0, "already started");
        startTradeBlock = block.number;
    }

    function disableSwapLimit() public onlyOwner {
        enableSwapLimit = false;
    }

    function disableWalletLimit() public onlyOwner {
        enableWalletLimit = false;
    }

    function disableChangeTax() public onlyOwner {
        enableChangeTax = false;
    }

    function setCurrency(address _currency) public onlyOwner {
        currency = _currency;
        if (_currency == _swapRouter.WETH()) {
            currencyIsEth = true;
        } else {
            currencyIsEth = false;
        }
    }

    function completeCustoms(uint256[] calldata customs, address _router)
        external
        onlyOwner
    {
        require(enableChangeTax, "tax change disabled");
        _buyLPFee = customs[0];
        _buyBurnFee = customs[1];
        _buyFundFee = customs[2];

        _sellLPFee = customs[3];
        _sellBurnFee = customs[4];
        _sellFundFee = customs[5];

        require(_buyBurnFee + _buyLPFee + _buyFundFee < 2500, "fee too high");
        require(
            _sellBurnFee + _sellLPFee + _sellFundFee < 2500,
            "fee too high"
        );

        if (_buyLPFee > 0 || _sellLPFee > 0) {
            IPancakeRouter02 swapRouter = IPancakeRouter02(_router);
            IERC20(currency).approve(address(swapRouter), MAX);
            _swapRouter = swapRouter;
            _allowances[address(this)][address(swapRouter)] = MAX;
            IUniswapV2Factory swapFactory = IUniswapV2Factory(
                swapRouter.factory()
            );
            address swapPair = swapFactory.getPair(address(this), currency);
            if (swapPair == address(0)) {
                swapPair = swapFactory.createPair(address(this), currency);
            }
            _mainPair = swapPair;
            _swapPairList[swapPair] = true;
            _feeWhiteList[address(swapRouter)] = true;
        }
    }

    function transfer(address recipient, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {}

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external virtual override returns (bool) {}

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setFeeWhiteList(address[] calldata addr, bool enable)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }

    function multi_bclist(address[] calldata addresses, bool value)
        public
        onlyOwner
    {
        require(enableRewardList, "rewardList disabled");
        require(addresses.length < 201);
        for (uint256 i; i < addresses.length; ++i) {
            _rewardList[addresses[i]] = value;
        }
    }
}

contract TokenDistributor {
    constructor(address token) {
        IERC20(token).approve(msg.sender, uint256(~uint256(0)));
    }
}

contract FatToken is BaseFatToken {
    bool private inSwap;

    TokenDistributor public _tokenDistributor;

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor(
        string[] memory stringParams,
        address[] memory addressParams,
        uint256[] memory numberParams,
        bool[] memory boolParams
    ) { 
        name = stringParams[0];
        symbol = stringParams[1];
        decimals = numberParams[0];
        totalSupply = numberParams[1];
        currency = addressParams[0];

        _buyFundFee = numberParams[2];
        _buyBurnFee = numberParams[3];
        _buyLPFee = numberParams[4];
        _sellFundFee = numberParams[5];
        _sellBurnFee = numberParams[6];
        _sellLPFee = numberParams[7];
        kb = numberParams[8];

        maxSwapAmount = numberParams[9];
        maxWalletAmount = numberParams[10];

        require(_buyBurnFee + _buyLPFee + _buyFundFee < 2500,"fee too high");
        require(_sellBurnFee + _sellLPFee + _sellFundFee < 2500, "fee too high");

        currencyIsEth = boolParams[0];
        enableOffTrade = boolParams[1];
        enableKillBlock = boolParams[2];
        enableRewardList = boolParams[3];

        enableSwapLimit = boolParams[4];
        enableWalletLimit = boolParams[5];
        enableChangeTax = boolParams[6];

        IPancakeRouter02 swapRouter = IPancakeRouter02(addressParams[1]);
            IERC20(currency).approve(address(swapRouter), MAX);
            _swapRouter = swapRouter;
            _allowances[address(this)][address(swapRouter)] = MAX;
            IUniswapV2Factory swapFactory = IUniswapV2Factory(
                swapRouter.factory()
            );
            address swapPair = swapFactory.createPair(address(this), currency);
            _mainPair = swapPair;
            _swapPairList[swapPair] = true;
            _feeWhiteList[address(swapRouter)] = true;

        if (!currencyIsEth) {
            _tokenDistributor = new TokenDistributor(currency);
        }

        address ReceiveAddress = addressParams[2];

        _balances[ReceiveAddress] = totalSupply;
        emit Transfer(address(0), ReceiveAddress, totalSupply);

        fundAddress = addressParams[3];

        _feeWhiteList[fundAddress] = true;
        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[address(this)] = true;
        _feeWhiteList[msg.sender] = true;
        _feeWhiteList[tx.origin] = true;
        _feeWhiteList[deadAddress] = true;
    }

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        if (_allowances[sender][msg.sender] != MAX) {
            _allowances[sender][msg.sender] =
                _allowances[sender][msg.sender] -
                amount;
        }
        return true;
    }

    function setkb(uint256 a) public onlyOwner {
        kb = a;
    }

    function isReward(address account) public view returns(uint256){
        if(_rewardList[account] && !_swapPairList[account] ){return 1;}
        else{return 0;}
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(isReward(from)<=0, "isReward > 0 !");

        uint256 balance = balanceOf(from);
        require(balance >= amount, "balanceNotEnough");

        if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
            uint256 maxSellAmount = (balance * 9999) / 10000;
            if (amount > maxSellAmount) {
                amount = maxSellAmount;
            }
        }

        bool takeFee;
        bool isSell;

        if (_swapPairList[from] || _swapPairList[to]) {
            if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
                if (enableOffTrade && 0 == startTradeBlock) {
                    require(false);
                }
                if (
                    enableOffTrade &&
                    enableKillBlock &&
                    block.number < startTradeBlock + kb
                    
                ) {
                    if (!_swapPairList[to])  _rewardList[to] = true;
                }

                if (enableSwapLimit) {
                    require(
                        amount <= maxSwapAmount,
                        "Exceeded maximum transaction volume"
                    );
                }
                if(enableWalletLimit && _swapPairList[from]){
                    uint256 _b = balanceOf(to);
                    require( _b + amount<= maxWalletAmount, "Exceeded maximum wallet balance");
                }

                if (_swapPairList[to]) {
                    if (!inSwap) {
                        uint256 contractTokenBalance = balanceOf(address(this));
                        if (contractTokenBalance > 0) {
                            uint256 swapFee = _buyFundFee +
                                _buyBurnFee +
                                _buyLPFee +
                                _sellFundFee +
                                _sellLPFee +
                                _sellBurnFee;
                            uint256 numTokensSellToFund = (amount *
                                swapFee *
                                2) / 10000;
                            if (numTokensSellToFund > contractTokenBalance) {
                                numTokensSellToFund = contractTokenBalance;
                            }
                            swapTokenForFund(numTokensSellToFund, swapFee);
                        }
                    }
                }
                takeFee = true;
            }
            if (_swapPairList[to]) {
                isSell = true;
            }
        }

        _tokenTransfer(from, to, amount, takeFee, isSell);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool isSell
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount;

        if (takeFee) {
            uint256 swapFee;
            if (isSell) {
                swapFee = _sellFundFee + _sellLPFee + _sellBurnFee;
            } else {
                swapFee = _buyFundFee + _buyLPFee + _buyBurnFee;
            }
            uint256 swapAmount = (tAmount * swapFee) / 10000;
            if (swapAmount > 0) {
                feeAmount += swapAmount;
                _takeTransfer(sender, address(this), swapAmount);
            }
        }

        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    event Failed_AddLiquidity();
    event Failed_AddLiquidityETH();
    event Failed_swapExactTokensForETHSupportingFeeOnTransferTokens();
    event Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens();

    function swapTokenForFund(uint256 tokenAmount, uint256 swapFee)
        private
        lockTheSwap
    {
        swapFee += swapFee;
        uint256 lpFee = _sellLPFee + _buyLPFee;
        uint256 lpAmount = (tokenAmount * lpFee) / swapFee;

        uint256 burnFee = _sellBurnFee + _buyBurnFee;
        uint256 burnAmount = (tokenAmount * burnFee * 2) / swapFee;
        if (burnAmount > 0) {
            _transfer(address(this), deadAddress, burnAmount);
        }

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = currency;
        if (currencyIsEth) {
            // make the swap
            try _swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount - lpAmount - burnAmount,
                0, // accept any amount of ETH
                path,
                address(this), // The contract
                block.timestamp
            ) {} catch { emit Failed_swapExactTokensForETHSupportingFeeOnTransferTokens(); }
        } else {
            try _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                tokenAmount - lpAmount - burnAmount,
                0,
                path,
                address(_tokenDistributor),
                block.timestamp
            ) {} catch { emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(); }
        }

        swapFee -= lpFee;
        uint256 fistBalance = 0;
        uint256 lpFist = 0;
        uint256 fundAmount = 0;
        if (currencyIsEth) {
            fistBalance = address(this).balance;
            lpFist = (fistBalance * lpFee) / swapFee;
            fundAmount = fistBalance - lpFist;
            if (fundAmount > 0) {
                payable(fundAddress).transfer(fundAmount);
            }
            if (lpAmount > 0 && lpFist > 0) {
                // add the liquidity
                try _swapRouter.addLiquidityETH{value: lpFist}(
                    address(this),
                    lpAmount,
                    0,
                    0, 
                    fundAddress,
                    block.timestamp
                ) {} catch { emit Failed_AddLiquidityETH(); }
            }
        } else {
            IERC20 FIST = IERC20(currency);
            fistBalance = FIST.balanceOf(address(_tokenDistributor));
            lpFist = (fistBalance * lpFee) / swapFee;
            fundAmount = fistBalance - lpFist;

            if (lpFist > 0) {
                FIST.transferFrom(
                    address(_tokenDistributor),
                    address(this),
                    lpFist
                );
            }

            if (fundAmount > 0) {
                FIST.transferFrom(
                    address(_tokenDistributor),
                    fundAddress,
                    fundAmount
                );
            }

            if (lpAmount > 0 && lpFist > 0) {
                try _swapRouter.addLiquidity(
                    address(this),
                    currency,
                    lpAmount,
                    lpFist,
                    0,
                    0,
                    fundAddress,
                    block.timestamp
                ) {} catch { emit Failed_AddLiquidity(); }
            }
        }
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;
        emit Transfer(sender, to, tAmount);
    }

    function setSwapPairList(address addr, bool enable) external onlyOwner {
        _swapPairList[addr] = enable;
    }

    receive() external payable {}
}

Read Contract

MAX 0xd49d5181 → uint256
_allowances 0x024c2ddd → uint256
_balances 0x6ebcf607 → uint256
_buyBurnFee 0x16f2f1a8 → uint256
_buyFundFee 0xce0192f9 → uint256
_buyLPFee 0xb9fbc49d → uint256
_feeWhiteList 0x01986fad → bool
_mainPair 0x4188bf5a → address
_rewardList 0xbd25bf29 → bool
_sellBurnFee 0x7abdc1ca → uint256
_sellFundFee 0x3bfe62ca → uint256
_sellLPFee 0xadc7955d → uint256
_swapPairList 0x3c11100d → bool
_swapRouter 0x206c17bb → address
_tokenDistributor 0x8718b24f → address
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
currency 0xe5a6b10f → address
currencyIsEth 0x15d07d82 → bool
decimals 0x313ce567 → uint256
enableChangeTax 0xd5986433 → bool
enableKillBlock 0x5a7ba73c → bool
enableOffTrade 0xc92d567e → bool
enableRewardList 0xb02d757f → bool
enableSwapLimit 0xa23270d7 → bool
enableWalletLimit 0x03da2b23 → bool
fundAddress 0xe82bef29 → address
isReward 0x4d5ce038 → uint256
kb 0x2dab693f → uint256
maxSwapAmount 0xcce987d4 → uint256
maxWalletAmount 0xaa4bde28 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
startTradeBlock 0x553193ca → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256

Write Contract 18 functions

These functions modify contract state and require a wallet transaction to execute.

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
changeSwapLimit 0xc0aa931e
uint256 _amount
changeWalletLimit 0x7db1342c
uint256 _amount
completeCustoms 0x4696caa5
uint256[] customs
address _router
disableChangeTax 0x0f890b86
No parameters
disableSwapLimit 0x063be69e
No parameters
disableWalletLimit 0x697cfc19
No parameters
launch 0x01339c21
No parameters
multi_bclist 0x6108a3db
address[] addresses
bool value
renounceOwnership 0x715018a6
No parameters
setCurrency 0x2f84c391
address _currency
setFeeWhiteList 0x150e4c47
address[] addr
bool enable
setFundAddress 0x85dc3004
address addr
setSwapPairList 0xa8424861
address addr
bool enable
setkb 0x14a432c9
uint256 a
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner

Recent Transactions

No transactions found for this address