Sponsored Link:   Qravity - the only blockchain entertainment production studio and distributor. Learn more.
 Latest 25 txns from a total Of 44141 transactions
View All

TxHash Age From To Value [TxFee]
0x766c69b6b6f502843a22d20d6447717b99f20119c430d684abe834f42833fb1e2 days 8 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
0x1d0cd94d1cdffc95c6fd7d428eb766d488ec7f270ed5b9917080846adeb008898 days 7 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
0x51ac5bc1a51e97c118ef48be06a1dc8d0b97a4d1bbe8da2a75fd36b4d0c2c6d58 days 7 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0xe0e13b839dfc272dafad7fe32502d0c0358b6464fef7e46f83498fded70b2dbd8 days 7 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x408bb767ea97b4d7dd9739a8ab63f51d09c53046838cddee1f6b6ad860d876ce8 days 7 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00309916
0xf571382a7676245968de5e5cdd48b11e096bd5cba880d60f736a6acd3c9ec3f58 days 9 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.0039678
0xd2b76b7c31fa52f8a88d40ef556c675443df8a041a552ea56edfe1053a065b1f8 days 9 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.0039678
0xc6f60bf3d29d46e0a030f2524b6889de6e671a1d83d10f5796682c76581709708 days 9 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.0039678
0x654da3613e4f4e67ff886060196586e448f755a39b40791b29ac9dfcc87db5718 days 9 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00396776
0x59e2fc811c98bb91a8554396be6243f589001b462aa1b2ca1d2b20d1cae6e5ab16 days 4 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
0xb96c702bade1fa1cc0c558bd6ecc2a4629b8394466586f69984470f6e9efd2c016 days 10 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
0x0d8923677fd84265a873fdca77394b11eca0d7f7bbf428b0656dfb72881214a716 days 10 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0xd68eb8463d28c30f4308bdc6cffdb3f667e0b2986cf08d300cc9e07f7860928416 days 10 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x74b17b2fcf1abc734d8ef153b68606d062a25d37f7947df0b3b7aedd066af68716 days 10 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00309916
0x1496d5dd82361f8e17c8cb907c2030e598f9d9b63d7c346c42d228d423d0fae216 days 10 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0xd2438ae0ea7e4ceada1b2b156935275a961acd5582fa405cc38e11615eb4487618 days 4 hrs ago0xd3c5de52ae72f9194b49964a83f37d87855beea6  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.0001917916
0x51b16b24289043f557173edb35a397b7ae6300f3ddaf28eb11a6e39124484ec618 days 6 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
0xde452bfae5d6e5a01aaf86cc8d3ec29a8dc07979971bc1b3888441b6c72d61fc18 days 6 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x5c521719728b461aede2f648820dcc99ea4333022525dc16bd25662f1751592818 days 6 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0xd8ffc8c2632efe11a980fe58b2b4863f9673b52a038f403ca92cf67f6ad5b16918 days 6 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x050cb5503b207c3cfcd3160020fe54d75e60323a0dd54b885df25da5d1e6b93818 days 6 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0xa838c9222c14d570815d6504cc031a7d8f5aaa680666b4c29c18e4175d64cdd518 days 6 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0xbdaed0316cfcc857835311cd85a23df02eb7b9124158e5ded3747bdff1890b2318 days 6 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x6b0d48bcaf3436f0204c182d5cd798b1f2feee3df5c694a564be2f734d97d71618 days 6 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x611f939f1c6d2c1825caafce91796a8ab8c9cf3e008b4e391b2414bda8fed1fd18 days 6 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00309916
[ 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
0x5240e8719a7b8bcca588bc62ff6d15c03aa37a6db97b1a3fd2c8ea734f6915e94994325144 days 2 hrs ago0x1522900b6dafac587d499a862861c0869be6e4280x29880855d419c6fa0e8c7fdfd985c80f286d914e0.1 Ether
0x957a5b885e01e756389534227c59b844ad9fb69233882c6e7bc6c19a67d0e5d74994317144 days 2 hrs ago0x1522900b6dafac587d499a862861c0869be6e4280x29880855d419c6fa0e8c7fdfd985c80f286d914e4.264 Ether
0x26d30c416477296c75764aceb8309c3737d6dedaf38523d447903ecac08a88354994045144 days 3 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x56b344c2b77c75c75dedfcd2efca2175912e1eea0.00221002 Ether
0xb8442be88db9804a3f9e8f78e0f9dcff06020d65e57ee6050bf88e5b0366b3f04993974144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0xaea7a08008bbc2f0de3e25e39d1b15ff8300d7150.001 Ether
0x01e73a6db3e3c8ef49768a35aad34c7a3974c2e665887d93d5a6a046847926384993970144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0xe9316ac0340eec0546fb219519e11e9a0786b3310.005 Ether
0x2a9ac50539b57b895aa0d8dde647f728a7ce41ce1bc577cef9d31e2f496943be4993969144 days 4 hrs ago0x7948a2504200a755e617364d393d90c6226553490x29880855d419c6fa0e8c7fdfd985c80f286d914e0.5756635054922563 Ether
0x96bdb171919df1b3a487547e54afe1cea945c2fa5d3c8501dd53c6d8b17a558d4993921144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x29e80ad5ba77f5125771b778335a69818e16c7fe0.01 Ether
0xefa19ba093fdb79f566718b5c571bb550d2e90626bcc626a1122393d3aa295a24993916144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x9338ad2ea2b034237891623a810407f6ed83935e0.00000411475745 Ether
0xabe3a64b60bf6c1c081ab0a81fba0e7102261eadac1775e19a7e41547d8175704993916144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x9338ad2ea2b034237891623a810407f6ed83935e0.00243301475745 Ether
0xcace4fe91e496f640fd1ea2e6c6024bbace72457d12a34e39fdc0400a1bfda534993911144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x611dcf7b896a78b2ceb1f1f481608e7fbb5a9b7b0.00046905915262332 Ether
0x926cb5292d9745efb660b52b3961cd10b54d3a5a94dcdf4becff90cba90819044993911144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x611dcf7b896a78b2ceb1f1f481608e7fbb5a9b7b0.028 Ether
0x03c8190f32995ea23dc8edca567bc2881aff1a81b3349858fcc31187eca87bb84993911144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x611dcf7b896a78b2ceb1f1f481608e7fbb5a9b7b0.05 Ether
0x66d74e15fd005a9d84fbd93e22fc5493bfb2f9e0777f20ec1751ea4ca80c5f464993911144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x611dcf7b896a78b2ceb1f1f481608e7fbb5a9b7b0.1 Ether
0x22776c987597ad9624fe09df7769a87913afae6f2dd77cfaed248fce7f4f99ca4993911144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x611dcf7b896a78b2ceb1f1f481608e7fbb5a9b7b0.25 Ether
0x37c6699e6d9fd12fa50a4d684257fa8c34f4272b0dda01bd4a6a127b60e741db4993910144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.2 Ether
0x12bd2de6b718f11518bc39905db9ecec14096ba562c61b0f98e185c11cb744a04993910144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.256 Ether
0x8a75c0d311b68f0ac753a696dd74c4a087e72f6f63060bcf3dad15d0a38934ae4993910144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.256 Ether
0x4ee0f93ee82e19cdaae2ad7f10c736a007ed2cb80110523efa9c2016615547144993910144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.18762366104932798 Ether
0x8250b9a8e3695860c5272499960962549d2bd84c53d80bc01c90eb1255f089c24993910144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.55 Ether
0xd68aec1459094577a393fb7a30f79f04cbcc06f7c3d53d7423d0786495b15d034993910144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea1.25 Ether
0x173530a88f72fbf936be8d7c95dcd55e89030a616f1cbd97b87115e41b2ea7c34993910144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.40336 Ether
0xd283eb3242a0cacf93b513df4c5d644af8140d317c2f2591adb47155ca1e5adb4993910144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea3.059971344749949 Ether
0x317b3001b0cd372e4da6ccf58ff845751496032431552edf63b80d5080c3ee124993910144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea2.984921880330218 Ether
0x08c5b33dad58d917544d27643fd8455e0fb877d4fa9a2f19731bba20109425e34993910144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.95 Ether
0xba81a26ae2d185da6c0faef9847201eab5634f85c7a428b2129ec7fdb99a70f34993910144 days 4 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.1 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact match)
Contract Name: DadiPublicSale
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.11;

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

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

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

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

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


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


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


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


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

}

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

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

  mapping(address => uint256) balances;

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

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

}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
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);
}

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

  mapping (address => mapping (address => uint256)) 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) public 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) public 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;
  }
}


