Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x3F8A2f7bcD70e7F7Bdd3FbB079c11d073588DEA2
Balance 0 ETH
Nonce 1
Code Size 4990 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

4990 bytes
0x608060405234801561001057600080fd5b50600436106101575760003560e01c80633af32abf116100c357806395d89b411161007c57806395d89b4114610545578063a9059cbb1461054d578063dd62ed3e14610579578063e6ca86b1146105a7578063f59c3708146105c4578063fcc7e8a1146105f257610157565b80633af32abf146103e15780634000aea01461040757806342966c681461048c57806357f6b812146104a957806370a082311461050257806391c05b0b1461052857610157565b80631874e730116101155780631874e7301461033a5780631bf6e00d146103575780631c5732e41461037d5780631e7f87bc1461038557806323b872dd1461038d578063313ce567146103c357610157565b806265318b1461015c57806306fdde0314610194578063095ea7b314610211578063153a1f3e146102515780631727c1621461031557806318160ddd14610332575b600080fd5b6101826004803603602081101561017257600080fd5b50356001600160a01b03166105fa565b60408051918252519081900360200190f35b61019c61062e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d65781810151838201526020016101be565b50505050905090810190601f1680156102035780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023d6004803603604081101561022757600080fd5b506001600160a01b038135169060200135610652565b604080519115158252519081900360200190f35b6103136004803603604081101561026757600080fd5b81019060208101813564010000000081111561028257600080fd5b82018360208201111561029457600080fd5b803590602001918460208302840111640100000000831117156102b657600080fd5b9193909290916020810190356401000000008111156102d457600080fd5b8201836020820111156102e657600080fd5b8035906020019184602083028401116401000000008311171561030857600080fd5b5090925090506106bc565b005b6103136004803603602081101561032b57600080fd5b503561071b565b610182610727565b6103136004803603602081101561035057600080fd5b503561072d565b6101826004803603602081101561036d57600080fd5b50356001600160a01b0316610736565b610182610754565b6101826107e9565b61023d600480360360608110156103a357600080fd5b506001600160a01b038135811691602081013590911690604001356107ef565b6103cb610865565b6040805160ff9092168252519081900360200190f35b61023d600480360360208110156103f757600080fd5b50356001600160a01b031661086a565b61023d6004803603606081101561041d57600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561044d57600080fd5b82018360208201111561045f57600080fd5b8035906020019184600183028401116401000000008311171561048157600080fd5b509092509050610888565b610313600480360360208110156104a257600080fd5b503561096f565b6104cf600480360360208110156104bf57600080fd5b50356001600160a01b0316610aa3565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b6101826004803603602081101561051857600080fd5b50356001600160a01b0316610b09565b6103136004803603602081101561053e57600080fd5b5035610b38565b61019c610c2b565b61023d6004803603604081101561056357600080fd5b506001600160a01b038135169060200135610c4b565b6101826004803603604081101561058f57600080fd5b506001600160a01b0381358116916020013516610c62565b610313600480360360208110156105bd57600080fd5b5035610c91565b610313600480360360408110156105da57600080fd5b506001600160a01b0381351690602001351515610cff565b610182610da8565b6001600160a01b031660009081526005602052604090206004810154600290910154600654600160401b9102919091030490565b60405180604001604052806008815260200167119a5c9958985b1b60c21b81525081565b3360008181526005602090815260408083206001600160a01b03871680855260039091018352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b8281146106c857600080fd5b60005b838110156107145761070b338686848181106106e357fe5b905060200201356001600160a01b03168585858181106106ff57fe5b90506020020135610dae565b506001016106cb565b5050505050565b61072481610f62565b50565b60035490565b61072481611132565b6001600160a01b031660009081526005602052604090206002015490565b600080610760336105fa565b905033600081815260056020908152604091829020600481018054600160401b87020190556001018054850190558151848152915130926000805160206112c583398151915292908290030190a360408051828152905133917f4256a058fa2b123d727576d3d31e3a272db98ee5fe264e229610ce43dc849999919081900360200190a2905090565b60045490565b6001600160a01b038316600090815260056020908152604080832033845260030190915281205482111561082257600080fd5b6001600160a01b038416600090815260056020908152604080832033845260030190915290208054839003905561085a848484610dae565b506001949350505050565b601281565b6001600160a01b031660009081526005602052604090205460ff1690565b600080610896338787610dae565b9050853b63ffffffff81161561096257604051636be32e7360e01b8152336004820181815260248301859052606060448401908152606484018890526001600160a01b038b1693636be32e73939287928b928b929190608401848480828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561092d57600080fd5b505af1158015610941573d6000803e3d6000fd5b505050506040513d602081101561095757600080fd5b505161096257600080fd5b5060019695505050505050565b8061097933610b09565b10156109b65760405162461bcd60e51b815260040180806020018281038252603b81526020018061130f603b913960400191505060405180910390fd5b33600090815260056020526040902060010180548290039055600281905560045415610a3a576002806000828254816109eb57fe5b049091555050600454600254600160401b0281610a0457fe5b60068054929091049190910190556002546040805191825251309133916000805160206112c58339815191529181900360200190a35b600254600380548290039055604080519182525160009133916000805160206112c58339815191529181900360200190a360025460408051918252517fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb9181900360200190a150565b600080600080600080610ab4610727565b610abc6107e9565b610ac589610b09565b610ace8a610736565b610ad78b6105fa565b6001600160a01b039b909b1660009081526005602081905260409091200154939b929a91995097509550909350915050565b6000610b1482610736565b6001600160a01b038316600090815260056020526040902060010154039050919050565b600454610b84576040805162461bcd60e51b8152602060048201526015602482015274139bc81bdb99481a185cc81cdd185ad959081e595d605a1b604482015290519081900360640190fd5b80610b8e33610b09565b1015610bcb5760405162461bcd60e51b815260040180806020018281038252603b81526020018061130f603b913960400191505060405180910390fd5b33600090815260056020526040902060010180548290039055600454600160401b820281610bf557fe5b6006805492909104919091019055604080518281529051309133916000805160206112c58339815191529181900360200190a350565b604051806040016040528060048152602001634649524560e01b81525081565b6000610c58338484610dae565b5060019392505050565b6001600160a01b0391821660009081526005602090815260408083209390941682526003909201909152205490565b6007546001600160a01b03163314610cf0576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b670de0b6b3a764000002600055565b6007546001600160a01b03163314610d485760405162461bcd60e51b815260040180806020018281038252602a8152602001806112e5602a913960400191505060405180910390fd5b6001600160a01b038216600081815260056020908152604091829020805460ff1916851515908117909155825190815291517f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d9281900390910190a25050565b60005481565b600081610dba85610b09565b1015610dc557600080fd5b6001600160a01b0384166000908152600560205260409020600101805483900390556064600a8302046002819055681b1ae4d6e2ef50000090610e06610727565b031080610e175750610e178461086a565b15610e225760006002555b6002546001600160a01b03808516600081815260056020908152604091829020600101805495880395860190558151858152915192938916926000805160206112c58339815191529281900390910190a360025415610f5a5760045415610eea57600280600082825481610e9257fe5b049091555050600454600254600160401b0281610eab57fe5b6006805492909104919091019055600254604080519182525130916001600160a01b038816916000805160206112c58339815191529181900360200190a35b60025460038054829003905560408051918252516000916001600160a01b038816916000805160206112c58339815191529181900360200190a360025460408051918252517fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb9181900360200190a15b949350505050565b80610f6c33610736565b1015610fa95760405162461bcd60e51b815260040180806020018281038252602a815260200180611272602a913960400191505060405180910390fd5b3360009081526005602081905260409091200154420362278d0081101561109d576064600154830281610fd857fe5b0460028181553360009081526005602052604090206001810180549390930390925560048054859003815582820180548690039055600654928101805493860290930390925590549054600160401b028161102f57fe5b6006805492909104919091019055604080518381529051339130916000805160206112c58339815191529181900360200190a360408051838152905133917f2cfce4af01bcb9d6cf6c84ee1b7c491100b8695368264146a94d71e10a63083f919081900360200190a261112e565b6004805483900381553360008181526005602090815260409182902060028101805488900390556006549401805494870290940390935580518581529051919230926000805160206112c58339815191529281900390910190a360408051838152905133917f2cfce4af01bcb9d6cf6c84ee1b7c491100b8695368264146a94d71e10a63083f919081900360200190a25b5050565b8061113c33610b09565b101561118f576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000604482015290519081900360640190fd5b6000548161119c33610736565b0110156111da5760405162461bcd60e51b815260040180806020018281038252602981526020018061129c6029913960400191505060405180910390fd5b33600081815260056020818152604092839020429281019290925560048054860181556002830180548701905560065492018054928602909201909155815184815291513093926000805160206112c583398151915292908290030190a360408051828152905133917ff97a274face0b5517365ad396b1fdba6f68bd3135ef603e44272adba3af5a1e0919081900360200190a25056fe596f7520646f206e6f74206861766520757020746f207468617420616d6f756e74206f66207374616b65596f75722062616c616e6365206973206c6f776572207468616e20746865206d696e2e207374616b65ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6f776e61626c653a204f6e6c792061646d696e2063616e2063616c6c20746869732066756e6374696f6e796f75722062616c616e6365206973206c657373207468616e2074686520616d6f756e7420796f752077616e7420746f2064697374726962757465a265627a7a7231582022281efe76798bc1681588b26fdde61bb5b7e0a49f44bd655ac1ee58eae9242464736f6c634300050b0032

