ETH Price: $2,393.16 (-2.09%)

Contract

0xD9e7d9A56ee6a4035Ee8a9624C96eCA1e4440671
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer53293902018-03-27 5:26:322388 days ago1522128392IN
PolicyPal Network: Token Sale
0.375 ETH0.000021821
Transfer52589152018-03-15 9:39:522400 days ago1521106792IN
PolicyPal Network: Token Sale
0.009 ETH0.0001055
Transfer52409642018-03-12 8:04:172403 days ago1520841857IN
PolicyPal Network: Token Sale
4.2536 ETH0.000196399
Transfer51958472018-03-04 16:20:362411 days ago1520180436IN
PolicyPal Network: Token Sale
8.418 ETH0.0019677941
Transfer51956132018-03-04 15:21:342411 days ago1520176894IN
PolicyPal Network: Token Sale
3.7 ETH0.000065992
Transfer51948662018-03-04 12:23:062411 days ago1520166186IN
PolicyPal Network: Token Sale
1.5 ETH0.00824875250
Transfer51927402018-03-04 3:38:582412 days ago1520134738IN
PolicyPal Network: Token Sale
5 ETH0.000098983
Transfer51925772018-03-04 2:57:552412 days ago1520132275IN
PolicyPal Network: Token Sale
1 ETH0.000072582.2
Transfer51925762018-03-04 2:57:492412 days ago1520132269IN
PolicyPal Network: Token Sale
2 ETH0.002639680
Transfer51924092018-03-04 2:15:272412 days ago1520129727IN
PolicyPal Network: Token Sale
9 ETH0.001980360
Transfer51924012018-03-04 2:14:112412 days ago1520129651IN
PolicyPal Network: Token Sale
9 ETH0.001353241
Transfer51923942018-03-04 2:12:582412 days ago1520129578IN
PolicyPal Network: Token Sale
8.61982238 ETH0.0013857942
Transfer51923942018-03-04 2:12:582412 days ago1520129578IN
PolicyPal Network: Token Sale
9 ETH0.0016502550
Transfer51923942018-03-04 2:12:582412 days ago1520129578IN
PolicyPal Network: Token Sale
0.75179943 ETH0.001979760
Transfer51923922018-03-04 2:12:172412 days ago1520129537IN
PolicyPal Network: Token Sale
9 ETH0.03297199999
Transfer51923902018-03-04 2:12:052412 days ago1520129525IN
PolicyPal Network: Token Sale
9 ETH0.0099015300
Transfer51923892018-03-04 2:11:422412 days ago1520129502IN
PolicyPal Network: Token Sale
8 ETH0.003266599
Transfer51923892018-03-04 2:11:422412 days ago1520129502IN
PolicyPal Network: Token Sale
3.5 ETH0.0025199999.99999795
Transfer51923882018-03-04 2:11:222412 days ago1520129482IN
PolicyPal Network: Token Sale
2 ETH0.001319840
Transfer51923882018-03-04 2:11:222412 days ago1520129482IN
PolicyPal Network: Token Sale
8 ETH0.0013857942
Transfer51923882018-03-04 2:11:222412 days ago1520129482IN
PolicyPal Network: Token Sale
0.62 ETH0.003266599
Transfer51923852018-03-04 2:10:142412 days ago1520129414IN
PolicyPal Network: Token Sale
9 ETH0.001353241
Transfer51923822018-03-04 2:09:462412 days ago1520129386IN
PolicyPal Network: Token Sale
2 ETH0.002639680
Transfer51923822018-03-04 2:09:462412 days ago1520129386IN
PolicyPal Network: Token Sale
3.5 ETH0.0025199999.99999795
Transfer51923822018-03-04 2:09:462412 days ago1520129386IN
PolicyPal Network: Token Sale
8 ETH0.0329951,000
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
3.59396749 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
5.4060325 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
5 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
6 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
3.5 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
6.14285715 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
5 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
2 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
1.7 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
4 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
51923492018-03-04 2:00:382412 days ago1520128838
PolicyPal Network: Token Sale
9 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PolicyPalNetworkCrowdsale

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.18;

// File: contracts/zeppelin/math/SafeMath.sol

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

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

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

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

// File: contracts/CrowdsaleAuthorizer.sol

/**
 * @title CrowdsaleAuthorizer
 * @dev Crowd Sale Authorizer
 */
