ETH Price: $1,817.90 (+0.29%)
Gas: 32 Gwei
 

Sponsored

Transaction Hash
Method
Block
From
To
Value
Withdraw159275172022-11-08 19:50:59193 days 3 hrs ago1667937059IN
0x403E51...1f92446A
0 ETH0.01607306247.55212668
Withdraw153954872022-08-23 8:22:42270 days 14 hrs ago1661242962IN
0x403E51...1f92446A
0 ETH0.0006198815.52507629
Withdraw153895222022-08-22 9:38:52271 days 13 hrs ago1661161132IN
0x403E51...1f92446A
0 ETH0.000513217.9058346
Transfer151117082022-07-10 0:44:17314 days 22 hrs ago1657413857IN
0x403E51...1f92446A
0.001 ETH0.0002344311.1636556
Buy Tokens64696652018-10-07 9:59:311686 days 13 hrs ago1538906371IN
0x403E51...1f92446A
0 ETH0.000400234.28125
Buy Tokens61827252018-08-20 17:57:551734 days 5 hrs ago1534787875IN
0x403E51...1f92446A
0 ETH0.0028223941
Buy Tokens60349412018-07-26 18:58:471759 days 4 hrs ago1532631527IN
0x403E51...1f92446A
0 ETH0.000281513
Buy Tokens60150072018-07-23 9:06:401762 days 14 hrs ago1532336800IN
0x403E51...1f92446A
0 ETH0.001689118
Buy Tokens59440512018-07-11 9:47:081774 days 13 hrs ago1531302428IN
0x403E51...1f92446A
0 ETH0.0010322211
Buy Tokens59345022018-07-09 18:18:441776 days 4 hrs ago1531160324IN
0x403E51...1f92446A
0 ETH0.0023459725
Transfer59231222018-07-07 18:51:031778 days 4 hrs ago1530989463IN
0x403E51...1f92446A
2.79 ETH0.0042742550
Transfer59213322018-07-07 11:32:101778 days 11 hrs ago1530963130IN
0x403E51...1f92446A
1.06318451 ETH0.0059839570
Transfer59206572018-07-07 8:44:431778 days 14 hrs ago1530953083IN
0x403E51...1f92446A
1 ETH0.0035048841
Transfer59156622018-07-06 12:03:041779 days 11 hrs ago1530878584IN
0x403E51...1f92446A
1.99148569 ETH0.008514399.6
Set Time59155222018-07-06 11:28:571779 days 11 hrs ago1530876537IN
0x403E51...1f92446A
0 ETH0.002514483
Buy Tokens58689472018-06-28 11:55:501787 days 11 hrs ago1530186950IN
0x403E51...1f92446A
0 ETH0.000456525.8
Buy Tokens58644202018-06-27 17:22:161788 days 5 hrs ago1530120136IN
0x403E51...1f92446A
0 ETH0.000328433.5
Transfer58531192018-06-25 18:04:071790 days 5 hrs ago1529949847IN
0x403E51...1f92446A
2.44 ETH0.0011967914
Buy Tokens58357322018-06-22 18:47:191793 days 4 hrs ago1529693239IN
0x403E51...1f92446A
0 ETH0.000281323
Buy Tokens58170752018-06-19 13:55:401796 days 9 hrs ago1529416540IN
0x403E51...1f92446A
0 ETH0.0009383910
Buy Tokens58152572018-06-19 6:22:341796 days 16 hrs ago1529389354IN
0x403E51...1f92446A
0 ETH0.0032323941
Buy Tokens57868272018-06-14 10:01:471801 days 13 hrs ago1528970507IN
0x403E51...1f92446A
0 ETH0.0016556121
Buy Tokens57812392018-06-13 10:52:111802 days 12 hrs ago1528887131IN
0x403E51...1f92446A
0 ETH0.0009377510
Transfer57810882018-06-13 10:17:221802 days 12 hrs ago1528885042IN
0x403E51...1f92446A
3 ETH0.0008548510
Transfer57753752018-06-12 10:11:451803 days 12 hrs ago1528798305IN
0x403E51...1f92446A
10.76 ETH0.000777919.10000025
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Txn Hash Block From To Value
159275172022-11-08 19:50:59193 days 3 hrs ago1667937059
0x403E51...1f92446A
13.3 ETH
153954872022-08-23 8:22:42270 days 14 hrs ago1661242962
0x403E51...1f92446A
36 ETH
153895222022-08-22 9:38:52271 days 13 hrs ago1661161132
0x403E51...1f92446A
1.68 ETH
64696652018-10-07 9:59:311686 days 13 hrs ago1538906371
0x403E51...1f92446A
2.79 ETH
60349412018-07-26 18:58:471759 days 4 hrs ago1532631527
0x403E51...1f92446A
3.7802 ETH
60150072018-07-23 9:06:401762 days 14 hrs ago1532336800
0x403E51...1f92446A
1.99148569 ETH
59440512018-07-11 9:47:081774 days 13 hrs ago1531302428
0x403E51...1f92446A
1.06318451 ETH
59345022018-07-09 18:18:441776 days 4 hrs ago1531160324
0x403E51...1f92446A
2.44 ETH
58689472018-06-28 11:55:501787 days 11 hrs ago1530186950
0x403E51...1f92446A
10.76 ETH
58644202018-06-27 17:22:161788 days 5 hrs ago1530120136
0x403E51...1f92446A
5.75 ETH
58357322018-06-22 18:47:191793 days 4 hrs ago1529693239
0x403E51...1f92446A
1.88 ETH
58170752018-06-19 13:55:401796 days 9 hrs ago1529416540
0x403E51...1f92446A
1 ETH
58152572018-06-19 6:22:341796 days 16 hrs ago1529389354
0x403E51...1f92446A
12 ETH
57868272018-06-14 10:01:471801 days 13 hrs ago1528970507
0x403E51...1f92446A
1.0603138 ETH
57812392018-06-13 10:52:111802 days 12 hrs ago1528887131
0x403E51...1f92446A
3 ETH
57592662018-06-09 13:41:191806 days 9 hrs ago1528551679
0x403E51...1f92446A
8.036 ETH
57423512018-06-06 13:42:451809 days 9 hrs ago1528292565
0x403E51...1f92446A
14.98 ETH
57325112018-06-04 19:42:351811 days 3 hrs ago1528141355
0x403E51...1f92446A
1.35640405 ETH
57223442018-06-03 0:33:071812 days 22 hrs ago1527985987
0x403E51...1f92446A
1.31981907 ETH
57098352018-05-31 19:09:401815 days 4 hrs ago1527793780
0x403E51...1f92446A
7.6578 ETH
57027002018-05-30 13:01:551816 days 10 hrs ago1527685315
0x403E51...1f92446A
8.71 ETH
57018612018-05-30 9:11:591816 days 13 hrs ago1527671519
0x403E51...1f92446A
10.93 ETH
56980092018-05-29 16:50:121817 days 6 hrs ago1527612612
0x403E51...1f92446A
6.05 ETH
56901042018-05-28 7:15:061818 days 15 hrs ago1527491706
0x403E51...1f92446A
3.85689031 ETH
56900832018-05-28 7:10:271818 days 15 hrs ago1527491427
0x403E51...1f92446A
8.5 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x33Ca75...ffe62558

