ETH Price: $2,067.51 (+5.43%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer65251272018-10-16 10:00:512696 days ago1539684051IN
0xfB58F6a2...e4e069991
9.66815146 ETH0.0037078741
Transfer63340862018-09-15 4:09:182727 days ago1536984558IN
0xfB58F6a2...e4e069991
0.1 ETH0.000361744
Transfer63340562018-09-15 4:01:192727 days ago1536984079IN
0xfB58F6a2...e4e069991
0.095 ETH0.000159014
Transfer63340442018-09-15 3:57:272727 days ago1536983847IN
0xfB58F6a2...e4e069991
0.1 ETH0.000159014
Transfer63339862018-09-15 3:42:032727 days ago1536982923IN
0xfB58F6a2...e4e069991
0.1 ETH0.000159014
Transfer63295502018-09-14 10:10:422728 days ago1536919842IN
0xfB58F6a2...e4e069991
0.01 ETH0.000159014
Transfer62274242018-08-28 6:54:092745 days ago1535439249IN
0xfB58F6a2...e4e069991
3.03 ETH0.000180872
Transfer62274042018-08-28 6:48:422745 days ago1535438922IN
0xfB58F6a2...e4e069991
1 ETH0.000180872
Transfer62164632018-08-26 10:32:392747 days ago1535279559IN
0xfB58F6a2...e4e069991
1.01 ETH0.0037078741
Transfer62162532018-08-26 9:40:172747 days ago1535276417IN
0xfB58F6a2...e4e069991
1.06123934 ETH0.000440616.665
Transfer62162262018-08-26 9:32:252747 days ago1535275945IN
0xfB58F6a2...e4e069991
1 ETH0.0005155619.5
Transfer62067582018-08-24 19:18:072748 days ago1535138287IN
0xfB58F6a2...e4e069991
0.5 ETH0.00027133
Transfer62065622018-08-24 18:33:342748 days ago1535135614IN
0xfB58F6a2...e4e069991
2.995 ETH0.000180872
Transfer62037372018-08-24 7:10:102749 days ago1535094610IN
0xfB58F6a2...e4e069991
1 ETH0.000180872
Transfer62031692018-08-24 4:57:232749 days ago1535086643IN
0xfB58F6a2...e4e069991
0.983 ETH0.000180872
Transfer61989442018-08-23 11:29:442749 days ago1535023784IN
0xfB58F6a2...e4e069991
3.06 ETH0.000226092.5
Transfer61857262018-08-21 5:56:522752 days ago1534831012IN
0xfB58F6a2...e4e069991
0.4 ETH0.00022633
Transfer Ownersh...61587132018-08-16 16:19:562756 days ago1534436396IN
0xfB58F6a2...e4e069991
0 ETH0.000123694
Transfer61586532018-08-16 16:06:452756 days ago1534435605IN
0xfB58F6a2...e4e069991
0.1 ETH0.00036133
Change Whitelist61580532018-08-16 13:36:462756 days ago1534426606IN
0xfB58F6a2...e4e069991
0 ETH0.000181644

Latest 12 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer65251272018-10-16 10:00:512696 days ago1539684051
0xfB58F6a2...e4e069991
9.66815146 ETH
Transfer63340862018-09-15 4:09:182727 days ago1536984558
0xfB58F6a2...e4e069991
0.1 ETH
Transfer62274242018-08-28 6:54:092745 days ago1535439249
0xfB58F6a2...e4e069991
3.03 ETH
Transfer62274042018-08-28 6:48:422745 days ago1535438922
0xfB58F6a2...e4e069991
1 ETH
Transfer62164632018-08-26 10:32:392747 days ago1535279559
0xfB58F6a2...e4e069991
1.01 ETH
Transfer62067582018-08-24 19:18:072748 days ago1535138287
0xfB58F6a2...e4e069991
0.5 ETH
Transfer62065622018-08-24 18:33:342748 days ago1535135614
0xfB58F6a2...e4e069991
2.995 ETH
Transfer62037372018-08-24 7:10:102749 days ago1535094610
0xfB58F6a2...e4e069991
1 ETH
Transfer62031692018-08-24 4:57:232749 days ago1535086643
0xfB58F6a2...e4e069991
0.983 ETH
Transfer61989442018-08-23 11:29:442749 days ago1535023784
0xfB58F6a2...e4e069991
3.06 ETH
Transfer61857262018-08-21 5:56:522752 days ago1534831012
0xfB58F6a2...e4e069991
0.4 ETH
Transfer61586532018-08-16 16:06:452756 days ago1534435605
0xfB58F6a2...e4e069991
0.1 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FanCrowdsale

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-08-16
*/

pragma solidity ^0.4.24;

// File: contracts/MintableERC20.sol

interface MintableERC20 {

    function mint(address _to, uint256 _value) public;
}

// File: openzeppelin-solidity/contracts/AddressUtils.sol

/**
 * Utility library of inline functions on addresses
 */
library AddressUtils {

  /**
   * Returns whether the target address is a contract
   * @dev This function will return false if invoked during the constructor of a contract,
   * as the code is not actually created until after the constructor finishes.
   * @param addr address to check
   * @return whether the target address is a contract
   */
  function isContract(address addr) internal view returns (bool) {
    uint256 size;
    // XXX Currently there is no better way to check if there is a contract in an address
    // than to check the size of the code at that address.
    // See https://ethereum.stackexchange.com/a/14016/36603
    // for more details about how this works.
    // TODO Check this again before the Serenity release, because all addresses will be
    // contracts then.
    // solium-disable-next-line security/no-inline-assembly
    assembly { size := extcodesize(addr) }
    return size > 0;
  }

}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @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 OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    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 relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @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) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

