Sponsored Link:   SHARPAY.io • Share button with blockchain profit • ICOBench TOP Project • 30% Bonus • Buy Now!
 Latest 25 txns from a total Of 96184 transactions
View All

TxHash Age From To Value [TxFee]
0x517a9e2eddb06a51637f6dbf74d76c4e7e0500665417edfabc9e0851e3c53ff215 mins ago0x5abfc91132766e4a07b693882670954c2bd7b6c0  IN   AdExCrowdsale0 Ether0.001498728
0xcb99eb1e6ffaec8b4d8cb2f30ef08b764d2ef8231f87d0b65579563ded4b75c121 mins ago0x75bc8bbaa577b81d10e1d1d730457e3925c9e12d  IN   AdExCrowdsale0 Ether0.00038462
0xd18c44303d343ec36101656f4d676b4e494926258324a6875a82eb545379b95547 mins ago0x81e3ea221db59f21678bc1ae2006a5a44943317e  IN   AdExCrowdsale0 Ether0.00053526
0xd68d1b80e898495792f0fc118aec5e44e48cfe91d9e4770d5e05488e49f61b9c49 mins agoBittrex  IN   AdExCrowdsale0 Ether0.0019263
0x1d3c508df3fd80c2cb524d946195a2fcd213503c3dd562030f29f7431077ae463 hrs 13 mins ago0x9e60dbb06ff632b056e08ab04e4cc30f02b60f2f  IN   AdExCrowdsale0 Ether0.000886098
0xa9679e4f6020976ea69fee77767f9aee0119c793e245c56596967e77b7bc95563 hrs 24 mins ago0x81e3ea221db59f21678bc1ae2006a5a44943317e  IN   AdExCrowdsale0 Ether0.00053526
0x4aac6926d2bb06b871622341c3f137a4ea1192a17ca505b2fedf7215c66e23673 hrs 25 mins agoBittrex  IN   AdExCrowdsale0 Ether0.0019263
0x23335d6c40749e42b06b36841d768235e1348409089c83325cecdc45185542973 hrs 28 mins ago0x75bc8bbaa577b81d10e1d1d730457e3925c9e12d  IN   AdExCrowdsale0 Ether0.00038462
0x4058a3acd70976bff50d579789c8569fdbe4ef4d47861115ff1961c7add1ba763 hrs 38 mins ago0x2b8d7c1ab2c0ebdd767c91d2bad7bec6c1cb9881  IN   AdExCrowdsale0 Ether0.001618092
0xf5af3e4513822cb8805253b6352c00cc9745b462b4b4d843b36cddfd699527234 hrs 27 mins agoHitBTC_2  IN   AdExCrowdsale0 Ether0.000963468
0x36c9ec47db44d2676071170710451b1effd79e0ece25eb478e567c39714a8f206 hrs 34 mins ago0x03747f06215b44e498831da019b27f53e483599f  IN   AdExCrowdsale0 Ether0.006267894605
0xad19ceeffec1a27edcb7692ca014c308c08b04a7924feea7e22b93172cdf1c957 hrs 9 mins ago0xadb2b42f6bd96f5c65920b9ac88619dce4166f94  IN   AdExCrowdsale0 Ether0.00150052
0xdf9601f1ca17b875908c45886990ee3a4150c8de4e2bee92760b6340d7b982c67 hrs 37 mins ago0x75bc8bbaa577b81d10e1d1d730457e3925c9e12d  IN   AdExCrowdsale0 Ether0.0004653902
0x1505b44bf8371312a6d5c68750fdad99c493c09f1da84c703b37384d55dafba58 hrs 5 mins agoliqui.io_Erc20  IN   AdExCrowdsale0 Ether0.00053526
0xe7594e2ad43a96ae3ea4f6963bd07312a6b410863d85893bdd0c4ef40a4af5368 hrs 43 mins ago0x65f9fa54cd947f59c7fa30998e079b11778dbb74  IN   AdExCrowdsale0 Ether0.000141156
0xb80a4b43081880a8bda6cfb296ffe26b9729e55b28b1213d3b975a177a97fd8c8 hrs 45 mins ago0x65f9fa54cd947f59c7fa30998e079b11778dbb74  IN   AdExCrowdsale0 Ether0.000320772
0xb15fe1bdac33e1a53f169deec5b2207c396e8ee433fcc2f769579c071cd339be8 hrs 46 mins ago0x5c985e89dde482efe97ea9f1950ad149eb73829b  IN   AdExCrowdsale0 Ether0.001078728
0x8de7e8edfdc34a261f3556f577e520cd17ee398a90a6a052ec5f5a5f6bc241f59 hrs 3 mins ago0xf74d556cbb95b7bccdad8284bc68110c74c91e7b  IN   AdExCrowdsale0 Ether0.0002359
0x270708fb93924563b906793229c4450c86aab67d9be8f22c0d98a6b5efc79c439 hrs 7 mins ago0x68d016b513cf3f3311deb7ee5ce6bbdfe150fda4  IN   AdExCrowdsale0 Ether0.000322075953
0xc1c08352c32c6f1056194aa9eb1db1b96b28951b234b8057ef01b7702649f5979 hrs 17 mins ago0xd378f6a3a958c7aae49e59ce8f21158e148b079f  IN   AdExCrowdsale0 Ether0.01145725
0x832d65420cac2e33c5f50284d91b08c0a58dced549decbe9817821104bddc9bd12 hrs 38 mins ago0x0681d8db095565fe8a346fa0277bffde9c0edbbf  IN   AdExCrowdsale0 Ether0.0026763
0x0536e9d0b38c840b12769465ba62a25ae2d5acc281a5143606932d42488e2eaa12 hrs 58 mins agoBinanceWallet_1  IN   AdExCrowdsale0 Ether0.0019295
0x3fe1772ec813cc4bfdc9a73dffe79a17e1e0df42b1982850b21d9d77f2a92e5213 hrs 13 mins agoBittrex  IN   AdExCrowdsale0 Ether0.0019295
0xbe93bf35fe28f582a2abb2ca11beb7685c6cca063e3f2c454ca36909adcb95e213 hrs 58 mins ago0x75bc8bbaa577b81d10e1d1d730457e3925c9e12d  IN   AdExCrowdsale0 Ether0.0006461158
0xe8e0da0f44b6fff520d8679aaf5916b23470c22c70d2025ea8e6ffe6b098f46c14 hrs ago0x75bc8bbaa577b81d10e1d1d730457e3925c9e12d  IN   AdExCrowdsale0 Ether0.0004638414
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0x20cef361ff34460a83e2a9602085f997eca21893d26a7fcf030a5ea6eaed6dc23954087330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a70 Ether
0xf877c2b9fd4eeaf2ecf172bce753981783d0cf61a95481e73f010f6b65c9f7f63954086330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0x8b7163738298563c5c4cc9c90b5471d7a6274eb6899544ab9cacdab52af6c2463954086330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0x4a811e32f3295940119bd0a824d7786c738b0fea31987f21a2edde58bcf705743954086330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0xc92bc87f01ef9755ec3b5a16d8ed94bcef746393a66654bb1d6987e0469475a63954085330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a5 Ether
0x34ef3591e96c744de8a18ba9c5aaf08092137710517b98fe7602d22b83d58d4e3954084330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a5 Ether
0xd0f0597ff65cf200155976a67628aad46e58c7091b2c4d5af33f3c0337f6494b3954082330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0xed0cf8aa40bb3113c4b597543d102ee5205cf0a0c7a013cf169b497cefffafd03954082330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a40 Ether
0x2cf718014f6c56e9450194454a5955855056cd03d10dd598b0ff308e94134e223954082330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a2 Ether
0x9b71ef70d62d8782a15d7476216f6a41b9b7ff10590f088d5c0c00db2625b9343954079330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a2 Ether
0xd97856ea4e552e40868cb2de00d22598adcc3443c11f8b2d1884dabd439dfef73954074330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0xbff165147b7cb8c7dbb6b94c79c38689f0083033162f6fd3dc2cb38de954ec133954074330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a0.4 Ether
0x9a2a67d8670d25a86acf2b42e842f1976d8795d1e4903e210384ec50259ff2483954072330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a2 Ether
0x8865594a8f87c0436e96bac1f3c3a765f593b7ce6bbc9235523b58f7ca410b143954072330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0x8de6662bbcd27d14653f775f0bfcf8e9f6f2967bd3dee3515cdb571cb841785b3954068330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a0.2 Ether
0xc3ea9ae9577737da1f59caf58a77d4bd697bdc96d01b13134cecb6b2dac498913954068330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0x218144c0237b08d351b8fd71c01990e81b09cd7d8d94d9820f9727905f78511c3954066330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a3 Ether
0xf70aa8ea73c4882c502615444579de4950635abe97f2559f2bdba1ef977b3e353954066330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a0.99475 Ether
0xa75a74ed83aa1ad128c4f4e0d99722d6d17d9ce9b0330d41a8e82796756c49ea3954066330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a2 Ether
0x8134c9700199840059b2cbb1eb943495c42aa79fdadc22e196583a17a1c1e6493954066330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a5 Ether
0x737e8be28f2752926bd787e065330e388907025455657c1e3ac825fe0f189bce3954066330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a49.93882261 Ether
0x6e255b6253f70ed5ddb23b207411695e95de1a86ba8e90fdb6674b4d038ff85a3954060330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a4.44455785 Ether
0x2f800dd53d45a90f3e26ee5bb9ec392a2d0653a413c9c009f568ae1ebe59ffa33954060330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a0.5 Ether
0x58b01f8ccced5a7c549b8789157ce95612d21633dcddfe6281a76252659303783954055330 days 22 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a1 Ether
0xde86b22ccd5472804c68c72e7c0e6e5b94cd34fc1f8a828538f347c0294414273954053330 days 23 hrs ago0x4470bb87d77b963a013db939be332f927f2b992e0x20b014a0b669906781250cdcf9966d5c4ce1527a5 Ether
[ Download CSV Export  ] 
Warning: The compiled contract might be susceptible to ZeroFunctionSelector (very low-severity), DelegateCallReturnValue (low-severity), ECRecoverMalformedInput (medium-severity), SkipEmptyStringLiteral (low-severity) Solidity compiler bugs.