Contract Name:
RC

Compiler Version
v0.4.21+commit.dfe3193c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-04-03
*/

pragma solidity ^0.4.19;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;
  
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() internal {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) onlyOwner public {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }
}

contract tokenInterface {
	function balanceOf(address _owner) public constant returns (uint256 balance);
	function transfer(address _to, uint256 _value) public returns (bool);
}

contract rateInterface {
    function readRate(string _currency) public view returns (uint256 oneEtherValue);
}

contract ICOEngineInterface {

    // false if the ico is not started, true if the ico is started and running, true if the ico is completed
    function started() public view returns(bool);

    // false if the ico is not started, false if the ico is started and running, true if the ico is completed
    function ended() public view returns(bool);

    // time stamp of the starting time of the ico, must return 0 if it depends on the block number
    function startTime() public view returns(uint);

    // time stamp of the ending time of the ico, must retrun 0 if it depends on the block number
    function endTime() public view returns(uint);

    // Optional function, can be implemented in place of startTime
    // Returns the starting block number of the ico, must return 0 if it depends on the time stamp
    // function startBlock() public view returns(uint);

    // Optional function, can be implemented in place of endTime
    // Returns theending block number of the ico, must retrun 0 if it depends on the time stamp
    // function endBlock() public view returns(uint);

    // returns the total number of the tokens available for the sale, must not change when the ico is started
    function totalTokens() public view returns(uint);

    // returns the number of the tokens available for the ico. At the moment that the ico starts it must be equal to totalTokens(),
    // then it will decrease. It is used to calculate the percentage of sold tokens as remainingTokens() / totalTokens()
    function remainingTokens() public view returns(uint);

    // return the price as number of tokens released for each ether
    function price() public view returns(uint);
}