// File: openzeppelin-solidity/contracts/ownership/rbac/Roles.sol

/**
 * @title Roles
 * @author Francisco Giordano (@frangio)
 * @dev Library for managing addresses assigned to a Role.
 * See RBAC.sol for example usage.
 */
library Roles {
  struct Role {
    mapping (address => bool) bearer;
  }

  /**
   * @dev give an address access to this role
   */
  function add(Role storage role, address addr)
    internal
  {
    role.bearer[addr] = true;
  }

  /**
   * @dev remove an address' access to this role
   */
  function remove(Role storage role, address addr)
    internal
  {
    role.bearer[addr] = false;
  }

  /**
   * @dev check if an address has this role
   * // reverts
   */
  function check(Role storage role, address addr)
    view
    internal
  {
    require(has(role, addr));
  }

  /**
   * @dev check if an address has this role
   * @return bool
   */
  function has(Role storage role, address addr)
    view
    internal
    returns (bool)
  {
    return role.bearer[addr];
  }
}

// File: openzeppelin-solidity/contracts/ownership/rbac/RBAC.sol

/**
 * @title RBAC (Role-Based Access Control)
 * @author Matt Condon (@Shrugs)
 * @dev Stores and provides setters and getters for roles and addresses.
 * Supports unlimited numbers of roles and addresses.
 * See //contracts/mocks/RBACMock.sol for an example of usage.
 * This RBAC method uses strings to key roles. It may be beneficial
 * for you to write your own implementation of this interface using Enums or similar.
 * It's also recommended that you define constants in the contract, like ROLE_ADMIN below,
 * to avoid typos.
 */
contract RBAC {
  using Roles for Roles.Role;

  mapping (string => Roles.Role) private roles;

  event RoleAdded(address indexed operator, string role);
  event RoleRemoved(address indexed operator, string role);

  /**
   * @dev reverts if addr does not have role
   * @param _operator address
   * @param _role the name of the role
   * // reverts
   */
  function checkRole(address _operator, string _role)
    view
    public
  {
    roles[_role].check(_operator);
  }

  /**
   * @dev determine if addr has role
   * @param _operator address
   * @param _role the name of the role
   * @return bool
   */
  function hasRole(address _operator, string _role)
    view
    public
    returns (bool)
  {
    return roles[_role].has(_operator);
  }

  /**
   * @dev add a role to an address
   * @param _operator address
   * @param _role the name of the role
   */
  function addRole(address _operator, string _role)
    internal
  {
    roles[_role].add(_operator);
    emit RoleAdded(_operator, _role);
  }

  /**
   * @dev remove a role from an address
   * @param _operator address
   * @param _role the name of the role
   */
  function removeRole(address _operator, string _role)
    internal
  {
    roles[_role].remove(_operator);
    emit RoleRemoved(_operator, _role);
  }

  /**
   * @dev modifier to scope access to a single role (uses msg.sender as addr)
   * @param _role the name of the role
   * // reverts
   */
  modifier onlyRole(string _role)
  {
    checkRole(msg.sender, _role);
    _;
  }

  /**
   * @dev modifier to scope access to a set of roles (uses msg.sender as addr)
   * @param _roles the names of the roles to scope access to
   * // reverts
   *
   * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this
   *  see: https://github.com/ethereum/solidity/issues/2467
   */
  // modifier onlyRoles(string[] _roles) {
  //     bool hasAnyRole = false;
  //     for (uint8 i = 0; i < _roles.length; i++) {
  //         if (hasRole(msg.sender, _roles[i])) {
  //             hasAnyRole = true;
  //             break;
  //         }
  //     }

  //     require(hasAnyRole);

  //     _;
  // }
}

// File: openzeppelin-solidity/contracts/access/Whitelist.sol

/**
 * @title Whitelist
 * @dev The Whitelist contract has a whitelist of addresses, and provides basic authorization control functions.
 * This simplifies the implementation of "user permissions".
 */