Contract Source Code Verified (Similar match)
Note: Displaying similar matching verified source code at contract 0xE4Ef6df2c125B61e7DBa539734d84f31D52DddFE(excluding Constructor Arguments if any)
Contract Name: ADXToken
Compiler Version: v0.4.11+commit.68ef5810
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.11;



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

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

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

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

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

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

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

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

  function assert(bool assertion) internal {
    if (!assertion) {
      throw;
    }
  }
}


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




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

  mapping(address => uint) balances;

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

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) {
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
  }

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

}




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




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

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

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

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

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

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

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

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

}


/**
 * @title LimitedTransferToken
 * @dev LimitedTransferToken defines the generic interface and the implementation to limit token 
 * transferability for different events. It is intended to be used as a base class for other token 
 * contracts. 
 * LimitedTransferToken has been designed to allow for different limiting factors,
 * this can be achieved by recursively calling super.transferableTokens() until the base class is 
 * hit. For example:
 *     function transferableTokens(address holder, uint64 time) constant public returns (uint256) {
 *       return min256(unlockedTokens, super.transferableTokens(holder, time));
 *     }
 * A working example is VestedToken.sol:
 * https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/VestedToken.sol
 */

contract LimitedTransferToken is ERC20 {

  /**
   * @dev Checks whether it can transfer or otherwise throws.
   */
  modifier canTransfer(address _sender, uint _value) {
   if (_value > transferableTokens(_sender, uint64(now))) throw;
   _;
  }

  /**
   * @dev Checks modifier and allows transfer if tokens are not locked.
   * @param _to The address that will recieve the tokens.
   * @param _value The amount of tokens to be transferred.
   */
  function transfer(address _to, uint _value) canTransfer(msg.sender, _value) {
    super.transfer(_to, _value);
  }

  /**
  * @dev Checks modifier and allows transfer if tokens are not locked.
  * @param _from The address that will send the tokens.
  * @param _to The address that will recieve the tokens.
  * @param _value The amount of tokens to be transferred.
  */
  function transferFrom(address _from, address _to, uint _value) canTransfer(_from, _value) {
    super.transferFrom(_from, _to, _value);
  }

  /**
   * @dev Default transferable tokens function returns all tokens for a holder (no limit).
   * @dev Overwriting transferableTokens(address holder, uint64 time) is the way to provide the 
   * specific logic for limiting token transferability for a holder over time.
   */
  function transferableTokens(address holder, uint64 time) constant public returns (uint256) {
    return balanceOf(holder);
  }
}


/**
 * @title Vested token
 * @dev Tokens that can be vested for a group of addresses.
 */
