ETH Price: $2,731.49 (-8.61%)
Gas: 0.53 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Burn Unsold Toke...84029352019-08-22 23:06:112352 days ago1566515171IN
Copytrack: Token Sale
0 ETH0.0010807141
Finalize84029302019-08-22 23:04:442352 days ago1566515084IN
Copytrack: Token Sale
0 ETH0.0008998241
Transfer Ownersh...84029282019-08-22 23:03:592352 days ago1566515039IN
Copytrack: Token Sale
0 ETH0.000969441
Transfer72497712019-02-21 17:52:182534 days ago1550771538IN
Copytrack: Token Sale
0.05 ETH0.000085584
Transfer Ownersh...62798552018-09-06 2:55:042702 days ago1536202504IN
Copytrack: Token Sale
0 ETH0.0009778541
Connect Token58585222018-06-26 16:59:012774 days ago1530032341IN
Copytrack: Token Sale
0 ETH0.0009298841
Transfer Ownersh...58159052018-06-19 9:07:052781 days ago1529399225IN
Copytrack: Token Sale
0 ETH0.0009804741
Transfer56522702018-05-21 14:22:072810 days ago1526912527IN
Copytrack: Token Sale
0.99 ETH0.0010698550
Transfer54281172018-04-12 15:55:372849 days ago1523548537IN
Copytrack: Token Sale
0.151718 ETH0.0012838260
Transfer51928212018-03-04 3:59:372888 days ago1520135977IN
Copytrack: Token Sale
0.07 ETH0.0012838260
Transfer51928172018-03-04 3:58:332888 days ago1520135913IN
Copytrack: Token Sale
0.07 ETH0.0012838260
Transfer51928172018-03-04 3:58:332888 days ago1520135913IN
Copytrack: Token Sale
0.07 ETH0.0012838260
Transfer51928042018-03-04 3:55:562888 days ago1520135756IN
Copytrack: Token Sale
0.07 ETH0.0012838260
Transfer51927512018-03-04 3:42:362888 days ago1520134956IN
Copytrack: Token Sale
0.07 ETH0.0012838260
Transfer51927352018-03-04 3:37:552888 days ago1520134675IN
Copytrack: Token Sale
0.07 ETH0.0012838260
Transfer51927222018-03-04 3:34:572888 days ago1520134497IN
Copytrack: Token Sale
0.07 ETH0.0012838260
Transfer51926992018-03-04 3:27:012888 days ago1520134021IN
Copytrack: Token Sale
0.07 ETH0.0012838260
Transfer51926312018-03-04 3:11:242888 days ago1520133084IN
Copytrack: Token Sale
0.07 ETH0.0012838260
Transfer51926092018-03-04 3:05:502888 days ago1520132750IN
Copytrack: Token Sale
0.09 ETH0.0012838260
Transfer51925582018-03-04 2:52:512888 days ago1520131971IN
Copytrack: Token Sale
0.1 ETH0.001412266
Transfer51368872018-02-22 15:38:392898 days ago1519313919IN
Copytrack: Token Sale
0.04628487 ETH0.0004279420
Transfer51272172018-02-21 0:03:312900 days ago1519171411IN
Copytrack: Token Sale
0.08 ETH0.0012838260
Transfer51271832018-02-20 23:54:502900 days ago1519170890IN
Copytrack: Token Sale
0.1 ETH0.0012838260
Transfer51257072018-02-20 17:44:312900 days ago1519148671IN
Copytrack: Token Sale
0.15 ETH0.0012838260
Transfer51181892018-02-19 10:50:172901 days ago1519037417IN
Copytrack: Token Sale
0.1 ETH0.0012838260
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer50617972018-02-09 23:59:292911 days ago1518220769
Copytrack: Token Sale
1 ETH
Transfer50617972018-02-09 23:59:292911 days ago1518220769
Copytrack: Token Sale
1 ETH
Transfer50617932018-02-09 23:58:512911 days ago1518220731
Copytrack: Token Sale
0.89510606 ETH
Transfer50617932018-02-09 23:58:512911 days ago1518220731
Copytrack: Token Sale
9.9 ETH
Transfer50617842018-02-09 23:57:392911 days ago1518220659
Copytrack: Token Sale
0.1 ETH
Transfer50617762018-02-09 23:55:542911 days ago1518220554
Copytrack: Token Sale
2 ETH
Transfer50617722018-02-09 23:55:122911 days ago1518220512
Copytrack: Token Sale
0.27 ETH
Transfer50617712018-02-09 23:54:542911 days ago1518220494
Copytrack: Token Sale
0.3 ETH
Transfer50617712018-02-09 23:54:542911 days ago1518220494
Copytrack: Token Sale
0.1 ETH
Transfer50617712018-02-09 23:54:542911 days ago1518220494
Copytrack: Token Sale
0.1 ETH
Transfer50617702018-02-09 23:54:172911 days ago1518220457
Copytrack: Token Sale
0.995 ETH
Transfer50617702018-02-09 23:54:172911 days ago1518220457
Copytrack: Token Sale
0.1 ETH
Transfer50617672018-02-09 23:53:492911 days ago1518220429
Copytrack: Token Sale
0.491 ETH
Transfer50617672018-02-09 23:53:492911 days ago1518220429
Copytrack: Token Sale
0.1 ETH
Transfer50617662018-02-09 23:53:322911 days ago1518220412
Copytrack: Token Sale
0.5 ETH
Transfer50617652018-02-09 23:53:232911 days ago1518220403
Copytrack: Token Sale
0.1 ETH
Transfer50617642018-02-09 23:53:042911 days ago1518220384
Copytrack: Token Sale
2 ETH
Transfer50617572018-02-09 23:51:502911 days ago1518220310
Copytrack: Token Sale
0.57713872 ETH
Transfer50617562018-02-09 23:51:382911 days ago1518220298
Copytrack: Token Sale
1.68 ETH
Transfer50617552018-02-09 23:51:302911 days ago1518220290
Copytrack: Token Sale
0.1 ETH
Transfer50617542018-02-09 23:51:262911 days ago1518220286
Copytrack: Token Sale
0.5 ETH
Transfer50617522018-02-09 23:50:202911 days ago1518220220
Copytrack: Token Sale
0.41 ETH
Transfer50617512018-02-09 23:49:432911 days ago1518220183
Copytrack: Token Sale
0.14958 ETH
Transfer50617502018-02-09 23:49:272911 days ago1518220167
Copytrack: Token Sale
0.5563278 ETH
Transfer50617482018-02-09 23:49:082911 days ago1518220148
Copytrack: Token Sale
3.036 ETH
View All Internal Transactions
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:
TokenSale

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2017-12-19
*/

