ETH Price: $3,146.59 (+2.42%)
Gas: 13 Gwei

Token

Macroverse Token (MRV)
 

Overview

Max Total Supply

668,907.57040367067473 MRV

Holders

40

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MRVToken

Compiler Version
v0.4.11+commit.68ef5810

Optimization Enabled:
Yes with 0 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-07-09
*/

pragma solidity ^0.4.11;


/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) constant returns (uint256);
  function transfer(address to, uint256 value);
  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) constant returns (uint256);
  function transferFrom(address from, address to, uint256 value);
  function approve(address spender, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * Math operations with safety checks
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

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

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

  function max64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a >= b ? a : b;
  }

  function min64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a < b ? a : b;
  }

  function max256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a >= b ? a : b;
  }

  function min256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a < b ? a : b;
  }

}

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

  mapping(address => uint256) balances;

  /**
   * @dev Fix for the ERC20 short address attack.
   */
  modifier onlyPayloadSize(uint256 size) {
     if(msg.data.length < size + 4) {
       throw;
     }
     _;
  }

  /**
  * @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) onlyPayloadSize(2 * 32) {
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
  }

  /**
  * @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) constant returns (uint256 balance) {
    return balances[_owner];
  }

}

/**
 * @title Standard ERC20 token
 *
 * @dev Implemantation of the basic standart 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 BasicToken, ERC20 {

  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 amout of tokens to be transfered
   */
  function transferFrom(address _from, address _to, uint256 _value) onlyPayloadSize(3 * 32) {
    var _allowance = allowed[_from][msg.sender];

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

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

  /**
   * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender.
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender, 0)` if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw;

    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
  }

  /**
   * @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 specifing the amount of tokens still avaible for the spender.
   */
  function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

}

/**
 * @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;


  /** 
   * @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() {
    if (msg.sender != owner) {
      throw;
    }
    _;
  }


  /**
   * @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 {
    if (newOwner != address(0)) {
      owner = newOwner;
    }
  }

}

/** 
 * @title Contracts that should not own Tokens
 * @author Remco Bloemen <remco@2π.com>
 * @dev This blocks incoming ERC23 tokens to prevent accidental loss of tokens.
 * Should tokens (any ERC20Basic compatible) end up in the contract, it allows the
 * owner to reclaim the tokens.
 */
contract HasNoTokens is Ownable {

 /** 
  * @dev Reject all ERC23 compatible tokens
  * @param from_ address The address that is transferring the tokens
  * @param value_ uint256 the amount of the specified token
  * @param data_ Bytes The data passed from the caller.
  */
  function tokenFallback(address from_, uint256 value_, bytes data_) external {
    throw;
  }

  /**
   * @dev Reclaim all ERC20Basic compatible tokens
   * @param tokenAddr address The address of the token contract
   */
  function reclaimToken(address tokenAddr) external onlyOwner {
    ERC20Basic tokenInst = ERC20Basic(tokenAddr);
    uint256 balance = tokenInst.balanceOf(this);
    tokenInst.transfer(owner, balance);
  }
}

/** 
 * @title Contracts that should not own Contracts
 * @author Remco Bloemen <remco@2π.com>
 * @dev Should contracts (anything Ownable) end up being owned by this contract, it allows the owner
 * of this contract to reclaim ownership of the contracts.
 */
contract HasNoContracts is Ownable {

  /**
   * @dev Reclaim ownership of Ownable contracts
   * @param contractAddr The address of the Ownable to be reclaimed.
   */
  function reclaimContract(address contractAddr) external onlyOwner {
    Ownable contractInst = Ownable(contractAddr);
    contractInst.transferOwnership(owner);
  }
}

/**
 * MRV token, distributed by crowdsale. Token and crowdsale functionality are unified in a single
 * contract, to make clear and restrict the conditions under which tokens can be created or destroyed.
 * Derived from OpenZeppelin CrowdsaleToken template.
 *
 * Key Crowdsale Facts:
 * 
 * * MRV tokens will be sold at a rate of 5,000 per ETH.
 *
 * * All MRV token sales are final. No refunds can be issued by the contract.
 *
 * * Unless adjusted later by the crowdsale operator, up to 100 million tokens will be available.
 *
 * * An additional 5,000 tokens are reserved. 
 *
 * * Participate in the crowdsale by sending ETH to this contract, when the crowdsale is open.
 *
 * * Sending more ETH than required to purchase all the remaining tokens will fail.
 *
 * * Timers can be set to allow anyone to open/close the crowdsale at the proper time. The crowdsale
 *   operator reserves the right to set, unset, and reset these timers at any time, for any reason,
 *   and without notice.
 *
 * * The operator of the crowdsale has the ability to manually open it and close it, and reserves
 *   the right to do so at any time, for any reason, and without notice.
 *
 * * The crowdsale cannot be reopened, and no tokens can be created, after the crowdsale closes.
 *
 * * The crowdsale operator reserves the right to adjust the decimal places of the MRV token at
 *   any time after the crowdsale closes, for any reason, and without notice. MRV tokens are
 *   initially divisible to 18 decimal places.
 *
 * * The crowdsale operator reserves the right to not open or close the crowdsale, not set the
 *   open or close timer, and generally refrain from doing things that the contract would otherwise
 *   authorize them to do.
 *
 * * The crowdsale operator reserves the right to claim and keep any ETH or tokens that end up in
 *   the contract's account. During normal crowdsale operation, ETH is not stored in the contract's
 *   account, and is instead sent directly to the beneficiary.
 */