contract VestedToken is StandardToken, LimitedTransferToken {

  uint256 MAX_GRANTS_PER_ADDRESS = 20;

  struct TokenGrant {
    address granter;     // 20 bytes
    uint256 value;       // 32 bytes
    uint64 cliff;
    uint64 vesting;
    uint64 start;        // 3 * 8 = 24 bytes
    bool revokable;
    bool burnsOnRevoke;  // 2 * 1 = 2 bits? or 2 bytes?
  } // total 78 bytes = 3 sstore per operation (32 per sstore)

  mapping (address => TokenGrant[]) public grants;

  event NewTokenGrant(address indexed from, address indexed to, uint256 value, uint256 grantId);

  /**
   * @dev Grant tokens to a specified address
   * @param _to address The address which the tokens will be granted to.
   * @param _value uint256 The amount of tokens to be granted.
   * @param _start uint64 Time of the beginning of the grant.
   * @param _cliff uint64 Time of the cliff period.
   * @param _vesting uint64 The vesting period.
   */
  function grantVestedTokens(
    address _to,
    uint256 _value,
    uint64 _start,
    uint64 _cliff,
    uint64 _vesting,
    bool _revokable,
    bool _burnsOnRevoke
  ) public {

    // Check for date inconsistencies that may cause unexpected behavior
    if (_cliff < _start || _vesting < _cliff) {
      throw;
    }

    if (tokenGrantsCount(_to) > MAX_GRANTS_PER_ADDRESS) throw;   // To prevent a user being spammed and have his balance locked (out of gas attack when calculating vesting).

    uint count = grants[_to].push(
                TokenGrant(
                  _revokable ? msg.sender : 0, // avoid storing an extra 20 bytes when it is non-revokable
                  _value,
                  _cliff,
                  _vesting,
                  _start,
                  _revokable,
                  _burnsOnRevoke
                )
              );

    transfer(_to, _value);

    NewTokenGrant(msg.sender, _to, _value, count - 1);
  }

  /**
   * @dev Revoke the grant of tokens of a specifed address.
   * @param _holder The address which will have its tokens revoked.
   * @param _grantId The id of the token grant.
   */
  function revokeTokenGrant(address _holder, uint _grantId) public {
    TokenGrant grant = grants[_holder][_grantId];

    if (!grant.revokable) { // Check if grant was revokable
      throw;
    }

    if (grant.granter != msg.sender) { // Only granter can revoke it
      throw;
    }

    address receiver = grant.burnsOnRevoke ? 0xdead : msg.sender;

    uint256 nonVested = nonVestedTokens(grant, uint64(now));

    // remove grant from array
    delete grants[_holder][_grantId];
    grants[_holder][_grantId] = grants[_holder][grants[_holder].length.sub(1)];
    grants[_holder].length -= 1;

    balances[receiver] = balances[receiver].add(nonVested);
    balances[_holder] = balances[_holder].sub(nonVested);

    Transfer(_holder, receiver, nonVested);
  }


  /**
   * @dev Calculate the total amount of transferable tokens of a holder at a given time
   * @param holder address The address of the holder
   * @param time uint64 The specific time.
   * @return An uint representing a holder's total amount of transferable tokens.
   */
  function transferableTokens(address holder, uint64 time) constant public returns (uint256) {
    uint256 grantIndex = tokenGrantsCount(holder);

    if (grantIndex == 0) return balanceOf(holder); // shortcut for holder without grants

    // Iterate through all the grants the holder has, and add all non-vested tokens
    uint256 nonVested = 0;
    for (uint256 i = 0; i < grantIndex; i++) {
      nonVested = SafeMath.add(nonVested, nonVestedTokens(grants[holder][i], time));
    }

    // Balance - totalNonVested is the amount of tokens a holder can transfer at any given time
    uint256 vestedTransferable = SafeMath.sub(balanceOf(holder), nonVested);

    // Return the minimum of how many vested can transfer and other value
    // in case there are other limiting transferability factors (default is balanceOf)
    return SafeMath.min256(vestedTransferable, super.transferableTokens(holder, time));
  }

  /**
   * @dev Check the amount of grants that an address has.
   * @param _holder The holder of the grants.
   * @return A uint representing the total amount of grants.
   */
  function tokenGrantsCount(address _holder) constant returns (uint index) {
    return grants[_holder].length;
  }

  /**
   * @dev Calculate amount of vested tokens at a specifc time.
   * @param tokens uint256 The amount of tokens grantted.
   * @param time uint64 The time to be checked
   * @param start uint64 A time representing the begining of the grant
   * @param cliff uint64 The cliff period.
   * @param vesting uint64 The vesting period.
   * @return An uint representing the amount of vested tokensof a specif grant.
   *  transferableTokens
   *   |                         _/--------   vestedTokens rect
   *   |                       _/
   *   |                     _/
   *   |                   _/
   *   |                 _/
   *   |                /
   *   |              .|
   *   |            .  |
   *   |          .    |
   *   |        .      |
   *   |      .        |
   *   |    .          |
   *   +===+===========+---------+----------> time
   *      Start       Clift    Vesting
   */
  function calculateVestedTokens(
    uint256 tokens,
    uint256 time,
    uint256 start,
    uint256 cliff,
    uint256 vesting) constant returns (uint256)
    {
      // Shortcuts for before cliff and after vesting cases.
      if (time < cliff) return 0;
      if (time >= vesting) return tokens;

      // Interpolate all vested tokens.
      // As before cliff the shortcut returns 0, we can use just calculate a value
      // in the vesting rect (as shown in above's figure)

      // vestedTokens = tokens * (time - start) / (vesting - start)
      uint256 vestedTokens = SafeMath.div(
                                    SafeMath.mul(
                                      tokens,
                                      SafeMath.sub(time, start)
                                      ),
                                    SafeMath.sub(vesting, start)
                                    );

      return vestedTokens;
  }

  /**
   * @dev Get all information about a specifc grant.
   * @param _holder The address which will have its tokens revoked.
   * @param _grantId The id of the token grant.
   * @return Returns all the values that represent a TokenGrant(address, value, start, cliff,
   * revokability, burnsOnRevoke, and vesting) plus the vested value at the current time.
   */
  function tokenGrant(address _holder, uint _grantId) constant returns (address granter, uint256 value, uint256 vested, uint64 start, uint64 cliff, uint64 vesting, bool revokable, bool burnsOnRevoke) {
    TokenGrant grant = grants[_holder][_grantId];

    granter = grant.granter;
    value = grant.value;
    start = grant.start;
    cliff = grant.cliff;
    vesting = grant.vesting;
    revokable = grant.revokable;
    burnsOnRevoke = grant.burnsOnRevoke;

    vested = vestedTokens(grant, uint64(now));
  }

  /**
   * @dev Get the amount of vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time The time to be checked
   * @return An uint representing the amount of vested tokens of a specific grant at a specific time.
   */
  function vestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
    return calculateVestedTokens(
      grant.value,
      uint256(time),
      uint256(grant.start),
      uint256(grant.cliff),
      uint256(grant.vesting)
    );
  }

  /**
   * @dev Calculate the amount of non vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time uint64 The time to be checked
   * @return An uint representing the amount of non vested tokens of a specifc grant on the 
   * passed time frame.
   */
  function nonVestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
    return grant.value.sub(vestedTokens(grant, time));
  }

  /**
   * @dev Calculate the date when the holder can trasfer all its tokens
   * @param holder address The address of the holder
   * @return An uint representing the date of the last transferable tokens.
   */
  function lastTokenIsTransferableDate(address holder) constant public returns (uint64 date) {
    date = uint64(now);
    uint256 grantIndex = grants[holder].length;
    for (uint256 i = 0; i < grantIndex; i++) {
      date = SafeMath.max64(grants[holder][i].vesting, date);
    }
  }
}