pragma solidity ^0.4.18;

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

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

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

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

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

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

  mapping(address => uint256) balances;

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

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

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

}

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

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

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


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

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

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

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

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

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

}

//
// CPYToken is a standard ERC20 token with additional functionality:
// - tokenSaleContract receives the whole balance for distribution
// - Tokens are only transferable by the tokenSaleContract until finalization
// - Token holders can burn their tokens after finalization
//
contract Token is StandardToken {

    string  public constant name   = "COPYTRACK Token";
    string  public constant symbol = "CPY";

    uint8 public constant   decimals = 18;

    uint256 constant EXA       = 10 ** 18;
    uint256 public totalSupply = 100 * 10 ** 6 * EXA;

    bool public finalized = false;

    address public tokenSaleContract;

    //
    // EVENTS
    //
    event Finalized();

    event Burnt(address indexed _from, uint256 _amount);


    // Initialize the token with the tokenSaleContract and transfer the whole balance to it
    function Token(address _tokenSaleContract)
        public
    {
        // Make sure address is set
        require(_tokenSaleContract != 0);

        balances[_tokenSaleContract] = totalSupply;

        tokenSaleContract = _tokenSaleContract;
    }


    // Implementation of the standard transfer method that takes the finalize flag into account
    function transfer(address _to, uint256 _value)
        public
        returns (bool success)
    {
        checkTransferAllowed(msg.sender);

        return super.transfer(_to, _value);
    }


    // Implementation of the standard transferFrom method that takes into account the finalize flag
    function transferFrom(address _from, address _to, uint256 _value)
        public
        returns (bool success)
    {
        checkTransferAllowed(msg.sender);

        return super.transferFrom(_from, _to, _value);
    }


    function checkTransferAllowed(address _sender)
        private
        view
    {
        if (finalized) {
            // Every token holder should be allowed to transfer tokens once token was finalized
            return;
        }

        // Only allow tokenSaleContract to transfer tokens before finalization
        require(_sender == tokenSaleContract);
    }


    // Finalize method marks the point where token transfers are finally allowed for everybody
    function finalize()
        external
        returns (bool success)
    {
        require(!finalized);
        require(msg.sender == tokenSaleContract);

        finalized = true;

        Finalized();

        return true;
    }


    // Implement a burn function to permit msg.sender to reduce its balance which also reduces totalSupply
    function burn(uint256 _value)
        public
        returns (bool success)
    {
        require(finalized);
        require(_value <= balances[msg.sender]);

        balances[msg.sender] = balances[msg.sender].sub(_value);
        totalSupply = totalSupply.sub(_value);

        Burnt(msg.sender, _value);

        return true;
    }
}