contract CrowdsaleAuthorizer {
    mapping(address => uint256)    public participated;
    mapping(address => bool)       public whitelistAddresses;

    address                        public admin;
    uint256                        public saleStartTime;
    uint256                        public saleEndTime;
    uint256                        public increaseMaxContribTime;
    uint256                        public minContribution;
    uint256                        public maxContribution;

    using SafeMath for uint256;

    /**
    * @dev Modifier for only admin
    */
    modifier onlyAdmin() {
      require(msg.sender == admin);
      _;
    }

    /**
    * @dev Modifier for valid address
    */
    modifier validAddress(address _addr) {
      require(_addr != address(0x0));
      require(_addr != address(this));
      _;
    }

    /**
     * @dev Contract Constructor
     * @param _saleStartTime - The Start Time of the Token Sale
     * @param _saleEndTime - The End Time of the Token Sale
     * @param _increaseMaxContribTime - Time to increase Max Contribution of the Token Sale
     * @param _minContribution - Minimum ETH contribution per contributor
     * @param _maxContribution - Maximum ETH contribution per contributor
     */
    function CrowdsaleAuthorizer(
        address _admin,
        uint256 _saleStartTime,
        uint256 _saleEndTime,
        uint256 _increaseMaxContribTime,
        uint256 _minContribution,
        uint256 _maxContribution
    )
        validAddress(_admin)
        public
    {
        require(_saleStartTime > now);
        require(_saleEndTime > now);
        require(_increaseMaxContribTime > now);
        require(_saleStartTime < _saleEndTime);
        require(_increaseMaxContribTime > _saleStartTime);
        require(_maxContribution > 0);
        require(_minContribution < _maxContribution);

        admin = _admin;
        saleStartTime = _saleStartTime;
        saleEndTime = _saleEndTime;
        increaseMaxContribTime = _increaseMaxContribTime;

        minContribution = _minContribution;
        maxContribution = _maxContribution;
    }

    event UpdateWhitelist(address _user, bool _allow, uint _time);

    /**
     * @dev Update Whitelist Address
     * @param _user - Whitelist address
     * @param _allow - eligibility
     */
    function updateWhitelist(address _user, bool _allow)
        public
        onlyAdmin
    {
        whitelistAddresses[_user] = _allow;
        UpdateWhitelist(_user, _allow, now);
    }

    /**
     * @dev Batch Update Whitelist Address
     * @param _users - Array of Whitelist addresses
     * @param _allows - Array of eligibilities
     */
    function updateWhitelists(address[] _users, bool[] _allows)
        external
        onlyAdmin
    {
        require(_users.length == _allows.length);
        for (uint i = 0 ; i < _users.length ; i++) {
            address _user = _users[i];
            bool _allow = _allows[i];
            whitelistAddresses[_user] = _allow;
            UpdateWhitelist(_user, _allow, now);
        }
    }

    /**
     * @dev Get Eligible Amount
     * @param _contributor - Contributor address
     * @param _amount - Intended contribution amount
     */
    function eligibleAmount(address _contributor, uint256 _amount)
        public
        view
        returns(uint256)
    {
        // If sales has not started or sale ended, there's no allocation
        if (!saleStarted() || saleEnded()) {
            return 0;
        }

        // Amount lesser than minimum contribution will be rejected
        if (_amount < minContribution) {
            return 0;
        }

        uint256 userMaxContribution = maxContribution;
        // If sale has past 24hrs, increase max cap
        if (now >= increaseMaxContribTime) {
            userMaxContribution = maxContribution.mul(10);
        }

        // Calculate remaining contribution for the contributor
        uint256 remainingCap = userMaxContribution.sub(participated[_contributor]);

        // Return either the amount contributed or cap whichever is lower
        return (remainingCap > _amount) ? _amount : remainingCap;
    }

    /**
     * @dev Get if sale has started
     */
    function saleStarted() public view returns(bool) {
        return now >= saleStartTime;
    }

    /**
     * @dev Get if sale has ended
     */
    function saleEnded() public view returns(bool) {
        return now > saleEndTime;
    }

    /**
     * @dev Check for eligible amount and modify participation map
     * @param _contributor - Contributor address
     * @param _amount - Intended contribution amount
     */
    function eligibleAmountCheck(address _contributor, uint256 _amount)
        internal
        returns(uint256)
    {
        // Check if contributor is whitelisted
        if (!whitelistAddresses[_contributor]) {
            return 0;
        }

        uint256 result = eligibleAmount(_contributor, _amount);
        participated[_contributor] = participated[_contributor].add(result);

        return result;
    }
}

// File: contracts/zeppelin/ownership/Ownable.sol

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


  event 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;
  }

}

// File: contracts/zeppelin/token/ERC20Basic.sol

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

// File: contracts/zeppelin/token/BasicToken.sol

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

  mapping(address => uint256) balances;

  uint256 totalSupply_;

  /**
  * @dev total number of tokens in existence
  */
  function totalSupply() public view returns (uint256) {
    return totalSupply_;
  }

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

}

// File: contracts/zeppelin/token/BurnableToken.sol

/**
 * @title Burnable Token
 * @dev Token that can be irreversibly burned (destroyed).
 */
contract BurnableToken is BasicToken {

  event Burn(address indexed burner, uint256 value);

  /**
   * @dev Burns a specific amount of tokens.
   * @param _value The amount of token to be burned.
   */
  function burn(uint256 _value) public {
    require(_value <= balances[msg.sender]);
    // no need to require value <= totalSupply, since that would imply the
    // sender's balance is greater than the totalSupply, which *should* be an assertion failure

    address burner = msg.sender;
    balances[burner] = balances[burner].sub(_value);
    totalSupply_ = totalSupply_.sub(_value);
    Burn(burner, _value);
  }
}

// File: contracts/zeppelin/token/ERC20.sol

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

// File: contracts/zeppelin/token/StandardToken.sol

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

  /**
   * @dev Increase the amount of tokens that an owner allowed to a 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
   * @param _spender The address which will spend the funds.
   * @param _addedValue The amount of tokens to increase the allowance by.
   */
  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;
  }

  /**
   * @dev Decrease the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To decrement
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _subtractedValue The amount of tokens to decrease the allowance by.
   */
  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;
  }

}

// File: contracts/PolicyPalNetworkToken.sol

/**
 * @title PolicyPalNetwork Token
 * @dev A standard ownable token
 */