/*****
* @title The DADI Public sale Contract
*/
contract DadiPublicSale is Ownable {
    using SafeMath for uint256;

    StandardToken public token;                         // The DADI ERC20 token */

    uint256 public tokenSupply;
    uint256 public tokensPurchased = 0;
    uint256 public individualCap = 5000 * 1000;         // USD$5,000
    uint256 public tokenPrice = 500;                    // USD$0.50
    uint256 public ethRate;                             // ETH to USD Rate, set by owner: 1 ETH = ethRate USD
    uint256 public maxGasPrice;                         // Max gas price for contributing transactions.
 
    address[] public saleWallets;
    mapping(address => Investor) private investors;
    address[] private investorIndex;

    struct Investor {
      uint256 tokens;
      uint256 contribution;
      bool distributed;
      uint index;
    }

    /*****
    * State for Sale Modes
    *  0 - Preparing:            All contract initialization calls
    *  1 - PublicSale:           Contract is in the Sale Period
    *  2 - PublicSaleFinalized   Sale period is finalized, no more payments are allowed
    *  3 - Success:              Sale Successful
    *  4 - TokenDistribution:    Ssale finished, tokens can be distributed
    *  5 - Closed:               Sale closed, no tokens more can be distributed
    */
    enum SaleState { Preparing, PublicSale, PublicSaleFinalized, Success, TokenDistribution, Closed }
    SaleState public state = SaleState.Preparing;

    event LogTokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 tokens);
    event LogTokenDistribution(address recipient, uint256 tokens);
    event LogRedistributeTokens(address recipient, SaleState _state, uint256 tokens);
    event LogFundTransfer(address wallet, uint256 value);
    event LogRefund(address wallet, uint256 value);
    event LogStateChange(SaleState _state);

    /*****
    * @dev Modifier to check that amount transferred is not 0
    */
    modifier nonZero() {
        require(msg.value != 0);
        _;
    }

    /*****
    * @dev The constructor function to initialize the Public sale
    * @param _token                         address   the address of the ERC20 token for the sale
    * @param _tokenSupply                   uint256   the amount of tokens available
    */
    function DadiPublicSale (StandardToken _token, uint256 _tokenSupply) public {
        require(_token != address(0));
        require(_tokenSupply != 0);

        token = StandardToken(_token);
        tokenSupply = _tokenSupply * (uint256(10) ** 18);
        maxGasPrice = 60000000000;       // 60 Gwei
    }

    /*****
    * @dev Fallback Function to buy the tokens
    */
    function () public nonZero payable {
        require(state == SaleState.PublicSale);
        buyTokens(msg.sender, msg.value);
    }

    /*****
    * @dev Allows the contract owner to add a new distribution wallet, used to hold funds safely
    * @param _wallet        address     The address of the wallet
    * @return success       bool        Returns true if executed successfully
    */
    function addSaleWallet (address _wallet) public onlyOwner returns (bool) {
        require(_wallet != address(0));

        saleWallets.push(_wallet);
        return true;
    }

    /*****
    * @dev Calculates the number of tokens that can be bought for the amount of Wei transferred
    * @param _amount    uint256     The amount of money invested by the investor
    * @return tokens    uint256     The number of tokens purchased for the amount invested
    */
    function calculateTokens (uint256 _amount) public constant returns (uint256 tokens) {
        tokens = _amount * ethRate / tokenPrice;
        return tokens;
    }

    /*****
    * @dev Called by the owner of the contract to modify the sale state
    */
    function setState (uint256 _state) public onlyOwner {
        state = SaleState(uint(_state));
        LogStateChange(state);
    }

    /*****
    * @dev Called by the owner of the contract to start the Public sale
    * @param rate   uint256  the current ETH USD rate, multiplied by 1000
    */
    function startPublicSale (uint256 rate) public onlyOwner {
        state = SaleState.PublicSale;
        updateEthRate(rate);
        LogStateChange(state);
    }

    /*****
    * @dev Allow updating the ETH USD exchange rate
    * @param rate   uint256  the current ETH USD rate, multiplied by 1000
    * @return bool  Return true if successful
    */
    function updateEthRate (uint256 rate) public onlyOwner returns (bool) {
        require(rate >= 100000);
        
        ethRate = rate;
        return true;
    }

    /*****
    * @dev Allow updating the max gas price
    * @param _maxGasPrice   uint256  the maximum gas price for a transaction, in Gwei
    */
    function updateMaxGasPrice(uint256 _maxGasPrice) public onlyOwner {
        require(_maxGasPrice > 0);

        maxGasPrice = _maxGasPrice;
    }

    /*****
    * @dev Allows transfer of tokens to a recipient who has purchased offline, during the PublicSale
    * @param _recipient     address     The address of the recipient of the tokens
    * @param _tokens        uint256     The number of tokens purchased by the recipient
    * @return success       bool        Returns true if executed successfully
    */
    function offlineTransaction (address _recipient, uint256 _tokens) public onlyOwner returns (bool) {
        require(_tokens > 0);

        // Convert to a token with decimals 
        uint256 tokens = _tokens * (uint256(10) ** uint8(18));

        // if the number of tokens is greater than available, reject tx
        if (tokens >= getTokensAvailable()) {
            revert();
        }

        addToInvestor(_recipient, 0, tokens);

        // Increase the count of tokens purchased in the sale
        updateSaleParameters(tokens);

        LogTokenPurchase(msg.sender, _recipient, 0, tokens);

        return true;
    }

    /*****
    * @dev Called by the owner of the contract to finalize the ICO
    *      and redistribute funds (if any)
    */
    function finalizeSale () public onlyOwner {
        state = SaleState.Success;
        LogStateChange(state);

        // Transfer any ETH to one of the sale wallets
        if (this.balance > 0) {
            forwardFunds(this.balance);
        }
    }

    /*****
    * @dev Called by the owner of the contract to close the Sale and redistribute any crumbs.
    * @param recipient     address     The address of the recipient of the tokens
    */
    function closeSale (address recipient) public onlyOwner {
        state = SaleState.Closed;
        LogStateChange(state);

        // redistribute unsold tokens to DADI ecosystem
        uint256 remaining = getTokensAvailable();
        updateSaleParameters(remaining);

        if (remaining > 0) {
            token.transfer(recipient, remaining);
            LogRedistributeTokens(recipient, state, remaining);
        }
    }

    /*****
    * @dev Called by the owner of the contract to allow tokens to be distributed
    */
    function setTokenDistribution () public onlyOwner {
        state = SaleState.TokenDistribution;
        LogStateChange(state);
    }

    /*****
    * @dev Called by the owner of the contract to distribute tokens to investors
    * @param _address       address     The address of the investor for which to distribute tokens
    * @return success       bool        Returns true if executed successfully
    */
    function distributeTokens (address _address) public onlyOwner returns (bool) {
        require(state == SaleState.TokenDistribution);
        
        // get the tokens available for the investor
        uint256 tokens = investors[_address].tokens;
        require(tokens > 0);

        require(investors[_address].distributed == false);

        investors[_address].distributed = true;
        // investors[_address].tokens = 0;
        // investors[_address].contribution = 0;

        token.transfer(_address, tokens);
      
        LogTokenDistribution(_address, tokens);
        return true;
    }

    /*****
    * @dev Called by the owner of the contract to distribute tokens to investors who used a non-ERC20 wallet address
    * @param _purchaseAddress        address     The address the investor used to buy tokens
    * @param _tokenAddress           address     The address to send the tokens to
    * @return success                bool        Returns true if executed successfully
    */
    function distributeToAlternateAddress (address _purchaseAddress, address _tokenAddress) public onlyOwner returns (bool) {
        require(state == SaleState.TokenDistribution);
        
        // get the tokens available for the investor
        uint256 tokens = investors[_purchaseAddress].tokens;
        require(tokens > 0);

        require(investors[_purchaseAddress].distributed == false);

        investors[_purchaseAddress].distributed = true;

        token.transfer(_tokenAddress, tokens);
      
        LogTokenDistribution(_tokenAddress, tokens);
        return true;
    }

    /*****
    * @dev Called by the owner of the contract to redistribute tokens if an investor has been refunded offline
    * @param investorAddress         address     The address the investor used to buy tokens
    * @param recipient               address     The address to send the tokens to
    */
    function redistributeTokens (address investorAddress, address recipient) public onlyOwner {
        uint256 tokens = investors[investorAddress].tokens;
        require(tokens > 0);
        require(investors[investorAddress].distributed == false);
        
        // remove tokens, so they can't be redistributed
        // investors[investorAddress].tokens = 0;
        investors[investorAddress].distributed = true;
        token.transfer(recipient, tokens);

        LogRedistributeTokens(recipient, state, tokens);
    }

    /*****
    * @dev Get the amount of tokens left for purchase
    * @return uint256 the count of tokens available
    */
    function getTokensAvailable () public constant returns (uint256) {
        return tokenSupply - tokensPurchased;
    }

    /*****
    * @dev Get the total count of tokens purchased
    * @return uint256 the count of tokens purchased
    */
    function getTokensPurchased () public constant returns (uint256) {
        return tokensPurchased;
    }

    /*****
    * @dev Converts an amount sent in Wei to the equivalent in USD
    * @param _amount      uint256       the amount sent to the contract, in Wei
    * @return uint256  the amount sent to this contract, in USD
    */
    function ethToUsd (uint256 _amount) public constant returns (uint256) {
        return (_amount * ethRate) / (uint256(10) ** 18);
    }

    /*****
    * @dev Get count of contributors
    * @return uint     the number of unique contributors
    */
    function getInvestorCount () public constant returns (uint count) {
        return investorIndex.length;
    }

    /*****
    * @dev Get an investor
    * @param _address      address       the wallet address of the investor
    * @return uint256  the amount contributed by the user
    * @return uint256  the number of tokens assigned to the user
    * @return uint     the index of the user
    */
    function getInvestor (address _address) public constant returns (uint256 contribution, uint256 tokens, bool distributed, uint index) {
        require(isInvested(_address));
        return(investors[_address].contribution, investors[_address].tokens, investors[_address].distributed, investors[_address].index);
    }

    /*****
    * @dev Get a user's invested state
    * @param _address      address       the wallet address of the user
    * @return bool  true if the user has already contributed
    */
    function isInvested (address _address) internal constant returns (bool isIndeed) {
        if (investorIndex.length == 0) return false;
        return (investorIndex[investors[_address].index] == _address);
    }

    /*****
    * @dev Update a user's invested state
    * @param _address      address       the wallet address of the user
    * @param _value        uint256       the amount contributed in this transaction
    * @param _tokens       uint256       the number of tokens assigned in this transaction
    */
    function addToInvestor(address _address, uint256 _value, uint256 _tokens) internal {
        // add the user to the investorIndex if this is their first contribution
        if (!isInvested(_address)) {
            investors[_address].index = investorIndex.push(_address) - 1;
        }
      
        investors[_address].tokens = investors[_address].tokens.add(_tokens);
        investors[_address].contribution = investors[_address].contribution.add(_value);
        investors[_address].distributed = false;
    }

    /*****
    * @dev Send ether to the sale collection wallets
    */
    function forwardFunds (uint256 _value) internal {
        uint accountNumber;
        address account;

        // move funds to a random saleWallet
        if (saleWallets.length > 0) {
            accountNumber = getRandom(saleWallets.length) - 1;
            account = saleWallets[accountNumber];
            account.transfer(_value);
            LogFundTransfer(account, _value);
        }
    }

    /*****
    * @dev Internal function to assign tokens to the contributor
    * @param _address       address     The address of the contributing investor
    * @param _value         uint256     The amount invested 
    * @return success       bool        Returns true if executed successfully
    */
    function buyTokens (address _address, uint256 _value) internal returns (bool) {
        require(tx.gasprice <= maxGasPrice);

        require(isValidContribution(_address, _value));

        uint256 boughtTokens = calculateTokens(_value);
        require(boughtTokens != 0);

        // if the number of tokens calculated for the given value is 
        // greater than the tokens available, reject the payment
        require(boughtTokens <= getTokensAvailable());

        // update investor state
        addToInvestor(_address, _value, boughtTokens);

        forwardFunds(_value);

        updateSaleParameters(boughtTokens);

        LogTokenPurchase(msg.sender, _address, _value, boughtTokens);

        return true;
    }

    /*****
    * @dev Check that the amount sent in the transaction is below the individual cap
    * Factors in previous transactions by the same investor
    * @param _address         address     The address of the user making the transaction
    * @param _amount          uint256     The amount sent in the transaction
    * @return        bool        Returns true if the amount is valid
    */
    function isValidContribution (address _address, uint256 _amount) internal constant returns (bool valid) {
        return isBelowCap(_amount + investors[_address].contribution); 
    }

    /*****
    * @dev Check that the amount sent in the transaction is below the individual cap
    * @param _amount         uint256     The amount sent in the transaction
    * @return        bool        Returns true if the amount is below the individual cap
    */
    function isBelowCap (uint256 _amount) internal constant returns (bool) {
        return ethToUsd(_amount) < individualCap;
    }

    /*****
    * @dev Generates a random number from 1 to max based on the last block hash
    * @param max     uint  the maximum value 
    * @return a random number
    */
    function getRandom(uint max) internal constant returns (uint randomNumber) {
        return (uint(keccak256(block.blockhash(block.number - 1))) % max) + 1;
    }

    /*****
    * @dev Internal function to modify parameters based on tokens bought
    * @param _tokens        uint256     The number of tokens purchased
    */
    function updateSaleParameters (uint256 _tokens) internal {
        tokensPurchased = tokensPurchased.add(_tokens);
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"individualCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"addSaleWallet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"saleWallets","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"investorAddress","type":"address"},{"name":"recipient","type":"address"}],"name":"redistributeTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxGasPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rate","type":"uint256"}],"name":"updateEthRate","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_maxGasPrice","type":"uint256"}],"name":"updateMaxGasPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalizeSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_purchaseAddress","type":"address"},{"name":"_tokenAddress","type":"address"}],"name":"distributeToAlternateAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"calculateTokens","outputs":[{"name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rate","type":"uint256"}],"name":"startPublicSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"closeSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getInvestor","outputs":[{"name":"contribution","type":"uint256"},{"name":"tokens","type":"uint256"},{"name":"distributed","type":"bool"},{"name":"index","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokensPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"ethToUsd","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInvestorCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setTokenDistribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_state","type":"uint256"}],"name":"setState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTokensAvailable","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"distributeTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_tokens","type":"uint256"}],"name":"offlineTransaction","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_tokenSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"LogTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"LogTokenDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"_state","type":"uint8"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"LogRedistributeTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"wallet","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogFundTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"wallet","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_state","type":"uint8"}],"name":"LogStateChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526000600355624c4b406004556101f46005556000600b60006101000a81548160ff0219169083600581111561003557fe5b0217905550341561004557600080fd5b60405160408061260c83398101604052808051906020019091908051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156100e657600080fd5b600081141515156100f657600080fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a0a8102600281905550640df847580060078190555050506124ab806101616000396000f300606060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630276650b146101c657806308d9a77b146101ef5780631ccea71b146102405780633d1e215d146102a35780633de39c11146102fb5780633f6f7ed614610324578063481463411461035f57806358a687ec14610382578063616d1fab1461039757806371aa60fd1461040757806374817d9b1461043e5780637824407f14610461578063794913701461048a5780637ff9b596146104c35780638da5cb5b146104ec5780638f35a75e1461054157806391667aef146105a7578063946d1480146105d0578063960524e3146106075780639640639114610630578063a9e966b714610645578063aaa5ad6114610668578063b1d17c9814610691578063c19d93fb146106e2578063cc4d819c14610719578063d2d93f9014610742578063f2fde38b1461076b578063f54e7a40146107a4578063fc0c546a146107fe575b6000341415151561018557600080fd5b6001600581111561019257fe5b600b60009054906101000a900460ff1660058111156101ad57fe5b1415156101b957600080fd5b6101c33334610853565b50005b34156101d157600080fd5b6101d9610942565b6040518082815260200191505060405180910390f35b34156101fa57600080fd5b610226600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610948565b604051808215151515815260200191505060405180910390f35b341561024b57600080fd5b6102616004808035906020019091905050610a4d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102ae57600080fd5b6102f9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a8c565b005b341561030657600080fd5b61030e610d78565b6040518082815260200191505060405180910390f35b341561032f57600080fd5b6103456004808035906020019091905050610d7e565b604051808215151515815260200191505060405180910390f35b341561036a57600080fd5b6103806004808035906020019091905050610dfd565b005b341561038d57600080fd5b610395610e71565b005b34156103a257600080fd5b6103ed600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610f87565b604051808215151515815260200191505060405180910390f35b341561041257600080fd5b6104286004808035906020019091905050611289565b6040518082815260200191505060405180910390f35b341561044957600080fd5b61045f60048080359060200190919050506112a7565b005b341561046c57600080fd5b610474611387565b6040518082815260200191505060405180910390f35b341561049557600080fd5b6104c1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061138d565b005b34156104ce57600080fd5b6104d66115fc565b6040518082815260200191505060405180910390f35b34156104f757600080fd5b6104ff611602565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561054c57600080fd5b610578600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611627565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b34156105b257600080fd5b6105ba611769565b6040518082815260200191505060405180910390f35b34156105db57600080fd5b6105f16004808035906020019091905050611773565b6040518082815260200191505060405180910390f35b341561061257600080fd5b61061a611790565b6040518082815260200191505060405180910390f35b341561063b57600080fd5b61064361179d565b005b341561065057600080fd5b6106666004808035906020019091905050611872565b005b341561067357600080fd5b61067b611952565b6040518082815260200191505060405180910390f35b341561069c57600080fd5b6106c8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611960565b604051808215151515815260200191505060405180910390f35b34156106ed57600080fd5b6106f5611c61565b6040518082600581111561070557fe5b60ff16815260200191505060405180910390f35b341561072457600080fd5b61072c611c74565b6040518082815260200191505060405180910390f35b341561074d57600080fd5b610755611c7a565b6040518082815260200191505060405180910390f35b341561077657600080fd5b6107a2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c80565b005b34156107af57600080fd5b6107e4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611dd5565b604051808215151515815260200191505060405180910390f35b341561080957600080fd5b610811611ef1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806007543a1115151561086757600080fd5b6108718484611f17565b151561087c57600080fd5b61088583611289565b90506000811415151561089757600080fd5b61089f611952565b81111515156108ad57600080fd5b6108b8848483611f6e565b6108c1836121bf565b6108ca816122d1565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff370ff51765588b4b12b4ccf319b865dd3499a57df818acfe82c2740e41c878d8584604051808381526020018281526020019250505060405180910390a3600191505092915050565b60045481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156109e157600080fd5b600880548060010182816109f5919061242e565b9160005260206000209001600084909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060019050919050565b600881815481101515610a5c57fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ae957600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600081111515610b3d57600080fd5b60001515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515141515610b9f57600080fd5b6001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610cc757600080fd5b6102c65a03f11515610cd857600080fd5b50505060405180519050507f8a1bda63f5f60920a84caac25ec9eb9f26a6c01e1682229db0268c5a5c92453482600b60009054906101000a900460ff1683604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836005811115610d5857fe5b60ff168152602001828152602001935050505060405180910390a1505050565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ddb57600080fd5b620186a08210151515610ded57600080fd5b8160068190555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e5857600080fd5b600081111515610e6757600080fd5b8060078190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ecc57600080fd5b6003600b60006101000a81548160ff02191690836005811115610eeb57fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600b60009054906101000a900460ff1660405180826005811115610f3157fe5b60ff16815260200191505060405180910390a160003073ffffffffffffffffffffffffffffffffffffffff16311115610f8557610f843073ffffffffffffffffffffffffffffffffffffffff16316121bf565b5b565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610fe557600080fd5b60046005811115610ff257fe5b600b60009054906101000a900460ff16600581111561100d57fe5b14151561101957600080fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060008111151561106d57600080fd5b60001515600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615151415156110cf57600080fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156111f757600080fd5b6102c65a03f1151561120857600080fd5b50505060405180519050507f388b9f37b6cbb3a30ba34c69072e43e77eb3714381366d456e84dcd1430968678382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600191505092915050565b6000600554600654830281151561129c57fe5b049050809050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561130257600080fd5b6001600b60006101000a81548160ff0219169083600581111561132157fe5b021790555061132f81610d7e565b507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600b60009054906101000a900460ff166040518082600581111561137157fe5b60ff16815260200191505060405180910390a150565b60025481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113ea57600080fd5b6005600b60006101000a81548160ff0219169083600581111561140957fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600b60009054906101000a900460ff166040518082600581111561144f57fe5b60ff16815260200191505060405180910390a161146a611952565b9050611475816122d1565b60008111156115f857600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561154b57600080fd5b6102c65a03f1151561155c57600080fd5b50505060405180519050507f8a1bda63f5f60920a84caac25ec9eb9f26a6c01e1682229db0268c5a5c92453482600b60009054906101000a900460ff1683604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018360058111156115dc57fe5b60ff168152602001828152602001935050505060405180910390a15b5050565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080611636856122ef565b151561164157600080fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015493509350935093509193509193565b6000600354905090565b60006012600a0a600654830281151561178857fe5b049050919050565b6000600a80549050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117f857600080fd5b6004600b60006101000a81548160ff0219169083600581111561181757fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600b60009054906101000a900460ff166040518082600581111561185d57fe5b60ff16815260200191505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118cd57600080fd5b8060058111156118d957fe5b600b60006101000a81548160ff021916908360058111156118f657fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600b60009054906101000a900460ff166040518082600581111561193c57fe5b60ff16815260200191505060405180910390a150565b600060035460025403905090565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119be57600080fd5b600460058111156119cb57fe5b600b60009054906101000a900460ff1660058111156119e657fe5b1415156119f257600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600081111515611a4657600080fd5b60001515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515141515611aa857600080fd5b6001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515611bd057600080fd5b6102c65a03f11515611be157600080fd5b50505060405180519050507f388b9f37b6cbb3a30ba34c69072e43e77eb3714381366d456e84dcd1430968678382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001915050919050565b600b60009054906101000a900460ff1681565b60035481565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cdb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611d1757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e3357600080fd5b600083111515611e4257600080fd5b601260ff16600a0a83029050611e56611952565b81101515611e6357600080fd5b611e6f84600083611f6e565b611e78816122d1565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff370ff51765588b4b12b4ccf319b865dd3499a57df818acfe82c2740e41c878d600084604051808381526020018281526020019250505060405180910390a3600191505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f66600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015483016123ba565b905092915050565b611f77836122ef565b1515612029576001600a8054806001018281611f93919061242e565b9160005260206000209001600086909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555003600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055505b61207e81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546123d090919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061211982600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546123d090919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b600080600060088054905011156122cc5760016121e06008805490506123f1565b0391506008828154811015156121f257fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561226057600080fd5b7f35c019e24e057e2b74358b61c59c75be70dc488b1c5f97fd5b9dfe58f6df04e88184604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b505050565b6122e6816003546123d090919063ffffffff16565b60038190555050565b600080600a80549050141561230757600090506123b5565b8173ffffffffffffffffffffffffffffffffffffffff16600a600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015481548110151561236f57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490505b919050565b60006004546123c883611773565b109050919050565b60008082840190508381101515156123e757600080fd5b8091505092915050565b6000600182600143034060405180826000191660001916815260200191505060405180910390206001900481151561242557fe5b06019050919050565b81548183558181151161245557818360005260206000209182019101612454919061245a565b5b505050565b61247c91905b80821115612478576000816000905550600101612460565b5090565b905600a165627a7a72305820f0f35fa61d76143be553ce4f4fe922e18e9ecdb73017b4b62d4493f816f4fe630029000000000000000000000000fb2f26f266fb2805a387230f2aa0a331b4d96fba0000000000000000000000000000000000000000000000000000000002faf080

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

-----Decoded View---------------
Found 2 constructor arguments :
Arg [0] : 000000000000000000000000fb2f26f266fb2805a387230f2aa0a331b4d96fba
Arg [1] : 0000000000000000000000000000000000000000000000000000000002faf080


   Swarm Source:
bzzr://f0f35fa61d76143be553ce4f4fe922e18e9ecdb73017b4b62d4493f816f4fe63

 

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.