Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 6791 txns
Token Tracker: AidCoin (AID)
 Latest 25 txns From a total of 6791 Transactions

TxHash Age From To Value [TxFee]
0xc6012d9d8fccf272c7571c9d47ccd0a1be814d5f87d61f9473fc683d828d145115 hrs 26 mins ago0x3ea914fc2934ffdf43687c09b1a7af0aa05055e5  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.0002049135
0x1a7dc3264383792530f1ce2abf0e49928b3f702459e5c01db076d32529246b261 day 48 mins ago0x153501accbdf6ddce39b2fdd5e8fa4fbbc1207bc  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.00044258
0x2df8a925e389c52085350383e5b5b76ec13e45f3a3269321af8bc429c10c5b1a1 day 52 mins ago0x4aa38dd7a7dc80754d01b5d48477a16879e62ec3  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.0003161405
0xfb457f575b2e7eff1782e6a9c198ea5eae3137e40bca0e1be843129d0afb8a4b1 day 12 hrs ago0x3ea914fc2934ffdf43687c09b1a7af0aa05055e5  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000111579
0x2d4b6d012ace6bd73f06f2cd471c5cc9a43ee4048ed9d4d63d56b520570fc6481 day 19 hrs ago0xc4e7629da6a005ad7ae0cd94b5e4cd468a58f37a  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000208772
0x392a5837062842fec12f2cbfb0a126b8fdd019cfa4ae9905cf3a88638034abbf1 day 19 hrs ago0xc4e7629da6a005ad7ae0cd94b5e4cd468a58f37a  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000208772
0xd7504639fc8cb04c2e3bc102ca440fb2909c24ee9be1834c591ff6b18325994a1 day 19 hrs ago0xc4e7629da6a005ad7ae0cd94b5e4cd468a58f37a  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000208772
0x9fe85cafcdd367db6abedd2d148de9053eb744aa424e7807a5960771c6c5709d1 day 19 hrs ago0xc4e7629da6a005ad7ae0cd94b5e4cd468a58f37a  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000208772
0xd883ceb5d817369b26e9ed4a2f17115e2f8c26ad5f93c3cd24e30d6b036f4b2c1 day 19 hrs ago0xc4e7629da6a005ad7ae0cd94b5e4cd468a58f37a  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000208772
0x70720e2698d4ef1b555f769a6a3b0a88d986a6d088a1ec748579dbb595002f201 day 19 hrs ago0xc4e7629da6a005ad7ae0cd94b5e4cd468a58f37a  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000208772
0x0b67603401ada9238d2d16d9cd95c84fbbb599ac7f6db77ca8959a35214383491 day 19 hrs ago0xc4e7629da6a005ad7ae0cd94b5e4cd468a58f37a  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000208772
0x02245b576229eab5166334ea09ec48990230e7f8dee4a4b3b9eb4fd4781f29af1 day 19 hrs ago0xc4e7629da6a005ad7ae0cd94b5e4cd468a58f37a  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000208772
0x216cc9db490bc89c142788e80173d9dfe4876b2b582c083c46480580cc17e43f2 days 11 hrs ago0x82d6a308401fa0531f6cd7ad369c4455cb638446  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.00044386
0x131fdc7050a3cd0016a8a92696541606447bd621d94b4f7174981ecbf99431d32 days 11 hrs ago0x33ae24cc1771f0a9530abebe3408bfc89827d414  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000298056
0x918ed15e7ea1ada57ef531ec420d5468c6ab05bb2d53b2b58effafac71a4ddc22 days 11 hrs ago0x33ae24cc1771f0a9530abebe3408bfc89827d414  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.0008
0x83c3cd8b7c9ad59425496f272938121cac6a4e69fda27300c6f67d383cb017302 days 11 hrs ago0x2825f612bfeed936a0c5de620f411eadfa0b8338  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.00044386
0x2827dc73296c93c2ebe15fcb277da3e79de5da546684811ea1e0f545431e13c32 days 11 hrs ago0x33ae24cc1771f0a9530abebe3408bfc89827d414  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000418056
0x2f6d18fab337abd2b519ebab24ffda4ac776a57f57df9b23476865ad4b05dcd22 days 19 hrs ago0x60bc64d38f1c70581043ab93ab04832c65c6d4e7  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000783855
0x773f52353b1e80c654b1a83b810bb4ac52b0b1e062ed8286047360da9c9f7a682 days 19 hrs ago0xa870c3fa68db1424badc5f88d75d4dfe2fb7eded  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.00148772
0xa7e1b355101359bbeb56e6bd4754fa64751e9a7402605cbfb338185f7c51f4902 days 20 hrs agoBitfinex_4  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.00104514
0x6af17de9422c9f772cbc90423723487b86a8fc3487639adce145ecc8b0cb43533 days 1 hr ago0x20c7edf61ffbd02f8268b3236b2a85624fbc72f8  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.0002570733
0x67d6737fe36c03e7c38e0d65d0d015f24b5760cce788baecdd7193830b842e243 days 2 hrs ago0x9679a99542b30daf75ddc83b8b2952f9712277bc  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000336465
0xc6493d1d876bf6caed5f7cab50326ede8969ffa5b1480f9a4f66a6dcfe1c20803 days 5 hrs ago0xa341ba4aa993b883c2fe8c2bc70d7d0f48fd0bbc  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000469161
0x1e06e842e6b61a542d3d65808c73bbfa035052084f668d2dc5cde4a1c4ca491d3 days 5 hrs ago0xa341ba4aa993b883c2fe8c2bc70d7d0f48fd0bbc  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.000334737
0xd3e400764f25a451ef5f38fa6fc808b9a2f9be48096cf9859ccf95f2a40be5043 days 11 hrs agoBittrex_1  IN   0x37e8789bb9996cac9156cd5f5fd32599e6b912890 Ether0.00261285
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 1 Internal Transaction