contract PolicyPalNetworkToken is StandardToken, BurnableToken, Ownable {
    /**
    * @dev Token Contract Constants
    */
    string    public constant name     = "PolicyPal Network Token";
    string    public constant symbol   = "PAL";
    uint8     public constant decimals = 18;

    /**
    * @dev Token Contract Public Variables
    */
    address public  tokenSaleContract;
    bool    public  isTokenTransferable = false;


    /**
    * @dev   Token Contract Modifier
    *
    * Check if a transfer is allowed
    * Transfers are restricted to token creator & owner(admin) during token sale duration
    * Transfers after token sale is limited by `isTokenTransferable` toggle
    *
    */
    modifier onlyWhenTransferAllowed() {
        require(isTokenTransferable || msg.sender == owner || msg.sender == tokenSaleContract);
        _;
    }

    /**
     * @dev Token Contract Modifier
     * @param _to - Address to check if valid
     *
     *  Check if an address is valid
     *  A valid address is as follows,
     *    1. Not zero address
     *    2. Not token address
     *
     */
    modifier isValidDestination(address _to) {
        require(_to != address(0x0));
        require(_to != address(this));
        _;
    }

    /**
     * @dev Enable Transfers (Only Owner)
     */
    function toggleTransferable(bool _toggle) external
        onlyOwner
    {
        isTokenTransferable = _toggle;
    }
    

    /**
    * @dev Token Contract Constructor
    * @param _adminAddr - Address of the Admin
    */
    function PolicyPalNetworkToken(
        uint _tokenTotalAmount,
        address _adminAddr
    ) 
        public
        isValidDestination(_adminAddr)
    {
        require(_tokenTotalAmount > 0);

        totalSupply_ = _tokenTotalAmount;

        // Mint all token
        balances[msg.sender] = _tokenTotalAmount;
        Transfer(address(0x0), msg.sender, _tokenTotalAmount);

        // Assign token sale contract to creator
        tokenSaleContract = msg.sender;

        // Transfer contract ownership to admin
        transferOwnership(_adminAddr);
    }

    /**
    * @dev Token Contract transfer
    * @param _to - Address to transfer to
    * @param _value - Value to transfer
    * @return bool - Result of transfer
    * "Overloaded" Function of ERC20Basic's transfer
    *
    */
    function transfer(address _to, uint256 _value) public
        onlyWhenTransferAllowed
        isValidDestination(_to)
        returns (bool)
    {
        return super.transfer(_to, _value);
    }

    /**
    * @dev Token Contract transferFrom
    * @param _from - Address to transfer from
    * @param _to - Address to transfer to
    * @param _value - Value to transfer
    * @return bool - Result of transferFrom
    *
    * "Overloaded" Function of ERC20's transferFrom
    * Added with modifiers,
    *    1. onlyWhenTransferAllowed
    *    2. isValidDestination
    *
    */
    function transferFrom(address _from, address _to, uint256 _value) public
        onlyWhenTransferAllowed
        isValidDestination(_to)
        returns (bool)
    {
        return super.transferFrom(_from, _to, _value);
    }

    /**
    * @dev Token Contract burn
    * @param _value - Value to burn
    * "Overloaded" Function of BurnableToken's burn
    */
    function burn(uint256 _value)
        public
    {
        super.burn(_value);
        Transfer(msg.sender, address(0x0), _value);
    }

    /**
    * @dev Token Contract Emergency Drain
    * @param _token - Token to drain
    * @param _amount - Amount to drain
    */
    function emergencyERC20Drain(ERC20 _token, uint256 _amount) public
        onlyOwner
    {
        _token.transfer(owner, _amount);
    }
}

// File: contracts/PolicyPalNetworkCrowdsale.sol

/**
 * @title PPN Crowdsale
 * @dev Crowd Sale Contract
 */