contract Whitelist is Ownable, RBAC {
  string public constant ROLE_WHITELISTED = "whitelist";

  /**
   * @dev Throws if operator is not whitelisted.
   * @param _operator address
   */
  modifier onlyIfWhitelisted(address _operator) {
    checkRole(_operator, ROLE_WHITELISTED);
    _;
  }

  /**
   * @dev add an address to the whitelist
   * @param _operator address
   * @return true if the address was added to the whitelist, false if the address was already in the whitelist
   */
  function addAddressToWhitelist(address _operator)
    onlyOwner
    public
  {
    addRole(_operator, ROLE_WHITELISTED);
  }

  /**
   * @dev getter to determine if address is in whitelist
   */
  function whitelist(address _operator)
    public
    view
    returns (bool)
  {
    return hasRole(_operator, ROLE_WHITELISTED);
  }

  /**
   * @dev add addresses to the whitelist
   * @param _operators addresses
   * @return true if at least one address was added to the whitelist,
   * false if all addresses were already in the whitelist
   */
  function addAddressesToWhitelist(address[] _operators)
    onlyOwner
    public
  {
    for (uint256 i = 0; i < _operators.length; i++) {
      addAddressToWhitelist(_operators[i]);
    }
  }

  /**
   * @dev remove an address from the whitelist
   * @param _operator address
   * @return true if the address was removed from the whitelist,
   * false if the address wasn't in the whitelist in the first place
   */
  function removeAddressFromWhitelist(address _operator)
    onlyOwner
    public
  {
    removeRole(_operator, ROLE_WHITELISTED);
  }

  /**
   * @dev remove addresses from the whitelist
   * @param _operators addresses
   * @return true if at least one address was removed from the whitelist,
   * false if all addresses weren't in the whitelist in the first place
   */
  function removeAddressesFromWhitelist(address[] _operators)
    onlyOwner
    public
  {
    for (uint256 i = 0; i < _operators.length; i++) {
      removeAddressFromWhitelist(_operators[i]);
    }
  }

}

// File: openzeppelin-solidity/contracts/lifecycle/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    emit Unpause();
  }
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  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 a / b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

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

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender)
    public view 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
  );
}

// File: contracts/FanCrowdsale.sol

