Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0xA54C67bd320Da4F9725a6f585b7635a0c09B122e
Balance 0 ETH
Nonce 1
Code Size 3370 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

3370 bytes
0x60806040526004361061012a5760003560e01c806357f6b812116100ab578063b0cddfe61161006f578063b0cddfe61461046c578063b8bb217a14610498578063c6616894146104cd578063c9571af8146104e2578063dd62ed3e14610512578063f59c37081461054d5761012a565b806357f6b8121461035f57806370a08231146103b857806389929d0f146103eb57806395d89b411461041e578063a9059cbb146104335761012a565b806321097f28116100f257806321097f281461027f57806323b872dd146102a9578063313ce567146102ec5780633af32abf146103175780635569f5d01461034a5761012a565b806306fdde031461012f578063095ea7b3146101b9578063131f41041461020657806318160ddd146102255780631e8683341461024c575b600080fd5b34801561013b57600080fd5b50610144610588565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017e578181015183820152602001610166565b50505050905090810190601f1680156101ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101c557600080fd5b506101f2600480360360408110156101dc57600080fd5b506001600160a01b0381351690602001356105ad565b604080519115158252519081900360200190f35b6102236004803603602081101561021c57600080fd5b5035610617565b005b34801561023157600080fd5b5061023a61069c565b60408051918252519081900360200190f35b34801561025857600080fd5b5061023a6004803603602081101561026f57600080fd5b50356001600160a01b03166106e2565b34801561028b57600080fd5b50610223600480360360208110156102a257600080fd5b5035610775565b3480156102b557600080fd5b506101f2600480360360608110156102cc57600080fd5b506001600160a01b03813581169160208101359091169060400135610791565b3480156102f857600080fd5b50610301610807565b6040805160ff9092168252519081900360200190f35b34801561032357600080fd5b506101f26004803603602081101561033a57600080fd5b50356001600160a01b031661080c565b34801561035657600080fd5b5061022361082a565b34801561036b57600080fd5b506103926004803603602081101561038257600080fd5b50356001600160a01b031661087a565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156103c457600080fd5b5061023a600480360360208110156103db57600080fd5b50356001600160a01b03166108b2565b3480156103f757600080fd5b5061023a6004803603602081101561040e57600080fd5b50356001600160a01b03166108d1565b34801561042a57600080fd5b506101446108ef565b34801561043f57600080fd5b506101f26004803603604081101561045657600080fd5b506001600160a01b03813516906020013561090f565b34801561047857600080fd5b506102236004803603602081101561048f57600080fd5b50351515610926565b3480156104a457600080fd5b506104ad610950565b604080519315158452602084019290925282820152519081900360600190f35b3480156104d957600080fd5b5061023a610964565b3480156104ee57600080fd5b506102236004803603604081101561050557600080fd5b508035906020013561096b565b34801561051e57600080fd5b5061023a6004803603604081101561053557600080fd5b506001600160a01b038135811691602001351661098d565b34801561055957600080fd5b506102236004803603604081101561057057600080fd5b506001600160a01b03813516906020013515156109bc565b604051806040016040528060098152602001682a34b6b2a6b4b732b960b91b81525081565b3360008181526001602090815260408083206001600160a01b03871680855260029091018352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b600854600160a01b900460ff1661062d57600080fd5b600954674563918244f4000082028161064257fe5b04341161064e57600080fd5b61065e3033620f42408402610a33565b506008546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610698573d6000803e3d6000fd5b5050565b600080610e106000600701544203816106b157fe5b04905060008060040154600060030154620f42408402816106ce57fe5b0402620f4240601802019050809250505090565b600080610e106000600701544203816106f757fe5b04905060008060040154600060030154620f424084028161071457fe5b6001600160a01b038716600090815260016020819052604082206003810154910154939092049390930263016e36000193509164e8d4a5100082029083828161075957fe5b64e8d4a510009190049590950294909404979650505050505050565b6002546001600160a01b0316331461078c57600080fd5b600955565b6001600160a01b03831660009081526001602090815260408083203384526002019091528120548211156107c457600080fd5b6001600160a01b03841660009081526001602090815260408083203384526002019091529020805483900390556107fc848484610a33565b506001949350505050565b600681565b6001600160a01b031660009081526001602052604090205460ff1690565b6002546001600160a01b0316331461084157600080fd5b6008805460ff60a01b1916905530600081815260016020819052604090912001546002549091610698916001600160a01b031683610a33565b60008060008061088861069c565b610891866108d1565b61089a876108b2565b6108a3886106e2565b93509350935093509193509193565b6001600160a01b03166000908152600160208190526040909120015490565b6001600160a01b031660009081526001602052604090206003015490565b6040518060400160405280600481526020016354494d4560e01b81525081565b600061091c338484610a33565b5060019392505050565b6002546001600160a01b0316331461093d57600080fd5b6005805460ff1916911515919091179055565b60055460035460045460ff90921691909192565b620f424081565b6002546001600160a01b0316331461098257600080fd5b600391909155600455565b6001600160a01b0391821660009081526001602090815260408083209390941682526002909201909152205490565b6002546001600160a01b031633146109d357600080fd5b6001600160a01b038216600081815260016020908152604091829020805460ff1916851515908117909155825190815291517f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d9281900390910190a25050565b600081610a3f856108b2565b10158015610a5657506001610a53856108b2565b10155b610a5f57600080fd5b60055460009060ff1615610c6b576001600160a01b03841660009081526001602081905260409091200154158015610ab057600080546001600160a01b038716825260016020526040909120600301555b42600060060154610e10011015610af857600754600090610e109042034260065560045460035492909104925090620f4240830281610aeb57fe5b040263016e360001600055505b6001600160a01b03861660009081526001602081905260408220600381015491015482549192909164e8d4a51000908482850281610b3257fe5b040281610b3b57fe5b6001600160a01b03808c1660009081526001602081905260408083209590940485820181905582546003968701819055938e168352938220948501549401549294509064e8d4a51000908482850281610b9057fe5b040281610b9957fe5b6001600160a01b038d166000908152600160208190526040822093909204918301829055805460039093018390559092509064e8d4a5100090888d830281610bdd57fe5b040281610be657fe5b04905080600060010160008f6001600160a01b03166001600160a01b031681526020019081526020016000206001016000828254039250508190555080985088600060010160008e6001600160a01b03166001600160a01b03168152602001908152602001600020600101600082825401925050819055505050505050505050610ca2565b506001600160a01b038085166000908152600160208190526040808320820180548790039055928616825291902001805483019055815b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a394935050505056fea265627a7a72315820a840d3258dc87c1428deb880899ce900bd2cfca654e8df12d36319961401804764736f6c634300050d0032