contract KYCBase {
    using SafeMath for uint256;

    mapping (address => bool) public isKycSigner;
    mapping (uint64 => uint256) public alreadyPayed;

    event KycVerified(address indexed signer, address buyerAddress, uint64 buyerId, uint maxAmount);

    function KYCBase(address [] kycSigners) internal {
        for (uint i = 0; i < kycSigners.length; i++) {
            isKycSigner[kycSigners[i]] = true;
        }
    }

    // Must be implemented in descending contract to assign tokens to the buyers. Called after the KYC verification is passed
    function releaseTokensTo(address buyer) internal returns(bool);

    // This method can be overridden to enable some sender to buy token for a different address
    function senderAllowedFor(address buyer)
        internal view returns(bool)
    {
        return buyer == msg.sender;
    }

    function buyTokensFor(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s)
        public payable returns (bool)
    {
        require(senderAllowedFor(buyerAddress));
        return buyImplementation(buyerAddress, buyerId, maxAmount, v, r, s);
    }

    function buyTokens(uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s)
        public payable returns (bool)
    {
        return buyImplementation(msg.sender, buyerId, maxAmount, v, r, s);
    }

    function buyImplementation(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s)
        private returns (bool)
    {
        // check the signature
        bytes32 hash = sha256("Eidoo icoengine authorization", address(0), buyerAddress, buyerId, maxAmount); //replaced this with address(0);
        address signer = ecrecover(hash, v, r, s);
        if (!isKycSigner[signer]) {
            revert();
        } else {
            uint256 totalPayed = alreadyPayed[buyerId].add(msg.value);
            require(totalPayed <= maxAmount);
            alreadyPayed[buyerId] = totalPayed;
            emit KycVerified(signer, buyerAddress, buyerId, maxAmount);
            return releaseTokensTo(buyerAddress);
        }
    }
}