contract FanCrowdsale is Pausable {
  using SafeMath for uint256;
  using AddressUtils for address;

  // helper with wei
  uint256 constant COIN = 1 ether;

  // token
  MintableERC20 public mintableToken;

  // wallet to hold funds
  address public wallet;

  Whitelist public whitelist;

  // Stage
  // ============
  struct Stage {
    uint tokenAllocated;
    uint rate;
  }

  uint8 public currentStage;
  mapping (uint8 => Stage) public stages;
  uint8 public totalStages; //stages count

  // Amount raised
  // ==================
  uint256 public totalTokensSold;
  uint256 public totalWeiRaised;

  // timed
  // ======
  uint256 public openingTime;
  uint256 public closingTime;

  /**
   * @dev Reverts if not in crowdsale time range.
   */
  modifier onlyWhileOpen {
    require(block.timestamp >= openingTime && !hasClosed());
    _;
  }

  // Token Cap
  // =============================
  uint256 public totalTokensForSale; // = 424000000 * COIN; // tokens be sold in Crowdsale

  // Finalize
  // =============================
  bool public isFinalized = false;


  // Constructor
  // ============
  /**
   * @dev constructor
   * @param _token token contract address
   * @param _startTime start time of crowdscale
   * @param _endTime end time of crowdsale
   * @param _wallet foundation/multi-sig wallet to store raised eth
   * @param _cap max eth to raise in wei
   */
  constructor(
    address _token,
    uint256 _startTime,
    uint256 _endTime,
    address _wallet,
    uint256 _cap) public
  {
    require(_wallet != address(0), "need a good wallet to store fund");
    require(_token != address(0), "token is not deployed?");
    // require(_startTime > block.timestamp, "startTime must be in future");
    require(_endTime > _startTime, "endTime must be greater than startTime");

    // make sure this crowdsale contract has ability to mint or make sure token's mint authority has me
    // yet fan token contract doesn't expose a public check func must manually make sure crowdsale contract address is added to authorities of token contract
    mintableToken  = MintableERC20(_token);
    wallet = _wallet;

    openingTime = _startTime;
    closingTime = _endTime;

    totalTokensForSale  = _cap;

    _initStages();
    _setCrowdsaleStage(0);

    // require that the sum of the stages is equal to the totalTokensForSale, _cap is for double check
    require(stages[totalStages - 1].tokenAllocated == totalTokensForSale);
    
  }
  // =============

  // fallback
  function () external payable {
    purchase(msg.sender);
  }

  function purchase(address _buyer) public payable whenNotPaused onlyWhileOpen {
    contribute(_buyer, msg.value);
  }
  
  // Token Purchase
  // =========================

  /**
   * @dev crowdsale must be open and we do not accept contribution sent from contract
   * because we credit tokens back it might trigger problem, eg, from exchange withdraw contract
   */
  function contribute(address _buyer, uint256 _weiAmount) internal {
    require(_buyer != address(0));
    require(!_buyer.isContract());
    require(whitelist.whitelist(_buyer));

    if (_weiAmount == 0) {
      return;
    }

    // double check not to over sell
    require(totalTokensSold < totalTokensForSale);

    uint currentRate = stages[currentStage].rate;
    uint256 tokensToMint = _weiAmount.mul(currentRate);

    // refund excess
    uint256 saleableTokens;
    uint256 acceptedWei;
    if (currentStage == (totalStages - 1) && totalTokensSold.add(tokensToMint) > totalTokensForSale) {
      saleableTokens = totalTokensForSale - totalTokensSold;
      acceptedWei = saleableTokens.div(currentRate);

      _buyTokensInCurrentStage(_buyer, acceptedWei, saleableTokens);

      // return the excess
      uint256 weiToRefund = _weiAmount.sub(acceptedWei);
      _buyer.transfer(weiToRefund);
      emit EthRefunded(_buyer, weiToRefund);
    } else if (totalTokensSold.add(tokensToMint) < stages[currentStage].tokenAllocated) {
      _buyTokensInCurrentStage(_buyer, _weiAmount, tokensToMint);
    } else {
      // cross stage yet within cap
      saleableTokens = stages[currentStage].tokenAllocated.sub(totalTokensSold);
      acceptedWei = saleableTokens.div(currentRate);

      // buy first stage partial
      _buyTokensInCurrentStage(_buyer, acceptedWei, saleableTokens);

      // update stage
      if (totalTokensSold >= stages[currentStage].tokenAllocated && currentStage + 1 < totalStages) {
        _setCrowdsaleStage(currentStage + 1);
      }

      // buy next stage for the rest
      if ( _weiAmount.sub(acceptedWei) > 0)
      {
        contribute(_buyer, _weiAmount.sub(acceptedWei));
      }
    }
  }

  function changeWhitelist(address _newWhitelist) public onlyOwner {
    require(_newWhitelist != address(0));
    emit WhitelistTransferred(whitelist, _newWhitelist);
    whitelist = Whitelist(_newWhitelist);
  }

  /**
   * @dev Checks whether the period in which the crowdsale is open has already elapsed.
   * @return Whether crowdsale period has elapsed
   */
  function hasClosed() public view returns (bool) {
    // solium-disable-next-line security/no-block-members
    return block.timestamp > closingTime || totalTokensSold >= totalTokensForSale;
  }

  /**
   * @dev extend closing time to a future time
   */
  function extendClosingTime(uint256 _extendToTime) public onlyOwner onlyWhileOpen {
    closingTime = _extendToTime;
  }

  // ===========================

  // Finalize Crowdsale
  // ====================================================================

  function finalize() public onlyOwner {
    require(!isFinalized);
    require(hasClosed());

    emit Finalized();

    isFinalized = true;
  }


  // -----------------------------------------
  // Internal interface (extensible)
  // -----------------------------------------

  // Crowdsale Stage Management
  // =========================================================
  // Change Crowdsale Stage. Available Options: 0..4
  function _setCrowdsaleStage(uint8 _stageId) internal {
    require(_stageId >= 0 && _stageId < totalStages);

    currentStage = _stageId;

    emit StageUp(_stageId);
  }

  function _initStages() internal {
    // production setting
    stages[0] = Stage(25000000 * COIN, 12500);
    stages[1] = Stage(stages[0].tokenAllocated + 46000000 * COIN, 11500);
    stages[2] = Stage(stages[1].tokenAllocated + 88000000 * COIN, 11000);
    stages[3] = Stage(stages[2].tokenAllocated + 105000000 * COIN, 10500);
    stages[4] = Stage(stages[3].tokenAllocated + 160000000 * COIN, 10000);

    // development setting
    // 0.1 ETH allocation per stage for faster forward test
    // stages[0] = Stage(1250 * COIN,                            12500);    // 1 Ether(wei) = 12500 Coin(wei)
    // stages[1] = Stage(stages[0].tokenAllocated + 1150 * COIN, 11500);
    // stages[2] = Stage(stages[1].tokenAllocated + 1100 * COIN, 11000);
    // stages[3] = Stage(stages[2].tokenAllocated + 1050 * COIN, 10500);
    // stages[4] = Stage(stages[3].tokenAllocated + 1000 * COIN, 10000);

    totalStages = 5;
  }

  /**
   * @dev perform buyTokens action for buyer
   * @param _buyer Address performing the token purchase
   * @param _weiAmount Value in wei involved in the purchase
   */
  function _buyTokensInCurrentStage(address _buyer, uint _weiAmount, uint _tokenAmount) internal {
    totalWeiRaised = totalWeiRaised.add(_weiAmount);
    totalTokensSold = totalTokensSold.add(_tokenAmount);

    // mint tokens to buyer's account
    mintableToken.mint(_buyer, _tokenAmount);
    wallet.transfer(_weiAmount);

    emit TokenPurchase(_buyer, _weiAmount, _tokenAmount);
  }


//////////
// Safety Methods
//////////

    /// @notice This method can be used by the controller to extract mistakenly
    ///  sent tokens to this contract.
    /// @param _token The address of the token contract that you want to recover
    ///  set to 0 in case you want to extract ether.
  function claimTokens(address _token) onlyOwner public {
      if (_token == 0x0) {
          owner.transfer(address(this).balance);
          return;
      }

      ERC20 token = ERC20(_token);
      uint balance = token.balanceOf(this);
      token.transfer(owner, balance);

      emit ClaimedTokens(_token, owner, balance);
  }

////////////////
// Events
////////////////
  event StageUp(uint8 stageId);

  event EthRefunded(address indexed buyer, uint256 value);

  event TokenPurchase(address indexed purchaser, uint256 value, uint256 amount);

  event WhitelistTransferred(address indexed previousWhitelist, address indexed newWhitelist);

  event ClaimedTokens(address indexed _token, address indexed _to, uint _amount);

  event Finalized();

  // debug log event
  event DLog(uint num, string msg);
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"_newWhitelist","type":"address"}],"name":"changeWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hasClosed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"stages","outputs":[{"name":"tokenAllocated","type":"uint256"},{"name":"rate","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_buyer","type":"address"}],"name":"purchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_extendToTime","type":"uint256"}],"name":"extendClosingTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"closingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalWeiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentStage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokensForSale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelist","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintableToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"openingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalStages","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"},{"name":"_wallet","type":"address"},{"name":"_cap","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stageId","type":"uint8"}],"name":"StageUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"EthRefunded","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":"previousWhitelist","type":"address"},{"indexed":true,"name":"newWhitelist","type":"address"}],"name":"WhitelistTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"num","type":"uint256"},{"indexed":false,"name":"msg","type":"string"}],"name":"DLog","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60806040526000805460a060020a60ff0219169055600b805460ff1916905534801561002a57600080fd5b5060405160a0806115038339810160409081528151602083015191830151606084015160809094015160008054600160a060020a0319163317905591939091600160a060020a03821615156100e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f6e656564206120676f6f642077616c6c657420746f2073746f72652066756e64604482015290519081900360640190fd5b600160a060020a038516151561015757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f746f6b656e206973206e6f74206465706c6f7965643f00000000000000000000604482015290519081900360640190fd5b8383116101eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f656e6454696d65206d7573742062652067726561746572207468616e2073746160448201527f727454696d650000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60018054600160a060020a03808816600160a060020a031992831617909255600280549285169290911691909117905560088490556009839055600a81905561023b640100000000610281810204565b61024e60006401000000006104cc810204565b600a5460055460001960ff91821601166000908152600460205260409020541461027757600080fd5b505050505061055b565b6040805180820182526a14adf4b7320334b900000081526130d460208083019182526000808052600480835293517f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec81905592517f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ed55845180860186526a260ce0ff28d2b2ee0000009093018352612cec8383019081526001825284835292517fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0581905592517fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0655845180860186526a48cab98f1671af580000009093018352612af88383019081526002825284835292517f91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a781905592517f91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a855845180860186526a56da9d67d20d770900000090930183526129048383019081526003825284835292517f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa081905592517f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa15584518086019095526a84595161401484a00000009092018452612710848201908152918390529190915290517f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f55517f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a0510556005805460ff191681179055565b60008160ff16101580156104e8575060055460ff908116908216105b15156104f357600080fd5b6003805460ff831674010000000000000000000000000000000000000000810260a060020a60ff02199092169190911790915560408051918252517f31ad32b0222ebb4a97eeda4b8720e0f0d0dc78d712d4632bfd7dc9bfdf2b7e729181900360200190a150565b610f998061056a6000396000f30060806040526004361061013d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166308d0a7cf81146101485780631515bc2b146101695780631e88b2aa1461019257806325b31a97146101c65780633e2640d6146101da5780633f4ba83a146101f25780634b6753bc146102075780634bb278f31461022e578063521eb2731461024357806353f4db01146102745780635bf5d54c146102895780635c975abb146102b457806360219c7b146102c957806363b20117146102de578063715018a6146102f35780638456cb59146103085780638d4e40831461031d5780638da5cb5b1461033257806393e59dc11461034757806395d38ea81461035c578063b7a8807c14610371578063df8de3e714610386578063f2fde38b146103a7578063f86a3529146103c8575b610146336103dd565b005b34801561015457600080fd5b50610146600160a060020a0360043516610423565b34801561017557600080fd5b5061017e6104b8565b604080519115158252519081900360200190f35b34801561019e57600080fd5b506101ad60ff600435166104d3565b6040805192835260208301919091528051918290030190f35b610146600160a060020a03600435166103dd565b3480156101e657600080fd5b506101466004356104ec565b3480156101fe57600080fd5b5061014661052a565b34801561021357600080fd5b5061021c6105a0565b60408051918252519081900360200190f35b34801561023a57600080fd5b506101466105a6565b34801561024f57600080fd5b50610258610618565b60408051600160a060020a039092168252519081900360200190f35b34801561028057600080fd5b5061021c610627565b34801561029557600080fd5b5061029e61062d565b6040805160ff9092168252519081900360200190f35b3480156102c057600080fd5b5061017e61063d565b3480156102d557600080fd5b5061021c61064d565b3480156102ea57600080fd5b5061021c610653565b3480156102ff57600080fd5b50610146610659565b34801561031457600080fd5b506101466106c5565b34801561032957600080fd5b5061017e610740565b34801561033e57600080fd5b50610258610749565b34801561035357600080fd5b50610258610758565b34801561036857600080fd5b50610258610767565b34801561037d57600080fd5b5061021c610776565b34801561039257600080fd5b50610146600160a060020a036004351661077c565b3480156103b357600080fd5b50610146600160a060020a0360043516610963565b3480156103d457600080fd5b5061029e610983565b60005460a060020a900460ff16156103f457600080fd5b600854421015801561040b57506104096104b8565b155b151561041657600080fd5b610420813461098c565b50565b600054600160a060020a0316331461043a57600080fd5b600160a060020a038116151561044f57600080fd5b600354604051600160a060020a038084169216907f53c7451aafbbb2c94745b428e5eff048cde95e82f5b123afe5cb1067e8aee8b090600090a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60006009544211806104ce5750600a5460065410155b905090565b6004602052600090815260409020805460019091015482565b600054600160a060020a0316331461050357600080fd5b600854421015801561051a57506105186104b8565b155b151561052557600080fd5b600955565b600054600160a060020a0316331461054157600080fd5b60005460a060020a900460ff16151561055957600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b60095481565b600054600160a060020a031633146105bd57600080fd5b600b5460ff16156105cd57600080fd5b6105d56104b8565b15156105e057600080fd5b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a1600b805460ff19166001179055565b600254600160a060020a031681565b60075481565b60035460a060020a900460ff1681565b60005460a060020a900460ff1681565b600a5481565b60065481565b600054600160a060020a0316331461067057600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031633146106dc57600080fd5b60005460a060020a900460ff16156106f357600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b600b5460ff1681565b600054600160a060020a031681565b600354600160a060020a031681565b600154600160a060020a031681565b60085481565b600080548190600160a060020a0316331461079657600080fd5b600160a060020a03831615156107e75760008054604051600160a060020a0390911691303180156108fc02929091818181858888f193505050501580156107e1573d6000803e3d6000fd5b5061095e565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561084b57600080fd5b505af115801561085f573d6000803e3d6000fd5b505050506040513d602081101561087557600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b1580156108eb57600080fd5b505af11580156108ff573d6000803e3d6000fd5b505050506040513d602081101561091557600080fd5b5050600054604080518381529051600160a060020a03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a35b505050565b600054600160a060020a0316331461097a57600080fd5b61042081610cc4565b60055460ff1681565b600080808080600160a060020a03871615156109a757600080fd5b6109b987600160a060020a0316610d41565b156109c357600080fd5b600354604080517f9b19251a000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015291519190921691639b19251a9160248083019260209291908290030181600087803b158015610a2b57600080fd5b505af1158015610a3f573d6000803e3d6000fd5b505050506040513d6020811015610a5557600080fd5b50511515610a6257600080fd5b851515610a6e57610cbb565b600a5460065410610a7e57600080fd5b60035460a060020a900460ff166000908152600460205260409020600101549450610aa98686610d49565b60055460035491955060ff90811660001901811660a060020a90920416148015610ae65750600a54600654610ae4908663ffffffff610d7816565b115b15610b9f57600654600a54039250610b04838663ffffffff610d8516565b9150610b11878385610d9a565b610b21868363ffffffff610ecf16565b604051909150600160a060020a0388169082156108fc029083906000818181858888f19350505050158015610b5a573d6000803e3d6000fd5b50604080518281529051600160a060020a038916917fffab3269bdaceca4d1bbc53e74b982ac2b306687e17e21f1e499e7fdf6751ac8919081900360200190a2610cbb565b60035460a060020a900460ff16600090815260046020526040902054600654610bc89086610d78565b1015610bde57610bd9878786610d9a565b610cbb565b60065460035460a060020a900460ff16600090815260046020526040902054610c0691610ecf565b9250610c18838663ffffffff610d8516565b9150610c25878385610d9a565b60035460a060020a900460ff1660009081526004602052604090205460065410801590610c6a575060055460035460ff91821660a060020a9091048216600101909116105b15610c8a57610c8a600360149054906101000a900460ff16600101610ee1565b6000610c9c878463ffffffff610ecf16565b1115610cbb57610cbb87610cb6888563ffffffff610ecf16565b61098c565b50505050505050565b600160a060020a0381161515610cd957600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b1190565b6000821515610d5a57506000610d72565b50818102818382811515610d6a57fe5b0414610d7257fe5b92915050565b81810182811015610d7257fe5b60008183811515610d9257fe5b049392505050565b600754610dad908363ffffffff610d7816565b600755600654610dc3908263ffffffff610d7816565b600655600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201859052915191909216916340c10f1991604480830192600092919082900301818387803b158015610e3457600080fd5b505af1158015610e48573d6000803e3d6000fd5b5050600254604051600160a060020a03909116925084156108fc02915084906000818181858888f19350505050158015610e86573d6000803e3d6000fd5b5060408051838152602081018390528151600160a060020a038616927fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f928290030190a2505050565b600082821115610edb57fe5b50900390565b60008160ff1610158015610efd575060055460ff908116908216105b1515610f0857600080fd5b6003805460ff831660a060020a810274ff0000000000000000000000000000000000000000199092169190911790915560408051918252517f31ad32b0222ebb4a97eeda4b8720e0f0d0dc78d712d4632bfd7dc9bfdf2b7e729181900360200190a1505600a165627a7a72305820c7e85d14793da2e1b87117dfc2c9bee77dd8d309539966cdf58b4c0adec83f85002900000000000000000000000090162f41886c0946d09999736f1c15c8a105a421000000000000000000000000000000000000000000000000000000005b759f80000000000000000000000000000000000000000000000000000000005bd9d180000000000000000000000000d4b2334ddb9d5468a4a330cd9f63f48f8aed02340000000000000000000000000000000000000000015eb97e0e836992a8000000