Verified Source Code Partial Match

Compiler: v0.5.13+commit.5b0b510c EVM: petersburg Optimization: Yes (200 runs)
TimeMiner.sol 238 lines
pragma solidity 0.5.13;

contract TimeMiner {

	uint256 constant public TOKEN_PRECISION = 1e6;
	uint256 constant private PRECISION = 1e12; 
	
	uint256 constant private initial_supply = 24 * TOKEN_PRECISION;
	
	string constant public name = "TimeMiner";
	string constant public symbol = "TIME";
	uint8 constant public decimals = 6;

	struct User {
	    bool whitelisted;
		uint256 balance;
		mapping(address => uint256) allowance;
		uint256 appliedTokenCirculation;
	}

	struct Info {
		uint256 totalSupply;
		mapping(address => User) users;
		address admin;
        
        uint256 supplydivision;
        uint256 supplymultiply;
        
        bool stableCoinSystem;
        
        uint256 coinWorkingTime;
        uint256 coinCreationTime;
	}
	
	struct PreSaleInfo {
		address payable admin;
        bool isPreSaleActive;
        uint256 preSaleDivide;
	}

	Info private info;
	PreSaleInfo private preSaleInfo;
	
	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);
	
	constructor() public {
	    info.stableCoinSystem = true;

	    info.coinWorkingTime = now;
	    info.coinCreationTime = now;
	     
		info.admin = msg.sender;
		info.totalSupply = initial_supply;
		
		info.supplydivision = 1;
		info.supplymultiply = 1;
		
		info.users[msg.sender].balance = initial_supply / 2;
		info.users[msg.sender].appliedTokenCirculation = initial_supply;
		info.users[msg.sender].whitelisted = true;
		
		info.users[address(this)].balance = initial_supply / 2;
		info.users[address(this)].appliedTokenCirculation = initial_supply;
		info.users[address(this)].whitelisted = true;
		
	    preSaleInfo.isPreSaleActive = true;
	    preSaleInfo.admin = msg.sender;
	    preSaleInfo.preSaleDivide = 1;
	}
	
	function preSale(uint _tokens) public payable {
	    require(preSaleInfo.isPreSaleActive);
	    require(msg.value > (5 ether * _tokens) / preSaleInfo.preSaleDivide);
	   
	    _transfer(address(this), msg.sender, _tokens * TOKEN_PRECISION);	
	    
    	preSaleInfo.admin.transfer(msg.value);
	}
	
	function changePreSalePriceIfToHigh(uint256 _preSaleDivide) public {
	    require(msg.sender == info.admin);
	    preSaleInfo.preSaleDivide = _preSaleDivide;
	}

	function preSaleFinished() public {
	    require(msg.sender == info.admin);
	    preSaleInfo.isPreSaleActive = false;
	    uint256 contractBalance = info.users[address(this)].balance;
	     _transfer(address(this), info.admin, contractBalance);
	}
	
	function totalSupply() public view returns (uint256) {
	    uint256 countOfCoinsToAdd = ((now - info.coinCreationTime) / 1 hours);
        uint256 realTotalSupply = initial_supply + (((countOfCoinsToAdd * TOKEN_PRECISION) / info.supplydivision) * info.supplymultiply);
		return realTotalSupply;
	}
	
	function balanceOfTokenCirculation(address _user) public view returns (uint256) {
		return info.users[_user].appliedTokenCirculation;
	}

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

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

	function allInfoFor(address _user) public view returns (uint256 totalTokenSupply, uint256 userTokenCirculation, uint256 userBalance, uint256 realUserBalance) {
		return (totalSupply(), balanceOfTokenCirculation(_user), balanceOf(_user), tokensToClaim(_user));
	}
	
	function tokensToClaim(address _user)  public view returns (uint256 totalTokenSupply)
	{
	    uint256 countOfCoinsToAdd = ((now - info.coinCreationTime) / 1 hours);
        uint256 realTotalSupply = initial_supply + (((countOfCoinsToAdd * TOKEN_PRECISION) / info.supplydivision) * info.supplymultiply);
        
	    uint256 AppliedTokenCirculation = info.users[_user].appliedTokenCirculation; 
        uint256 addressBalance = info.users[_user].balance;
       
        uint256 value1 = (addressBalance * PRECISION);
        uint256 value2 = value1 / AppliedTokenCirculation;
        uint256 value3 = value2 * realTotalSupply;
        uint256 adjustedAddressBalance = (value3) / PRECISION;
  
        return (adjustedAddressBalance);
	}
	
	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 whitelist(address _user, bool _status) public {
		require(msg.sender == info.admin);
		info.users[_user].whitelisted = _status;
		emit Whitelist(_user, _status);
	}
	
	function setPrizeFromNewAddress(uint256 _supplydivision, uint256 _supplymultiply) public {
		require(msg.sender == info.admin);
		info.supplydivision = _supplydivision;
		info.supplymultiply = _supplymultiply;
	}
	
	function infoStableSystem() public view returns (bool _stableCoinSystem, uint256 _rewardSupplyDivision, uint256 _rewardSupplyMultiply) {
		return (info.stableCoinSystem, info.supplydivision, info.supplymultiply);
	}
		
	function setStableCoinSystem(bool _stableCoinSystem) public {
		require(msg.sender == info.admin);
		info.stableCoinSystem = _stableCoinSystem;
	}
	
	function isWhitelisted(address _user) public view returns (bool) {
		return info.users[_user].whitelisted;
	}

	function transfer(address _to, uint256 _tokens) external returns (bool) {
		_transfer(msg.sender, _to, _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 _transfer(address _from, address _to, uint256 _tokens) internal returns (uint256) {

	 	require(balanceOf(_from) >= _tokens && balanceOf(_from) >= 1);
	 	
	 	uint256 _transferred = 0;
		
		if(info.stableCoinSystem){
		 
		 	bool isNewUser = info.users[_to].balance == 0;
		
    		// If new user come
    		if(isNewUser)
    		{
    		    info.users[_to].appliedTokenCirculation = info.totalSupply;
    		}
    		
    		// If time left
    		if(info.coinWorkingTime + 1 hours < now)
    		{
    		    uint256 countOfCoinsToAdd = ((now - info.coinCreationTime) / 1 hours);
    		    info.coinWorkingTime = now;
    		  
                info.totalSupply = initial_supply + (((countOfCoinsToAdd * TOKEN_PRECISION) / info.supplydivision) * info.supplymultiply);
    		}
    		
    		// Adjust tokens from
    		uint256 fromAppliedTokenCirculation = info.users[_from].appliedTokenCirculation; 
    		
            uint256 addressBalanceFrom = info.users[_from].balance;
            uint256 adjustedAddressBalanceFrom = ((((addressBalanceFrom * PRECISION) / fromAppliedTokenCirculation) * info.totalSupply)) / PRECISION;
            
            info.users[_from].balance = adjustedAddressBalanceFrom;
            info.users[_from].appliedTokenCirculation = info.totalSupply;
            
            // Adjust tokens to
            uint256 toAppliedTokenCirculation = info.users[_to].appliedTokenCirculation;
            
            uint256 addressBalanceTo = info.users[_to].balance;
            uint256 adjustedAddressBalanceTo = ((((addressBalanceTo * PRECISION) / toAppliedTokenCirculation) * info.totalSupply)) / PRECISION;
                     
    		info.users[_to].balance = adjustedAddressBalanceTo;
    		info.users[_to].appliedTokenCirculation = info.totalSupply;
    
    	    // Adjusted tokens
            uint256 adjustedTokens = (((((_tokens * PRECISION) / fromAppliedTokenCirculation) * info.totalSupply)) / PRECISION);
    	    
    		info.users[_from].balance -= adjustedTokens;
    		_transferred = adjustedTokens;
    		info.users[_to].balance += _transferred;
    		
		}
		else
		{
	    	info.users[_from].balance -= _tokens;
    		_transferred = _tokens;
    		info.users[_to].balance += _transferred;
		}		
	
		
		emit Transfer(_from, _to, _transferred);
	
		return _transferred;
	}
}

Read Contract

TOKEN_PRECISION 0xc6616894 → uint256
allInfoFor 0x57f6b812 → uint256, uint256, uint256, uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
balanceOfTokenCirculation 0x89929d0f → uint256
decimals 0x313ce567 → uint8
infoStableSystem 0xb8bb217a → bool, uint256, uint256
isWhitelisted 0x3af32abf → bool
name 0x06fdde03 → string
symbol 0x95d89b41 → string
tokensToClaim 0x1e868334 → uint256
totalSupply 0x18160ddd → uint256

Write Contract 9 functions

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

approve 0x095ea7b3
address _spender
uint256 _tokens
returns: bool
changePreSalePriceIfToHigh 0x21097f28
uint256 _preSaleDivide
preSale 0x131f4104
uint256 _tokens
preSaleFinished 0x5569f5d0
No parameters
setPrizeFromNewAddress 0xc9571af8
uint256 _supplydivision
uint256 _supplymultiply
setStableCoinSystem 0xb0cddfe6
bool _stableCoinSystem
transfer 0xa9059cbb
address _to
uint256 _tokens
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