// QUESTIONS FOR AUDITORS:
// - Considering we inherit from VestedToken, how much does that hit at our gas price?
// - Ensure max supply is 100,000,000
// - Ensure that even if not totalSupply is sold, tokens would still be transferrable after (we will up to totalSupply by creating adEx tokens)

// vesting: 365 days, 365 days / 4 vesting


contract ADXToken is VestedToken {
  //FIELDS
  string public name = "AdEx";
  string public symbol = "ADX";
  uint public decimals = 4;

  //CONSTANTS
  //Time limits
  uint public constant STAGE_ONE_TIME_END = 24 hours; // first day bonus
  uint public constant STAGE_TWO_TIME_END = 1 weeks; // first week bonus
  uint public constant STAGE_THREE_TIME_END = 4 weeks;
  
  // Multiplier for the decimals
  uint private constant DECIMALS = 10000;

  //Prices of ADX
  uint public constant PRICE_STANDARD    = 900*DECIMALS; // ADX received per one ETH; MAX_SUPPLY / (valuation / ethPrice)
  uint public constant PRICE_STAGE_ONE   = PRICE_STANDARD * 130/100; // 1ETH = 30% more ADX
  uint public constant PRICE_STAGE_TWO   = PRICE_STANDARD * 115/100; // 1ETH = 15% more ADX
  uint public constant PRICE_STAGE_THREE = PRICE_STANDARD;

  //ADX Token Limits
  uint public constant ALLOC_TEAM =         16000000*DECIMALS; // team + advisors
  uint public constant ALLOC_BOUNTIES =      2000000*DECIMALS;
  uint public constant ALLOC_WINGS =         2000000*DECIMALS;
  uint public constant ALLOC_CROWDSALE =    80000000*DECIMALS;
  uint public constant PREBUY_PORTION_MAX = 20000000*DECIMALS; // this is redundantly more than what will be pre-sold
  
  //ASSIGNED IN INITIALIZATION
  //Start and end times
  uint public publicStartTime; // Time in seconds public crowd fund starts.
  uint public privateStartTime; // Time in seconds when pre-buy can purchase up to 31250 ETH worth of ADX;
  uint public publicEndTime; // Time in seconds crowdsale ends
  uint public hardcapInEth;

  //Special Addresses
  address public multisigAddress; // Address to which all ether flows.
  address public adexTeamAddress; // Address to which ALLOC_TEAM, ALLOC_BOUNTIES, ALLOC_WINGS is (ultimately) sent to.
  address public ownerAddress; // Address of the contract owner. Can halt the crowdsale.
  address public preBuy1; // Address used by pre-buy
  address public preBuy2; // Address used by pre-buy
  address public preBuy3; // Address used by pre-buy
  uint public preBuyPrice1; // price for pre-buy
  uint public preBuyPrice2; // price for pre-buy
  uint public preBuyPrice3; // price for pre-buy

  //Running totals
  uint public etherRaised; // Total Ether raised.
  uint public ADXSold; // Total ADX created
  uint public prebuyPortionTotal; // Total of Tokens purchased by pre-buy. Not to exceed PREBUY_PORTION_MAX.
  
  //booleans
  bool public halted; // halts the crowd sale if true.

  // MODIFIERS
  //Is currently in the period after the private start time and before the public start time.
  modifier is_pre_crowdfund_period() {
    if (now >= publicStartTime || now < privateStartTime) throw;
    _;
  }

  //Is currently the crowdfund period
  modifier is_crowdfund_period() {
    if (now < publicStartTime) throw;
    if (isCrowdfundCompleted()) throw;
    _;
  }

  // Is completed
  modifier is_crowdfund_completed() {
    if (!isCrowdfundCompleted()) throw;
    _;
  }
  function isCrowdfundCompleted() internal returns (bool) {
    if (now > publicEndTime || ADXSold >= ALLOC_CROWDSALE || etherRaised >= hardcapInEth) return true;
    return false;
  }

  //May only be called by the owner address
  modifier only_owner() {
    if (msg.sender != ownerAddress) throw;
    _;
  }

  //May only be called if the crowdfund has not been halted
  modifier is_not_halted() {
    if (halted) throw;
    _;
  }

  // EVENTS
  event PreBuy(uint _amount);
  event Buy(address indexed _recipient, uint _amount);

  // Initialization contract assigns address of crowdfund contract and end time.
  function ADXToken(
    address _multisig,
    address _adexTeam,
    uint _publicStartTime,
    uint _privateStartTime,
    uint _hardcapInEth,
    address _prebuy1, uint _preBuyPrice1,
    address _prebuy2, uint _preBuyPrice2,
    address _prebuy3, uint _preBuyPrice3
  ) {
    ownerAddress = msg.sender;
    publicStartTime = _publicStartTime;
    privateStartTime = _privateStartTime;
    publicEndTime = _publicStartTime + 4 weeks;
    multisigAddress = _multisig;
    adexTeamAddress = _adexTeam;

    hardcapInEth = _hardcapInEth;

    preBuy1 = _prebuy1;
    preBuyPrice1 = _preBuyPrice1;
    preBuy2 = _prebuy2;
    preBuyPrice2 = _preBuyPrice2;
    preBuy3 = _prebuy3;
    preBuyPrice3 = _preBuyPrice3;

    balances[adexTeamAddress] += ALLOC_BOUNTIES;
    balances[adexTeamAddress] += ALLOC_WINGS;

    balances[ownerAddress] += ALLOC_TEAM;

    balances[ownerAddress] += ALLOC_CROWDSALE;
  }

  // Transfer amount of tokens from sender account to recipient.
  // Only callable after the crowd fund is completed
  function transfer(address _to, uint _value)
  {
    if (_to == msg.sender) return; // no-op, allow even during crowdsale, in order to work around using grantVestedTokens() while in crowdsale
    if (!isCrowdfundCompleted()) throw;
    super.transfer(_to, _value);
  }

  // Transfer amount of tokens from a specified address to a recipient.
  // Transfer amount of tokens from sender account to recipient.
  function transferFrom(address _from, address _to, uint _value)
    is_crowdfund_completed
  {
    super.transferFrom(_from, _to, _value);
  }

  //constant function returns the current ADX price.
  function getPriceRate()
      constant
      returns (uint o_rate)
  {
      uint delta = SafeMath.sub(now, publicStartTime);

      if (delta > STAGE_TWO_TIME_END) return PRICE_STAGE_THREE;
      if (delta > STAGE_ONE_TIME_END) return PRICE_STAGE_TWO;

      return (PRICE_STAGE_ONE);
  }

  // calculates wmount of ADX we get, given the wei and the rates we've defined per 1 eth
  function calcAmount(uint _wei, uint _rate) 
    constant
    returns (uint) 
  {
    return SafeMath.div(SafeMath.mul(_wei, _rate), 1 ether);
  } 
  
  // Given the rate of a purchase and the remaining tokens in this tranche, it
  // will throw if the sale would take it past the limit of the tranche.
  // Returns `amount` in scope as the number of ADX tokens that it will purchase.
  function processPurchase(uint _rate, uint _remaining)
    internal
    returns (uint o_amount)
  {
    o_amount = calcAmount(msg.value, _rate);

    if (o_amount > _remaining) throw;
    if (!multisigAddress.send(msg.value)) throw;

    balances[ownerAddress] = balances[ownerAddress].sub(o_amount);
    balances[msg.sender] = balances[msg.sender].add(o_amount);

    ADXSold += o_amount;
    etherRaised += msg.value;
  }

  //Special Function can only be called by pre-buy and only during the pre-crowdsale period.
  function preBuy()
    payable
    is_pre_crowdfund_period
    is_not_halted
  {
    // Pre-buy participants would get the first-day price, as well as a bonus of vested tokens
    uint priceVested = 0;

    if (msg.sender == preBuy1) priceVested = preBuyPrice1;
    if (msg.sender == preBuy2) priceVested = preBuyPrice2;
    if (msg.sender == preBuy3) priceVested = preBuyPrice3;

    if (priceVested == 0) throw;

    uint amount = processPurchase(PRICE_STAGE_ONE + priceVested, SafeMath.sub(PREBUY_PORTION_MAX, prebuyPortionTotal));
    grantVestedTokens(msg.sender, calcAmount(msg.value, priceVested), 
      uint64(now), uint64(now) + 91 days, uint64(now) + 365 days, 
      false, false
    );
    prebuyPortionTotal += amount;
    PreBuy(amount);
  }

  //Default function called by sending Ether to this address with no arguments.
  //Results in creation of new ADX Tokens if transaction would not exceed hard limit of ADX Token.
  function()
    payable
    is_crowdfund_period
    is_not_halted
  {
    uint amount = processPurchase(getPriceRate(), SafeMath.sub(ALLOC_CROWDSALE, ADXSold));
    Buy(msg.sender, amount);
  }

  // To be called at the end of crowdfund period
  // WARNING: transfer(), which is called by grantVestedTokens(), wants a minimum message length
  function grantVested(address _adexTeamAddress, address _adexFundAddress)
    is_crowdfund_completed
    only_owner
    is_not_halted
  {
    // Grant tokens pre-allocated for the team
    grantVestedTokens(
      _adexTeamAddress, ALLOC_TEAM,
      uint64(now), uint64(now) + 91 days , uint64(now) + 365 days, 
      false, false
    );

    // Grant tokens that remain after crowdsale to the AdEx fund, vested for 2 years
    grantVestedTokens(
      _adexFundAddress, balances[ownerAddress],
      uint64(now), uint64(now) + 182 days , uint64(now) + 730 days, 
      false, false
    );
  }

  //May be used by owner of contract to halt crowdsale and no longer except ether.
  function toggleHalt(bool _halted)
    only_owner
  {
    halted = _halted;
  }

  //failsafe drain
  function drain()
    only_owner
  {
    if (!ownerAddress.send(this.balance)) throw;
  }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"PREBUY_PORTION_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"tokenGrantsCount","outputs":[{"name":"index","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STAGE_TWO","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuy3","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuy1","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"publicEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"grants","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"start","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ADXSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuy2","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"multisigAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ALLOC_BOUNTIES","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"publicStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"tokenGrant","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"vested","type":"uint256"},{"name":"start","type":"uint64"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"STAGE_TWO_TIME_END","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"}],"name":"lastTokenIsTransferableDate","outputs":[{"name":"date","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ALLOC_WINGS","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"STAGE_ONE_TIME_END","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_wei","type":"uint256"},{"name":"_rate","type":"uint256"}],"name":"calcAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ALLOC_CROWDSALE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"adexTeamAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getPriceRate","outputs":[{"name":"o_rate","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"privateStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_halted","type":"bool"}],"name":"toggleHalt","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ownerAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STAGE_ONE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_start","type":"uint64"},{"name":"_cliff","type":"uint64"},{"name":"_vesting","type":"uint64"},{"name":"_revokable","type":"bool"},{"name":"_burnsOnRevoke","type":"bool"}],"name":"grantVestedTokens","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"drain","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"prebuyPortionTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"hardcapInEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"ALLOC_TEAM","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"etherRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"},{"name":"time","type":"uint64"}],"name":"transferableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuyPrice1","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuyPrice2","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"tokens","type":"uint256"},{"name":"time","type":"uint256"},{"name":"start","type":"uint256"},{"name":"cliff","type":"uint256"},{"name":"vesting","type":"uint256"}],"name":"calculateVestedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STAGE_THREE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_adexTeamAddress","type":"address"},{"name":"_adexFundAddress","type":"address"}],"name":"grantVested","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_holder","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"revokeTokenGrant","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preBuyPrice3","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"PRICE_STANDARD","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"STAGE_THREE_TIME_END","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"preBuy","outputs":[],"payable":true,"type":"function"},{"inputs":[{"name":"_multisig","type":"address"},{"name":"_adexTeam","type":"address"},{"name":"_publicStartTime","type":"uint256"},{"name":"_privateStartTime","type":"uint256"},{"name":"_hardcapInEth","type":"uint256"},{"name":"_prebuy1","type":"address"},{"name":"_preBuyPrice1","type":"uint256"},{"name":"_prebuy2","type":"address"},{"name":"_preBuyPrice2","type":"uint256"},{"name":"_prebuy3","type":"address"},{"name":"_preBuyPrice3","type":"uint256"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"PreBuy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"grantId","type":"uint256"}],"name":"NewTokenGrant","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