Deployed Bytecode

0x60806040526004361061013d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166308d0a7cf81146101485780631515bc2b146101695780631e88b2aa1461019257806325b31a97146101c65780633e2640d6146101da5780633f4ba83a146101f25780634b6753bc146102075780634bb278f31461022e578063521eb2731461024357806353f4db01146102745780635bf5d54c146102895780635c975abb146102b457806360219c7b146102c957806363b20117146102de578063715018a6146102f35780638456cb59146103085780638d4e40831461031d5780638da5cb5b1461033257806393e59dc11461034757806395d38ea81461035c578063b7a8807c14610371578063df8de3e714610386578063f2fde38b146103a7578063f86a3529146103c8575b610146336103dd565b005b34801561015457600080fd5b50610146600160a060020a0360043516610423565b34801561017557600080fd5b5061017e6104b8565b604080519115158252519081900360200190f35b34801561019e57600080fd5b506101ad60ff600435166104d3565b6040805192835260208301919091528051918290030190f35b610146600160a060020a03600435166103dd565b3480156101e657600080fd5b506101466004356104ec565b3480156101fe57600080fd5b5061014661052a565b34801561021357600080fd5b5061021c6105a0565b60408051918252519081900360200190f35b34801561023a57600080fd5b506101466105a6565b34801561024f57600080fd5b50610258610618565b60408051600160a060020a039092168252519081900360200190f35b34801561028057600080fd5b5061021c610627565b34801561029557600080fd5b5061029e61062d565b6040805160ff9092168252519081900360200190f35b3480156102c057600080fd5b5061017e61063d565b3480156102d557600080fd5b5061021c61064d565b3480156102ea57600080fd5b5061021c610653565b3480156102ff57600080fd5b50610146610659565b34801561031457600080fd5b506101466106c5565b34801561032957600080fd5b5061017e610740565b34801561033e57600080fd5b50610258610749565b34801561035357600080fd5b50610258610758565b34801561036857600080fd5b50610258610767565b34801561037d57600080fd5b5061021c610776565b34801561039257600080fd5b50610146600160a060020a036004351661077c565b3480156103b357600080fd5b50610146600160a060020a0360043516610963565b3480156103d457600080fd5b5061029e610983565b60005460a060020a900460ff16156103f457600080fd5b600854421015801561040b57506104096104b8565b155b151561041657600080fd5b610420813461098c565b50565b600054600160a060020a0316331461043a57600080fd5b600160a060020a038116151561044f57600080fd5b600354604051600160a060020a038084169216907f53c7451aafbbb2c94745b428e5eff048cde95e82f5b123afe5cb1067e8aee8b090600090a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60006009544211806104ce5750600a5460065410155b905090565b6004602052600090815260409020805460019091015482565b600054600160a060020a0316331461050357600080fd5b600854421015801561051a57506105186104b8565b155b151561052557600080fd5b600955565b600054600160a060020a0316331461054157600080fd5b60005460a060020a900460ff16151561055957600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b60095481565b600054600160a060020a031633146105bd57600080fd5b600b5460ff16156105cd57600080fd5b6105d56104b8565b15156105e057600080fd5b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a1600b805460ff19166001179055565b600254600160a060020a031681565b60075481565b60035460a060020a900460ff1681565b60005460a060020a900460ff1681565b600a5481565b60065481565b600054600160a060020a0316331461067057600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031633146106dc57600080fd5b60005460a060020a900460ff16156106f357600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b600b5460ff1681565b600054600160a060020a031681565b600354600160a060020a031681565b600154600160a060020a031681565b60085481565b600080548190600160a060020a0316331461079657600080fd5b600160a060020a03831615156107e75760008054604051600160a060020a0390911691303180156108fc02929091818181858888f193505050501580156107e1573d6000803e3d6000fd5b5061095e565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561084b57600080fd5b505af115801561085f573d6000803e3d6000fd5b505050506040513d602081101561087557600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b1580156108eb57600080fd5b505af11580156108ff573d6000803e3d6000fd5b505050506040513d602081101561091557600080fd5b5050600054604080518381529051600160a060020a03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a35b505050565b600054600160a060020a0316331461097a57600080fd5b61042081610cc4565b60055460ff1681565b600080808080600160a060020a03871615156109a757600080fd5b6109b987600160a060020a0316610d41565b156109c357600080fd5b600354604080517f9b19251a000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015291519190921691639b19251a9160248083019260209291908290030181600087803b158015610a2b57600080fd5b505af1158015610a3f573d6000803e3d6000fd5b505050506040513d6020811015610a5557600080fd5b50511515610a6257600080fd5b851515610a6e57610cbb565b600a5460065410610a7e57600080fd5b60035460a060020a900460ff166000908152600460205260409020600101549450610aa98686610d49565b60055460035491955060ff90811660001901811660a060020a90920416148015610ae65750600a54600654610ae4908663ffffffff610d7816565b115b15610b9f57600654600a54039250610b04838663ffffffff610d8516565b9150610b11878385610d9a565b610b21868363ffffffff610ecf16565b604051909150600160a060020a0388169082156108fc029083906000818181858888f19350505050158015610b5a573d6000803e3d6000fd5b50604080518281529051600160a060020a038916917fffab3269bdaceca4d1bbc53e74b982ac2b306687e17e21f1e499e7fdf6751ac8919081900360200190a2610cbb565b60035460a060020a900460ff16600090815260046020526040902054600654610bc89086610d78565b1015610bde57610bd9878786610d9a565b610cbb565b60065460035460a060020a900460ff16600090815260046020526040902054610c0691610ecf565b9250610c18838663ffffffff610d8516565b9150610c25878385610d9a565b60035460a060020a900460ff1660009081526004602052604090205460065410801590610c6a575060055460035460ff91821660a060020a9091048216600101909116105b15610c8a57610c8a600360149054906101000a900460ff16600101610ee1565b6000610c9c878463ffffffff610ecf16565b1115610cbb57610cbb87610cb6888563ffffffff610ecf16565b61098c565b50505050505050565b600160a060020a0381161515610cd957600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b1190565b6000821515610d5a57506000610d72565b50818102818382811515610d6a57fe5b0414610d7257fe5b92915050565b81810182811015610d7257fe5b60008183811515610d9257fe5b049392505050565b600754610dad908363ffffffff610d7816565b600755600654610dc3908263ffffffff610d7816565b600655600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201859052915191909216916340c10f1991604480830192600092919082900301818387803b158015610e3457600080fd5b505af1158015610e48573d6000803e3d6000fd5b5050600254604051600160a060020a03909116925084156108fc02915084906000818181858888f19350505050158015610e86573d6000803e3d6000fd5b5060408051838152602081018390528151600160a060020a038616927fcd60aa75dea3072fbc07ae6d7d856b5dc5f4eee88854f5b4abf7b680ef8bc50f928290030190a2505050565b600082821115610edb57fe5b50900390565b60008160ff1610158015610efd575060055460ff908116908216105b1515610f0857600080fd5b6003805460ff831660a060020a810274ff0000000000000000000000000000000000000000199092169190911790915560408051918252517f31ad32b0222ebb4a97eeda4b8720e0f0d0dc78d712d4632bfd7dc9bfdf2b7e729181900360200190a1505600a165627a7a72305820c7e85d14793da2e1b87117dfc2c9bee77dd8d309539966cdf58b4c0adec83f850029

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