contract RC is ICOEngineInterface, KYCBase {
    using SafeMath for uint256;
    TokenSale tokenSaleContract;
    uint256 public startTime;
    uint256 public endTime;
    
    uint256 public etherMinimum;
    uint256 public soldTokens;
    uint256 public remainingTokens;
    
    uint256 public oneTokenInUsdWei;
	
	
	mapping(address => uint256) public etherUser; // address => ether amount
	mapping(address => uint256) public pendingTokenUser; // address => token amount that will be claimed
	mapping(address => uint256) public tokenUser; // address => token amount owned
	uint256[] public tokenThreshold; // array of token threshold reached in wei of token
    uint256[] public bonusThreshold; // array of bonus of each tokenThreshold reached - 20% = 20

    function RC(address _tokenSaleContract, uint256 _oneTokenInUsdWei, uint256 _remainingTokens, uint256 _etherMinimum, uint256 _startTime , uint256 _endTime, address [] kycSigner, uint256[] _tokenThreshold, uint256[] _bonusThreshold ) public KYCBase(kycSigner) {
        require ( _tokenSaleContract != 0 );
        require ( _oneTokenInUsdWei != 0 );
        require( _remainingTokens != 0 );
        require ( _tokenThreshold.length != 0 );
        require ( _tokenThreshold.length == _bonusThreshold.length );
        bonusThreshold = _bonusThreshold;
        tokenThreshold = _tokenThreshold;
        
        
        tokenSaleContract = TokenSale(_tokenSaleContract);
        
        tokenSaleContract.addMeByRC();
        
        soldTokens = 0;
        remainingTokens = _remainingTokens;
        oneTokenInUsdWei = _oneTokenInUsdWei;
        etherMinimum = _etherMinimum;
        
        setTimeRC( _startTime, _endTime );
    }
    
    function setTimeRC(uint256 _startTime, uint256 _endTime ) internal {
        if( _startTime == 0 ) {
            startTime = tokenSaleContract.startTime();
        } else {
            startTime = _startTime;
        }
        if( _endTime == 0 ) {
            endTime = tokenSaleContract.endTime();
        } else {
            endTime = _endTime;
        }
    }
    
    modifier onlyTokenSaleOwner() {
        require(msg.sender == tokenSaleContract.owner() );
        _;
    }
    
    function setTime(uint256 _newStart, uint256 _newEnd) public onlyTokenSaleOwner {
        if ( _newStart != 0 ) startTime = _newStart;
        if ( _newEnd != 0 ) endTime = _newEnd;
    }
    
    function changeMinimum(uint256 _newEtherMinimum) public onlyTokenSaleOwner {
        etherMinimum = _newEtherMinimum;
    }
    
    function releaseTokensTo(address buyer) internal returns(bool) {
        if( msg.value > 0 ) takeEther(buyer);
        giveToken(buyer);
        return true;
    }
    
    function started() public view returns(bool) {
        return now > startTime || remainingTokens == 0;
    }
    
    function ended() public view returns(bool) {
        return now > endTime || remainingTokens == 0;
    }
    
    function startTime() public view returns(uint) {
        return startTime;
    }
    
    function endTime() public view returns(uint) {
        return endTime;
    }
    
    function totalTokens() public view returns(uint) {
        return remainingTokens.add(soldTokens);
    }
    
    function remainingTokens() public view returns(uint) {
        return remainingTokens;
    }
    
    function price() public view returns(uint) {
        uint256 oneEther = 10**18;
        return oneEther.mul(10**18).div( tokenSaleContract.tokenValueInEther(oneTokenInUsdWei) );
    }
	
	function () public payable{
	    require( now > startTime );
	    if(now < endTime) {
	        takeEther(msg.sender);
	    } else {
	        claimTokenBonus(msg.sender);
	    }

	}
	
	event Buy(address buyer, uint256 value, uint256 soldToken, uint256 valueTokenInUsdWei );
	
	function takeEther(address _buyer) internal {
	    require( now > startTime );
        require( now < endTime );
        require( msg.value >= etherMinimum); 
        require( remainingTokens > 0 );
        
        uint256 oneToken = 10 ** uint256(tokenSaleContract.decimals());
        uint256 tokenValue = tokenSaleContract.tokenValueInEther(oneTokenInUsdWei);
        uint256 tokenAmount = msg.value.mul(oneToken).div(tokenValue);
        
        uint256 unboughtTokens = tokenInterface(tokenSaleContract.tokenContract()).balanceOf(tokenSaleContract);
        if ( unboughtTokens > remainingTokens ) {
            unboughtTokens = remainingTokens;
        }
        
        uint256 refund = 0;
        if ( unboughtTokens < tokenAmount ) {
            refund = (tokenAmount - unboughtTokens).mul(tokenValue).div(oneToken);
            tokenAmount = unboughtTokens;
			remainingTokens = 0; // set remaining token to 0
            _buyer.transfer(refund);
        } else {
			remainingTokens = remainingTokens.sub(tokenAmount); // update remaining token without bonus
        }
        
        etherUser[_buyer] = etherUser[_buyer].add(msg.value.sub(refund));
        pendingTokenUser[_buyer] = pendingTokenUser[_buyer].add(tokenAmount);	
        
        emit Buy( _buyer, msg.value, tokenAmount, oneTokenInUsdWei );
	}
	
	function giveToken(address _buyer) internal {
	    require( pendingTokenUser[_buyer] > 0 );

		tokenUser[_buyer] = tokenUser[_buyer].add(pendingTokenUser[_buyer]);
	
		tokenSaleContract.claim(_buyer, pendingTokenUser[_buyer]);
		soldTokens = soldTokens.add(pendingTokenUser[_buyer]);
		pendingTokenUser[_buyer] = 0;
		
		tokenSaleContract.wallet().transfer(etherUser[_buyer]);
		etherUser[_buyer] = 0;
	}

    function claimTokenBonus(address _buyer) internal {
        require( now > endTime );
        require( tokenUser[_buyer] > 0 );
        uint256 bonusApplied = 0;
        for (uint i = 0; i < tokenThreshold.length; i++) {
            if ( soldTokens > tokenThreshold[i] ) {
                bonusApplied = bonusThreshold[i];
			}
		}    
		require( bonusApplied > 0 );
		
		uint256 addTokenAmount = tokenUser[_buyer].mul( bonusApplied ).div(10**2);
		tokenUser[_buyer] = 0; 
		
		tokenSaleContract.claim(_buyer, addTokenAmount);
		_buyer.transfer(msg.value);
    }
    
    function refundEther(address to) public onlyTokenSaleOwner {
        to.transfer(etherUser[to]);
        etherUser[to] = 0;
        pendingTokenUser[to] = 0;
    }
    
    function withdraw(address to, uint256 value) public onlyTokenSaleOwner { 
        to.transfer(value);
    }
	
	function userBalance(address _user) public view returns( uint256 _pendingTokenUser, uint256 _tokenUser, uint256 _etherUser ) {
		return (pendingTokenUser[_user], tokenUser[_user], etherUser[_user]);
	}
}