ParentTxHash Block Age From To Value
0xed483f3cc896694345418f784c6c5d1901bdc21f92c469442f4b5a948a52a8d34587666333 days 22 hrs ago0x8e89c7da6312aa236fc4c3f1f27fd6314f33a9ba  Contract Creation0 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: AidCoin
Compiler Text: v0.4.18+commit.9cf6e910
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.13;

library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

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

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

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

contract Crowdsale {
  using SafeMath for uint256;

  // The token being sold
  MintableToken public token;

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

  // address where funds are collected
  address public wallet;

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

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

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


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

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

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


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

  // low level token purchase function
  function buyTokens(address beneficiary) public payable {
    require(beneficiary != 0x0);
    require(validPurchase());

    uint256 weiAmount = msg.value;

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

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

    token.mint(beneficiary, tokens);
    TokenPurchase(msg.sender, beneficiary, weiAmount, tokens);

    forwardFunds();
  }

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

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

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


}

contract Ownable {
  address public owner;


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() {
    owner = msg.sender;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) onlyOwner public {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public constant returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

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

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

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

}

contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeERC20 {
  function safeTransfer(ERC20Basic token, address to, uint256 value) internal {
    assert(token.transfer(to, value));
  }

  function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal {
    assert(token.transferFrom(from, to, value));
  }

  function safeApprove(ERC20 token, address spender, uint256 value) internal {
    assert(token.approve(spender, value));
  }
}

contract StandardToken is ERC20, BasicToken {

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


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

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

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

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

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

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

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

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

}

contract BurnableToken is StandardToken {

    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 > 0);

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

contract MintableToken is StandardToken, Ownable {
  event Mint(address indexed to, uint256 amount);
  event MintFinished();

  bool public mintingFinished = false;


  modifier canMint() {
    require(!mintingFinished);
    _;
  }

  /**
   * @dev Function to mint tokens
   * @param _to The address that will receive the minted tokens.
   * @param _amount The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) {
    totalSupply = totalSupply.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    Mint(_to, _amount);
    Transfer(0x0, _to, _amount);
    return true;
  }

  /**
   * @dev Function to stop minting new tokens.
   * @return True if the operation was successful.
   */
  function finishMinting() onlyOwner public returns (bool) {
    mintingFinished = true;
    MintFinished();
    return true;
  }
}

contract TokenTimelock {
  using SafeERC20 for ERC20Basic;

  // ERC20 basic token contract being held
  ERC20Basic public token;

  // beneficiary of tokens after they are released
  address public beneficiary;

  // timestamp when token release is enabled
  uint64 public releaseTime;

  function TokenTimelock(ERC20Basic _token, address _beneficiary, uint64 _releaseTime) {
    require(_releaseTime > now);
    token = _token;
    beneficiary = _beneficiary;
    releaseTime = _releaseTime;
  }

  /**
   * @notice Transfers tokens held by timelock to beneficiary.
   * Deprecated: please use TokenTimelock#release instead.
   */
  function claim() public {
    require(msg.sender == beneficiary);
    release();
  }

  /**
   * @notice Transfers tokens held by timelock to beneficiary.
   */
  function release() public {
    require(now >= releaseTime);

    uint256 amount = token.balanceOf(this);
    require(amount > 0);

    token.safeTransfer(beneficiary, amount);
  }
}

contract AidCoin is MintableToken, BurnableToken {
    string public name = "AidCoin";
    string public symbol = "AID";
    uint256 public decimals = 18;
    uint256 public maxSupply = 100000000 * (10 ** decimals);

    function AidCoin() public {

    }

    modifier canTransfer(address _from, uint _value) {
        require(mintingFinished);
        _;
    }

    function transfer(address _to, uint _value) canTransfer(msg.sender, _value) public returns (bool) {
        return super.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint _value) canTransfer(_from, _value) public returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }
}

