ETH Price: $2,627.38 (-2.86%)

Contract

0xb9738CB78ab1c0e052Da1A8376D0065A0Db8d8D0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer52071902018-03-06 14:35:512534 days ago1520346951IN
0xb9738CB7...A0Db8d8D0
42.995 ETH0.0015409121
Transfer52063422018-03-06 11:07:252534 days ago1520334445IN
0xb9738CB7...A0Db8d8D0
56.995 ETH0.0015409121
Transfer52057472018-03-06 8:40:262535 days ago1520325626IN
0xb9738CB7...A0Db8d8D0
65.995 ETH0.0015409121
Transfer52057062018-03-06 8:29:542535 days ago1520324994IN
0xb9738CB7...A0Db8d8D0
54.995 ETH0.0015409121
Transfer52035072018-03-05 23:32:142535 days ago1520292734IN
0xb9738CB7...A0Db8d8D0
0.1 ETH0.0030084541
Transfer52022072018-03-05 18:15:092535 days ago1520273709IN
0xb9738CB7...A0Db8d8D0
4 ETH0.0015409121
Transfer52005852018-03-05 11:34:042535 days ago1520249644IN
0xb9738CB7...A0Db8d8D0
0.01 ETH0.0008901240
Transfer52005142018-03-05 11:16:152535 days ago1520248575IN
0xb9738CB7...A0Db8d8D0
0.01 ETH0.0008440
Transfer52003062018-03-05 10:23:172535 days ago1520245397IN
0xb9738CB7...A0Db8d8D0
24.995 ETH0.0015409121
Transfer52002532018-03-05 10:12:402535 days ago1520244760IN
0xb9738CB7...A0Db8d8D0
79.995 ETH0.0015409121
Transfer52001632018-03-05 9:47:542536 days ago1520243274IN
0xb9738CB7...A0Db8d8D0
46.995 ETH0.0015409121
Transfer52000902018-03-05 9:30:002536 days ago1520242200IN
0xb9738CB7...A0Db8d8D0
64.995 ETH0.0015409121
Transfer52000632018-03-05 9:23:052536 days ago1520241785IN
0xb9738CB7...A0Db8d8D0
74.995 ETH0.0015409121
Transfer51946422018-03-04 11:23:142536 days ago1520162594IN
0xb9738CB7...A0Db8d8D0
99 ETH0.0015409121
Transfer51946152018-03-04 11:14:482536 days ago1520162088IN
0xb9738CB7...A0Db8d8D0
64 ETH0.0015409121
Transfer51945472018-03-04 10:58:312536 days ago1520161111IN
0xb9738CB7...A0Db8d8D0
90 ETH0.0015409121
Transfer51944602018-03-04 10:38:022536 days ago1520159882IN
0xb9738CB7...A0Db8d8D0
84 ETH0.0015409121
Transfer51880202018-03-03 8:39:472538 days ago1520066387IN
0xb9738CB7...A0Db8d8D0
50 ETH0.0015409121
Transfer51879582018-03-03 8:22:222538 days ago1520065342IN
0xb9738CB7...A0Db8d8D0
53.4 ETH0.0015409121
Transfer51875992018-03-03 6:47:132538 days ago1520059633IN
0xb9738CB7...A0Db8d8D0
75 ETH0.0015409121
Transfer51871722018-03-03 5:07:002538 days ago1520053620IN
0xb9738CB7...A0Db8d8D0
100 ETH0.0015409121
Transfer51871612018-03-03 5:03:352538 days ago1520053415IN
0xb9738CB7...A0Db8d8D0
65 ETH0.0015409121
Transfer51871462018-03-03 5:00:062538 days ago1520053206IN
0xb9738CB7...A0Db8d8D0
40.005 ETH0.0015409121
Transfer51763362018-03-01 8:55:582540 days ago1519894558IN
0xb9738CB7...A0Db8d8D0
25.9 ETH0.0015409121
Transfer51762582018-03-01 8:40:552540 days ago1519893655IN
0xb9738CB7...A0Db8d8D0
44.5 ETH0.0015409121
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
52071902018-03-06 14:35:512534 days ago1520346951
0xb9738CB7...A0Db8d8D0
42.995 ETH
52063422018-03-06 11:07:252534 days ago1520334445
0xb9738CB7...A0Db8d8D0
56.995 ETH
52057472018-03-06 8:40:262535 days ago1520325626
0xb9738CB7...A0Db8d8D0
65.995 ETH
52057062018-03-06 8:29:542535 days ago1520324994
0xb9738CB7...A0Db8d8D0
54.995 ETH
52035072018-03-05 23:32:142535 days ago1520292734
0xb9738CB7...A0Db8d8D0
0.1 ETH
52022072018-03-05 18:15:092535 days ago1520273709
0xb9738CB7...A0Db8d8D0
4 ETH
52003062018-03-05 10:23:172535 days ago1520245397
0xb9738CB7...A0Db8d8D0
24.995 ETH
52002532018-03-05 10:12:402535 days ago1520244760
0xb9738CB7...A0Db8d8D0
79.995 ETH
52001632018-03-05 9:47:542536 days ago1520243274
0xb9738CB7...A0Db8d8D0
46.995 ETH
52000902018-03-05 9:30:002536 days ago1520242200
0xb9738CB7...A0Db8d8D0
64.995 ETH
52000632018-03-05 9:23:052536 days ago1520241785
0xb9738CB7...A0Db8d8D0
74.995 ETH
51946422018-03-04 11:23:142536 days ago1520162594
0xb9738CB7...A0Db8d8D0
99 ETH
51946152018-03-04 11:14:482536 days ago1520162088
0xb9738CB7...A0Db8d8D0
64 ETH
51945472018-03-04 10:58:312536 days ago1520161111
0xb9738CB7...A0Db8d8D0
90 ETH
51944602018-03-04 10:38:022536 days ago1520159882
0xb9738CB7...A0Db8d8D0
84 ETH
51880202018-03-03 8:39:472538 days ago1520066387
0xb9738CB7...A0Db8d8D0
50 ETH
51879582018-03-03 8:22:222538 days ago1520065342
0xb9738CB7...A0Db8d8D0
53.4 ETH
51875992018-03-03 6:47:132538 days ago1520059633
0xb9738CB7...A0Db8d8D0
75 ETH
51871722018-03-03 5:07:002538 days ago1520053620
0xb9738CB7...A0Db8d8D0
100 ETH
51871612018-03-03 5:03:352538 days ago1520053415
0xb9738CB7...A0Db8d8D0
65 ETH
51871462018-03-03 5:00:062538 days ago1520053206
0xb9738CB7...A0Db8d8D0
40.005 ETH
51763362018-03-01 8:55:582540 days ago1519894558
0xb9738CB7...A0Db8d8D0
25.9 ETH
51762582018-03-01 8:40:552540 days ago1519893655
0xb9738CB7...A0Db8d8D0
44.5 ETH
51762022018-03-01 8:28:102540 days ago1519892890
0xb9738CB7...A0Db8d8D0
34.5 ETH
51761612018-03-01 8:18:172540 days ago1519892297
0xb9738CB7...A0Db8d8D0
24 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MINDTokenCrowdSale

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.11;

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

  function div(uint256 a, uint256 b) internal constant 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 constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant 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() {
    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));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public constant returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public constant returns (uint256 balance) {
    return balances[_owner];
  }

}