contract TokenSale is Ownable {
    using SafeMath for uint256;
    tokenInterface public tokenContract;
    rateInterface public rateContract;
    
    address public wallet;
    address public advisor;
    uint256 public advisorFee; // 1 = 0,1%
    
	uint256 public constant decimals = 18;
    
    uint256 public endTime;  // seconds from 1970-01-01T00:00:00Z
    uint256 public startTime;  // seconds from 1970-01-01T00:00:00Z

    mapping(address => bool) public rc;


    function TokenSale(address _tokenAddress, address _rateAddress, uint256 _startTime, uint256 _endTime) public {
        tokenContract = tokenInterface(_tokenAddress);
        rateContract = rateInterface(_rateAddress);
        setTime(_startTime, _endTime); 
        wallet = msg.sender;
        advisor = msg.sender;
        advisorFee = 0 * 10**3;
    }
    
    function tokenValueInEther(uint256 _oneTokenInUsdWei) public view returns(uint256 tknValue) {
        uint256 oneEtherInUsd = rateContract.readRate("usd");
        tknValue = _oneTokenInUsdWei.mul(10 ** uint256(decimals)).div(oneEtherInUsd);
        return tknValue;
    } 
    
    modifier isBuyable() {
        require( now > startTime ); // check if started
        require( now < endTime ); // check if ended
        require( msg.value > 0 );
		
		uint256 remainingTokens = tokenContract.balanceOf(this);
        require( remainingTokens > 0 ); // Check if there are any remaining tokens 
        _;
    }
    
    event Buy(address buyer, uint256 value, address indexed ambassador);
    
    modifier onlyRC() {
        require( rc[msg.sender] ); //check if is an authorized rcContract
        _;
    }
    
    function buyFromRC(address _buyer, uint256 _rcTokenValue, uint256 _remainingTokens) onlyRC isBuyable public payable returns(uint256) {
        uint256 oneToken = 10 ** uint256(decimals);
        uint256 tokenValue = tokenValueInEther(_rcTokenValue);
        uint256 tokenAmount = msg.value.mul(oneToken).div(tokenValue);
        address _ambassador = msg.sender;
        
        
        uint256 remainingTokens = tokenContract.balanceOf(this);
        if ( _remainingTokens < remainingTokens ) {
            remainingTokens = _remainingTokens;
        }
        
        if ( remainingTokens < tokenAmount ) {
            uint256 refund = (tokenAmount - remainingTokens).mul(tokenValue).div(oneToken);
            tokenAmount = remainingTokens;
            forward(msg.value-refund);
			remainingTokens = 0; // set remaining token to 0
             _buyer.transfer(refund);
        } else {
			remainingTokens = remainingTokens.sub(tokenAmount); // update remaining token without bonus
            forward(msg.value);
        }
        
        tokenContract.transfer(_buyer, tokenAmount);
        emit Buy(_buyer, tokenAmount, _ambassador);
		
        return tokenAmount; 
    }
    
    function forward(uint256 _amount) internal {
        uint256 advisorAmount = _amount.mul(advisorFee).div(10**3);
        uint256 walletAmount = _amount - advisorAmount;
        advisor.transfer(advisorAmount);
        wallet.transfer(walletAmount);
    }

    event NewRC(address contr);
    
    function addMeByRC() public {
        require(tx.origin == owner);
        
        rc[ msg.sender ]  = true;
        
        emit NewRC(msg.sender);
    }
    
    function setTime(uint256 _newStart, uint256 _newEnd) public onlyOwner {
        if ( _newStart != 0 ) startTime = _newStart;
        if ( _newEnd != 0 ) endTime = _newEnd;
    }

    function withdraw(address to, uint256 value) public onlyOwner {
        to.transfer(value);
    }
    
    function withdrawTokens(address to, uint256 value) public onlyOwner returns (bool) {
        return tokenContract.transfer(to, value);
    }
    
    function setTokenContract(address _tokenContract) public onlyOwner {
        tokenContract = tokenInterface(_tokenContract);
    }

    function setWalletAddress(address _wallet) public onlyOwner {
        wallet = _wallet;
    }
    
    function setAdvisorAddress(address _advisor) public onlyOwner {
            advisor = _advisor;
    }
    
    function setAdvisorFee(uint256 _advisorFee) public onlyOwner {
            advisorFee = _advisorFee;
    }
    
    function setRateContract(address _rateAddress) public onlyOwner {
        rateContract = rateInterface(_rateAddress);
    }
	
	function claim(address _buyer, uint256 _amount) onlyRC public returns(bool) {
        return tokenContract.transfer(_buyer, _amount);
    }

    function () public payable {
        revert();
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"userBalance","outputs":[{"name":"_pendingTokenUser","type":"uint256"},{"name":"_tokenUser","type":"uint256"},{"name":"_etherUser","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isKycSigner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ended","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"started","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"refundEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newEtherMinimum","type":"uint256"}],"name":"changeMinimum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"pendingTokenUser","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"soldTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"etherMinimum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"etherUser","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint64"}],"name":"alreadyPayed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newStart","type":"uint256"},{"name":"_newEnd","type":"uint256"}],"name":"setTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenThreshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"buyerAddress","type":"address"},{"name":"buyerId","type":"uint64"},{"name":"maxAmount","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"buyTokensFor","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"bonusThreshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"remainingTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oneTokenInUsdWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenUser","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"buyerId","type":"uint64"},{"name":"maxAmount","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"buyTokens","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_tokenSaleContract","type":"address"},{"name":"_oneTokenInUsdWei","type":"uint256"},{"name":"_remainingTokens","type":"uint256"},{"name":"_etherMinimum","type":"uint256"},{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"},{"name":"kycSigner","type":"address[]"},{"name":"_tokenThreshold","type":"uint256[]"},{"name":"_bonusThreshold","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"buyer","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"soldToken","type":"uint256"},{"indexed":false,"name":"valueTokenInUsdWei","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"signer","type":"address"},{"indexed":false,"name":"buyerAddress","type":"address"},{"indexed":false,"name":"buyerId","type":"uint64"},{"indexed":false,"name":"maxAmount","type":"uint256"}],"name":"KycVerified","type":"event"}]