contract PolicyPalNetworkCrowdsale is CrowdsaleAuthorizer {
    /**
    * @dev Token Crowd Sale Contract Public Variables
    */
    address                 public multiSigWallet;
    PolicyPalNetworkToken   public token;
    uint256                 public raisedWei;
    bool                    public haltSale;
    uint                    public rate;

    /**
    * @dev Modifier for valid sale
    */
    modifier validSale() {
      require(!haltSale);
      require(saleStarted());
      require(!saleEnded());
      _;
    }

    /**
     * @dev Buy Event
     */
    event Buy(address _buyer, uint256 _tokens, uint256 _payedWei);

    /**
     * @dev Token Crowd Sale Contract Constructor
     * @param _admin - Address of the Admin
     * @param _multiSigWallet - Address of Multisig wallet
     * @param _totalTokenSupply - Total Token Supply
     * @param _premintedTokenSupply - Total preminted token supply
     * @param _saleStartTime - The Start Time of the Token Sale
     * @param _saleEndTime - The End Time of the Token Sale
     * @param _increaseMaxContribTime - Time to increase max contribution
     * @param _rate - Rate of ETH to PAL
     * @param _minContribution - Minimum ETH contribution per contributor
     * @param _maxContribution - Maximum ETH contribution per contributor
     */
    function PolicyPalNetworkCrowdsale(
        address _admin,
        address _multiSigWallet,
        uint256 _totalTokenSupply,
        uint256 _premintedTokenSupply,
        uint256 _presaleTokenSupply,
        uint256 _saleStartTime,
        uint256 _saleEndTime,
        uint256 _increaseMaxContribTime,
        uint    _rate,
        uint256 _minContribution,
        uint256 _maxContribution
    )
    CrowdsaleAuthorizer(
        _admin,
        _saleStartTime,
        _saleEndTime,
        _increaseMaxContribTime,
        _minContribution,
        _maxContribution
    )
        validAddress(_multiSigWallet)
        public
    {
        require(_totalTokenSupply > 0);
        require(_premintedTokenSupply > 0);
        require(_presaleTokenSupply > 0);
        require(_rate > 0);
        
        require(_premintedTokenSupply < _totalTokenSupply);
        require(_presaleTokenSupply < _totalTokenSupply);

        multiSigWallet = _multiSigWallet;
        rate = _rate;

        token = new PolicyPalNetworkToken(
            _totalTokenSupply,
            _admin
        );

        // transfer preminted tokens to company wallet
        token.transfer(multiSigWallet, _premintedTokenSupply);
        // transfer presale tokens to admin
        token.transfer(_admin, _presaleTokenSupply);
    }

    /**
     * @dev Token Crowd Sale Contract Halter
     * @param _halt - Flag to halt sale
     */
    function setHaltSale(bool _halt)
        onlyAdmin
        public
    {
        haltSale = _halt;
    }

    /**
     * @dev Token Crowd Sale payable
     */
    function() public payable {
        buy(msg.sender);
    }

    /**
     * @dev Token Crowd Sale Buy
     * @param _recipient - Address of the recipient
     */
    function buy(address _recipient) public payable
        validSale
        validAddress(_recipient)
        returns(uint256)
    {
        // Get the contributor's eligible amount
        uint256 weiContributionAllowed = eligibleAmountCheck(_recipient, msg.value);
        require(weiContributionAllowed > 0);

        // Get tokens remaining for sale
        uint256 tokensRemaining = token.balanceOf(address(this));
        require(tokensRemaining > 0);

        // Get tokens that the contributor will receive
        uint256 receivedTokens = weiContributionAllowed.mul(rate);

        // Check remaining tokens
        // If lesser, update tokens to be transfer and contribution allowed
        if (receivedTokens > tokensRemaining) {
            receivedTokens = tokensRemaining;
            weiContributionAllowed = tokensRemaining.div(rate);
        }

        // Transfer tokens to contributor
        assert(token.transfer(_recipient, receivedTokens));

        // Send ETH payment to MultiSig Wallet
        sendETHToMultiSig(weiContributionAllowed);
        raisedWei = raisedWei.add(weiContributionAllowed);

        // Check weiContributionAllowed is larger than value sent
        // If larger, transfer the excess back to the contributor
        if (msg.value > weiContributionAllowed) {
            msg.sender.transfer(msg.value.sub(weiContributionAllowed));
        }

        // Broadcast event
        Buy(_recipient, receivedTokens, weiContributionAllowed);

        return weiContributionAllowed;
    }

    /**
     * @dev Token Crowd Sale Emergency Drain
     *      In case something went wrong and ETH is stuck in contract
     * @param _anyToken - Token to drain
     */
    function emergencyDrain(ERC20 _anyToken) public
        onlyAdmin
        returns(bool)
    {
        if (this.balance > 0) {
            sendETHToMultiSig(this.balance);
        }
        if (_anyToken != address(0x0)) {
            assert(_anyToken.transfer(multiSigWallet, _anyToken.balanceOf(this)));
        }
        return true;
    }

    /**
     * @dev Token Crowd Sale
     *      Transfer ETH to MultiSig Wallet
     * @param _value - Value of ETH to send
     */
    function sendETHToMultiSig(uint256 _value) internal {
        multiSigWallet.transfer(_value);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_allow","type":"bool"}],"name":"updateWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"saleStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_contributor","type":"address"},{"name":"_amount","type":"uint256"}],"name":"eligibleAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"multiSigWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"increaseMaxContribTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleStarted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"haltSale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_halt","type":"bool"}],"name":"setHaltSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistAddresses","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_anyToken","type":"address"}],"name":"emergencyDrain","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_users","type":"address[]"},{"name":"_allows","type":"bool[]"}],"name":"updateWhitelists","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"raisedWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_admin","type":"address"},{"name":"_multiSigWallet","type":"address"},{"name":"_totalTokenSupply","type":"uint256"},{"name":"_premintedTokenSupply","type":"uint256"},{"name":"_presaleTokenSupply","type":"uint256"},{"name":"_saleStartTime","type":"uint256"},{"name":"_saleEndTime","type":"uint256"},{"name":"_increaseMaxContribTime","type":"uint256"},{"name":"_rate","type":"uint256"},{"name":"_minContribution","type":"uint256"},{"name":"_maxContribution","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_buyer","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_payedWei","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_user","type":"address"},{"indexed":false,"name":"_allow","type":"bool"},{"indexed":false,"name":"_time","type":"uint256"}],"name":"UpdateWhitelist","type":"event"}]