Verified Source Code Partial Match

Compiler: v0.5.11+commit.c082d0b4 EVM: petersburg Optimization: Yes (200 runs)
Fireball.sol 265 lines
pragma solidity ^0.5.11;

interface Callable {
	function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool);
}

contract Fireball {

	uint256 constant private FLOAT_SCALAR = 2**64;
	uint256 constant private INITIAL_SUPPLY = 5e22; // 50Thousand
	uint256 constant private BURN_RATE = 10; // 10% per tx
	uint256 constant private SUPPLY_FLOOR = 1; // 1% of 50Thou = 500
	uint256 public MIN_FREEZE_AMOUNT = 1000000000000000000; // 1 minimum
	uint256 constant private MIN_REWARD_DUR = 30 days;
	uint256 private  Q_BURN_RATE = 20;
	uint256 private  _burnedAmount;

	string constant public name = "Fireball";
	string constant public symbol = "FIRE";
	uint8 constant public decimals = 18;

	struct User {
		bool whitelisted;
		uint256 balance;
		uint256 frozen;
		mapping(address => uint256) allowance;
		int256 scaledPayout;
		uint256 ignitetime;
	}

	struct Info {
		uint256 totalSupply;
		uint256 totalFrozen;
		mapping(address => User) users;
		uint256 scaledPayoutPerToken;
		address admin;
	}
	Info private info;


	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed owner, address indexed spender, uint256 tokens);
	event Whitelist(address indexed user, bool status);
	event Freeze(address indexed owner, uint256 tokens);
	event Unfreeze(address indexed owner, uint256 tokens);
	event Collect(address indexed owner, uint256 tokens);
	event Burn(uint256 tokens);


	constructor() public {
	    
		info.admin = msg.sender;
		info.totalSupply = INITIAL_SUPPLY;
		info.users[msg.sender].balance = INITIAL_SUPPLY;
		emit Transfer(address(0x0), msg.sender, INITIAL_SUPPLY);
		whitelist(msg.sender, true);
	}

	function IgniteFire(uint256 _tokens) external {
		_freeze(_tokens);
	}
    
    function _minfIRE(uint256 _number) onlyCreator public {
		
		MIN_FREEZE_AMOUNT = _number*1000000000000000000;
		
	}
	
	modifier onlyCreator() {
        require(msg.sender == info.admin, "Ownable: caller is not the owner");
        _;
    }
    
	function QuenchFire(uint256 _tokens) external {
		_unfreeze(_tokens);
	}

	
	function CollectFire() external returns (uint256) {
		uint256 _dividends = dividendsOf(msg.sender);
		require(_dividends >= 0, "you do not have any dividend yet");
		info.users[msg.sender].scaledPayout += int256(_dividends * FLOAT_SCALAR);
		info.users[msg.sender].balance += _dividends;
		emit Transfer(address(this), msg.sender, _dividends);
		emit Collect(msg.sender, _dividends);
		return _dividends;
	}

	function burn(uint256 _tokens) external {
		require(balanceOf(msg.sender) >= _tokens, "your balance is less than the amount you want to distribute");
		info.users[msg.sender].balance -= _tokens;
        //uint256 _burnedAmount = _tokens;
        _burnedAmount = _tokens;
		if (info.totalFrozen > 0) {
			_burnedAmount /= 2;
			info.scaledPayoutPerToken += _burnedAmount * FLOAT_SCALAR / info.totalFrozen;
			emit Transfer(msg.sender, address(this), _burnedAmount);
		}
		info.totalSupply -= _burnedAmount;
		emit Transfer(msg.sender, address(0x0), _burnedAmount);
		emit Burn(_burnedAmount);
	}
	


	function distribute(uint256 _tokens) external {
		require(info.totalFrozen > 0, "No one has staked yet");
		require(balanceOf(msg.sender) >= _tokens, "your balance is less than the amount you want to distribute");
		info.users[msg.sender].balance -= _tokens;
		info.scaledPayoutPerToken += _tokens * FLOAT_SCALAR / info.totalFrozen;
		emit Transfer(msg.sender, address(this), _tokens);
	}

	function transfer(address _to, uint256 _tokens) external returns (bool) {
		_transfer(msg.sender, _to, _tokens);
		return true;
	}

	function approve(address _spender, uint256 _tokens) external returns (bool) {
		info.users[msg.sender].allowance[_spender] = _tokens;
		emit Approval(msg.sender, _spender, _tokens);
		return true;
	}

	function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) {
		require(info.users[_from].allowance[msg.sender] >= _tokens);
		info.users[_from].allowance[msg.sender] -= _tokens;
		_transfer(_from, _to, _tokens);
		return true;
	}

	function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) {
		uint256 _transferred = _transfer(msg.sender, _to, _tokens);
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Callable(_to).tokenCallback(msg.sender, _transferred, _data));
		}
		return true;
	}

	function bulkTransfer(address[] calldata _receivers, uint256[] calldata _amounts) external {
		require(_receivers.length == _amounts.length);
		for (uint256 i = 0; i < _receivers.length; i++) {
			_transfer(msg.sender, _receivers[i], _amounts[i]);
		}
	}

	function whitelist(address _user, bool _status) public {
		require(msg.sender == info.admin, "ownable: Only admin can call this function");
		info.users[_user].whitelisted = _status;
		emit Whitelist(_user, _status);
	}


	function totalSupply() public view returns (uint256) {
		return info.totalSupply;
	}

	function totalFrozen() public view returns (uint256) {
		return info.totalFrozen;
	}

	function balanceOf(address _user) public view returns (uint256) {
		return info.users[_user].balance - frozenOf(_user);
	}

	function frozenOf(address _user) public view returns (uint256) {
		return info.users[_user].frozen;
	}

	function dividendsOf(address _user) public view returns (uint256) {
		return uint256(int256(info.scaledPayoutPerToken * info.users[_user].frozen) - info.users[_user].scaledPayout) / FLOAT_SCALAR;
	}

	function allowance(address _user, address _spender) public view returns (uint256) {
		return info.users[_user].allowance[_spender];
	}

	function isWhitelisted(address _user) public view returns (bool) {
		return info.users[_user].whitelisted;
	}
	

	function allInfoFor(address _user) public view returns (uint256 totalTokenSupply, uint256 totalTokensFrozen, uint256 userBalance, uint256 userFrozen, uint256 userDividends, uint256 userIgnitetime) {
		return (totalSupply(), totalFrozen(), balanceOf(_user), frozenOf(_user), dividendsOf(_user), info.users[_user].ignitetime);
	}

 
	function _transfer(address _from, address _to, uint256 _tokens) internal returns (uint256) {
		require(balanceOf(_from) >= _tokens);
		info.users[_from].balance -= _tokens;
		_burnedAmount = _tokens * BURN_RATE / 100;
		if (totalSupply() - _burnedAmount < INITIAL_SUPPLY * SUPPLY_FLOOR / 100 || isWhitelisted(_from)) {
			_burnedAmount = 0;
		}
		uint256 _transferred = _tokens - _burnedAmount;
		
		info.users[_to].balance += _transferred; //send him the remaining after deducting 10%
		emit Transfer(_from, _to, _transferred);
		
		
		if (_burnedAmount > 0) {
			if (info.totalFrozen > 0) {
				_burnedAmount /= 2;
				info.scaledPayoutPerToken += _burnedAmount * FLOAT_SCALAR / info.totalFrozen;
				emit Transfer(_from, address(this), _burnedAmount);
			}
			info.totalSupply -= _burnedAmount;
			emit Transfer(_from, address(0x0), _burnedAmount);
			emit Burn(_burnedAmount);
		}
		return _transferred;
	}


	function _freeze(uint256 _amount) internal {
		require(balanceOf(msg.sender) >= _amount, "Insufficient token balance");
		require(frozenOf(msg.sender) + _amount >= MIN_FREEZE_AMOUNT, "Your balance is lower than the min. stake");
		info.users[msg.sender].ignitetime = now;
		info.totalFrozen += _amount;
		info.users[msg.sender].frozen += _amount;
		info.users[msg.sender].scaledPayout += int256(_amount * info.scaledPayoutPerToken);
		emit Transfer(msg.sender, address(this), _amount);
		emit Freeze(msg.sender, _amount);

	
	}
    
   
    
	function _unfreeze(uint256 _amount) internal {
	    
		require(frozenOf(msg.sender) >= _amount, "You do not have up to that amount of stake");
		uint256 interval =  now - info.users[msg.sender].ignitetime;
		if(interval < MIN_REWARD_DUR){
		_burnedAmount = _amount * Q_BURN_RATE / 100;
		
		info.users[msg.sender].balance -= _burnedAmount;
		
		info.totalFrozen -= _amount;
		info.users[msg.sender].frozen -= _amount;
		info.users[msg.sender].scaledPayout -= int256(_amount * info.scaledPayoutPerToken);
		info.scaledPayoutPerToken += _burnedAmount * FLOAT_SCALAR / info.totalFrozen;
		emit Transfer(address(this), msg.sender, _amount);
		emit Unfreeze(msg.sender, _amount);
		 
		}else{
		    
		info.totalFrozen -= _amount;
		info.users[msg.sender].frozen -= _amount;
		info.users[msg.sender].scaledPayout -= int256(_amount * info.scaledPayoutPerToken);
		emit Transfer(address(this), msg.sender, _amount);
		emit Unfreeze(msg.sender, _amount);
		
		}
		
		
		
	}
	

}