contract AidCoinPresale is Ownable, Crowdsale {
    using SafeMath for uint256;

    // max tokens cap
    uint256 public tokenCap = 10000000 * (10 ** 18);

    // amount of sold tokens
    uint256 public soldTokens;

    // Team wallet
    address public teamWallet;
    // Advisor wallet
    address public advisorWallet;
    // AID pool wallet
    address public aidPoolWallet;
    // Company wallet
    address public companyWallet;
    // Bounty wallet
    address public bountyWallet;

    // reserved tokens
    uint256 public teamTokens 		= 	10000000 * (10 ** 18);
    uint256 public advisorTokens 	= 	10000000 * (10 ** 18);
    uint256 public aidPoolTokens 	= 	10000000 * (10 ** 18);
    uint256 public companyTokens 	= 	27000000 * (10 ** 18);
    uint256 public bountyTokens 	= 	3000000 * (10 ** 18);

    uint256 public claimedAirdropTokens;
    mapping (address => bool) public claimedAirdrop;

    // team locked tokens
    TokenTimelock public teamTimeLock;
    // advisor locked tokens
    TokenTimelock public advisorTimeLock;
    // company locked tokens
    TokenTimelock public companyTimeLock;

    modifier beforeEnd() {
        require(now < endTime);
        _;
    }

    function AidCoinPresale(
        uint256 _startTime,
        uint256 _endTime,
        uint256 _rate,
        address _wallet,
        address _teamWallet,
        address _advisorWallet,
        address _aidPoolWallet,
        address _companyWallet,
        address _bountyWallet
    ) public
    Crowdsale (_startTime, _endTime, _rate, _wallet)
    {

        require(_teamWallet != 0x0);
        require(_advisorWallet != 0x0);
        require(_aidPoolWallet != 0x0);
        require(_companyWallet != 0x0);
        require(_bountyWallet != 0x0);

        teamWallet = _teamWallet;
        advisorWallet = _advisorWallet;
        aidPoolWallet = _aidPoolWallet;
        companyWallet = _companyWallet;
        bountyWallet = _bountyWallet;

        // give tokens to aid pool
        token.mint(aidPoolWallet, aidPoolTokens);

        // give tokens to team with lock
        teamTimeLock = new TokenTimelock(token, teamWallet, uint64(now + 1 years));
        token.mint(address(teamTimeLock), teamTokens);

        // give tokens to company with lock
        companyTimeLock = new TokenTimelock(token, companyWallet, uint64(now + 1 years));
        token.mint(address(companyTimeLock), companyTokens);

        // give tokens to advisor
        uint256 initialAdvisorTokens = advisorTokens.mul(20).div(100);
        token.mint(advisorWallet, initialAdvisorTokens);
        uint256 lockedAdvisorTokens = advisorTokens.sub(initialAdvisorTokens);
        advisorTimeLock = new TokenTimelock(token, advisorWallet, uint64(now + 180 days));
        token.mint(address(advisorTimeLock), lockedAdvisorTokens);
    }

    /**
     * @dev Create new instance of ico token contract
     */
    function createTokenContract() internal returns (MintableToken) {
        return new AidCoin();
    }

    // low level token purchase function
    function buyTokens(address beneficiary) public payable {
        require(beneficiary != 0x0);
        require(validPurchase());

        // get wei amount
        uint256 weiAmount = msg.value;

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

        // calculate new total sold
        uint256 newTotalSold = soldTokens.add(tokens);

        // check if we are over the max token cap
        require(newTotalSold <= tokenCap);

        // update states
        weiRaised = weiRaised.add(weiAmount);
        soldTokens = newTotalSold;

        // mint tokens to beneficiary
        token.mint(beneficiary, tokens);
        TokenPurchase(
            msg.sender,
            beneficiary,
            weiAmount,
            tokens
        );

        forwardFunds();
    }

    // mint tokens for airdrop
    function airdrop(address[] users) public onlyOwner beforeEnd {
        require(users.length > 0);

        uint256 amount = 5 * (10 ** 18);

        uint len = users.length;
        for (uint i = 0; i < len; i++) {
            address to = users[i];
            if (!claimedAirdrop[to]) {
                claimedAirdropTokens = claimedAirdropTokens.add(amount);
                require(claimedAirdropTokens <= bountyTokens);

                claimedAirdrop[to] = true;
                token.mint(to, amount);
            }
        }
    }

    // close token sale and transfer ownership, also move unclaimed airdrop tokens
    function closeTokenSale(address _icoContract) public onlyOwner {
        require(hasEnded());
        require(_icoContract != 0x0);

        // mint unclaimed bounty tokens
        uint256 unclaimedAirdropTokens = bountyTokens.sub(claimedAirdropTokens);
        if (unclaimedAirdropTokens > 0) {
            token.mint(bountyWallet, unclaimedAirdropTokens);
        }

        // transfer token ownership to ico contract
        token.transferOwnership(_icoContract);
    }

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

    // @return true if crowdsale event has started
    function hasStarted() public constant returns (bool) {
        return now >= startTime && now < endTime;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[{"name":"","type":"bool"}],"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":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060409081526003805460a060020a60ff02191690558051908101604052600781527f416964436f696e000000000000000000000000000000000000000000000000006020820152600490805161005b9291602001906100e3565b5060408051908101604052600381527f4149440000000000000000000000000000000000000000000000000000000000602082015260059080516100a39291602001906100e3565b5060126006556a52b7d2dcc80cd2e400000060075534156100c357600080fd5b60038054600160a060020a03191633600160a060020a031617905561017e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061012457805160ff1916838001178555610151565b82800160010185558215610151579182015b82811115610151578251825591602001919060010190610136565b5061015d929150610161565b5090565b61017b91905b8082111561015d5760008155600101610167565b90565b610cd58061018d6000396000f3006060604052600436106100fb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166305d2035b811461010057806306fdde0314610127578063095ea7b3146101b157806318160ddd146101d357806323b872dd146101f8578063313ce5671461022057806340c10f191461023357806342966c6814610255578063661884631461026d57806370a082311461028f5780637d64bcb4146102ae5780638da5cb5b146102c157806395d89b41146102f0578063a9059cbb14610303578063d5abeb0114610325578063d73dd62314610338578063dd62ed3e1461035a578063f2fde38b1461037f575b600080fd5b341561010b57600080fd5b61011361039e565b604051901515815260200160405180910390f35b341561013257600080fd5b61013a6103bf565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561017657808201518382015260200161015e565b50505050905090810190601f1680156101a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101bc57600080fd5b610113600160a060020a036004351660243561045d565b34156101de57600080fd5b6101e66104c9565b60405190815260200160405180910390f35b341561020357600080fd5b610113600160a060020a03600435811690602435166044356104cf565b341561022b57600080fd5b6101e6610503565b341561023e57600080fd5b610113600160a060020a0360043516602435610509565b341561026057600080fd5b61026b600435610627565b005b341561027857600080fd5b610113600160a060020a03600435166024356106cb565b341561029a57600080fd5b6101e6600160a060020a03600435166107c5565b34156102b957600080fd5b6101136107e0565b34156102cc57600080fd5b6102d4610865565b604051600160a060020a03909116815260200160405180910390f35b34156102fb57600080fd5b61013a610874565b341561030e57600080fd5b610113600160a060020a03600435166024356108df565b341561033057600080fd5b6101e6610911565b341561034357600080fd5b610113600160a060020a0360043516602435610917565b341561036557600080fd5b6101e6600160a060020a03600435811690602435166109bb565b341561038a57600080fd5b61026b600160a060020a03600435166109e6565b60035474010000000000000000000000000000000000000000900460ff1681565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104555780601f1061042a57610100808354040283529160200191610455565b820191906000526020600020905b81548152906001019060200180831161043857829003601f168201915b505050505081565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60005481565b60008382600360149054906101000a900460ff1615156104ee57600080fd5b6104f9868686610a81565b9695505050505050565b60065481565b60035460009033600160a060020a0390811691161461052757600080fd5b60035474010000000000000000000000000000000000000000900460ff161561054f57600080fd5b600054610562908363ffffffff610bab16565b6000908155600160a060020a03841681526001602052604090205461058d908363ffffffff610bab16565b600160a060020a0384166000818152600160205260409081902092909255907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859084905190815260200160405180910390a282600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b600080821161063557600080fd5b5033600160a060020a03811660009081526001602052604090205461065a9083610bc1565b600160a060020a03821660009081526001602052604081209190915554610687908363ffffffff610bc116565b600055600160a060020a0381167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405190815260200160405180910390a25050565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120548083111561072857600160a060020a03338116600090815260026020908152604080832093881683529290529081205561075f565b610738818463ffffffff610bc116565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b600160a060020a031660009081526001602052604090205490565b60035460009033600160a060020a039081169116146107fe57600080fd5b6003805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790557fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a150600190565b600354600160a060020a031681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104555780601f1061042a57610100808354040283529160200191610455565b60003382600360149054906101000a900460ff1615156108fe57600080fd5b6109088585610bd3565b95945050505050565b60075481565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205461094f908363ffffffff610bab16565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a03908116911614610a0157600080fd5b600160a060020a0381161515610a1657600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600080600160a060020a0384161515610a9957600080fd5b50600160a060020a03808516600081815260026020908152604080832033909516835293815283822054928252600190529190912054610adf908463ffffffff610bc116565b600160a060020a038087166000908152600160205260408082209390935590861681522054610b14908463ffffffff610bab16565b600160a060020a038516600090815260016020526040902055610b3d818463ffffffff610bc116565b600160a060020a03808716600081815260026020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3506001949350505050565b600082820183811015610bba57fe5b9392505050565b600082821115610bcd57fe5b50900390565b6000600160a060020a0383161515610bea57600080fd5b600160a060020a033316600090815260016020526040902054610c13908363ffffffff610bc116565b600160a060020a033381166000908152600160205260408082209390935590851681522054610c48908363ffffffff610bab16565b600160a060020a0380851660008181526001602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a3506001929150505600a165627a7a72305820c25480654fb5e2f8bf068dfd6f4342d1726c5881d9707a01d8de98deefe206420029

   Swarm Source:
bzzr://c25480654fb5e2f8bf068dfd6f4342d1726c5881d9707a01d8de98deefe20642

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.