606060405234156200001057600080fd5b6040516101608062001e3b833981016040528080519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191508b9050868686858585600160a060020a03811615156200008c57600080fd5b30600160a060020a031681600160a060020a031614151515620000ae57600080fd5b428611620000bb57600080fd5b428511620000c857600080fd5b428411620000d557600080fd5b848610620000e257600080fd5b858411620000ef57600080fd5b60008211620000fd57600080fd5b8183106200010a57600080fd5b5060028054600160a060020a031916600160a060020a039788161790556003949094556004929092556005556006556007558a90811615156200014c57600080fd5b30600160a060020a031681600160a060020a0316141515156200016e57600080fd5b60008a116200017c57600080fd5b600089116200018a57600080fd5b600088116200019857600080fd5b60008411620001a657600080fd5b898910620001b357600080fd5b898810620001c057600080fd5b60088054600160a060020a031916600160a060020a038d16179055600c849055898c620001ec6200036f565b918252600160a060020a0316602082015260409081019051809103906000f08015156200021857600080fd5b60098054600160a060020a031916600160a060020a0392831617908190556008549082169163a9059cbb91168b6000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620002ab57600080fd5b6102c65a03f11515620002bd57600080fd5b50505060405180515050600954600160a060020a031663a9059cbb8d8a6000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156200034057600080fd5b6102c65a03f115156200035257600080fd5b505050604051805190505050505050505050505050505062000380565b604051610f298062000f1283390190565b610b8280620003906000396000f3006060604052600436106101035763ffffffff60e060020a6000350416630d392cd9811461010f5780631cbaee2d146101355780632c4e722e1461015a578063416c3f161461016d5780634b8feb4f1461018f5780634dbb4da5146101be5780635c474f9e146101d15780635fbaa390146101f857806362aac84d1461020b57806369ddd67d1461022357806371a18bfb146102425780638d3d6576146102615780639b8906ae14610274578063a6d150e014610287578063aaffadf3146102b1578063b3bd870a146102c4578063bc59d45a146102e3578063ed338ff1146102f6578063f088d54714610309578063f851a4401461031d578063fc0c546a14610330575b61010c33610343565b50005b341561011a57600080fd5b610133600160a060020a036004351660243515156105da565b005b341561014057600080fd5b610148610672565b60405190815260200160405180910390f35b341561016557600080fd5b610148610678565b341561017857600080fd5b610148600160a060020a036004351660243561067e565b341561019a57600080fd5b6101a2610727565b604051600160a060020a03909116815260200160405180910390f35b34156101c957600080fd5b610148610736565b34156101dc57600080fd5b6101e461073c565b604051901515815260200160405180910390f35b341561020357600080fd5b6101e4610745565b341561021657600080fd5b610133600435151561074e565b341561022e57600080fd5b6101e4600160a060020a036004351661077c565b341561024d57600080fd5b6101e4600160a060020a0360043516610791565b341561026c57600080fd5b6101486108da565b341561027f57600080fd5b6101e46108e0565b341561029257600080fd5b61013360246004803582810192908201359181359182019101356108e8565b34156102bc57600080fd5b6101486109ed565b34156102cf57600080fd5b610148600160a060020a03600435166109f3565b34156102ee57600080fd5b610148610a05565b341561030157600080fd5b610148610a0b565b610148600160a060020a0360043516610343565b341561032857600080fd5b6101a2610a11565b341561033b57600080fd5b6101a2610a20565b600b5460009081908190819060ff161561035c57600080fd5b61036461073c565b151561036f57600080fd5b6103776108e0565b1561038157600080fd5b84600160a060020a038116151561039757600080fd5b30600160a060020a031681600160a060020a0316141515156103b857600080fd5b6103c28634610a2f565b9350600084116103d157600080fd5b600954600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561042a57600080fd5b6102c65a03f1151561043b57600080fd5b50505060405180519350506000831161045357600080fd5b600c5461046790859063ffffffff610ab616565b91508282111561048b57600c5483925061048890839063ffffffff610ae816565b93505b600954600160a060020a031663a9059cbb878460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156104ea57600080fd5b6102c65a03f115156104fb57600080fd5b50505060405180519050151561050d57fe5b61051684610aff565b600a54610529908563ffffffff610b3516565b600a55348490111561057757600160a060020a0333166108fc610552348763ffffffff610b4416565b9081150290604051600060405180830381858888f19350505050151561057757600080fd5b7f1cbc5ab135991bd2b6a4b034a04aa2aa086dac1371cb9b16b8b5e2ed6b036bed8683866040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15091949350505050565b60025433600160a060020a039081169116146105f557600080fd5b600160a060020a03821660009081526001602052604090819020805460ff19168315151790557f61e283a02cc56fb0239ec22442d9e14c350968324ad1345f9f6ff9b3058dbca29083908390429051600160a060020a03909316835290151560208301526040808301919091526060909101905180910390a15050565b60035481565b600c5481565b600080600061068b61073c565b158061069a575061069a6108e0565b156106a8576000925061071f565b6006548410156106bb576000925061071f565b60075460055490925042106106e1576007546106de90600a63ffffffff610ab616565b91505b600160a060020a03851660009081526020819052604090205461070b90839063ffffffff610b4416565b905083811161071a578061071c565b835b92505b505092915050565b600854600160a060020a031681565b60055481565b60035442101590565b600b5460ff1681565b60025433600160a060020a0390811691161461076957600080fd5b600b805460ff1916911515919091179055565b60016020526000908152604090205460ff1681565b60025460009033600160a060020a039081169116146107af57600080fd5b600030600160a060020a03163111156107d5576107d530600160a060020a031631610aff565b600160a060020a038216156108d257600854600160a060020a038084169163a9059cbb9116826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561084857600080fd5b6102c65a03f1151561085957600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156108af57600080fd5b6102c65a03f115156108c057600080fd5b5050506040518051905015156108d257fe5b506001919050565b60075481565b600454421190565b6002546000908190819033600160a060020a0390811691161461090a57600080fd5b85841461091657600080fd5b600092505b858310156109e45786868481811061092f57fe5b90506020020135600160a060020a03169150848484818110151561094f57fe5b600160a060020a038516600090815260016020908152604091829020805460ff191691909302949094013515159384179091559192507f61e283a02cc56fb0239ec22442d9e14c350968324ad1345f9f6ff9b3058dbca2918491508390429051600160a060020a03909316835290151560208301526040808301919091526060909101905180910390a160019092019161091b565b50505050505050565b60065481565b60006020819052908152604090205481565b600a5481565b60045481565b600254600160a060020a031681565b600954600160a060020a031681565b600160a060020a038216600090815260016020526040812054819060ff161515610a5c5760009150610aaf565b610a66848461067e565b600160a060020a038516600090815260208190526040902054909150610a92908263ffffffff610b3516565b600160a060020a0385166000908152602081905260409020559050805b5092915050565b600080831515610ac95760009150610aaf565b50828202828482811515610ad957fe5b0414610ae157fe5b9392505050565b6000808284811515610af657fe5b04949350505050565b600854600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610b3257600080fd5b50565b600082820183811015610ae157fe5b600082821115610b5057fe5b509003905600a165627a7a723058205673286f0b744896ffda29e373abca7e7b895c7779e3f65bd45fd5b357ec43e8002960606040526004805460a060020a60ff0219169055341561001f57600080fd5b604051604080610f29833981016040528080519190602001805160038054600160a060020a03191633600160a060020a03908116919091179091559092508291508116151561006d57600080fd5b30600160a060020a031681600160a060020a03161415151561008e57600080fd5b6000831161009b57600080fd5b6001839055600160a060020a0333166000818152602081905260408082208690557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a360048054600160a060020a03191633600160a060020a03161790556101208264010000000061012881026109291704565b5050506101b6565b60035433600160a060020a0390811691161461014357600080fd5b600160a060020a038116151561015857600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360038054600160a060020a031916600160a060020a0392909216919091179055565b610d64806101c56000396000f3006060604052600436106100fb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610100578063095ea7b31461018a57806318160ddd146101c057806323b872dd146101e5578063313ce5671461020d57806342966c68146102365780635d5aa2771461024e578063661884631461027d57806370a082311461029f5780638da5cb5b146102be578063958222aa146102d157806395d89b41146102e4578063a9059cbb146102f7578063d73dd62314610319578063d9194d2c1461033b578063db0e16f114610353578063dd62ed3e14610375578063f2fde38b1461039a575b600080fd5b341561010b57600080fd5b6101136103b9565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561014f578082015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561019557600080fd5b6101ac600160a060020a03600435166024356103f0565b604051901515815260200160405180910390f35b34156101cb57600080fd5b6101d361045c565b60405190815260200160405180910390f35b34156101f057600080fd5b6101ac600160a060020a0360043581169060243516604435610462565b341561021857600080fd5b6102206104fa565b60405160ff909116815260200160405180910390f35b341561024157600080fd5b61024c6004356104ff565b005b341561025957600080fd5b61026161054a565b604051600160a060020a03909116815260200160405180910390f35b341561028857600080fd5b6101ac600160a060020a0360043516602435610559565b34156102aa57600080fd5b6101d3600160a060020a0360043516610653565b34156102c957600080fd5b61026161066e565b34156102dc57600080fd5b6101ac61067d565b34156102ef57600080fd5b61011361068d565b341561030257600080fd5b6101ac600160a060020a03600435166024356106c4565b341561032457600080fd5b6101ac600160a060020a036004351660243561075a565b341561034657600080fd5b61024c60043515156107fe565b341561035e57600080fd5b61024c600160a060020a0360043516602435610848565b341561038057600080fd5b6101d3600160a060020a03600435811690602435166108fe565b34156103a557600080fd5b61024c600160a060020a0360043516610929565b60408051908101604052601781527f506f6c69637950616c204e6574776f726b20546f6b656e000000000000000000602082015281565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60015490565b60045460009060a060020a900460ff168061048b575060035433600160a060020a039081169116145b806104a4575060045433600160a060020a039081169116145b15156104af57600080fd5b82600160a060020a03811615156104c557600080fd5b30600160a060020a031681600160a060020a0316141515156104e657600080fd5b6104f18585856109c4565b95945050505050565b601281565b61050881610b44565b600033600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a350565b600454600160a060020a031681565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054808311156105b657600160a060020a0333811660009081526002602090815260408083209388168352929052908120556105ed565b6105c6818463ffffffff610bfe16565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b600160a060020a031660009081526020819052604090205490565b600354600160a060020a031681565b60045460a060020a900460ff1681565b60408051908101604052600381527f50414c0000000000000000000000000000000000000000000000000000000000602082015281565b60045460009060a060020a900460ff16806106ed575060035433600160a060020a039081169116145b80610706575060045433600160a060020a039081169116145b151561071157600080fd5b82600160a060020a038116151561072757600080fd5b30600160a060020a031681600160a060020a03161415151561074857600080fd5b6107528484610c10565b949350505050565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054610792908363ffffffff610d2216565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b60035433600160a060020a0390811691161461081957600080fd5b6004805491151560a060020a0274ff000000000000000000000000000000000000000019909216919091179055565b60035433600160a060020a0390811691161461086357600080fd5b600354600160a060020a038084169163a9059cbb9116836000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156108df57600080fd5b6102c65a03f115156108f057600080fd5b505050604051805150505050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a0390811691161461094457600080fd5b600160a060020a038116151561095957600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000600160a060020a03831615156109db57600080fd5b600160a060020a038416600090815260208190526040902054821115610a0057600080fd5b600160a060020a0380851660009081526002602090815260408083203390941683529290522054821115610a3357600080fd5b600160a060020a038416600090815260208190526040902054610a5c908363ffffffff610bfe16565b600160a060020a038086166000908152602081905260408082209390935590851681522054610a91908363ffffffff610d2216565b600160a060020a0380851660009081526020818152604080832094909455878316825260028152838220339093168252919091522054610ad7908363ffffffff610bfe16565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600160a060020a033316600090815260208190526040812054821115610b6957600080fd5b5033600160a060020a038116600090815260208190526040902054610b8e9083610bfe565b600160a060020a038216600090815260208190526040902055600154610bba908363ffffffff610bfe16565b600155600160a060020a0381167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405190815260200160405180910390a25050565b600082821115610c0a57fe5b50900390565b6000600160a060020a0383161515610c2757600080fd5b600160a060020a033316600090815260208190526040902054821115610c4c57600080fd5b600160a060020a033316600090815260208190526040902054610c75908363ffffffff610bfe16565b600160a060020a033381166000908152602081905260408082209390935590851681522054610caa908363ffffffff610d2216565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b600082820183811015610d3157fe5b93925050505600a165627a7a72305820daab06a27c07f3b95c6372d46ccef2a67d1e9d5b870c188a6d226db9cb5d1b68002900000000000000000000000095343e65c188952ad41a56869b7cb6d89df8dd2500000000000000000000000000be60d1f1338ef422246f6a791084b114ecf7690000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000019d971e4fe8401e74000000000000000000000000000000000000000000000001355d94a01f632936000000000000000000000000000000000000000000000000000000000000005a9a01a0000000000000000000000000000000000000000000000000000000005a9ca4a0000000000000000000000000000000000000000000000000000000005a9b53200000000000000000000000000000000000000000000000000000000000005208000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000de0b6b3a7640000