/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));

    uint256 _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // require (_value <= _allowance);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval (address _spender, uint _addedValue)
    returns (bool success) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval (address _spender, uint _subtractedValue)
    returns (bool success) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

/**
 * @title StandardCrowdsale 
 * @dev StandardCrowdsale is a base contract for managing a token crowdsale.
 * Crowdsales have a start and end timestamps, where investors can make
 * token purchases and the crowdsale will assign them tokens based
 * on a token per ETH rate. Funds collected are forwarded to a wallet
 * as they arrive.
 */
contract StandardCrowdsale {
    using SafeMath for uint256;

    // The token being sold
    StandardToken public token; 

    // start and end timestamps where investments are allowed (both inclusive)
    uint256 public startTime;
    uint256 public endTime;

    // address where funds are collected
    address public wallet;

    // how many token units a buyer gets per wei
    uint256 public rate;

    // amount of raised money in wei
    uint256 public weiRaised;

    /**
     * event for token purchase logging
     * @param purchaser who paid for the tokens
     * @param value weis paid for purchase
     * @param amount amount of tokens purchased
     */
    event TokenPurchase(address indexed purchaser, uint256 value, uint256 amount);

    function StandardCrowdsale(
        uint256 _startTime, 
        uint256 _endTime, 
        uint256 _rate, 
        address _wallet) 
    {
        require(_startTime >= now);
        require(_endTime >= _startTime);
        require(_rate > 0);
        require(_wallet != 0x0);

        startTime = _startTime;
        endTime = _endTime;
        rate = _rate;
        wallet = _wallet;
        
        token = createTokenContract(); 
    }

    // creates the token to be sold.
    // override this method to have crowdsale of a specific mintable token.
    function createTokenContract() 
        internal 
        returns(StandardToken) 
    {
        return new StandardToken();
    }

    // fallback function can be used to buy tokens
    function () 
       payable 
    {
        buyTokens();
    }

    // low level token purchase function
    function buyTokens() 
       public 
       payable 
    {
        require(validPurchase());

        uint256 weiAmount = msg.value;

        // calculate token amount to be created
        uint256 tokens = weiAmount.mul(rate);
        tokens += getBonus(tokens);

        // update state
        weiRaised = weiRaised.add(weiAmount);

        require(token.transfer(msg.sender, tokens)); 
        TokenPurchase(msg.sender, weiAmount, tokens);

        forwardFunds();

        postBuyTokens();
    }

    // Action after buying tokens
    function postBuyTokens ()
        internal
    {
    }

    // send ether to the fund collection wallet
    // override to create custom fund forwarding mechanisms
    function forwardFunds() 
       internal 
    {
        wallet.transfer(msg.value);
    }

    // @return true if the transaction can buy tokens
    function validPurchase() 
        internal 
        returns(bool) 
    {
        bool withinPeriod = now >= startTime && now <= endTime;
        bool nonZeroPurchase = msg.value != 0;
        return withinPeriod && nonZeroPurchase;
    }

    // @return true if crowdsale event has ended
    function hasEnded() 
        public 
        constant 
        returns(bool) 
    {
        return now > endTime;
    }

    modifier onlyBeforeSale() {
        require(now < startTime);
        _;
    }

    modifier only24HBeforeSale() {
        require(now < startTime.sub(1 days));
        _;
    }

    function getBonus(uint256 _tokens) constant returns (uint256 bonus) {
        return 0;
    }
}