contract MRVToken is StandardToken, Ownable, HasNoTokens, HasNoContracts {

    // Token Parameters

    // From StandardToken we inherit balances and totalSupply.
    
    // What is the full name of the token?
    string public constant name = "Macroverse Token";
    // What is its suggested symbol?
    string public constant symbol = "MRV";
    // How many of the low base-10 digits are to the right of the decimal point?
    // Note that this is not constant! After the crowdsale, the contract owner can
    // adjust the decimal places, allowing for 10-to-1 splits and merges.
    uint8 public decimals;
    
    // Crowdsale Parameters
    
    // Where will funds collected during the crowdsale be sent?
    address beneficiary;
    // How many MRV can be sold in the crowdsale?
    uint public maxCrowdsaleSupplyInWholeTokens;
    // How many whole tokens are reserved for the beneficiary?
    uint public constant wholeTokensReserved = 5000;
    // How many tokens per ETH during the crowdsale?
    uint public constant wholeTokensPerEth = 5000;
    
    // Set to true when the crowdsale starts
    // Internal flag. Use isCrowdsaleActive instead().
    bool crowdsaleStarted;
    // Set to true when the crowdsale ends
    // Internal flag. Use isCrowdsaleActive instead().
    bool crowdsaleEnded;
    // We can also set some timers to open and close the crowdsale. 0 = timer is not set.
    // After this time, the crowdsale will open with a call to checkOpenTimer().
    uint public openTimer = 0;
    // After this time, no contributions will be accepted, and the crowdsale will close with a call to checkCloseTimer().
    uint public closeTimer = 0;
    
    ////////////
    // Constructor
    ////////////
    
    /**
    * Deploy a new MRVToken contract, paying crowdsale proceeds to the given address,
    * and awarding reserved tokens to the other given address.
    */
    function MRVToken(address sendProceedsTo, address sendTokensTo) {
        // Proceeds of the crowdsale go here.
        beneficiary = sendProceedsTo;
        
        // Start with 18 decimals, same as ETH
        decimals = 18;
        
        // Initially, the reserved tokens belong to the given address.
        totalSupply = wholeTokensReserved * 10 ** 18;
        balances[sendTokensTo] = totalSupply;
        
        // Initially the crowdsale has not yet started or ended.
        crowdsaleStarted = false;
        crowdsaleEnded = false;
        // Default to a max supply of 100 million tokens available.
        maxCrowdsaleSupplyInWholeTokens = 100000000;
    }
    
    ////////////
    // Fallback function
    ////////////
    
    /**
    * This is the MAIN CROWDSALE ENTRY POINT. You participate in the crowdsale by 
    * sending ETH to this contract. That calls this function, which credits tokens
    * to the address or contract that sent the ETH.
    *
    * Since MRV tokens are sold at a rate of more than one per ether, and since
    * they, like ETH, have 18 decimal places (at the time of sale), any fractional
    * amount of ETH should be handled safely.
    *
    * Note that all orders are fill-or-kill. If you send in more ether than there are
    * tokens remaining to be bought, your transaction will be rolled back and you will
    * get no tokens and waste your gas.
    */
    function() payable onlyDuringCrowdsale {
        createTokens(msg.sender);
    }
    
    ////////////
    // Events
    ////////////
    
    // Fired when the crowdsale is recorded as started.
    event CrowdsaleOpen(uint time);
    // Fired when someone contributes to the crowdsale and buys MRV
    event TokenPurchase(uint time, uint etherAmount, address from);
    // Fired when the crowdsale is recorded as ended.
    event CrowdsaleClose(uint time);
    // Fired when the decimal point moves
    event DecimalChange(uint8 newDecimals);
    
    ////////////
    // Modifiers (encoding important crowdsale logic)
    ////////////
    
    /**
     * Only allow some actions before the crowdsale closes, whether it's open or not.
     */
    modifier onlyBeforeClosed {
        checkCloseTimer();
        if (crowdsaleEnded) throw;
        _;
    }
    
    /**
     * Only allow some actions after the crowdsale is over.
     * Will set the crowdsale closed if it should be.
     */
    modifier onlyAfterClosed {
        checkCloseTimer();
        if (!crowdsaleEnded) throw;
        _;
    }
    
    /**
     * Only allow some actions before the crowdsale starts.
     */
    modifier onlyBeforeOpened {
        checkOpenTimer();
        if (crowdsaleStarted) throw;
        _;
    }
    
    /**
     * Only allow some actions while the crowdsale is active.
     * Will set the crowdsale open if it should be.
     */
    modifier onlyDuringCrowdsale {
        checkOpenTimer();
        checkCloseTimer();
        if (crowdsaleEnded) throw;
        if (!crowdsaleStarted) throw;
        _;
    }

    ////////////
    // Status and utility functions
    ////////////
    
    /**
     * Determine if the crowdsale should open by timer.
     */
    function openTimerElapsed() constant returns (bool) {
        return (openTimer != 0 && now > openTimer);
    }
    
    /**
     * Determine if the crowdsale should close by timer.
     */
    function closeTimerElapsed() constant returns (bool) {
        return (closeTimer != 0 && now > closeTimer);
    }
    
    /**
     * If the open timer has elapsed, start the crowdsale.
     * Can be called by people, but also gets called when people try to contribute.
     */
    function checkOpenTimer() {
        if (openTimerElapsed()) {
            crowdsaleStarted = true;
            openTimer = 0;
            CrowdsaleOpen(now);
        }
    }
    
    /**
     * If the close timer has elapsed, stop the crowdsale.
     */
    function checkCloseTimer() {
        if (closeTimerElapsed()) {
            crowdsaleEnded = true;
            closeTimer = 0;
            CrowdsaleClose(now);
        }
    }
    
    /**
     * Determine if the crowdsale is currently happening.
     */
    function isCrowdsaleActive() constant returns (bool) {
        // The crowdsale is happening if it is open or due to open, and it isn't closed or due to close.
        return ((crowdsaleStarted || openTimerElapsed()) && !(crowdsaleEnded || closeTimerElapsed()));
    }
    
    ////////////
    // Before the crowdsale: configuration
    ////////////
    
    /**
     * Before the crowdsale opens, the max token count can be configured.
     */
    function setMaxSupply(uint newMaxInWholeTokens) onlyOwner onlyBeforeOpened {
        maxCrowdsaleSupplyInWholeTokens = newMaxInWholeTokens;
    }
    
    /**
     * Allow the owner to start the crowdsale manually.
     */
    function openCrowdsale() onlyOwner onlyBeforeOpened {
        crowdsaleStarted = true;
        openTimer = 0;
        CrowdsaleOpen(now);
    }
    
    /**
     * Let the owner start the timer for the crowdsale start. Without further owner intervention,
     * anyone will be able to open the crowdsale when the timer expires.
     * Further calls will re-set the timer to count from the time the transaction is processed.
     * The timer can be re-set after it has tripped, unless someone has already opened the crowdsale.
     */
    function setCrowdsaleOpenTimerFor(uint minutesFromNow) onlyOwner onlyBeforeOpened {
        openTimer = now + minutesFromNow * 1 minutes;
    }
    
    /**
     * Let the owner stop the crowdsale open timer, as long as the crowdsale has not yet opened.
     */
    function clearCrowdsaleOpenTimer() onlyOwner onlyBeforeOpened {
        openTimer = 0;
    }
    
    /**
     * Let the owner start the timer for the crowdsale end. Counts from when the function is called,
     * *not* from the start of the crowdsale.
     * It is possible, but a bad idea, to set this before the open timer.
     */
    function setCrowdsaleCloseTimerFor(uint minutesFromNow) onlyOwner onlyBeforeClosed {
        closeTimer = now + minutesFromNow * 1 minutes;
    }
    
    /**
     * Let the owner stop the crowdsale close timer, as long as it has not yet expired.
     */
    function clearCrowdsaleCloseTimer() onlyOwner onlyBeforeClosed {
        closeTimer = 0;
    }
    
    
    ////////////
    // During the crowdsale
    ////////////
    
    /**
     * Create tokens for the given address, in response to a payment.
     * Cannot be called by outside callers; use the fallback function, which will create tokens for whoever pays it.
     */
    function createTokens(address recipient) internal onlyDuringCrowdsale {
        if (msg.value == 0) {
            throw;
        }

        uint tokens = msg.value.mul(wholeTokensPerEth); // Exploits the fact that we have 18 decimals, like ETH.
        
        var newTotalSupply = totalSupply.add(tokens);
        
        if (newTotalSupply > (wholeTokensReserved + maxCrowdsaleSupplyInWholeTokens) * 10 ** 18) {
            // This would be too many tokens issued.
            // Don't mess around with partial order fills.
            throw;
        }
        
        // Otherwise, we can fill the order entirely, so make the tokens and put them in the specified account.
        totalSupply = newTotalSupply;
        balances[recipient] = balances[recipient].add(tokens);
        
        // Announce the purchase
        TokenPurchase(now, msg.value, recipient);

        // Lastly (after all state changes), send the money to the crowdsale beneficiary.
        // This allows the crowdsale contract itself not to hold any ETH.
        // It also means that ALL SALES ARE FINAL!
        if (!beneficiary.send(msg.value)) {
            throw;
        }
    }
    
    /**
     * Allow the owner to end the crowdsale manually.
     */
    function closeCrowdsale() onlyOwner onlyDuringCrowdsale {
        crowdsaleEnded = true;
        closeTimer = 0;
        CrowdsaleClose(now);
    }  
    
    ////////////
    // After the crowdsale: token maintainance
    ////////////
    
    /**
     * When the crowdsale is finished, the contract owner may adjust the decimal places for display purposes.
     * This should work like a 10-to-1 split or reverse-split.
     * The point of this mechanism is to keep the individual MRV tokens from getting inconveniently valuable or cheap.
     * However, it relies on the contract owner taking the time to update the decimal place value.
     * Note that this changes the decimals IMMEDIATELY with NO NOTICE to users.
     */
    function setDecimals(uint8 newDecimals) onlyOwner onlyAfterClosed {
        decimals = newDecimals;
        // Announce the change
        DecimalChange(decimals);
    }
    
    /**
     * If Ether somehow manages to get into this contract, provide a way to get it out again.
     * During normal crowdsale operation, ETH is immediately forwarded to the beneficiary.
     */
    function reclaimEther() external onlyOwner {
        // Send the ETH. Make sure it worked.
        assert(owner.send(this.balance));
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"isCrowdsaleActive","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"clearCrowdsaleCloseTimer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"tokenAddr","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"checkCloseTimer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"openCrowdsale","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"contractAddr","type":"address"}],"name":"reclaimContract","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maxCrowdsaleSupplyInWholeTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"wholeTokensPerEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"closeTimer","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"clearCrowdsaleOpenTimer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newMaxInWholeTokens","type":"uint256"}],"name":"setMaxSupply","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"minutesFromNow","type":"uint256"}],"name":"setCrowdsaleOpenTimerFor","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newDecimals","type":"uint8"}],"name":"setDecimals","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"closeTimerElapsed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"wholeTokensReserved","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"openTimer","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"closeCrowdsale","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"reclaimEther","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"from_","type":"address"},{"name":"value_","type":"uint256"},{"name":"data_","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"checkOpenTimer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"minutesFromNow","type":"uint256"}],"name":"setCrowdsaleCloseTimerFor","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"openTimerElapsed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"sendProceedsTo","type":"address"},{"name":"sendTokensTo","type":"address"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"time","type":"uint256"}],"name":"CrowdsaleOpen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"time","type":"uint256"},{"indexed":false,"name":"etherAmount","type":"uint256"},{"indexed":false,"name":"from","type":"address"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"time","type":"uint256"}],"name":"CrowdsaleClose","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newDecimals","type":"uint8"}],"name":"DecimalChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