601460035560a0604052600460608190527f41644578000000000000000000000000000000000000000000000000000000006080908152620000459160059190620001e8565b506040805180820190915260038082527f414458000000000000000000000000000000000000000000000000000000000060209092019182526200008c91600691620001e8565b50600460075534156200009b57fe5b604051610160806200267683398101604090815281516020830151918301516060840151608085015160a086015160c087015160e08801516101008901516101208a0151610140909a0151979996979596949593949293919290915b600e8054600160a060020a031990811633600160a060020a0390811691909117835560088c905560098b90556224ea008c01600a55600c805483168f8316179055600d805483168e831617808255600b8c9055600f805485168c851617905560128a90556010805485168a851617905560138890556011805490941687841617909355601485905591811660009081526001602052604080822080546404a817c80090810190915593548316825280822080549094019093558354821681528281208054642540be400001905592541682529020805464ba43b740000190555b505050505050505050505062000292565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022b57805160ff19168380011785556200025b565b828001600101855582156200025b579182015b828111156200025b5782518255916020019190600101906200023e565b5b506200026a9291506200026e565b5090565b6200028f91905b808211156200026a576000815560010162000275565b5090565b90565b6123d480620002a26000396000f3006060604052361561026f5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663028118a1811461031657806302a72a4c14610338578063031f22e71461036657806306fdde0314610388578063095ea7b3146104185780630fdfa5ee1461043957806318160ddd1461046557806323b872dd1461048757806327c1f423146104ae5780632c27e581146104da5780632c71e60a146104fc578063313ce5671461056d5780634433a4401461058f578063529865c9146105b15780635462870d146105dd57806354ecd994146106095780635fd1bbc41461062b578063600e85b71461064d5780636698baaa146106c75780636c182e99146106e95780636c9e27d6146106095780636f2590771461074457806370a08231146107665780637133c0c0146107945780637717403b146107bc5780637d264bad146107de5780638a4b08d91461080a5780638a7c63c51461082c5780638c3466901461084e5780638f84aa09146108655780638fd712ae1461089157806395d89b41146108b35780639754a4d9146109435780639890220b146109875780639b914973146109995780639d61e624146109bb578063a9059cbb146109dd578063b475a1c8146109fe578063b9b8af0b14610a20578063cd72ab6914610a44578063d347c20514610a66578063d719213e14610aa1578063dbc65f8514610ac3578063dd62ed3e14610ae5578063df3c211b14610b19578063e02f8d3314610b4a578063e877715814610b6c578063eb944e4c14610b90578063eed04e6914610bb1578063efe7926814610b4a578063f514f0f914610bf5578063f590aacc14610c17575b6103145b60006008544210156102855760006000fd5b61028d610c21565b156102985760006000fd5b60185460ff16156102a95760006000fd5b6102cd6102b4610c5e565b6102c86127106304c4b40002601654610cb1565b610cca565b604080518281529051919250600160a060020a033316917fe3d4187f6ca4248660cc0ac8b8056515bac4a8132be2eca31d6d0cc170722a7e9181900360200190a25b5b5b50565b005b341561031e57fe5b610326610dae565b60408051918252519081900360200190f35b341561034057fe5b610326600160a060020a0360043516610db7565b60408051918252519081900360200190f35b341561036e57fe5b610326610dd6565b60408051918252519081900360200190f35b341561039057fe5b610398610de2565b6040805160208082528351818301528351919283929083019185019080838382156103de575b8051825260208311156103de57601f1990920191602091820191016103be565b505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561042057fe5b610314600160a060020a0360043516602435610e70565b005b341561044157fe5b610449610f10565b60408051600160a060020a039092168252519081900360200190f35b341561046d57fe5b610326610f1f565b60408051918252519081900360200190f35b341561048f57fe5b610314600160a060020a0360043581169060243516604435610f25565b005b34156104b657fe5b610449610f4b565b60408051600160a060020a039092168252519081900360200190f35b34156104e257fe5b610326610f5a565b60408051918252519081900360200190f35b341561050457fe5b61051b600160a060020a0360043516602435610f60565b60408051600160a060020a039098168852602088019690965267ffffffffffffffff9485168787015292841660608701529216608085015290151560a0840152151560c0830152519081900360e00190f35b341561057557fe5b610326610fe6565b60408051918252519081900360200190f35b341561059757fe5b610326610fec565b60408051918252519081900360200190f35b34156105b957fe5b610449610ff2565b60408051600160a060020a039092168252519081900360200190f35b34156105e557fe5b610449611001565b60408051600160a060020a039092168252519081900360200190f35b341561061157fe5b610326611010565b60408051918252519081900360200190f35b341561063357fe5b610326611019565b60408051918252519081900360200190f35b341561065557fe5b61066c600160a060020a036004351660243561101f565b60408051600160a060020a03909916895260208901979097528787019590955267ffffffffffffffff9384166060880152918316608087015290911660a0850152151560c0840152151560e083015251908190036101000190f35b34156106cf57fe5b61032661123d565b60408051918252519081900360200190f35b34156106f157fe5b610705600160a060020a0360043516611244565b6040805167ffffffffffffffff9092168252519081900360200190f35b341561061157fe5b610326611010565b60408051918252519081900360200190f35b341561074c57fe5b6103266112df565b60408051918252519081900360200190f35b341561076e57fe5b610326600160a060020a03600435166112e6565b60408051918252519081900360200190f35b341561079c57fe5b610326600435602435611305565b60408051918252519081900360200190f35b34156107c457fe5b61032661132b565b60408051918252519081900360200190f35b34156107e657fe5b610449611334565b60408051600160a060020a039092168252519081900360200190f35b341561081257fe5b610326610c5e565b60408051918252519081900360200190f35b341561083457fe5b610326611343565b60408051918252519081900360200190f35b341561085657fe5b6103146004351515611349565b005b341561086d57fe5b610449611378565b60408051600160a060020a039092168252519081900360200190f35b341561089957fe5b610326611387565b60408051918252519081900360200190f35b34156108bb57fe5b610398611397565b6040805160208082528351818301528351919283929083019185019080838382156103de575b8051825260208311156103de57601f1990920191602091820191016103be565b505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561094b57fe5b610314600160a060020a036004351660243567ffffffffffffffff6044358116906064358116906084351660a435151560c4351515611425565b005b341561098f57fe5b6103146116a0565b005b34156109a157fe5b6103266116f6565b60408051918252519081900360200190f35b34156109c357fe5b6103266116fc565b60408051918252519081900360200190f35b34156109e557fe5b610314600160a060020a0360043516602435611702565b005b3415610a0657fe5b610326611744565b60408051918252519081900360200190f35b3415610a2857fe5b610a3061174d565b604080519115158252519081900360200190f35b3415610a4c57fe5b610326611756565b60408051918252519081900360200190f35b3415610a6e57fe5b610326600160a060020a036004351667ffffffffffffffff6024351661175c565b60408051918252519081900360200190f35b3415610aa957fe5b6103266118a5565b60408051918252519081900360200190f35b3415610acb57fe5b6103266118ab565b60408051918252519081900360200190f35b3415610aed57fe5b610326600160a060020a03600435811690602435166118b1565b60408051918252519081900360200190f35b3415610b2157fe5b6103266004356024356044356064356084356118de565b60408051918252519081900360200190f35b3415610b5257fe5b610326611937565b60408051918252519081900360200190f35b3415610b7457fe5b610314600160a060020a036004358116906024351661193e565b005b3415610b9857fe5b610314600160a060020a03600435166024356119e0565b005b3415610bb957fe5b610326611e09565b60408051918252519081900360200190f35b3415610b5257fe5b610326611937565b60408051918252519081900360200190f35b3415610bfd57fe5b610326611e16565b60408051918252519081900360200190f35b610314611e1d565b005b6000600a54421180610c3b575060165464ba43b740009010155b80610c4a5750600b5460155410155b15610c5757506001610c5b565b5060005b90565b60006000610c6e42600854610cb1565b905062093a80811115610c8657628954409150610cad565b62015180811115610ca1576064633db0d8c05b049150610cad565b60646345bcc8805b0491505b5090565b6000610cbf83831115611f47565b508082035b92915050565b6000610cd63484611305565b905081811115610ce65760006000fd5b600c54604051600160a060020a03909116903480156108fc02916000818181858888f193505050501515610d1a5760006000fd5b600e54600160a060020a0316600090815260016020526040902054610d45908263ffffffff610cb116565b600e54600160a060020a03908116600090815260016020526040808220939093553390911681522054610d7e908263ffffffff611f5816565b600160a060020a033316600090815260016020526040902055601680548201905560158054340190555b92915050565b642e90edd00081565b600160a060020a0381166000908152600460205260409020545b919050565b6064633db0d8c05b0481565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b8015801590610ea35750600160a060020a0333811660009081526002602090815260408083209386168352929052205415155b15610eae5760006000fd5b600160a060020a03338116600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35b5050565b601154600160a060020a031681565b60005481565b610f2d610c21565b1515610f395760006000fd5b610f44838383611f74565b5b5b505050565b600f54600160a060020a031681565b600a5481565b600460205281600052604060002081815481101515610f7b57fe5b906000526020600020906003020160005b5080546001820154600290920154600160a060020a03909116935090915067ffffffffffffffff80821691680100000000000000008104821691608060020a8204169060ff60c060020a820481169160c860020a90041687565b60075481565b60165481565b601054600160a060020a031681565b600c54600160a060020a031681565b6404a817c80081565b60085481565b600060006000600060006000600060006000600460008c600160a060020a0316600160a060020a031681526020019081526020016000208a81548110151561106357fe5b906000526020600020906003020160005b5090508060000160009054906101000a9004600160a060020a03169850806001015497508060020160109054906101000a900467ffffffffffffffff1695508060020160009054906101000a900467ffffffffffffffff1694508060020160089054906101000a900467ffffffffffffffff1693508060020160189054906101000a900460ff1692508060020160199054906101000a900460ff16915061122c8160e060405190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182015481526020016002820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016002820160189054906101000a900460ff161515151581526020016002820160199054906101000a900460ff16151515158152505042611fa1565b96505b509295985092959890939650565b62093a8081565b600160a060020a03811660009081526004602052604081205442915b818110156112ce57600160a060020a038416600090815260046020526040902080546112c391908390811061129157fe5b906000526020600020906003020160005b506002015468010000000000000000900467ffffffffffffffff1684611ff1565b92505b600101611260565b5b5050919050565b6404a817c80081565b6201518081565b600160a060020a0381166000908152600160205260409020545b919050565b60006113226113148484612020565b670de0b6b3a764000061204f565b90505b92915050565b64ba43b7400081565b600d54600160a060020a031681565b60095481565b600e5433600160a060020a039081169116146113655760006000fd5b6018805460ff19168215151790555b5b50565b600e54600160a060020a031681565b60646345bcc880610dde565b0481565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e685780601f10610e3d57610100808354040283529160200191610e68565b820191906000526020600020905b815481529060010190602001808311610e4b57829003601f168201915b505050505081565b60008567ffffffffffffffff168567ffffffffffffffff16108061145c57508467ffffffffffffffff168467ffffffffffffffff16105b156114675760006000fd5b60035461147389610db7565b111561147f5760006000fd5b600160a060020a03881660009081526004602052604090208054600181016114a783826122e0565b916000526020600020906003020160005b60e060405190810160405280876114d05760006114d2565b335b600160a060020a03908116825260208083018e905267ffffffffffffffff8c81166040808601919091528c82166060808701919091528f83166080808801919091528d151560a0808901919091528d151560c09889015288518b5473ffffffffffffffffffffffffffffffffffffffff19169716969096178a559387015160018a01559086015160029098018054918701519387015194870151969095015167ffffffffffffffff19909116978216979097176fffffffffffffffff0000000000000000191668010000000000000000928216929092029190911777ffffffffffffffff000000000000000000000000000000001916608060020a92909116919091021778ff000000000000000000000000000000000000000000000000191660c060020a921515929092029190911779ff00000000000000000000000000000000000000000000000000191660c860020a931515939093029290921790915550905061163f8888611702565b87600160a060020a031633600160a060020a03167ff9565aecd648a0466ffb964a79eeccdf1120ad6276189c687a6e9fe73984d9bb8960018503604051808381526020018281526020019250505060405180910390a35b5050505050505050565b600e5433600160a060020a039081169116146116bc5760006000fd5b600e54604051600160a060020a039182169130163180156108fc02916000818181858888f1935050505015156116f25760006000fd5b5b5b565b60175481565b600b5481565b33600160a060020a031682600160a060020a0316141561172157610f0c565b611729610c21565b15156117355760006000fd5b610f0c828261206c565b5b5050565b642540be400081565b60185460ff1681565b60155481565b6000600060006000600061176f87610db7565b935083151561178857611781876112e6565b945061189b565b60009250600091505b8382101561187157600160a060020a0387166000908152600460205260409020805461186391859161185e9190869081106117c857fe5b906000526020600020906003020160005b506040805160e0810182528254600160a060020a031681526001830154602082015260029092015467ffffffffffffffff8082169284019290925268010000000000000000810482166060840152608060020a8104909116608083015260ff60c060020a82048116151560a084015260c860020a90910416151560c082015289612097565b611f58565b92505b600190910190611791565b61188361187d886112e6565b84610cb1565b90506118988161189389896120c0565b6120d4565b94505b5050505092915050565b60125481565b60135481565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60006000838610156118f3576000915061192d565b8286106119025786915061192d565b611927611918886119138989610cb1565b612020565b6119228588610cb1565b61204f565b90508091505b5095945050505050565b6289544081565b611946610c21565b15156119525760006000fd5b600e5433600160a060020a0390811691161461196e5760006000fd5b60185460ff161561197f5760006000fd5b61199f82642540be4000426277f88081016301e133808201600080611425565b600e54600160a060020a0316600090815260016020526040812054610f0c91839190429062eff1008201906303c2670083019080611425565b5b5b5b5b5050565b600160a060020a038216600090815260046020526040812080548291829185908110611a0857fe5b906000526020600020906003020160005b50600281015490935060c060020a900460ff161515611a385760006000fd5b825433600160a060020a03908116911614611a535760006000fd5b600283015460c860020a900460ff16611a6c5733611a70565b61dead5b6040805160e0810182528554600160a060020a0316815260018601546020820152600286015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c0820152909250611afc9042612097565b600160a060020a038616600090815260046020526040902080549192509085908110611b2457fe5b906000526020600020906003020160005b50805473ffffffffffffffffffffffffffffffffffffffff19168155600060018083018290556002909201805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600160a060020a038716815260046020526040902080549091611baa919063ffffffff610cb116565b81548110611bb457fe5b906000526020600020906003020160005b50600160a060020a0386166000908152600460205260409020805486908110611bea57fe5b906000526020600020906003020160005b508154815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03918216178255600180840154908301556002928301805493909201805467ffffffffffffffff191667ffffffffffffffff94851617808255835468010000000000000000908190048616026fffffffffffffffff000000000000000019909116178082558354608060020a9081900490951690940277ffffffffffffffff000000000000000000000000000000001990941693909317808455825460ff60c060020a918290048116151590910278ff0000000000000000000000000000000000000000000000001990921691909117808555925460c860020a9081900490911615150279ff0000000000000000000000000000000000000000000000000019909216919091179091558516600090815260046020526040902080546000190190611d4990826122e0565b50600160a060020a038216600090815260016020526040902054611d73908263ffffffff611f5816565b600160a060020a038084166000908152600160205260408082209390935590871681522054611da8908263ffffffff610cb116565b600160a060020a0380871660008181526001602090815260409182902094909455805185815290519286169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35b5050505050565b60145481565b6289544081565b6224ea0081565b6000600060085442101580611e33575060095442105b15611e3e5760006000fd5b60185460ff1615611e4f5760006000fd5b600f546000925033600160a060020a0390811691161415611e705760125491505b60105433600160a060020a0390811691161415611e8d5760135491505b60115433600160a060020a0390811691161415611eaa5760145491505b811515611eb75760006000fd5b611ede8260646345bcc8805b04016102c86127106301312d0002601754610cb1565b610cca565b9050611f0533611eee3485611305565b42426277f88001426301e133800160006000611425565b60178054820190556040805182815290517f9e352721883879ced8efbcaca8e7316a3367205e490f0829362d23c63819e8ee9181900360200190a15b5b5b5050565b80151561030f5760006000fd5b5b50565b6000828201611f6984821015611f47565b8091505b5092915050565b8281611f80824261175c565b811115611f8d5760006000fd5b611e028585856120ee565b5b5b5050505050565b600061132283602001518367ffffffffffffffff16856080015167ffffffffffffffff16866040015167ffffffffffffffff16876060015167ffffffffffffffff166118de565b90505b92915050565b60008167ffffffffffffffff168367ffffffffffffffff1610156120155781611322565b825b90505b92915050565b6000828202611f6984158061203f575083858381151561203c57fe5b04145b611f47565b8091505b5092915050565b60006000828481151561205e57fe5b0490508091505b5092915050565b3381612078824261175c565b8111156120855760006000fd5b61208f8484612212565b5b5b50505050565b60006113226120a68484611fa1565b60208501519063ffffffff610cb116565b90505b92915050565b6000611322836112e6565b90505b92915050565b60008183106120155781611322565b825b90505b92915050565b6000606060643610156121015760006000fd5b600160a060020a038086166000908152600260209081526040808320338516845282528083205493881683526001909152902054909250612148908463ffffffff611f5816565b600160a060020a03808616600090815260016020526040808220939093559087168152205461217d908463ffffffff610cb116565b600160a060020a0386166000908152600160205260409020556121a6828463ffffffff610cb116565b600160a060020a038087166000818152600260209081526040808320338616845282529182902094909455805187815290519288169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35b5b5050505050565b604060443610156122235760006000fd5b600160a060020a03331660009081526001602052604090205461224c908363ffffffff610cb116565b600160a060020a033381166000908152600160205260408082209390935590851681522054612281908363ffffffff611f5816565b600160a060020a038085166000818152600160209081526040918290209490945580518681529051919333909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35b5b505050565b815481835581811511610f4457600302816003028360005260206000209182019101610f449190612344565b5b505050565b815481835581811511610f4457600302816003028360005260206000209182019101610f449190612344565b5b505050565b610c5b91905b80821115610cad57805473ffffffffffffffffffffffffffffffffffffffff191681556000600182015560028101805479ffffffffffffffffffffffffffffffffffffffffffffffffffff1916905560030161234a565b5090565b905600a165627a7a72305820826d02e653aaddbc978d99fe74ac88ef6f430f39fe9d2a08592ef3c71e540b9d002900000000000000000000000020b014a0b669906781250cdcf9966d5c4ce1527a0000000000000000000000008f493c12c4f5ff5fd510549e1e28ea3dd101e850000000000000000000000000000000000000000000000000000000005955768400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000001523437df0c6f68fa555b244f012458668a4c9f00000000000000000000000000000000000000000000000000000000000030d400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

   Swarm Source:
bzzr://826d02e653aaddbc978d99fe74ac88ef6f430f39fe9d2a08592ef3c71e540b9d

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.