Deployed Bytecode

0x6060604052600436106101035763ffffffff60e060020a6000350416630d392cd9811461010f5780631cbaee2d146101355780632c4e722e1461015a578063416c3f161461016d5780634b8feb4f1461018f5780634dbb4da5146101be5780635c474f9e146101d15780635fbaa390146101f857806362aac84d1461020b57806369ddd67d1461022357806371a18bfb146102425780638d3d6576146102615780639b8906ae14610274578063a6d150e014610287578063aaffadf3146102b1578063b3bd870a146102c4578063bc59d45a146102e3578063ed338ff1146102f6578063f088d54714610309578063f851a4401461031d578063fc0c546a14610330575b61010c33610343565b50005b341561011a57600080fd5b610133600160a060020a036004351660243515156105da565b005b341561014057600080fd5b610148610672565b60405190815260200160405180910390f35b341561016557600080fd5b610148610678565b341561017857600080fd5b610148600160a060020a036004351660243561067e565b341561019a57600080fd5b6101a2610727565b604051600160a060020a03909116815260200160405180910390f35b34156101c957600080fd5b610148610736565b34156101dc57600080fd5b6101e461073c565b604051901515815260200160405180910390f35b341561020357600080fd5b6101e4610745565b341561021657600080fd5b610133600435151561074e565b341561022e57600080fd5b6101e4600160a060020a036004351661077c565b341561024d57600080fd5b6101e4600160a060020a0360043516610791565b341561026c57600080fd5b6101486108da565b341561027f57600080fd5b6101e46108e0565b341561029257600080fd5b61013360246004803582810192908201359181359182019101356108e8565b34156102bc57600080fd5b6101486109ed565b34156102cf57600080fd5b610148600160a060020a03600435166109f3565b34156102ee57600080fd5b610148610a05565b341561030157600080fd5b610148610a0b565b610148600160a060020a0360043516610343565b341561032857600080fd5b6101a2610a11565b341561033b57600080fd5b6101a2610a20565b600b5460009081908190819060ff161561035c57600080fd5b61036461073c565b151561036f57600080fd5b6103776108e0565b1561038157600080fd5b84600160a060020a038116151561039757600080fd5b30600160a060020a031681600160a060020a0316141515156103b857600080fd5b6103c28634610a2f565b9350600084116103d157600080fd5b600954600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561042a57600080fd5b6102c65a03f1151561043b57600080fd5b50505060405180519350506000831161045357600080fd5b600c5461046790859063ffffffff610ab616565b91508282111561048b57600c5483925061048890839063ffffffff610ae816565b93505b600954600160a060020a031663a9059cbb878460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156104ea57600080fd5b6102c65a03f115156104fb57600080fd5b50505060405180519050151561050d57fe5b61051684610aff565b600a54610529908563ffffffff610b3516565b600a55348490111561057757600160a060020a0333166108fc610552348763ffffffff610b4416565b9081150290604051600060405180830381858888f19350505050151561057757600080fd5b7f1cbc5ab135991bd2b6a4b034a04aa2aa086dac1371cb9b16b8b5e2ed6b036bed8683866040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15091949350505050565b60025433600160a060020a039081169116146105f557600080fd5b600160a060020a03821660009081526001602052604090819020805460ff19168315151790557f61e283a02cc56fb0239ec22442d9e14c350968324ad1345f9f6ff9b3058dbca29083908390429051600160a060020a03909316835290151560208301526040808301919091526060909101905180910390a15050565b60035481565b600c5481565b600080600061068b61073c565b158061069a575061069a6108e0565b156106a8576000925061071f565b6006548410156106bb576000925061071f565b60075460055490925042106106e1576007546106de90600a63ffffffff610ab616565b91505b600160a060020a03851660009081526020819052604090205461070b90839063ffffffff610b4416565b905083811161071a578061071c565b835b92505b505092915050565b600854600160a060020a031681565b60055481565b60035442101590565b600b5460ff1681565b60025433600160a060020a0390811691161461076957600080fd5b600b805460ff1916911515919091179055565b60016020526000908152604090205460ff1681565b60025460009033600160a060020a039081169116146107af57600080fd5b600030600160a060020a03163111156107d5576107d530600160a060020a031631610aff565b600160a060020a038216156108d257600854600160a060020a038084169163a9059cbb9116826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561084857600080fd5b6102c65a03f1151561085957600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156108af57600080fd5b6102c65a03f115156108c057600080fd5b5050506040518051905015156108d257fe5b506001919050565b60075481565b600454421190565b6002546000908190819033600160a060020a0390811691161461090a57600080fd5b85841461091657600080fd5b600092505b858310156109e45786868481811061092f57fe5b90506020020135600160a060020a03169150848484818110151561094f57fe5b600160a060020a038516600090815260016020908152604091829020805460ff191691909302949094013515159384179091559192507f61e283a02cc56fb0239ec22442d9e14c350968324ad1345f9f6ff9b3058dbca2918491508390429051600160a060020a03909316835290151560208301526040808301919091526060909101905180910390a160019092019161091b565b50505050505050565b60065481565b60006020819052908152604090205481565b600a5481565b60045481565b600254600160a060020a031681565b600954600160a060020a031681565b600160a060020a038216600090815260016020526040812054819060ff161515610a5c5760009150610aaf565b610a66848461067e565b600160a060020a038516600090815260208190526040902054909150610a92908263ffffffff610b3516565b600160a060020a0385166000908152602081905260409020559050805b5092915050565b600080831515610ac95760009150610aaf565b50828202828482811515610ad957fe5b0414610ae157fe5b9392505050565b6000808284811515610af657fe5b04949350505050565b600854600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610b3257600080fd5b50565b600082820183811015610ae157fe5b600082821115610b5057fe5b509003905600a165627a7a723058205673286f0b744896ffda29e373abca7e7b895c7779e3f65bd45fd5b357ec43e80029

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