606060405260006007556000600855341561001657fe5b6040516040806113258339810160405280516020909101515b5b60038054600160a060020a03191633600160a060020a03161790555b60048054600160a060020a031916600160a060020a03848116919091179091556003805460a060020a60ff0219167412000000000000000000000000000000000000000017905569010f0cf064dd592000006000818155918316825260016020526040909120556006805461ffff191690556305f5e1006005555b50505b61124c806100d96000396000f300606060405236156101855763ffffffff60e060020a6000350416630118e68681146101d057806306fdde03146101f4578063095ea7b3146102845780630d051c52146102a557806317ffc320146102b757806318160ddd146102d55780631f4425f3146102f757806323b872dd1461030957806328ef6f40146103305780632aed7f3f14610342578063313ce56714610360578063346fc0dd146103865780634e15dfe9146103a85780635da24f90146103ca5780636d6e2710146103ec5780636f8b44b0146103fe57806370a082311461041357806379d220ae146104415780637a1395aa1461045657806380f4531f1461046e5780638490d598146103a85780638da5cb5b146104b457806392f351f9146104e057806395d89b4114610502578063983c0a01146105925780639f727c27146105a4578063a9059cbb146105b6578063c0ee0b8a146105d7578063dd3260fc14610605578063dd62ed3e14610617578063e330a7371461064b578063ea66363114610660578063f2fde38b14610684575b6101ce5b6101916106a2565b6101996106e6565b600654610100900460ff16156101af5760006000fd5b60065460ff1615156101c15760006000fd5b6101ca3361072c565b5b5b565b005b34156101d857fe5b6101e0610882565b604080519115158252519081900360200190f35b34156101fc57fe5b6102046108c3565b60408051602080825283518183015283519192839290830191850190808383821561024a575b80518252602083111561024a57601f19909201916020918201910161022a565b505050905090810190601f1680156102765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561028c57fe5b6101ce600160a060020a03600435166024356108f0565b005b34156102ad57fe5b6101ce610990565b005b34156102bf57fe5b6101ce600160a060020a03600435166109d4565b005b34156102dd57fe5b6102e5610ad9565b60408051918252519081900360200190f35b34156102ff57fe5b6101ce6106e6565b005b341561031157fe5b6101ce600160a060020a0360043581169060243516604435610adf565b005b341561033857fe5b6101ce610bf1565b005b341561034a57fe5b6101ce600160a060020a0360043516610c5e565b005b341561036857fe5b610370610ce2565b6040805160ff9092168252519081900360200190f35b341561038e57fe5b6102e5610cf2565b60408051918252519081900360200190f35b34156103b057fe5b6102e5610cf8565b60408051918252519081900360200190f35b34156103d257fe5b6102e5610cfe565b60408051918252519081900360200190f35b34156103f457fe5b6101ce610d04565b005b341561040657fe5b6101ce600435610d43565b005b341561041b57fe5b6102e5600160a060020a0360043516610d83565b60408051918252519081900360200190f35b341561044957fe5b6101ce600435610da2565b005b341561045e57fe5b6101ce60ff60043516610de6565b005b341561047657fe5b6101e0610e83565b604080519115158252519081900360200190f35b34156103b057fe5b6102e5610cf8565b60408051918252519081900360200190f35b34156104bc57fe5b6104c4610ea5565b60408051600160a060020a039092168252519081900360200190f35b34156104e857fe5b6102e5610eb4565b60408051918252519081900360200190f35b341561050a57fe5b610204610eba565b60408051602080825283518183015283519192839290830191850190808383821561024a575b80518252602083111561024a57601f19909201916020918201910161022a565b505050905090810190601f1680156102765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561059a57fe5b6101ce610eda565b005b34156105ac57fe5b6101ce610f68565b005b34156105be57fe5b6101ce600160a060020a0360043516602435610fba565b005b34156105df57fe5b6101ce60048035600160a060020a0316906024803591604435918201910135611076565b005b341561060d57fe5b6101ce6106a2565b005b341561061f57fe5b6102e5600160a060020a0360043581169060243516611082565b60408051918252519081900360200190f35b341561065357fe5b6101ce6004356110af565b005b341561066857fe5b6101e06110f8565b604080519115158252519081900360200190f35b341561068c57fe5b6101ce600160a060020a0360043516611114565b005b6106aa6110f8565b156101ca576006805460ff1916600117905560006007556040805142815290516000805160206111e18339815191529181900360200190a15b5b565b6106ee610e83565b156101ca576006805461ff00191661010017905560006008556040805142815290516000805160206112018339815191529181900360200190a15b5b565b600060006107386106a2565b6107406106e6565b600654610100900460ff16156107565760006000fd5b60065460ff1615156107685760006000fd5b3415156107755760006000fd5b6107873461138863ffffffff61116016565b60005490925061079d908363ffffffff61118f16565b905060055461138801670de0b6b3a7640000028111156107bd5760006000fd5b6000818155600160a060020a0384168152600160205260409020546107e8908363ffffffff61118f16565b600160a060020a038416600081815260016020908152604091829020939093558051428152349381019390935282810191909152517fd240e127ddfc99c27bdd1c45b264d1954a1e2bdb17a4c37e81586fd1412882619181900360600190a1600454604051600160a060020a03909116903480156108fc02916000818181858888f19350505050151561087b5760006000fd5b5b5b505050565b60065460009060ff168061089957506108996110f8565b5b80156108bd5750600654610100900460ff16806108ba57506108ba610e83565b5b155b90505b90565b6040805180820190915260108152608160020a6f26b0b1b937bb32b939b2902a37b5b2b702602082015281565b80158015906109235750600160a060020a0333811660009081526002602090815260408083209386168352929052205415155b1561092e5760006000fd5b600160a060020a03338116600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35b5050565b60035433600160a060020a039081169116146109ac5760006000fd5b6109b46106e6565b600654610100900460ff16156109ca5760006000fd5b60006008555b5b5b565b600354600090819033600160a060020a039081169116146109f55760006000fd5b82915081600160a060020a03166370a08231306000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b1515610a5857fe5b6102c65a03f11515610a6657fe5b505060408051805160035460e060020a63a9059cbb028352600160a060020a039081166004840152602483018290529251909450918516925063a9059cbb91604480830192600092919082900301818387803b1515610ac157fe5b6102c65a03f11515610acf57fe5b5050505b5b505050565b60005481565b600060606064361015610af25760006000fd5b600160a060020a038086166000908152600260209081526040808320338516845282528083205493881683526001909152902054909250610b39908463ffffffff61118f16565b600160a060020a038086166000908152600160205260408082209390935590871681522054610b6e908463ffffffff6111a916565b600160a060020a038616600090815260016020526040902055610b97828463ffffffff6111a916565b600160a060020a038087166000818152600260209081526040808320338616845282529182902094909455805187815290519288169391926000805160206111c1833981519152929181900390910190a35b5b5050505050565b60035433600160a060020a03908116911614610c0d5760006000fd5b610c156106a2565b60065460ff1615610c265760006000fd5b6006805460ff1916600117905560006007556040805142815290516000805160206111e18339815191529181900360200190a15b5b5b565b60035460009033600160a060020a03908116911614610c7d5760006000fd5b506003546040805160e060020a63f2fde38b028152600160a060020a0392831660048201529051839283169163f2fde38b91602480830192600092919082900301818387803b1515610ccb57fe5b6102c65a03f11515610be957fe5b5050505b5b5050565b60035460a060020a900460ff1681565b60055481565b61138881565b60085481565b60035433600160a060020a03908116911614610d205760006000fd5b610d286106a2565b60065460ff1615610d395760006000fd5b60006007555b5b5b565b60035433600160a060020a03908116911614610d5f5760006000fd5b610d676106a2565b60065460ff1615610d785760006000fd5b60058190555b5b5b50565b600160a060020a0381166000908152600160205260409020545b919050565b60035433600160a060020a03908116911614610dbe5760006000fd5b610dc66106a2565b60065460ff1615610dd75760006000fd5b42603c8202016007555b5b5b50565b60035433600160a060020a03908116911614610e025760006000fd5b610e0a6106e6565b600654610100900460ff161515610e215760006000fd5b6003805460ff80841660a060020a90810260a060020a60ff02199093169290921792839055604080519290930416815290517fed6150ec960548590c920ded6ef554ec9e451dd7b4c85f62fb3760812cd72cf19181900360200190a15b5b5b50565b60006008546000141580156108bd575060085442115b90505b90565b61138881565b600354600160a060020a031681565b60075481565b604080518082019091526003815260e960020a6226a92b02602082015281565b60035433600160a060020a03908116911614610ef65760006000fd5b610efe6106a2565b610f066106e6565b600654610100900460ff1615610f1c5760006000fd5b60065460ff161515610f2e5760006000fd5b6006805461ff00191661010017905560006008556040805142815290516000805160206112018339815191529181900360200190a15b5b5b565b60035433600160a060020a03908116911614610f845760006000fd5b600354604051600160a060020a039182169130163180156108fc02916000818181858888f1935050505015156101ca57fe5b5b5b565b60406044361015610fcb5760006000fd5b600160a060020a033316600090815260016020526040902054610ff4908363ffffffff6111a916565b600160a060020a033381166000908152600160205260408082209390935590851681522054611029908363ffffffff61118f16565b600160a060020a038085166000818152600160209081526040918290209490945580518681529051919333909316926000805160206111c183398151915292918290030190a35b5b505050565b60006000fd5b50505050565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60035433600160a060020a039081169116146110cb5760006000fd5b6110d36106e6565b600654610100900460ff16156110e95760006000fd5b42603c8202016008555b5b5b50565b60006007546000141580156108bd575060075442115b90505b90565b60035433600160a060020a039081169116146111305760006000fd5b600160a060020a03811615610d7e5760038054600160a060020a031916600160a060020a0383161790555b5b5b50565b600082820283158061117c575082848281151561117957fe5b04145b151561118457fe5b8091505b5092915050565b60008282018381101561118457fe5b8091505b5092915050565b6000828211156111b557fe5b508082035b929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3eff82aa3c8d92a1044b702b0c9718bd99d353a4a85a215bdb4fe6c6a04b5f541e099424d4740b41446c45fa894e3dda8489b8ef8df8a37f8035f83053ed26485c1a165627a7a72305820a1d08cff3a53f7480b65b490dddab528eb3bafbfea76c8a1e26aa85bd6b3655100290000000000000000000000002fe5bdc68d73b1f570b97422021a0c9cdccae79f000000000000000000000000368651f6c2b3a7174ac30a5a062b65f2342fb6f1