contract TokenSaleConfig  {
    uint public constant EXA = 10 ** 18;

    uint256 public constant PUBLIC_START_TIME         = 1515542400; //Wed, 10 Jan 2018 00:00:00 +0000
    uint256 public constant END_TIME                  = 1518220800; //Sat, 10 Feb 2018 00:00:00 +0000
    uint256 public constant CONTRIBUTION_MIN          = 0.1 ether;
    uint256 public constant CONTRIBUTION_MAX          = 2500.0 ether;

    uint256 public constant COMPANY_ALLOCATION        = 40 * 10 ** 6 * EXA; //40 million;

    Tranche[4] public tranches;

    struct Tranche {
        // How long this tranche will be active
        uint untilToken;

        // How many tokens per ether you will get while this tranche is active
        uint tokensPerEther;
    }

    function TokenSaleConfig()
        public
    {
        tranches[0] = Tranche({untilToken : 5000000 * EXA, tokensPerEther : 1554});
        tranches[1] = Tranche({untilToken : 10000000 * EXA, tokensPerEther : 1178});
        tranches[2] = Tranche({untilToken : 20000000 * EXA, tokensPerEther : 1000});
        tranches[3] = Tranche({untilToken : 60000000, tokensPerEther : 740});
    }
}

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


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() 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 transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