/**
 * @title CappedCrowdsale
 * @dev Extension of Crowdsale with a max amount of funds raised
 */
contract CappedCrowdsale is StandardCrowdsale {
  using SafeMath for uint256;

  uint256 public cap;

  function CappedCrowdsale(uint256 _cap) {
    require(_cap > 0);
    cap = _cap;
  }

  // overriding Crowdsale#validPurchase to add extra cap logic
  // @return true if investors can buy at the moment
  function validPurchase() internal returns (bool) {
    bool withinCap = weiRaised.add(msg.value) <= cap;
    return super.validPurchase() && withinCap;
  }

  // overriding Crowdsale#hasEnded to add cap logic
  // @return true if crowdsale event has ended
  function hasEnded() public constant returns (bool) {
    bool capReached = weiRaised >= cap;
    return super.hasEnded() || capReached;
  }

}

/**
 * @title The MINDToken contract
 * @dev The MINDToken Token contract
 * @dev inherite from StandardToken and Ownable by Zeppelin
 */
contract MINDToken is StandardToken, Ownable {
    string  public  constant name = "MIND Token";
    string  public  constant symbol = "MIND";
    uint8    public  constant decimals = 18;

    uint    public  transferableStartTime;

    address public  tokenSaleContract;
    address public  fullTokenWallet;

    function gettransferableStartTime() constant returns (uint){return now - transferableStartTime;}

    modifier onlyWhenTransferEnabled() 
    {
        if ( now < transferableStartTime ) {
            require(msg.sender == tokenSaleContract || msg.sender == fullTokenWallet || msg.sender == owner);
        }
        _;
    }

    modifier validDestination(address to) 
    {
        require(to != address(this));
        _;
    }

    modifier onlySaleContract()
    {
        require(msg.sender == tokenSaleContract);
        _;
    }

    function MINDToken(
        uint tokenTotalAmount, 
        uint _transferableStartTime, 
        address _admin, 
        address _fullTokenWallet) 
    {
        
        // Mint all tokens. Then disable minting forever.
        totalSupply = tokenTotalAmount * (10 ** uint256(decimals));

        balances[msg.sender] = totalSupply;
        Transfer(address(0x0), msg.sender, totalSupply);

        transferableStartTime = _transferableStartTime;
        tokenSaleContract = msg.sender;
        fullTokenWallet = _fullTokenWallet;

        transferOwnership(_admin); // admin could drain tokens and eth that were sent here by mistake

    }

    /**
     * @dev override transfer token for a specified address to add onlyWhenTransferEnabled and validDestination
     * @param _to The address to transfer to.
     * @param _value The amount to be transferred.
     */
    function transfer(address _to, uint _value)
        public
        validDestination(_to)
        onlyWhenTransferEnabled
        returns (bool) 
    {
        return super.transfer(_to, _value);
    }

    /**
     * @dev override transferFrom token for a specified address to add onlyWhenTransferEnabled and validDestination
     * @param _from The address to transfer from.
     * @param _to The address to transfer to.
     * @param _value The amount to be transferred.
     */
    function transferFrom(address _from, address _to, uint _value)
        public
        validDestination(_to)
        onlyWhenTransferEnabled
        returns (bool) 
    {
        return super.transferFrom(_from, _to, _value);
    }

    event Burn(address indexed _burner, uint _value);

    /**
     * @dev burn tokens
     * @param _value The amount to be burned.
     * @return always true (necessary in case of override)
     */
    function burn(uint _value) 
        public
        onlyWhenTransferEnabled
        onlyOwner
        returns (bool)
    {
        balances[msg.sender] = balances[msg.sender].sub(_value);
        totalSupply = totalSupply.sub(_value);
        Burn(msg.sender, _value);
        Transfer(msg.sender, address(0x0), _value);
        return true;
    }

    /**
     * @dev burn tokens in the behalf of someone
     * @param _from The address of the owner of the token.
     * @param _value The amount to be burned.
     * @return always true (necessary in case of override)
     */
    function burnFrom(address _from, uint256 _value) 
        public
        onlyWhenTransferEnabled
        onlyOwner
        returns(bool) 
    {
        assert(transferFrom(_from, msg.sender, _value));
        return burn(_value);
    }

    /** 
    * enable transfer earlier (only presale contract can enable the sale earlier)
    */
    function enableTransferEarlier ()
        public
        onlySaleContract
    {
        transferableStartTime = now + 3 days;
    }


    /**
     * @dev transfer to owner any tokens send by mistake on this contracts
     * @param token The address of the token to transfer.
     * @param amount The amount to be transfered.
     */
    function emergencyERC20Drain(ERC20 token, uint amount )
        public
        onlyOwner 
    {
        token.transfer(owner, amount);
    }

}