Deployed Bytecode

0x606060405236156101855763ffffffff60e060020a6000350416630118e68681146101d057806306fdde03146101f4578063095ea7b3146102845780630d051c52146102a557806317ffc320146102b757806318160ddd146102d55780631f4425f3146102f757806323b872dd1461030957806328ef6f40146103305780632aed7f3f14610342578063313ce56714610360578063346fc0dd146103865780634e15dfe9146103a85780635da24f90146103ca5780636d6e2710146103ec5780636f8b44b0146103fe57806370a082311461041357806379d220ae146104415780637a1395aa1461045657806380f4531f1461046e5780638490d598146103a85780638da5cb5b146104b457806392f351f9146104e057806395d89b4114610502578063983c0a01146105925780639f727c27146105a4578063a9059cbb146105b6578063c0ee0b8a146105d7578063dd3260fc14610605578063dd62ed3e14610617578063e330a7371461064b578063ea66363114610660578063f2fde38b14610684575b6101ce5b6101916106a2565b6101996106e6565b600654610100900460ff16156101af5760006000fd5b60065460ff1615156101c15760006000fd5b6101ca3361072c565b5b5b565b005b34156101d857fe5b6101e0610882565b604080519115158252519081900360200190f35b34156101fc57fe5b6102046108c3565b60408051602080825283518183015283519192839290830191850190808383821561024a575b80518252602083111561024a57601f19909201916020918201910161022a565b505050905090810190601f1680156102765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561028c57fe5b6101ce600160a060020a03600435166024356108f0565b005b34156102ad57fe5b6101ce610990565b005b34156102bf57fe5b6101ce600160a060020a03600435166109d4565b005b34156102dd57fe5b6102e5610ad9565b60408051918252519081900360200190f35b34156102ff57fe5b6101ce6106e6565b005b341561031157fe5b6101ce600160a060020a0360043581169060243516604435610adf565b005b341561033857fe5b6101ce610bf1565b005b341561034a57fe5b6101ce600160a060020a0360043516610c5e565b005b341561036857fe5b610370610ce2565b6040805160ff9092168252519081900360200190f35b341561038e57fe5b6102e5610cf2565b60408051918252519081900360200190f35b34156103b057fe5b6102e5610cf8565b60408051918252519081900360200190f35b34156103d257fe5b6102e5610cfe565b60408051918252519081900360200190f35b34156103f457fe5b6101ce610d04565b005b341561040657fe5b6101ce600435610d43565b005b341561041b57fe5b6102e5600160a060020a0360043516610d83565b60408051918252519081900360200190f35b341561044957fe5b6101ce600435610da2565b005b341561045e57fe5b6101ce60ff60043516610de6565b005b341561047657fe5b6101e0610e83565b604080519115158252519081900360200190f35b34156103b057fe5b6102e5610cf8565b60408051918252519081900360200190f35b34156104bc57fe5b6104c4610ea5565b60408051600160a060020a039092168252519081900360200190f35b34156104e857fe5b6102e5610eb4565b60408051918252519081900360200190f35b341561050a57fe5b610204610eba565b60408051602080825283518183015283519192839290830191850190808383821561024a575b80518252602083111561024a57601f19909201916020918201910161022a565b505050905090810190601f1680156102765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561059a57fe5b6101ce610eda565b005b34156105ac57fe5b6101ce610f68565b005b34156105be57fe5b6101ce600160a060020a0360043516602435610fba565b005b34156105df57fe5b6101ce60048035600160a060020a0316906024803591604435918201910135611076565b005b341561060d57fe5b6101ce6106a2565b005b341561061f57fe5b6102e5600160a060020a0360043581169060243516611082565b60408051918252519081900360200190f35b341561065357fe5b6101ce6004356110af565b005b341561066857fe5b6101e06110f8565b604080519115158252519081900360200190f35b341561068c57fe5b6101ce600160a060020a0360043516611114565b005b6106aa6110f8565b156101ca576006805460ff1916600117905560006007556040805142815290516000805160206111e18339815191529181900360200190a15b5b565b6106ee610e83565b156101ca576006805461ff00191661010017905560006008556040805142815290516000805160206112018339815191529181900360200190a15b5b565b600060006107386106a2565b6107406106e6565b600654610100900460ff16156107565760006000fd5b60065460ff1615156107685760006000fd5b3415156107755760006000fd5b6107873461138863ffffffff61116016565b60005490925061079d908363ffffffff61118f16565b905060055461138801670de0b6b3a7640000028111156107bd5760006000fd5b6000818155600160a060020a0384168152600160205260409020546107e8908363ffffffff61118f16565b600160a060020a038416600081815260016020908152604091829020939093558051428152349381019390935282810191909152517fd240e127ddfc99c27bdd1c45b264d1954a1e2bdb17a4c37e81586fd1412882619181900360600190a1600454604051600160a060020a03909116903480156108fc02916000818181858888f19350505050151561087b5760006000fd5b5b5b505050565b60065460009060ff168061089957506108996110f8565b5b80156108bd5750600654610100900460ff16806108ba57506108ba610e83565b5b155b90505b90565b6040805180820190915260108152608160020a6f26b0b1b937bb32b939b2902a37b5b2b702602082015281565b80158015906109235750600160a060020a0333811660009081526002602090815260408083209386168352929052205415155b1561092e5760006000fd5b600160a060020a03338116600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35b5050565b60035433600160a060020a039081169116146109ac5760006000fd5b6109b46106e6565b600654610100900460ff16156109ca5760006000fd5b60006008555b5b5b565b600354600090819033600160a060020a039081169116146109f55760006000fd5b82915081600160a060020a03166370a08231306000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b1515610a5857fe5b6102c65a03f11515610a6657fe5b505060408051805160035460e060020a63a9059cbb028352600160a060020a039081166004840152602483018290529251909450918516925063a9059cbb91604480830192600092919082900301818387803b1515610ac157fe5b6102c65a03f11515610acf57fe5b5050505b5b505050565b60005481565b600060606064361015610af25760006000fd5b600160a060020a038086166000908152600260209081526040808320338516845282528083205493881683526001909152902054909250610b39908463ffffffff61118f16565b600160a060020a038086166000908152600160205260408082209390935590871681522054610b6e908463ffffffff6111a916565b600160a060020a038616600090815260016020526040902055610b97828463ffffffff6111a916565b600160a060020a038087166000818152600260209081526040808320338616845282529182902094909455805187815290519288169391926000805160206111c1833981519152929181900390910190a35b5b5050505050565b60035433600160a060020a03908116911614610c0d5760006000fd5b610c156106a2565b60065460ff1615610c265760006000fd5b6006805460ff1916600117905560006007556040805142815290516000805160206111e18339815191529181900360200190a15b5b5b565b60035460009033600160a060020a03908116911614610c7d5760006000fd5b506003546040805160e060020a63f2fde38b028152600160a060020a0392831660048201529051839283169163f2fde38b91602480830192600092919082900301818387803b1515610ccb57fe5b6102c65a03f11515610be957fe5b5050505b5b5050565b60035460a060020a900460ff1681565b60055481565b61138881565b60085481565b60035433600160a060020a03908116911614610d205760006000fd5b610d286106a2565b60065460ff1615610d395760006000fd5b60006007555b5b5b565b60035433600160a060020a03908116911614610d5f5760006000fd5b610d676106a2565b60065460ff1615610d785760006000fd5b60058190555b5b5b50565b600160a060020a0381166000908152600160205260409020545b919050565b60035433600160a060020a03908116911614610dbe5760006000fd5b610dc66106a2565b60065460ff1615610dd75760006000fd5b42603c8202016007555b5b5b50565b60035433600160a060020a03908116911614610e025760006000fd5b610e0a6106e6565b600654610100900460ff161515610e215760006000fd5b6003805460ff80841660a060020a90810260a060020a60ff02199093169290921792839055604080519290930416815290517fed6150ec960548590c920ded6ef554ec9e451dd7b4c85f62fb3760812cd72cf19181900360200190a15b5b5b50565b60006008546000141580156108bd575060085442115b90505b90565b61138881565b600354600160a060020a031681565b60075481565b604080518082019091526003815260e960020a6226a92b02602082015281565b60035433600160a060020a03908116911614610ef65760006000fd5b610efe6106a2565b610f066106e6565b600654610100900460ff1615610f1c5760006000fd5b60065460ff161515610f2e5760006000fd5b6006805461ff00191661010017905560006008556040805142815290516000805160206112018339815191529181900360200190a15b5b5b565b60035433600160a060020a03908116911614610f845760006000fd5b600354604051600160a060020a039182169130163180156108fc02916000818181858888f1935050505015156101ca57fe5b5b5b565b60406044361015610fcb5760006000fd5b600160a060020a033316600090815260016020526040902054610ff4908363ffffffff6111a916565b600160a060020a033381166000908152600160205260408082209390935590851681522054611029908363ffffffff61118f16565b600160a060020a038085166000818152600160209081526040918290209490945580518681529051919333909316926000805160206111c183398151915292918290030190a35b5b505050565b60006000fd5b50505050565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60035433600160a060020a039081169116146110cb5760006000fd5b6110d36106e6565b600654610100900460ff16156110e95760006000fd5b42603c8202016008555b5b5b50565b60006007546000141580156108bd575060075442115b90505b90565b60035433600160a060020a039081169116146111305760006000fd5b600160a060020a03811615610d7e5760038054600160a060020a031916600160a060020a0383161790555b5b5b50565b600082820283158061117c575082848281151561117957fe5b04145b151561118457fe5b8091505b5092915050565b60008282018381101561118457fe5b8091505b5092915050565b6000828211156111b557fe5b508082035b929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3eff82aa3c8d92a1044b702b0c9718bd99d353a4a85a215bdb4fe6c6a04b5f541e099424d4740b41446c45fa894e3dda8489b8ef8df8a37f8035f83053ed26485c1a165627a7a72305820a1d08cff3a53f7480b65b490dddab528eb3bafbfea76c8a1e26aa85bd6b365510029

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

0000000000000000000000002fe5bdc68d73b1f570b97422021a0c9cdccae79f000000000000000000000000368651f6c2b3a7174ac30a5a062b65f2342fb6f1

-----Decoded View---------------
Arg [0] : sendProceedsTo (address): 0x2FE5BdC68D73B1f570b97422021A0c9CdCCae79f
Arg [1] : sendTokensTo (address): 0x368651F6c2b3a7174ac30A5A062b65F2342Fb6F1

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002fe5bdc68d73b1f570b97422021a0c9cdccae79f
Arg [1] : 000000000000000000000000368651f6c2b3a7174ac30a5a062b65f2342fb6f1


Swarm Source

bzzr://a1d08cff3a53f7480b65b490dddab528eb3bafbfea76c8a1e26aa85bd6b36551
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.