00000000000000000000000095343e65c188952ad41a56869b7cb6d89df8dd2500000000000000000000000000be60d1f1338ef422246f6a791084b114ecf7690000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000019d971e4fe8401e74000000000000000000000000000000000000000000000001355d94a01f632936000000000000000000000000000000000000000000000000000000000000005a9a01a0000000000000000000000000000000000000000000000000000000005a9ca4a0000000000000000000000000000000000000000000000000000000005a9b53200000000000000000000000000000000000000000000000000000000000005208000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000de0b6b3a7640000

-----Decoded View---------------
Arg [0] : _admin (address): 0x95343E65c188952Ad41A56869B7CB6d89Df8dD25
Arg [1] : _multiSigWallet (address): 0x00bE60D1F1338Ef422246f6a791084B114eCf769
Arg [2] : _totalTokenSupply (uint256): 1000000000000000000000000000
Arg [3] : _premintedTokenSupply (uint256): 500000000000000000000000000
Arg [4] : _presaleTokenSupply (uint256): 374000000000000000000000000
Arg [5] : _saleStartTime (uint256): 1520042400
Arg [6] : _saleEndTime (uint256): 1520215200
Arg [7] : _increaseMaxContribTime (uint256): 1520128800
Arg [8] : _rate (uint256): 21000
Arg [9] : _minContribution (uint256): 100000000000000000
Arg [10] : _maxContribution (uint256): 1000000000000000000

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000095343e65c188952ad41a56869b7cb6d89df8dd25
Arg [1] : 00000000000000000000000000be60d1f1338ef422246f6a791084b114ecf769
Arg [2] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [3] : 0000000000000000000000000000000000000000019d971e4fe8401e74000000
Arg [4] : 000000000000000000000000000000000000000001355d94a01f632936000000
Arg [5] : 000000000000000000000000000000000000000000000000000000005a9a01a0
Arg [6] : 000000000000000000000000000000000000000000000000000000005a9ca4a0
Arg [7] : 000000000000000000000000000000000000000000000000000000005a9b5320
Arg [8] : 0000000000000000000000000000000000000000000000000000000000005208
Arg [9] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [10] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000


Swarm Source

bzzr://daab06a27c07f3b95c6372d46ccef2a67d1e9d5b870c188a6d226db9cb5d1b68

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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