/**
 * @title MINDTokenCrowdSale
 * @dev 
 * We add new features to a base crowdsale using multiple inheritance.
 * We are using the following extensions:
 * CappedCrowdsale - sets a max boundary for raised funds
 *
 * The code is based on the contracts of Open Zeppelin and we add our contracts : MINDTokenCrowdSale and the MIND Token
 *
 */
contract MINDTokenCrowdSale is Ownable, CappedCrowdsale {

    // hard cap of the token pre-sale in ether
    uint private constant HARD_CAP_IN_WEI = 2000 ether;
    
    // Token sale rate from ETH to MIND
    uint private constant RATE_ETH_MIND = 10000;

    // wallet use also to gather the ether of the token sale
    address private constant MIND_CROWDSALE_WALLET = 0x942b56E5A6e92B39643dCB5F232EF583680F0B01;

    event CrowdSaleTokenSoldout();

    function MINDTokenCrowdSale(uint256 _startTime, uint256 _endTime, address _tokenAddr)
      CappedCrowdsale(HARD_CAP_IN_WEI)
      StandardCrowdsale(_startTime, _endTime, RATE_ETH_MIND, MIND_CROWDSALE_WALLET)
    {
        token = MINDToken(_tokenAddr);
    }

    function getToken() constant returns (address){
      return token;
    }

    /**
     * @dev Create the MIND token (override createTokenContract of StandardCrowdsale)
     * @return the StandardToken created
     */
    function createTokenContract () 
      internal 
      returns(StandardToken) 
    {
        return MINDToken(0x0); // No token is created
    }

    /**
      * @dev Get the bonus based on the buy time (override getBonus of StandardCrowdsale)
      * @return the number of bonus token
    */
    function getBonus(uint256 _tokens) constant returns (uint256 bonus) {
        require(_tokens != 0);
        if (startTime <= now && now < startTime + 1 days) {
            // 20% bonus
            return _tokens.div(5);
        } else if (startTime + 1 days <= now && now < startTime + 2 days ) {
            // 15% bonus
            return _tokens.mul(3).div(20);
        } else if (startTime + 2 days <= now && now < startTime + 3 days ) {
            // 10% bonus
            return _tokens.div(10);
        } else if (startTime + 3 days <= now && now < startTime + 4 days ) {
            // 5% bonus
            return _tokens.div(20);
        }

        return 0;
    }

    /**
     * @dev Transfer the unsold tokens to the MIND Foundation multisign wallet 
     * @dev Only for owner
     * @return the StandardToken created
     */
    function drainRemainingToken () 
      public
      onlyOwner
    {
        require(hasEnded());
        token.transfer(MIND_CROWDSALE_WALLET, token.balanceOf(this));
    }


    /**
      * @dev Action after buying tokens: check if all sold out and enable transfer immediately
      */
    function postBuyTokens ()
        internal
    {
        if ( token.balanceOf(this) == 0 ) 
        {
            CrowdSaleTokenSoldout();
        }
    }

    // @return true if the transaction can buy tokens
    function validPurchase() 
        internal 
        returns(bool) 
    {
        return super.validPurchase() && msg.value >= 0.1 ether;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"getToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokens","type":"uint256"}],"name":"getBonus","outputs":[{"name":"bonus","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"drainRemainingToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"hasEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"},{"name":"_tokenAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"CrowdSaleTokenSoldout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6060604052341561000f57600080fd5b6040516060806109b783398101604052808051919060200180519190602001805160008054600160a060020a03191633600160a060020a03161790559150686c6b935b8bbd4000009050838361271073942b56e5a6e92b39643dcb5f232ef583680f0b014284101561008057600080fd5b8383101561008d57600080fd5b6000821161009a57600080fd5b600160a060020a03811615156100af57600080fd5b60028490556003839055600582905560048054600160a060020a031916600160a060020a0383161790556100ee64010000000061014c81026108261704565b60018054600160a060020a031916600160a060020a03929092169190911790555050600083119150610121905057600080fd5b60075560018054600160a060020a031916600160a060020a0392909216919091179055506101519050565b600090565b610857806101606000396000f3006060604052600436106100b65763ffffffff60e060020a60003504166321df0da781146100c05780632c4e722e146100ef5780633197cbb614610114578063355274ea146101275780634042b66f1461013a5780634aa66b281461014d578063521eb2731461016357806378e979251461017657806389f6e826146101895780638da5cb5b1461019c578063d0febe4c146100b6578063ecb70fb7146101af578063f2fde38b146101d6578063fc0c546a146101f5575b6100be610208565b005b34156100cb57600080fd5b6100d3610336565b604051600160a060020a03909116815260200160405180910390f35b34156100fa57600080fd5b610102610345565b60405190815260200160405180910390f35b341561011f57600080fd5b61010261034b565b341561013257600080fd5b610102610351565b341561014557600080fd5b610102610357565b341561015857600080fd5b61010260043561035d565b341561016e57600080fd5b6100d3610453565b341561018157600080fd5b610102610462565b341561019457600080fd5b6100be610468565b34156101a757600080fd5b6100d361058e565b34156101ba57600080fd5b6101c261059d565b604051901515815260200160405180910390f35b34156101e157600080fd5b6100be600160a060020a03600435166105bf565b341561020057600080fd5b6100d361065a565b600080610213610669565b151561021e57600080fd5b60055434925061023590839063ffffffff61068c16565b90506102408161035d565b600654910190610256908363ffffffff6106b716565b600655600154600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156102b857600080fd5b6102c65a03f115156102c957600080fd5b5050506040518051905015156102de57600080fd5b33600160a060020a03167fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f838360405191825260208201526040908101905180910390a261032a6106c6565b6103326106fc565b5050565b600154600160a060020a031690565b60055481565b60035481565b60075481565b60065481565b600081151561036b57600080fd5b42600254111580156103835750600254620151800142105b156103a05761039982600563ffffffff6107a416565b905061044e565b426002546201518001111580156103bd57506002546202a3000142105b156103e45761039960146103d884600363ffffffff61068c16565b9063ffffffff6107a416565b426002546202a300011115801561040157506002546203f4800142105b156104175761039982600a63ffffffff6107a416565b426002546203f48001111580156104345750600254620546000142105b1561044a5761039982601463ffffffff6107a416565b5060005b919050565b600454600160a060020a031681565b60025481565b60005433600160a060020a0390811691161461048357600080fd5b61048b61059d565b151561049657600080fd5b600154600160a060020a031663a9059cbb73942b56e5a6e92b39643dcb5f232ef583680f0b01826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561050a57600080fd5b6102c65a03f1151561051b57600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561057157600080fd5b6102c65a03f1151561058257600080fd5b50505060405180515050565b600054600160a060020a031681565b6007546006546000919010156105b16107bb565b806105b95750805b91505090565b60005433600160a060020a039081169116146105da57600080fd5b600160a060020a03811615156105ef57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a031681565b60006106736107c3565b8015610687575067016345785d8a00003410155b905090565b60008282028315806106a857508284828115156106a557fe5b04145b15156106b057fe5b9392505050565b6000828201838110156106b057fe5b600454600160a060020a03163480156108fc0290604051600060405180830381858888f1935050505015156106fa57600080fd5b565b600154600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561075557600080fd5b6102c65a03f1151561076657600080fd5b5050506040518051151590506106fa577fd7ec1facb7bfbe9ab73ff0142f1217f9c04cd9e8312203f25baddec2f5dea4e660405160405180910390a1565b60008082848115156107b257fe5b04949350505050565b600354421190565b6000806007546107de346006546106b790919063ffffffff16565b111590506107ea6107f6565b80156105b95750919050565b6000806000600254421015801561080f57506003544211155b91505034151581801561081f5750805b9250505090565b6000905600a165627a7a72305820e24442fcfdd08365bf6f6378348967cddab2b0a32e11c30d0792ff145dba1e180029000000000000000000000000000000000000000000000000000000005a787170000000000000000000000000000000000000000000000000000000005a9eacf0000000000000000000000000222728c202e7164dfbd127181d46409338c4328e

Deployed Bytecode

0x6060604052600436106100b65763ffffffff60e060020a60003504166321df0da781146100c05780632c4e722e146100ef5780633197cbb614610114578063355274ea146101275780634042b66f1461013a5780634aa66b281461014d578063521eb2731461016357806378e979251461017657806389f6e826146101895780638da5cb5b1461019c578063d0febe4c146100b6578063ecb70fb7146101af578063f2fde38b146101d6578063fc0c546a146101f5575b6100be610208565b005b34156100cb57600080fd5b6100d3610336565b604051600160a060020a03909116815260200160405180910390f35b34156100fa57600080fd5b610102610345565b60405190815260200160405180910390f35b341561011f57600080fd5b61010261034b565b341561013257600080fd5b610102610351565b341561014557600080fd5b610102610357565b341561015857600080fd5b61010260043561035d565b341561016e57600080fd5b6100d3610453565b341561018157600080fd5b610102610462565b341561019457600080fd5b6100be610468565b34156101a757600080fd5b6100d361058e565b34156101ba57600080fd5b6101c261059d565b604051901515815260200160405180910390f35b34156101e157600080fd5b6100be600160a060020a03600435166105bf565b341561020057600080fd5b6100d361065a565b600080610213610669565b151561021e57600080fd5b60055434925061023590839063ffffffff61068c16565b90506102408161035d565b600654910190610256908363ffffffff6106b716565b600655600154600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156102b857600080fd5b6102c65a03f115156102c957600080fd5b5050506040518051905015156102de57600080fd5b33600160a060020a03167fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f838360405191825260208201526040908101905180910390a261032a6106c6565b6103326106fc565b5050565b600154600160a060020a031690565b60055481565b60035481565b60075481565b60065481565b600081151561036b57600080fd5b42600254111580156103835750600254620151800142105b156103a05761039982600563ffffffff6107a416565b905061044e565b426002546201518001111580156103bd57506002546202a3000142105b156103e45761039960146103d884600363ffffffff61068c16565b9063ffffffff6107a416565b426002546202a300011115801561040157506002546203f4800142105b156104175761039982600a63ffffffff6107a416565b426002546203f48001111580156104345750600254620546000142105b1561044a5761039982601463ffffffff6107a416565b5060005b919050565b600454600160a060020a031681565b60025481565b60005433600160a060020a0390811691161461048357600080fd5b61048b61059d565b151561049657600080fd5b600154600160a060020a031663a9059cbb73942b56e5a6e92b39643dcb5f232ef583680f0b01826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561050a57600080fd5b6102c65a03f1151561051b57600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561057157600080fd5b6102c65a03f1151561058257600080fd5b50505060405180515050565b600054600160a060020a031681565b6007546006546000919010156105b16107bb565b806105b95750805b91505090565b60005433600160a060020a039081169116146105da57600080fd5b600160a060020a03811615156105ef57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a031681565b60006106736107c3565b8015610687575067016345785d8a00003410155b905090565b60008282028315806106a857508284828115156106a557fe5b04145b15156106b057fe5b9392505050565b6000828201838110156106b057fe5b600454600160a060020a03163480156108fc0290604051600060405180830381858888f1935050505015156106fa57600080fd5b565b600154600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561075557600080fd5b6102c65a03f1151561076657600080fd5b5050506040518051151590506106fa577fd7ec1facb7bfbe9ab73ff0142f1217f9c04cd9e8312203f25baddec2f5dea4e660405160405180910390a1565b60008082848115156107b257fe5b04949350505050565b600354421190565b6000806007546107de346006546106b790919063ffffffff16565b111590506107ea6107f6565b80156105b95750919050565b6000806000600254421015801561080f57506003544211155b91505034151581801561081f5750805b9250505090565b6000905600a165627a7a72305820e24442fcfdd08365bf6f6378348967cddab2b0a32e11c30d0792ff145dba1e180029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000005a787170000000000000000000000000000000000000000000000000000000005a9eacf0000000000000000000000000222728c202e7164dfbd127181d46409338c4328e

-----Decoded View---------------
Arg [0] : _startTime (uint256): 1517842800
Arg [1] : _endTime (uint256): 1520348400
Arg [2] : _tokenAddr (address): 0x222728C202e7164DFbd127181D46409338c4328e

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000005a787170
Arg [1] : 000000000000000000000000000000000000000000000000000000005a9eacf0
Arg [2] : 000000000000000000000000222728c202e7164dfbd127181d46409338c4328e


Swarm Source

bzzr://e24442fcfdd08365bf6f6378348967cddab2b0a32e11c30d0792ff145dba1e18

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.