606060405234156200001057600080fd5b604051620016bf380380620016bf8339810160405280805191906020018051919060200180519190602001805191906020018051919060200180519190602001805182019190602001805182019190602001805190910190508260005b8151811015620000c45760016000808484815181106200008957fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790556001016200006d565b5050600160a060020a0389161515620000dc57600080fd5b871515620000e957600080fd5b861515620000f657600080fd5b815115156200010457600080fd5b80518251146200011357600080fd5b600d818051620001289291602001906200030e565b50600c8280516200013e9291602001906200030e565b5060028054600160a060020a031916600160a060020a038b81169190911791829055166366b52b936040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515620001ae57600080fd5b5af11515620001bc57600080fd5b5050600060065550600787905560088890556005869055620001ed858564010000000062001231620001fc82021704565b5050505050505050506200037e565b8115156200027d57600254600160a060020a03166378e979256040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156200025d57600080fd5b5af115156200026b57600080fd5b50505060405180516003555062000283565b60038290555b8015156200030457600254600160a060020a0316633197cbb66040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515620002e457600080fd5b5af11515620002f257600080fd5b5050506040518051600455506200030a565b60048190555b5050565b8280548282559060005260206000209081019282156200034c579160200282015b828111156200034c5782518255916020019190600101906200032f565b506200035a9291506200035e565b5090565b6200037b91905b808211156200035a576000815560010162000365565b90565b611331806200038e6000396000f3006060604052600436106101245763ffffffff60e060020a6000350416630103c92b81146101555780630570d5681461019857806312fa6feb146101cb5780631f2698ab146101de5780631f378b8a146101f15780632a513dd9146102105780633197cbb61461022657806334323d321461024b5780635ed9ebfc1461026a578063675cef141461027d57806378e97925146102905780637e1c0c09146102a3578063924669b2146102b65780639a359d8e146102d5578063a0355eca146102f5578063a035b1fe1461030e578063a6f8fd1314610321578063ae45783514610337578063bb9dea0414610367578063bf5839031461037d578063c0a99a8314610390578063ce1ff67e146103a3578063dee4b246146103c2578063f3fef3a3146103e6575b600354421161013257600080fd5b60045442101561014a5761014533610408565b610153565b6101533361077f565b005b341561016057600080fd5b610174600160a060020a0360043516610913565b60405180848152602001838152602001828152602001935050505060405180910390f35b34156101a357600080fd5b6101b7600160a060020a0360043516610945565b604051901515815260200160405180910390f35b34156101d657600080fd5b6101b761095a565b34156101e957600080fd5b6101b7610971565b34156101fc57600080fd5b610153600160a060020a0360043516610986565b341561021b57600080fd5b610153600435610a62565b341561023157600080fd5b610239610adc565b60405190815260200160405180910390f35b341561025657600080fd5b610239600160a060020a0360043516610ae2565b341561027557600080fd5b610239610af4565b341561028857600080fd5b610239610afa565b341561029b57600080fd5b610239610b00565b34156102ae57600080fd5b610239610b06565b34156102c157600080fd5b610239600160a060020a0360043516610b1f565b34156102e057600080fd5b61023967ffffffffffffffff60043516610b31565b341561030057600080fd5b610153600435602435610b43565b341561031957600080fd5b610239610bd4565b341561032c57600080fd5b610239600435610c66565b6101b7600160a060020a036004351667ffffffffffffffff6024351660443560ff6064351660843560a435610c85565b341561037257600080fd5b610239600435610cb4565b341561038857600080fd5b610239610cc2565b341561039b57600080fd5b610239610cc8565b34156103ae57600080fd5b610239600160a060020a0360043516610cce565b6101b767ffffffffffffffff6004351660243560ff60443516606435608435610ce0565b34156103f157600080fd5b610153600160a060020a0360043516602435610cfa565b60008060008060006003544211151561042057600080fd5b600454421061042e57600080fd5b60055434101561043d57600080fd5b6007546000901161044d57600080fd5b600254600160a060020a031663313ce5676040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561048c57600080fd5b5af1151561049957600080fd5b5050506040518051600254600854600a9290920a9750600160a060020a03169150637b4139859060405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156104f657600080fd5b5af1151561050357600080fd5b5050506040518051945061052f905084610523348863ffffffff610da016565b9063ffffffff610dcb16565b600254909350600160a060020a03166355a373d66040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561057157600080fd5b5af1151561057e57600080fd5b5050506040518051600254600160a060020a0391821692506370a08231911660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156105db57600080fd5b5af115156105e857600080fd5b5050506040518051905091506007548211156106045760075491505b5060008282101561066757610625856105238486038763ffffffff610da016565b600060075591925082919050600160a060020a03861681156108fc0282604051600060405180830381858888f19350505050151561066257600080fd5b61067e565b60075461067a908463ffffffff610de216565b6007555b6106b6610691348363ffffffff610de216565b600160a060020a0388166000908152600960205260409020549063ffffffff610df416565b600160a060020a038716600090815260096020908152604080832093909355600a905220546106eb908463ffffffff610df416565b600a600088600160a060020a0316600160a060020a03168152602001908152602001600020819055507fbeae048c6d270d9469f86cf6e8fedda3c60ad770f16c24c9fc131c8e9a09101d8634856008546040518085600160a060020a0316600160a060020a0316815260200184815260200183815260200182815260200194505050505060405180910390a1505050505050565b60008060006004544211151561079457600080fd5b600160a060020a0384166000908152600b6020526040812054116107b757600080fd5b60009250600091505b600c5482101561081557600c8054839081106107d857fe5b906000526020600020900154600654111561080a57600d8054839081106107fb57fe5b90600052602060002090015492505b6001909101906107c0565b6000831161082257600080fd5b600160a060020a0384166000908152600b602052604090205461085290606490610523908663ffffffff610da016565b600160a060020a038086166000908152600b60205260408082209190915560025492935091169063aad3ec9690869084905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156108c457600080fd5b5af115156108d157600080fd5b50505060405180515050600160a060020a0384163480156108fc0290604051600060405180830381858888f19350505050151561090d57600080fd5b50505050565b600160a060020a03166000908152600a6020908152604080832054600b83528184205460099093529220549192909190565b60006020819052908152604090205460ff1681565b600060045442118061096c5750600754155b905090565b600060035442118061096c5750506007541590565b600254600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156109c557600080fd5b5af115156109d257600080fd5b50505060405180519050600160a060020a031633600160a060020a03161415156109fb57600080fd5b600160a060020a038116600081815260096020526040908190205480156108fc029151600060405180830381858888f193505050501515610a3b57600080fd5b600160a060020a03166000908152600960209081526040808320839055600a909152812055565b600254600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610aa157600080fd5b5af11515610aae57600080fd5b50505060405180519050600160a060020a031633600160a060020a0316141515610ad757600080fd5b600555565b60045490565b600a6020526000908152604090205481565b60065481565b60055481565b60035490565b600061096c600654600754610df490919063ffffffff16565b60096020526000908152604090205481565b60016020526000908152604090205481565b600254600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b8257600080fd5b5af11515610b8f57600080fd5b50505060405180519050600160a060020a031633600160a060020a0316141515610bb857600080fd5b8115610bc45760038290555b8015610bd05760048190555b5050565b600254600854600091670de0b6b3a764000091610c6091600160a060020a031690637b4139859060405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610c3157600080fd5b5af11515610c3e57600080fd5b5050506040518051905061052383670de0b6b3a764000063ffffffff610da016565b91505090565b600c805482908110610c7457fe5b600091825260209091200154905081565b6000610c9087610e03565b1515610c9b57600080fd5b610ca9878787878787610e15565b979650505050505050565b600d805482908110610c7457fe5b60075490565b60085481565b600b6020526000908152604090205481565b6000610cf0338787878787610e15565b9695505050505050565b600254600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d3957600080fd5b5af11515610d4657600080fd5b50505060405180519050600160a060020a031633600160a060020a0316141515610d6f57600080fd5b600160a060020a03821681156108fc0282604051600060405180830381858888f193505050501515610bd057600080fd5b6000828202831580610dbc5750828482811515610db957fe5b04145b1515610dc457fe5b9392505050565b6000808284811515610dd957fe5b04949350505050565b600082821115610dee57fe5b50900390565b600082820183811015610dc457fe5b33600160a060020a0390811691161490565b600080600080600260008b8b8b6040517f4569646f6f2069636f656e67696e6520617574686f72697a6174696f6e0000008152600160a060020a039485166c01000000000000000000000000908102601d83015293909416909202603184015267ffffffffffffffff167801000000000000000000000000000000000000000000000000026045830152604d820152606d016020604051808303816000865af11515610ec057600080fd5b50506040518051905092506001838888886040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af11515610f2357600080fd5b505060206040510351600160a060020a03811660009081526020819052604090205490925060ff161515610f5657600080fd5b67ffffffffffffffff8916600090815260016020526040902054610f80903463ffffffff610df416565b905087811115610f8f57600080fd5b67ffffffffffffffff891660009081526001602052604090819020829055600160a060020a038316907f74e336db80b339721548db3209451cf01bd48e4a996e1bcea7f1a2abf8b06070908c908c908c9051600160a060020a03909316835267ffffffffffffffff90911660208301526040808301919091526060909101905180910390a261101d8a61102b565b9a9950505050505050505050565b60008034111561103e5761103e82610408565b6110478261104f565b506001919050565b600160a060020a0381166000908152600a60205260408120541161107257600080fd5b600160a060020a0381166000908152600a6020908152604080832054600b909252909120546110a69163ffffffff610df416565b600160a060020a038083166000908152600b6020908152604080832094909455600254600a909152908390205491169163aad3ec969184915160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561111f57600080fd5b5af1151561112c57600080fd5b50505060405180515050600160a060020a0381166000908152600a60205260409020546006546111619163ffffffff610df416565b600655600160a060020a038082166000908152600a6020526040808220919091556002549091169063521eb27390518163ffffffff1660e060020a028152600401602060405180830381600087803b15156111bb57600080fd5b5af115156111c857600080fd5b5050506040518051600160a060020a03838116600090815260096020526040908190205491909216925080156108fc029151600060405180830381858888f19350505050151561121757600080fd5b600160a060020a0316600090815260096020526040812055565b81151561129557600254600160a060020a03166378e979256040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561127757600080fd5b5af1151561128457600080fd5b50505060405180516003555061129b565b60038290555b8015156112ff57600254600160a060020a0316633197cbb66040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156112e157600080fd5b5af115156112ee57600080fd5b505050604051805160045550610bd0565b600455505600a165627a7a72305820d215036dea4bfd99696737ef24aad361250c730f0c1246717eae88538ec393c40029000000000000000000000000c1cf194c1449713bf811a93f4e1a6211c1713e3400000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000000000000000000000084595161401484a0000000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b0341600000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000dd5ecefcaa0cb5d75f7b72dc9d2ce446d6d005200000000000000000000000004e315e5de2abbf7b745d9628ee60e4355c0fab860000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000

Swarm Source

bzzr://d215036dea4bfd99696737ef24aad361250c730f0c1246717eae88538ec393c4

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.