00000000000000000000000090162f41886c0946d09999736f1c15c8a105a421000000000000000000000000000000000000000000000000000000005b759f80000000000000000000000000000000000000000000000000000000005bd9d180000000000000000000000000d4b2334ddb9d5468a4a330cd9f63f48f8aed02340000000000000000000000000000000000000000015eb97e0e836992a8000000

-----Decoded View---------------
Arg [0] : _token (address): 0x90162f41886c0946D09999736f1C15c8a105A421
Arg [1] : _startTime (uint256): 1534435200
Arg [2] : _endTime (uint256): 1541001600
Arg [3] : _wallet (address): 0xD4B2334ddB9D5468A4a330Cd9f63f48f8aEd0234
Arg [4] : _cap (uint256): 424000000000000000000000000

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000090162f41886c0946d09999736f1c15c8a105a421
Arg [1] : 000000000000000000000000000000000000000000000000000000005b759f80
Arg [2] : 000000000000000000000000000000000000000000000000000000005bd9d180
Arg [3] : 000000000000000000000000d4b2334ddb9d5468a4a330cd9f63f48f8aed0234
Arg [4] : 0000000000000000000000000000000000000000015eb97e0e836992a8000000


Swarm Source

bzzr://c7e85d14793da2e1b87117dfc2c9bee77dd8d309539966cdf58b4c0adec83f85

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.