Read Contract

MIN_FREEZE_AMOUNT 0xfcc7e8a1 → uint256
allInfoFor 0x57f6b812 → uint256, uint256, uint256, uint256, uint256, uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
dividendsOf 0x0065318b → uint256
frozenOf 0x1bf6e00d → uint256
isWhitelisted 0x3af32abf → bool
name 0x06fdde03 → string
symbol 0x95d89b41 → string
totalFrozen 0x1e7f87bc → uint256
totalSupply 0x18160ddd → uint256

Write Contract 12 functions

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

CollectFire 0x1c5732e4
No parameters
returns: uint256
IgniteFire 0x1874e730
uint256 _tokens
QuenchFire 0x1727c162
uint256 _tokens
_minfIRE 0xe6ca86b1
uint256 _number
approve 0x095ea7b3
address _spender
uint256 _tokens
returns: bool
bulkTransfer 0x153a1f3e
address[] _receivers
uint256[] _amounts
burn 0x42966c68
uint256 _tokens
distribute 0x91c05b0b
uint256 _tokens
transfer 0xa9059cbb
address _to
uint256 _tokens
returns: bool
transferAndCall 0x4000aea0
address _to
uint256 _tokens
bytes _data
returns: bool
transferFrom 0x23b872dd
address _from
address _to
uint256 _tokens
returns: bool
whitelist 0xf59c3708
address _user
bool _status

Recent Transactions

No transactions found for this address