contract TokenSale is TokenSaleConfig, Ownable {
    using SafeMath for uint;

    Token  public  tokenContract;

    // We keep track of whether the sale has been finalized, at which point
    // no additional contributions will be permitted.
    bool public finalized = false;

    // lookup for max wei amount per user allowed
    mapping (address => uint256) public contributors;

    // the total amount of wei raised
    uint256 public totalWeiRaised = 0;

    // the total amount of token raised
    uint256 public totalTokenSold = 0;

    // address where funds are collected
    address public fundingWalletAddress;

    // address which manages the whitelist (KYC)
    mapping (address => bool) public whitelistOperators;

    // lookup addresses for whitelist
    mapping (address => bool) public whitelist;


    // early bird investments
    address[] public earlyBirds;

    mapping (address => uint256) public earlyBirdInvestments;


    //
    // MODIFIERS
    //

    // Throws if purchase would exceed the min max contribution.
    // @param _contribute address
    // @param _weiAmount the amount intended to spend
    modifier withinContributionLimits(address _contributorAddress, uint256 _weiAmount) {
        uint256 totalContributionAmount = contributors[_contributorAddress].add(_weiAmount);
        require(_weiAmount >= CONTRIBUTION_MIN);
        require(totalContributionAmount <= CONTRIBUTION_MAX);
        _;
    }

    // Throws if called by any account not on the whitelist.
    // @param _address Address which should execute the function
    modifier onlyWhitelisted(address _address) {
        require(whitelist[_address] == true);
        _;
    }

    // Throws if called by any account not on the whitelistOperators list
    modifier onlyWhitelistOperator()
    {
        require(whitelistOperators[msg.sender] == true);
        _;
    }

    //Throws if sale is finalized or token sale end time has been reached
    modifier onlyDuringSale() {
        require(finalized == false);
        require(currentTime() <= END_TIME);
        _;
    }

    //Throws if sale is finalized
    modifier onlyAfterFinalized() {
        require(finalized);
        _;
    }



    //
    // EVENTS
    //
    event LogWhitelistUpdated(address indexed _account);

    event LogTokensPurchased(address indexed _account, uint256 _cost, uint256 _tokens, uint256 _totalTokenSold);

    event UnsoldTokensBurnt(uint256 _amount);

    event Finalized();

    // Initialize a new TokenSale contract
    // @param _fundingWalletAddress Address which all ether will be forwarded to
    function TokenSale(address _fundingWalletAddress)
        public
    {
        //make sure _fundingWalletAddress is set
        require(_fundingWalletAddress != 0);

        fundingWalletAddress = _fundingWalletAddress;
    }

    // Connect a token to the tokenSale
    // @param _fundingWalletAddress Address which all ether will be forwarded to
    function connectToken(Token _tokenContract)
        external
        onlyOwner
    {
        require(totalTokenSold == 0);
        require(tokenContract == address(0));

        //make sure token is untouched
        require(_tokenContract.balanceOf(address(this)) == _tokenContract.totalSupply());

        tokenContract = _tokenContract;

        // sent tokens to company vault
        tokenContract.transfer(fundingWalletAddress, COMPANY_ALLOCATION);
        processEarlyBirds();
    }

    function()
        external
        payable
    {
        uint256 cost = buyTokens(msg.sender, msg.value);

        // forward contribution to the fundingWalletAddress
        fundingWalletAddress.transfer(cost);
    }

    // execution of the actual token purchase
    function buyTokens(address contributorAddress, uint256 weiAmount)
        onlyDuringSale
        onlyWhitelisted(contributorAddress)
        withinContributionLimits(contributorAddress, weiAmount)
        private
    returns (uint256 costs)
    {
        assert(tokenContract != address(0));

        uint256 tokensLeft = getTokensLeft();

        // make sure we still have tokens left for sale
        require(tokensLeft > 0);

        uint256 tokenAmount = calculateTokenAmount(weiAmount);
        uint256 cost = weiAmount;
        uint256 refund = 0;

        // we sell till we dont have anything left
        if (tokenAmount > tokensLeft) {
            tokenAmount = tokensLeft;

            // calculate actual cost for partial amount of tokens.
            cost = tokenAmount / getCurrentTokensPerEther();

            // calculate refund for contributor.
            refund = weiAmount.sub(cost);
        }

        // transfer the tokens to the contributor address
        tokenContract.transfer(contributorAddress, tokenAmount);

        // keep track of the amount bought by the contributor
        contributors[contributorAddress] = contributors[contributorAddress].add(cost);


        //if we got a refund process it now
        if (refund > 0) {
            // transfer back everything that exceeded the amount of tokens left
            contributorAddress.transfer(refund);
        }

        // increase stats
        totalWeiRaised += cost;
        totalTokenSold += tokenAmount;

        LogTokensPurchased(contributorAddress, cost, tokenAmount, totalTokenSold);

        // If all tokens available for sale have been sold out, finalize the sale automatically.
        if (tokensLeft.sub(tokenAmount) == 0) {
            finalizeInternal();
        }


        //return the actual cost of the sale
        return cost;
    }

    // ask the connected token how many tokens we have left 
    function getTokensLeft()
        public
        view
    returns (uint256 tokensLeft)
    {
        return tokenContract.balanceOf(this);
    }

    // calculate the current tokens per ether
    function getCurrentTokensPerEther()
        public
        view
    returns (uint256 tokensPerEther)
    {
        uint i;
        uint defaultTokensPerEther = tranches[tranches.length - 1].tokensPerEther;

        if (currentTime() >= PUBLIC_START_TIME) {
            return defaultTokensPerEther;
        }

        for (i = 0; i < tranches.length; i++) {
            if (totalTokenSold >= tranches[i].untilToken) {
                continue;
            }

            //sell until the contract has nor more tokens
            return tranches[i].tokensPerEther;
        }

        return defaultTokensPerEther;
    }

    // calculate the token amount for a give weiAmount
    function calculateTokenAmount(uint256 weiAmount)
        public
        view
    returns (uint256 tokens)
    {
        return weiAmount * getCurrentTokensPerEther();
    }

    //
    // WHITELIST
    //

    // add a new whitelistOperator
    function addWhitelistOperator(address _address)
        public
        onlyOwner
    {
        whitelistOperators[_address] = true;
    }

    // remove a whitelistOperator
    function removeWhitelistOperator(address _address)
        public
        onlyOwner
    {
        require(whitelistOperators[_address]);

        delete whitelistOperators[_address];
    }


    // Allows whitelistOperators to add an account to the whitelist.
    // Only those accounts will be allowed to contribute during the sale.
    function addToWhitelist(address _address)
        public
        onlyWhitelistOperator
    {
        require(_address != address(0));

        whitelist[_address] = true;
        LogWhitelistUpdated(_address);
    }

    // Allows whitelistOperators to remove an account from the whitelist.
    function removeFromWhitelist(address _address)
        public
        onlyWhitelistOperator
    {
        require(_address != address(0));

        delete whitelist[_address];
    }

    //returns the current time, needed for tests
    function currentTime()
        public
        view
        returns (uint256 _currentTime)
    {
        return now;
    }


    // Allows the owner to finalize the sale.
    function finalize()
        external
        onlyOwner
        returns (bool)
    {
        //allow only after the defined end_time
        require(currentTime() > END_TIME);

        return finalizeInternal();
    }


    // The internal one will be called if tokens are sold out or
    // the end time for the sale is reached, in addition to being called
    // from the public version of finalize().
    function finalizeInternal() private returns (bool) {
        require(!finalized);

        finalized = true;

        Finalized();

        //also finalize the token contract
        tokenContract.finalize();

        return true;
    }

    // register an early bird investment
    function addEarlyBird(address _address, uint256 weiAmount)
        onlyOwner
        withinContributionLimits(_address, weiAmount)
        external
    {
        // only allowed as long as we dont have a connected token
        require(tokenContract == address(0));

        earlyBirds.push(_address);
        earlyBirdInvestments[_address] = weiAmount;

        // auto whitelist early bird;
        whitelist[_address] = true;
    }

    // transfer the tokens bought by the early birds before contract creation
    function processEarlyBirds()
        private
    {
        for (uint256 i = 0; i < earlyBirds.length; i++)
        {
            address earlyBirdAddress = earlyBirds[i];
            uint256 weiAmount = earlyBirdInvestments[earlyBirdAddress];

            buyTokens(earlyBirdAddress, weiAmount);
        }
    }


    // allows everyone to burn all unsold tokens in the sale contract after finalized.
    function burnUnsoldTokens()
        external
        onlyAfterFinalized
        returns (bool)
    {
        uint256 leftTokens = getTokensLeft();

        require(leftTokens > 0);

        // let'em burn
        require(tokenContract.burn(leftTokens));

        UnsoldTokensBurnt(leftTokens);

        return true;
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"earlyBirds","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"removeWhitelistOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTION_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"contributors","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tranches","outputs":[{"name":"untilToken","type":"uint256"},{"name":"tokensPerEther","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PUBLIC_START_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"weiAmount","type":"uint256"}],"name":"addEarlyBird","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"END_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalWeiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTokensPerEther","outputs":[{"name":"tokensPerEther","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EXA","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"addWhitelistOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"COMPANY_ALLOCATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistOperators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"removeFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"earlyBirdInvestments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"burnUnsoldTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"connectToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingWalletAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"weiAmount","type":"uint256"}],"name":"calculateTokenAmount","outputs":[{"name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokenSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTION_MIN","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentTime","outputs":[{"name":"_currentTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokensLeft","outputs":[{"name":"tokensLeft","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"addToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_fundingWalletAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_account","type":"address"}],"name":"LogWhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_account","type":"address"},{"indexed":false,"name":"_cost","type":"uint256"},{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_totalTokenSold","type":"uint256"}],"name":"LogTokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"UnsoldTokensBurnt","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60606040526009805460a060020a60ff02191690556000600b819055600c55341561002957600080fd5b60405160208061132c8339810160405280805191506040905080519081016040526a0422ca8b0a00a42500000081526106126020820152600081518155602082015160019091015550604080519081016040526a084595161401484a000000815261049a6020820152600281518155602082015160019091015550604080519081016040526a108b2a2c2802909400000081526103e8602082015260048151815560208201516001909101555060408051908101604052630393870081526102e4602082015260068151815560208201516001909101555060088054600160a060020a03338116600160a060020a0319909216919091179091558116151561013057600080fd5b600d8054600160a060020a031916600160a060020a03929092169190911790556111cd8061015f6000396000f3006060604052600436106101715763ffffffff60e060020a6000350416630428c6aa81146101b6578063159c18bc146101e85780631a2309f0146102095780631f6d49421461022e57806326c259621461024d578063297c41431461027b578063305006841461028e57806337ba682d146102b05780634bb278f3146102c357806353f4db01146102ea57806355a373d6146102fd5780635e402ae2146103105780636c749c26146103235780636ee18573146103365780637064f0af1461035557806383a4f2f5146103685780638ab1d681146103875780638da5cb5b146103a657806393bbafd1146103b9578063940bb344146103d857806399413b4e146103eb5780639b19251a1461040a5780639ce21f3c14610429578063a24bcf461461043c578063b3f05b9714610452578063b5f7f63614610465578063ba9bb82714610478578063d18e81b31461048b578063de5f98661461049e578063e43252d7146104b1578063f2fde38b146104d0575b600061017d33346104ef565b600d54909150600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156101b357600080fd5b50005b34156101c157600080fd5b6101cc6004356107ab565b604051600160a060020a03909116815260200160405180910390f35b34156101f357600080fd5b610207600160a060020a03600435166107d3565b005b341561021457600080fd5b61021c610836565b60405190815260200160405180910390f35b341561023957600080fd5b61021c600160a060020a0360043516610843565b341561025857600080fd5b610263600435610855565b60405191825260208201526040908101905180910390f35b341561028657600080fd5b61021c610874565b341561029957600080fd5b610207600160a060020a036004351660243561087c565b34156102bb57600080fd5b61021c610979565b34156102ce57600080fd5b6102d6610981565b604051901515815260200160405180910390f35b34156102f557600080fd5b61021c6109c4565b341561030857600080fd5b6101cc6109ca565b341561031b57600080fd5b61021c6109d9565b341561032e57600080fd5b61021c610a58565b341561034157600080fd5b610207600160a060020a0360043516610a64565b341561036057600080fd5b61021c610aa3565b341561037357600080fd5b6102d6600160a060020a0360043516610ab2565b341561039257600080fd5b610207600160a060020a0360043516610ac7565b34156103b157600080fd5b6101cc610b27565b34156103c457600080fd5b61021c600160a060020a0360043516610b36565b34156103e357600080fd5b6102d6610b48565b34156103f657600080fd5b610207600160a060020a0360043516610c2f565b341561041557600080fd5b6102d6600160a060020a0360043516610e07565b341561043457600080fd5b6101cc610e1c565b341561044757600080fd5b61021c600435610e2b565b341561045d57600080fd5b6102d6610e3d565b341561047057600080fd5b61021c610e4d565b341561048357600080fd5b61021c610e53565b341561049657600080fd5b61021c610e5f565b34156104a957600080fd5b61021c610e63565b34156104bc57600080fd5b610207600160a060020a0360043516610edd565b34156104db57600080fd5b610207600160a060020a0360043516610f6f565b600954600090819081908190819060a060020a900460ff161561051157600080fd5b635a7e360061051e610e5f565b111561052957600080fd5b600160a060020a0387166000908152600f6020526040902054879060ff16151560011461055557600080fd5b600160a060020a0388166000908152600a602052604081205489918991610582908363ffffffff61100a16565b905067016345785d8a000082101561059957600080fd5b68878678326eac9000008111156105af57600080fd5b600954600160a060020a031615156105c357fe5b6105cb610e63565b9750600088116105da57600080fd5b6105e38a610e2b565b9650899550600094508787111561061f578796506105ff6109d9565b8781151561060957fe5b04955061061c8a8763ffffffff61102016565b94505b600954600160a060020a031663a9059cbb8c8960006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561067e57600080fd5b6102c65a03f1151561068f57600080fd5b50505060405180515050600160a060020a038b166000908152600a60205260409020546106c2908763ffffffff61100a16565b600160a060020a038c166000908152600a602052604081209190915585111561071657600160a060020a038b1685156108fc0286604051600060405180830381858888f19350505050151561071657600080fd5b600b805487019055600c8054880190819055600160a060020a038c16907f1f3e1c8dd1ea65dd1302cbe3ef11178a614ac6f634819e13ce4e6326350d2a839088908a9060405180848152602001838152602001828152602001935050505060405180910390a261078c888863ffffffff61102016565b151561079c5761079a611032565b505b50939998505050505050505050565b60108054829081106107b957fe5b600091825260209091200154600160a060020a0316905081565b60085433600160a060020a039081169116146107ee57600080fd5b600160a060020a0381166000908152600e602052604090205460ff16151561081557600080fd5b600160a060020a03166000908152600e60205260409020805460ff19169055565b68878678326eac90000081565b600a6020526000908152604090205481565b6000816004811061086257fe5b60020201805460019091015490915082565b635a55578081565b60085433600160a060020a0390811691161461089757600080fd5b600160a060020a0382166000908152600a6020526040812054839183916108c4908363ffffffff61100a16565b905067016345785d8a00008210156108db57600080fd5b68878678326eac9000008111156108f157600080fd5b600954600160a060020a03161561090757600080fd5b60108054600181016109198382611168565b5060009182526020808320919091018054600160a060020a0390981673ffffffffffffffffffffffffffffffffffffffff199098168817905595815260118652604080822095909555600f9095525050509020805460ff19166001179055565b635a7e360081565b60085460009033600160a060020a0390811691161461099f57600080fd5b635a7e36006109ac610e5f565b116109b657600080fd5b6109be611032565b90505b90565b600b5481565b600954600160a060020a031681565b6007546000908190635a5557806109ee610e5f565b106109fb57809250610a53565b600091505b6004821015610a4f5760008260048110610a1657fe5b6002020154600c5410610a2857610a44565b60008260048110610a3557fe5b60020201600101549250610a53565b600190910190610a00565b8092505b505090565b670de0b6b3a764000081565b60085433600160a060020a03908116911614610a7f57600080fd5b600160a060020a03166000908152600e60205260409020805460ff19166001179055565b6a211654585005212800000081565b600e6020526000908152604090205460ff1681565b600160a060020a0333166000908152600e602052604090205460ff161515600114610af157600080fd5b600160a060020a0381161515610b0657600080fd5b600160a060020a03166000908152600f60205260409020805460ff19169055565b600854600160a060020a031681565b60116020526000908152604090205481565b600954600090819060a060020a900460ff161515610b6557600080fd5b610b6d610e63565b905060008111610b7c57600080fd5b600954600160a060020a03166342966c688260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610bcd57600080fd5b6102c65a03f11515610bde57600080fd5b505050604051805190501515610bf357600080fd5b7f8a18a804523143af3d2399b3fdf76bf116e01d31987f8e774d8f1282f013cb7e8160405190815260200160405180910390a1600191505b5090565b60085433600160a060020a03908116911614610c4a57600080fd5b600c5415610c5757600080fd5b600954600160a060020a031615610c6d57600080fd5b80600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b5050506040518051905081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610d2557600080fd5b6102c65a03f11515610d3657600080fd5b50505060405180519050141515610d4c57600080fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911791829055600d549181169163a9059cbb91166a211654585005212800000060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610de057600080fd5b6102c65a03f11515610df157600080fd5b5050506040518051905050610e04611106565b50565b600f6020526000908152604090205460ff1681565b600d54600160a060020a031681565b6000610e356109d9565b909102919050565b60095460a060020a900460ff1681565b600c5481565b67016345785d8a000081565b4290565b600954600090600160a060020a03166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ebe57600080fd5b6102c65a03f11515610ecf57600080fd5b505050604051805191505090565b600160a060020a0333166000908152600e602052604090205460ff161515600114610f0757600080fd5b600160a060020a0381161515610f1c57600080fd5b600160a060020a0381166000818152600f602052604090819020805460ff191660011790557f8988c1ff37289662f7d1a6f736d91aada3cb9216b6614a53b94f210ea4a0af25905160405180910390a250565b60085433600160a060020a03908116911614610f8a57600080fd5b600160a060020a0381161515610f9f57600080fd5b600854600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008282018381101561101957fe5b9392505050565b60008282111561102c57fe5b50900390565b60095460009060a060020a900460ff161561104c57600080fd5b6009805474ff0000000000000000000000000000000000000000191660a060020a1790557f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1600954600160a060020a0316634bb278f36000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110e457600080fd5b6102c65a03f115156110f557600080fd5b505050604051805150600191505090565b600080805b60105483101561116357601080548490811061112357fe5b6000918252602080832090910154600160a060020a03168083526011909152604090912054909250905061115782826104ef565b5060019092019161110b565b505050565b815481835581811511611163576000838152602090206111639181019083016109c191905b80821115610c2b576000815560010161118d5600a165627a7a723058204b33382d7f9993a7001fcc64f07f7c24c83fed1ec29682b960566af3e16821c100290000000000000000000000009df172fc167a8a567c208fc14e3435eb8043e2b7

Deployed Bytecode

0x6060604052600436106101715763ffffffff60e060020a6000350416630428c6aa81146101b6578063159c18bc146101e85780631a2309f0146102095780631f6d49421461022e57806326c259621461024d578063297c41431461027b578063305006841461028e57806337ba682d146102b05780634bb278f3146102c357806353f4db01146102ea57806355a373d6146102fd5780635e402ae2146103105780636c749c26146103235780636ee18573146103365780637064f0af1461035557806383a4f2f5146103685780638ab1d681146103875780638da5cb5b146103a657806393bbafd1146103b9578063940bb344146103d857806399413b4e146103eb5780639b19251a1461040a5780639ce21f3c14610429578063a24bcf461461043c578063b3f05b9714610452578063b5f7f63614610465578063ba9bb82714610478578063d18e81b31461048b578063de5f98661461049e578063e43252d7146104b1578063f2fde38b146104d0575b600061017d33346104ef565b600d54909150600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156101b357600080fd5b50005b34156101c157600080fd5b6101cc6004356107ab565b604051600160a060020a03909116815260200160405180910390f35b34156101f357600080fd5b610207600160a060020a03600435166107d3565b005b341561021457600080fd5b61021c610836565b60405190815260200160405180910390f35b341561023957600080fd5b61021c600160a060020a0360043516610843565b341561025857600080fd5b610263600435610855565b60405191825260208201526040908101905180910390f35b341561028657600080fd5b61021c610874565b341561029957600080fd5b610207600160a060020a036004351660243561087c565b34156102bb57600080fd5b61021c610979565b34156102ce57600080fd5b6102d6610981565b604051901515815260200160405180910390f35b34156102f557600080fd5b61021c6109c4565b341561030857600080fd5b6101cc6109ca565b341561031b57600080fd5b61021c6109d9565b341561032e57600080fd5b61021c610a58565b341561034157600080fd5b610207600160a060020a0360043516610a64565b341561036057600080fd5b61021c610aa3565b341561037357600080fd5b6102d6600160a060020a0360043516610ab2565b341561039257600080fd5b610207600160a060020a0360043516610ac7565b34156103b157600080fd5b6101cc610b27565b34156103c457600080fd5b61021c600160a060020a0360043516610b36565b34156103e357600080fd5b6102d6610b48565b34156103f657600080fd5b610207600160a060020a0360043516610c2f565b341561041557600080fd5b6102d6600160a060020a0360043516610e07565b341561043457600080fd5b6101cc610e1c565b341561044757600080fd5b61021c600435610e2b565b341561045d57600080fd5b6102d6610e3d565b341561047057600080fd5b61021c610e4d565b341561048357600080fd5b61021c610e53565b341561049657600080fd5b61021c610e5f565b34156104a957600080fd5b61021c610e63565b34156104bc57600080fd5b610207600160a060020a0360043516610edd565b34156104db57600080fd5b610207600160a060020a0360043516610f6f565b600954600090819081908190819060a060020a900460ff161561051157600080fd5b635a7e360061051e610e5f565b111561052957600080fd5b600160a060020a0387166000908152600f6020526040902054879060ff16151560011461055557600080fd5b600160a060020a0388166000908152600a602052604081205489918991610582908363ffffffff61100a16565b905067016345785d8a000082101561059957600080fd5b68878678326eac9000008111156105af57600080fd5b600954600160a060020a031615156105c357fe5b6105cb610e63565b9750600088116105da57600080fd5b6105e38a610e2b565b9650899550600094508787111561061f578796506105ff6109d9565b8781151561060957fe5b04955061061c8a8763ffffffff61102016565b94505b600954600160a060020a031663a9059cbb8c8960006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561067e57600080fd5b6102c65a03f1151561068f57600080fd5b50505060405180515050600160a060020a038b166000908152600a60205260409020546106c2908763ffffffff61100a16565b600160a060020a038c166000908152600a602052604081209190915585111561071657600160a060020a038b1685156108fc0286604051600060405180830381858888f19350505050151561071657600080fd5b600b805487019055600c8054880190819055600160a060020a038c16907f1f3e1c8dd1ea65dd1302cbe3ef11178a614ac6f634819e13ce4e6326350d2a839088908a9060405180848152602001838152602001828152602001935050505060405180910390a261078c888863ffffffff61102016565b151561079c5761079a611032565b505b50939998505050505050505050565b60108054829081106107b957fe5b600091825260209091200154600160a060020a0316905081565b60085433600160a060020a039081169116146107ee57600080fd5b600160a060020a0381166000908152600e602052604090205460ff16151561081557600080fd5b600160a060020a03166000908152600e60205260409020805460ff19169055565b68878678326eac90000081565b600a6020526000908152604090205481565b6000816004811061086257fe5b60020201805460019091015490915082565b635a55578081565b60085433600160a060020a0390811691161461089757600080fd5b600160a060020a0382166000908152600a6020526040812054839183916108c4908363ffffffff61100a16565b905067016345785d8a00008210156108db57600080fd5b68878678326eac9000008111156108f157600080fd5b600954600160a060020a03161561090757600080fd5b60108054600181016109198382611168565b5060009182526020808320919091018054600160a060020a0390981673ffffffffffffffffffffffffffffffffffffffff199098168817905595815260118652604080822095909555600f9095525050509020805460ff19166001179055565b635a7e360081565b60085460009033600160a060020a0390811691161461099f57600080fd5b635a7e36006109ac610e5f565b116109b657600080fd5b6109be611032565b90505b90565b600b5481565b600954600160a060020a031681565b6007546000908190635a5557806109ee610e5f565b106109fb57809250610a53565b600091505b6004821015610a4f5760008260048110610a1657fe5b6002020154600c5410610a2857610a44565b60008260048110610a3557fe5b60020201600101549250610a53565b600190910190610a00565b8092505b505090565b670de0b6b3a764000081565b60085433600160a060020a03908116911614610a7f57600080fd5b600160a060020a03166000908152600e60205260409020805460ff19166001179055565b6a211654585005212800000081565b600e6020526000908152604090205460ff1681565b600160a060020a0333166000908152600e602052604090205460ff161515600114610af157600080fd5b600160a060020a0381161515610b0657600080fd5b600160a060020a03166000908152600f60205260409020805460ff19169055565b600854600160a060020a031681565b60116020526000908152604090205481565b600954600090819060a060020a900460ff161515610b6557600080fd5b610b6d610e63565b905060008111610b7c57600080fd5b600954600160a060020a03166342966c688260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610bcd57600080fd5b6102c65a03f11515610bde57600080fd5b505050604051805190501515610bf357600080fd5b7f8a18a804523143af3d2399b3fdf76bf116e01d31987f8e774d8f1282f013cb7e8160405190815260200160405180910390a1600191505b5090565b60085433600160a060020a03908116911614610c4a57600080fd5b600c5415610c5757600080fd5b600954600160a060020a031615610c6d57600080fd5b80600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b5050506040518051905081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610d2557600080fd5b6102c65a03f11515610d3657600080fd5b50505060405180519050141515610d4c57600080fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911791829055600d549181169163a9059cbb91166a211654585005212800000060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610de057600080fd5b6102c65a03f11515610df157600080fd5b5050506040518051905050610e04611106565b50565b600f6020526000908152604090205460ff1681565b600d54600160a060020a031681565b6000610e356109d9565b909102919050565b60095460a060020a900460ff1681565b600c5481565b67016345785d8a000081565b4290565b600954600090600160a060020a03166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ebe57600080fd5b6102c65a03f11515610ecf57600080fd5b505050604051805191505090565b600160a060020a0333166000908152600e602052604090205460ff161515600114610f0757600080fd5b600160a060020a0381161515610f1c57600080fd5b600160a060020a0381166000818152600f602052604090819020805460ff191660011790557f8988c1ff37289662f7d1a6f736d91aada3cb9216b6614a53b94f210ea4a0af25905160405180910390a250565b60085433600160a060020a03908116911614610f8a57600080fd5b600160a060020a0381161515610f9f57600080fd5b600854600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008282018381101561101957fe5b9392505050565b60008282111561102c57fe5b50900390565b60095460009060a060020a900460ff161561104c57600080fd5b6009805474ff0000000000000000000000000000000000000000191660a060020a1790557f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1600954600160a060020a0316634bb278f36000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110e457600080fd5b6102c65a03f115156110f557600080fd5b505050604051805150600191505090565b600080805b60105483101561116357601080548490811061112357fe5b6000918252602080832090910154600160a060020a03168083526011909152604090912054909250905061115782826104ef565b5060019092019161110b565b505050565b815481835581811511611163576000838152602090206111639181019083016109c191905b80821115610c2b576000815560010161118d5600a165627a7a723058204b33382d7f9993a7001fcc64f07f7c24c83fed1ec29682b960566af3e16821c10029

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

0000000000000000000000009df172fc167a8a567c208fc14e3435eb8043e2b7

-----Decoded View---------------
Arg [0] : _fundingWalletAddress (address): 0x9dF172fC167a8A567C208FC14E3435EB8043E2B7

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000009df172fc167a8a567c208fc14e3435eb8043e2b7


Swarm Source

bzzr://4b33382d7f9993a7001fcc64f07f7c24c83fed1ec29682b960566af3e16821c1

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.