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

TxHash Age From To Value [TxFee]
0x26599b5d4c79e5f411435ea2da69761071e78920a7dae370ece2d39bf7c53e2b105 days 14 hrs ago0x768d4f1cd8594701be8b906462b73c9040e392df  IN   0xbc05e610eaac542bfa64504025413291beb58d360 Ether0.000986706
0x469ef2956c74f6b955579b4846a8010bfe0609816457cac55d5a205e9623a937116 days 6 hrs ago0x1bfaaef1083423361bf78141275e4d9865b12d07  IN   0xbc05e610eaac542bfa64504025413291beb58d360.627 Ether0.00144486
0x3d22dc4377d307a039b5dff3ec01f24a0cd950e052d91b5b8b757bbcdde560fe120 days 13 hrs ago0x2a22e87392958d16b2345648075a18450f0b43d1  IN   0xbc05e610eaac542bfa64504025413291beb58d360.62 Ether0.00144486
0xdcb20668a0fd129eb60105d751894d8a6b2a89e24ece95c87ff66af4a533dfca142 days 21 hrs ago0xb2f7426d454760caeb91c81563e69402360e5fb5  IN   0xbc05e610eaac542bfa64504025413291beb58d362.373 Ether0.120405
0x8c848c9850eef8728bd22d18108c4bf652b76e31ccc6bb2f4a4279dee88e00f8144 days 10 hrs ago0x8c720ec714107e064be5b5a9682cf4fa5e9a2409  IN   0xbc05e610eaac542bfa64504025413291beb58d360.31 Ether0.001372617
0x3603342370eec64b178998b90910357d98f230dab90e065a6e4cf4f93b37c81e145 days 7 mins ago0x45655dcd49afccf9c6bd6ac803f51340a82b1d00  IN   0xbc05e610eaac542bfa64504025413291beb58d362.38 Ether0.0024081
0x696a1cb96ae343a73a712740505f9e958adb760ec566f585e073c8bb400542aa147 days 11 hrs ago0xa80d50766b9552b3f26c8cdafd11c4c6f7f7bf1c  IN   0xbc05e610eaac542bfa64504025413291beb58d362.372 Ether0.0120405
0x0fc830bcbe25a92827f79980f398d14dd20fb0738bbf159e2d6ce3c4836964e4147 days 18 hrs ago0xa71cc0b56aa80e93ff28265e73831c7704bda36d  IN   0xbc05e610eaac542bfa64504025413291beb58d362.373 Ether0.002432181
0xe85d4051295626b31eb725b0e20c8c618fceafefda5400ae3965dc59f75eb566147 days 23 hrs ago0x06d67bf932502a815df37b93c4830c9ca4e7b417  IN   0xbc05e610eaac542bfa64504025413291beb58d362.374 Ether0.001300374
0x3cb45604ed4600d32e5ec61504b039e7e63dab7c3f541512a16b063ddc1ecdfb148 days 17 hrs ago0x3494ebf968b51a0f638161eb09fdca309a7d5968  IN   0xbc05e610eaac542bfa64504025413291beb58d360.63 Ether0.00144486
0xd50c351d135a902bfbda79c6191e0e793773bccac727dfa5db94ec5d2eb0f9e3148 days 17 hrs ago0x3494ebf968b51a0f638161eb09fdca309a7d5968  IN   0xbc05e610eaac542bfa64504025413291beb58d360.63 Ether0.0024081
0x4e7f715dc027dc66d06329c947a548f1b55bda5ff3dfee3ee277a1fd436d6c1e148 days 17 hrs ago0x3494ebf968b51a0f638161eb09fdca309a7d5968  IN   0xbc05e610eaac542bfa64504025413291beb58d360.628 Ether0.001276293
0xb8286e3fc0c6ec9883b3583e6831441ff811075d11278a582c29bfc3db48db4d149 days 3 hrs ago0x6792090c21d07db2fff0817db22cc27ec9707b21  IN   0xbc05e610eaac542bfa64504025413291beb58d362.372 Ether0.0240882243
0xfa31bf4e9303c229b9257a54d12805a30d7a4480301b3e6597a380441f54316c149 days 5 hrs ago0x8513842746a8c587c710452ea667aaa4dbeae1c2  IN   0xbc05e610eaac542bfa64504025413291beb58d363 Ether0.001059564
0xf80c7c26adbe9a8b71024741a4e22ed731231639bbe9fe473aa032bbfcfd098f149 days 5 hrs ago0x7f796e13349b4d1dc7d5146cd80ba11651c8958d  IN   0xbc05e610eaac542bfa64504025413291beb58d360.4 Ether0.00120405
0xbf6142b89a1f25ad84b0e682bcae25ab7c6e2054947fee9ecde436c4ee6bd2e6150 days 13 mins ago0xa277c67ca954582d6da335b567acd73b02eba6d6  IN   0xbc05e610eaac542bfa64504025413291beb58d360 Ether0.00361215
0x639d84718b0b5614d4a8b3cbd91581707b0a93ea21b4286e52d7087c937484e9150 days 6 hrs ago0x8513842746a8c587c710452ea667aaa4dbeae1c2  IN   0xbc05e610eaac542bfa64504025413291beb58d363 Ether0.001059564
0x871b614f45f1a39b86b047fe3c111094c05c6fc46c9df6373346ca1bef3b2564150 days 6 hrs ago0x8513842746a8c587c710452ea667aaa4dbeae1c2  IN   0xbc05e610eaac542bfa64504025413291beb58d363 Ether0.001071
0xb0264c1ed43aa1ae2a6b6cddf17488c5852940dec8d20800cb2459ab6cac4f42150 days 7 hrs ago0x8513842746a8c587c710452ea667aaa4dbeae1c2  IN   0xbc05e610eaac542bfa64504025413291beb58d363 Ether0.000798
0x5dbcc1440aaf6809a99c0938768f452f31de8b55a62b8c2c0406fc84d328dbba150 days 16 hrs ago0x69cc3ce407ff68e145617372e81fce01d7f71488  IN   0xbc05e610eaac542bfa64504025413291beb58d362.3 Ether0.00120405
0x3702171af47aa646428c2b98d94001930ff88ad2f8b6df9057c8cf614b6b6d8f150 days 21 hrs ago0xc8b31fcd762ad64c593f615fc5d45bd9421b011f  IN   0xbc05e610eaac542bfa64504025413291beb58d362.3 Ether0.0120405
0xf55f30a31a2db707df06a510837eaffa658a3fa8ca898b1f345aedadb8301197151 days 8 hrs ago0x4f067c3ee519fceeb42c7cb02629ccb03c1029e0  IN   0xbc05e610eaac542bfa64504025413291beb58d361.5 Ether0.000001148669
0xf712caf6b265ab29362f8021a304de6e7ea6b459fded99677977dbb3a64ef75d151 days 8 hrs ago0x2139c6e85045337cfb425f3af0e5ba173762cb89  IN   0xbc05e610eaac542bfa64504025413291beb58d360.4698 Ether0.00084
0xc2ec309ea818443364db2fd11ea416c1cd1838eefccb68202c73916d811eacfa151 days 8 hrs ago0x2139c6e85045337cfb425f3af0e5ba173762cb89  IN   0xbc05e610eaac542bfa64504025413291beb58d360.4698 Ether0.00084
0x087deb5988126e557b7666a58719a32b1bb11bf6d6137650e8039bd12e57b931151 days 11 hrs ago0x1d765082d562cc8bffb94fed3e44087c0d48fc2c  IN   0xbc05e610eaac542bfa64504025413291beb58d362.38 Ether0.002384019
[ 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
0x226af3d9833da82fc622128c04fb3e1d17c432ceb6ebd7df9adfe800e7c682eb4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xa3c0d9e3eb96ead25666ed1c6212b0beab5e35ad0.968550314145400688 Ether
0x226af3d9833da82fc622128c04fb3e1d17c432ceb6ebd7df9adfe800e7c682eb4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f1.40925376796247292 Ether
0xc4ae14e00c188fd4e35057e63e3b48d8dba5eea0ca45d2ff3a7fe56d9817c1c34937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.3 Ether
0x8a03980d98915030998d2eb4ecb596962ddb54e124d6881520b265df31347e6c4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360x006b25ff703cfe9c84d0336cbd43ec3712dc67b20.626392126392126393 Ether
0x8a03980d98915030998d2eb4ecb596962ddb54e124d6881520b265df31347e6c4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.373607873607873607 Ether
0x755da3a2640783aa41da205731130e3fe1746f1e9781be1fda564bd8aae1dd8d4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xfb44f8e1a6f036830fb74f80e2b786874bee13d50.000392126392126393 Ether
0x755da3a2640783aa41da205731130e3fe1746f1e9781be1fda564bd8aae1dd8d4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.373607873607873607 Ether
0x4480368dfdb689b57592d86cceb4a804fa4445a406f555275b555a4338f849194937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.373 Ether
0x9c05b9dda88471f73f867c6abc04ff8a96de9ab268aab30688152ee87cd3f0904937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f0.8 Ether
0x11cb950bc98211267ea0403c7d0bff14b49f3d536d649a9bbed11647fea1eab24937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.373 Ether
0xf2c4ca9d985652bf306d90b59ec91b894a3daf8a0a5fc7384ef284c0e2a030db4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360x8ea6f95ea0fa183d690631a3f4ef894a28c06a500.000392126392126393 Ether
0xf2c4ca9d985652bf306d90b59ec91b894a3daf8a0a5fc7384ef284c0e2a030db4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.373607873607873607 Ether
0xf5a5df234a711c9552e464dcf43670a597f18716219a4668b45147b971bb0f884937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.373 Ether
0x2994e610064a1fc0b4ff47a1bd4ccb49206cab5b41ed3d47f25953ddcb26d6ac4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.3736 Ether
0x8ac695b1e868f7df026b0ff063acdf74a5b6474234d81f255dfe8707e2194da74937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.373 Ether
0x2a503db0e723589d1c501f7be9e0aa12c6f6648133d191b65b9338ec6c7431374937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.08 Ether
0x44c95776669d310d0c02d1cff29be77effc11ea5bc0f92ec736ea06112bba1ee4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.08 Ether
0x6a3f22d66dfdfab8775fd2576c2f4af7883b73102170f1da701bf743f5f3af114937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.08 Ether
0x2b4080e13c43bbcdd436191e9d6b6feb48ba8039dc224b1cb525a1f94f0c175b4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.08 Ether
0x696bf9a2f858bc85b3839ccb62efeb6ca225bb0172ed31de775fff832f7b2fdc4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360x875a7dfc5749eacfc5f2725e717d7b17cd5492fa0.000392126392126393 Ether
0x696bf9a2f858bc85b3839ccb62efeb6ca225bb0172ed31de775fff832f7b2fdc4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.373607873607873607 Ether
0x5e2cd5f89096209648e5d79385e317b81b271fa77c1f6b646342c3df61955be14937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xb383fa0cf6acbb65213bb59c9b7b8fdfb96522a60.000392126392126393 Ether
0x5e2cd5f89096209648e5d79385e317b81b271fa77c1f6b646342c3df61955be14937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.373607873607873607 Ether
0x5f887f257306f0941da06248449417428ebc49f012ca818adaba9b097884c6ca4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360x5533f7581850c79565295bf07676e2c47691f4360.000392126392126393 Ether
0x5f887f257306f0941da06248449417428ebc49f012ca818adaba9b097884c6ca4937968152 days 18 hrs ago0xbc05e610eaac542bfa64504025413291beb58d360xe9638c2d07eac8774d46b85e47cf53f52d60239f2.373607873607873607 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact match)
Contract Name: BluzelleTokenSale
Compiler Version: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;

// ----------------------------------------------------------------------------
// Owned - Ownership model with 2 phase transfers
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------


// Implements a simple ownership model with 2-phase transfer.
contract Owned {

   address public owner;
   address public proposedOwner;

   event OwnershipTransferInitiated(address indexed _proposedOwner);
   event OwnershipTransferCompleted(address indexed _newOwner);
   event OwnershipTransferCanceled();


   function Owned() public
   {
      owner = msg.sender;
   }


   modifier onlyOwner() {
      require(isOwner(msg.sender) == true);
      _;
   }


   function isOwner(address _address) public view returns (bool) {
      return (_address == owner);
   }


   function initiateOwnershipTransfer(address _proposedOwner) public onlyOwner returns (bool) {
      require(_proposedOwner != address(0));
      require(_proposedOwner != address(this));
      require(_proposedOwner != owner);

      proposedOwner = _proposedOwner;

      OwnershipTransferInitiated(proposedOwner);

      return true;
   }


   function cancelOwnershipTransfer() public onlyOwner returns (bool) {
      if (proposedOwner == address(0)) {
         return true;
      }

      proposedOwner = address(0);

      OwnershipTransferCanceled();

      return true;
   }


   function completeOwnershipTransfer() public returns (bool) {
      require(msg.sender == proposedOwner);

      owner = msg.sender;
      proposedOwner = address(0);

      OwnershipTransferCompleted(owner);

      return true;
   }
}

// ----------------------------------------------------------------------------
// OpsManaged - Implements an Owner and Ops Permission Model
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------



//
// Implements a security model with owner and ops.
//
contract OpsManaged is Owned {

   address public opsAddress;

   event OpsAddressUpdated(address indexed _newAddress);


   function OpsManaged() public
      Owned()
   {
   }


   modifier onlyOwnerOrOps() {
      require(isOwnerOrOps(msg.sender));
      _;
   }


   function isOps(address _address) public view returns (bool) {
      return (opsAddress != address(0) && _address == opsAddress);
   }


   function isOwnerOrOps(address _address) public view returns (bool) {
      return (isOwner(_address) || isOps(_address));
   }


   function setOpsAddress(address _newOpsAddress) public onlyOwner returns (bool) {
      require(_newOpsAddress != owner);
      require(_newOpsAddress != address(this));

      opsAddress = _newOpsAddress;

      OpsAddressUpdated(opsAddress);

      return true;
   }
}

// ----------------------------------------------------------------------------
// Math - General Math Utility Library
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------


library Math {

   function add(uint256 a, uint256 b) internal pure returns (uint256) {
      uint256 r = a + b;

      require(r >= a);

      return r;
   }


   function sub(uint256 a, uint256 b) internal pure returns (uint256) {
      require(a >= b);

      return a - b;
   }


   function mul(uint256 a, uint256 b) internal pure returns (uint256) {
      uint256 r = a * b;

      require(a == 0 || r / a == b);

      return r;
   }


   function div(uint256 a, uint256 b) internal pure returns (uint256) {
      return a / b;
   }
}

// ----------------------------------------------------------------------------
// ERC20Interface - Standard ERC20 Interface Definition
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// Based on the final ERC20 specification at:
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// ----------------------------------------------------------------------------
contract ERC20Interface {

   event Transfer(address indexed _from, address indexed _to, uint256 _value);
   event Approval(address indexed _owner, address indexed _spender, uint256 _value);

   function name() public view returns (string);
   function symbol() public view returns (string);
   function decimals() public view returns (uint8);
   function totalSupply() public view returns (uint256);

   function balanceOf(address _owner) public view returns (uint256 balance);
   function allowance(address _owner, address _spender) public view returns (uint256 remaining);

   function transfer(address _to, uint256 _value) public returns (bool success);
   function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
   function approve(address _spender, uint256 _value) public returns (bool success);
}

// ----------------------------------------------------------------------------
// ERC20Token - Standard ERC20 Implementation
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------


contract ERC20Token is ERC20Interface {

   using Math for uint256;

   string  private tokenName;
   string  private tokenSymbol;
   uint8   private tokenDecimals;
   uint256 internal tokenTotalSupply;

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


   function ERC20Token(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply, address _initialTokenHolder) public {
      tokenName = _name;
      tokenSymbol = _symbol;
      tokenDecimals = _decimals;
      tokenTotalSupply = _totalSupply;

      // The initial balance of tokens is assigned to the given token holder address.
      balances[_initialTokenHolder] = _totalSupply;

      // Per EIP20, the constructor should fire a Transfer event if tokens are assigned to an account.
      Transfer(0x0, _initialTokenHolder, _totalSupply);
   }


   function name() public view returns (string) {
      return tokenName;
   }


   function symbol() public view returns (string) {
      return tokenSymbol;
   }


   function decimals() public view returns (uint8) {
      return tokenDecimals;
   }


   function totalSupply() public view returns (uint256) {
      return tokenTotalSupply;
   }


   function balanceOf(address _owner) public view returns (uint256 balance) {
      return balances[_owner];
   }


   function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
      return allowed[_owner][_spender];
   }


   function transfer(address _to, uint256 _value) public returns (bool success) {
      balances[msg.sender] = balances[msg.sender].sub(_value);
      balances[_to] = balances[_to].add(_value);

      Transfer(msg.sender, _to, _value);

      return true;
   }


   function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
      balances[_from] = balances[_from].sub(_value);
      allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
      balances[_to] = balances[_to].add(_value);

      Transfer(_from, _to, _value);

      return true;
   }


   function approve(address _spender, uint256 _value) public returns (bool success) {
      allowed[msg.sender][_spender] = _value;

      Approval(msg.sender, _spender, _value);

      return true;
   }
}

// ----------------------------------------------------------------------------
// Finalizable - Basic implementation of the finalization pattern
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------



contract Finalizable is Owned {

   bool public finalized;

   event Finalized();


   function Finalizable() public
      Owned()
   {
      finalized = false;
   }


   function finalize() public onlyOwner returns (bool) {
      require(!finalized);

      finalized = true;

      Finalized();

      return true;
   }
}

// ----------------------------------------------------------------------------
// FinalizableToken - Extension to ERC20Token with ops and finalization
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------



//
// ERC20 token with the following additions:
//    1. Owner/Ops Ownership
//    2. Finalization
//
contract FinalizableToken is ERC20Token, OpsManaged, Finalizable {

   using Math for uint256;


   // The constructor will assign the initial token supply to the owner (msg.sender).
   function FinalizableToken(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public
      ERC20Token(_name, _symbol, _decimals, _totalSupply, msg.sender)
      OpsManaged()
      Finalizable()
   {
   }


   function transfer(address _to, uint256 _value) public returns (bool success) {
      validateTransfer(msg.sender, _to);

      return super.transfer(_to, _value);
   }


   function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
      validateTransfer(msg.sender, _to);

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


   function validateTransfer(address _sender, address _to) private view {
      require(_to != address(0));

      // Once the token is finalized, everybody can transfer tokens.
      if (finalized) {
         return;
      }

      if (isOwner(_to)) {
         return;
      }

      // Before the token is finalized, only owner and ops are allowed to initiate transfers.
      // This allows them to move tokens while the sale is still ongoing for example.
      require(isOwnerOrOps(_sender));
   }
}



// ----------------------------------------------------------------------------
// FlexibleTokenSale - Token Sale Contract
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------



contract FlexibleTokenSale is Finalizable, OpsManaged {

   using Math for uint256;

   //
   // Lifecycle
   //
   uint256 public startTime;
   uint256 public endTime;
   bool public suspended;

   //
   // Pricing
   //
   uint256 public tokensPerKEther;
   uint256 public bonus;
   uint256 public maxTokensPerAccount;
   uint256 public contributionMin;
   uint256 public tokenConversionFactor;

   //
   // Wallets
   //
   address public walletAddress;

   //
   // Token
   //
   FinalizableToken public token;

   //
   // Counters
   //
   uint256 public totalTokensSold;
   uint256 public totalEtherCollected;


   //
   // Events
   //
   event Initialized();
   event TokensPerKEtherUpdated(uint256 _newValue);
   event MaxTokensPerAccountUpdated(uint256 _newMax);
   event BonusUpdated(uint256 _newValue);
   event SaleWindowUpdated(uint256 _startTime, uint256 _endTime);
   event WalletAddressUpdated(address _newAddress);
   event SaleSuspended();
   event SaleResumed();
   event TokensPurchased(address _beneficiary, uint256 _cost, uint256 _tokens);
   event TokensReclaimed(uint256 _amount);


   function FlexibleTokenSale(uint256 _startTime, uint256 _endTime, address _walletAddress) public
      OpsManaged()
   {
      require(_endTime > _startTime);

      require(_walletAddress != address(0));
      require(_walletAddress != address(this));

      walletAddress = _walletAddress;

      finalized = false;
      suspended = false;

      startTime = _startTime;
      endTime   = _endTime;

      // Use some defaults config values. Classes deriving from FlexibleTokenSale
      // should set their own defaults
      tokensPerKEther     = 100000;
      bonus               = 0;
      maxTokensPerAccount = 0;
      contributionMin     = 0.1 ether;

      totalTokensSold     = 0;
      totalEtherCollected = 0;
   }


   function currentTime() public constant returns (uint256) {
      return now;
   }


   // Initialize should be called by the owner as part of the deployment + setup phase.
   // It will associate the sale contract with the token contract and perform basic checks.
   function initialize(FinalizableToken _token) external onlyOwner returns(bool) {
      require(address(token) == address(0));
      require(address(_token) != address(0));
      require(address(_token) != address(this));
      require(address(_token) != address(walletAddress));
      require(isOwnerOrOps(address(_token)) == false);

      token = _token;

      // This factor is used when converting cost <-> tokens.
      // 18 is because of the ETH -> Wei conversion.
      // 3 because prices are in K ETH instead of just ETH.
      // 4 because bonuses are expressed as 0 - 10000 for 0.00% - 100.00% (with 2 decimals).
      tokenConversionFactor = 10**(uint256(18).sub(_token.decimals()).add(3).add(4));
      require(tokenConversionFactor > 0);

      Initialized();

      return true;
   }


   //
   // Owner Configuation
   //

   // Allows the owner to change the wallet address which is used for collecting
   // ether received during the token sale.
   function setWalletAddress(address _walletAddress) external onlyOwner returns(bool) {
      require(_walletAddress != address(0));
      require(_walletAddress != address(this));
      require(_walletAddress != address(token));
      require(isOwnerOrOps(_walletAddress) == false);

      walletAddress = _walletAddress;

      WalletAddressUpdated(_walletAddress);

      return true;
   }


   // Allows the owner to set an optional limit on the amount of tokens that can be purchased
   // by a contributor. It can also be set to 0 to remove limit.
   function setMaxTokensPerAccount(uint256 _maxTokens) external onlyOwner returns(bool) {

      maxTokensPerAccount = _maxTokens;

      MaxTokensPerAccountUpdated(_maxTokens);

      return true;
   }


   // Allows the owner to specify the conversion rate for ETH -> tokens.
   // For example, passing 1,000,000 would mean that 1 ETH would purchase 1000 tokens.
   function setTokensPerKEther(uint256 _tokensPerKEther) external onlyOwner returns(bool) {
      require(_tokensPerKEther > 0);

      tokensPerKEther = _tokensPerKEther;

      TokensPerKEtherUpdated(_tokensPerKEther);

      return true;
   }


   // Allows the owner to set a bonus to apply to all purchases.
   // For example, setting it to 2000 means that instead of receiving 200 tokens,
   // for a given price, contributors would receive 240 tokens (20.00% bonus).
   function setBonus(uint256 _bonus) external onlyOwner returns(bool) {
      require(_bonus <= 10000);

      bonus = _bonus;

      BonusUpdated(_bonus);

      return true;
   }


   // Allows the owner to set a sale window which will allow the sale (aka buyTokens) to
   // receive contributions between _startTime and _endTime. Once _endTime is reached,
   // the sale contract will automatically stop accepting incoming contributions.
   function setSaleWindow(uint256 _startTime, uint256 _endTime) external onlyOwner returns(bool) {
      require(_startTime > 0);
      require(_endTime > _startTime);

      startTime = _startTime;
      endTime   = _endTime;

      SaleWindowUpdated(_startTime, _endTime);

      return true;
   }


   // Allows the owner to suspend the sale until it is manually resumed at a later time.
   function suspend() external onlyOwner returns(bool) {
      if (suspended == true) {
          return false;
      }

      suspended = true;

      SaleSuspended();

      return true;
   }


   // Allows the owner to resume the sale.
   function resume() external onlyOwner returns(bool) {
      if (suspended == false) {
          return false;
      }

      suspended = false;

      SaleResumed();

      return true;
   }


   //
   // Contributions
   //

   // Default payable function which can be used to purchase tokens.
   function () payable public {
      buyTokens(msg.sender);
   }


   // Allows the caller to purchase tokens for a specific beneficiary (proxy purchase).
   function buyTokens(address _beneficiary) public payable returns (uint256) {
      return buyTokensInternal(_beneficiary, bonus);
   }


   function buyTokensInternal(address _beneficiary, uint256 _bonus) internal returns (uint256) {
      require(!finalized);
      require(!suspended);
      require(currentTime() >= startTime);
      require(currentTime() <= endTime);
      require(msg.value >= contributionMin);
      require(_beneficiary != address(0));
      require(_beneficiary != address(this));
      require(_beneficiary != address(token));

      // We don't want to allow the wallet collecting ETH to
      // directly be used to purchase tokens.
      require(msg.sender != address(walletAddress));

      // Check how many tokens are still available for sale.
      uint256 saleBalance = token.balanceOf(address(this));
      require(saleBalance > 0);

      // Calculate how many tokens the contributor could purchase based on ETH received.
      uint256 tokens = msg.value.mul(tokensPerKEther).mul(_bonus.add(10000)).div(tokenConversionFactor);
      require(tokens > 0);

      uint256 cost = msg.value;
      uint256 refund = 0;

      // Calculate what is the maximum amount of tokens that the contributor
      // should be allowed to purchase
      uint256 maxTokens = saleBalance;

      if (maxTokensPerAccount > 0) {
         // There is a maximum amount of tokens per account in place.
         // Check if the user already hit that limit.
         uint256 userBalance = getUserTokenBalance(_beneficiary);
         require(userBalance < maxTokensPerAccount);

         uint256 quotaBalance = maxTokensPerAccount.sub(userBalance);

         if (quotaBalance < saleBalance) {
            maxTokens = quotaBalance;
         }
      }

      require(maxTokens > 0);

      if (tokens > maxTokens) {
         // The contributor sent more ETH than allowed to purchase.
         // Limit the amount of tokens that they can purchase in this transaction.
         tokens = maxTokens;

         // Calculate the actual cost for that new amount of tokens.
         cost = tokens.mul(tokenConversionFactor).div(tokensPerKEther.mul(_bonus.add(10000)));

         if (msg.value > cost) {
            // If the contributor sent more ETH than needed to buy the tokens,
            // the balance should be refunded.
            refund = msg.value.sub(cost);
         }
      }

      // This is the actual amount of ETH that can be sent to the wallet.
      uint256 contribution = msg.value.sub(refund);
      walletAddress.transfer(contribution);

      // Update our stats counters.
      totalTokensSold     = totalTokensSold.add(tokens);
      totalEtherCollected = totalEtherCollected.add(contribution);

      // Transfer tokens to the beneficiary.
      require(token.transfer(_beneficiary, tokens));

      // Issue a refund for the excess ETH, as needed.
      if (refund > 0) {
         msg.sender.transfer(refund);
      }

      TokensPurchased(_beneficiary, cost, tokens);

      return tokens;
   }


   // Returns the number of tokens that the user has purchased. Will be checked against the
   // maximum allowed. Can be overriden in a sub class to change the calculations.
   function getUserTokenBalance(address _beneficiary) internal view returns (uint256) {
      return token.balanceOf(_beneficiary);
   }


   // Allows the owner to take back the tokens that are assigned to the sale contract.
   function reclaimTokens() external onlyOwner returns (bool) {
      uint256 tokens = token.balanceOf(address(this));

      if (tokens == 0) {
         return false;
      }

      address tokenOwner = token.owner();
      require(tokenOwner != address(0));

      require(token.transfer(tokenOwner, tokens));

      TokensReclaimed(tokens);

      return true;
   }
}


// ----------------------------------------------------------------------------
// BluzelleTokenConfig - Token Contract Configuration
//
// Copyright (c) 2017 Bluzelle Networks Pte Ltd.
// http://www.bluzelle.com/
//
// The MIT Licence.
// ----------------------------------------------------------------------------


contract BluzelleTokenConfig {

    string  public constant TOKEN_SYMBOL      = "BLZ";
    string  public constant TOKEN_NAME        = "Bluzelle Token";
    uint8   public constant TOKEN_DECIMALS    = 18;

    uint256 public constant DECIMALSFACTOR    = 10**uint256(TOKEN_DECIMALS);
    uint256 public constant TOKEN_TOTALSUPPLY = 500000000 * DECIMALSFACTOR;
}


// ----------------------------------------------------------------------------
// BluzelleTokenSaleConfig - Token Sale Configuration
//
// Copyright (c) 2017 Bluzelle Networks Pte Ltd.
// http://www.bluzelle.com/
//
// The MIT Licence.
// ----------------------------------------------------------------------------



contract BluzelleTokenSaleConfig is BluzelleTokenConfig {

    //
    // Time
    //
    uint256 public constant INITIAL_STARTTIME      = 1516240800; // 2018-01-18, 02:00:00 UTC
    uint256 public constant INITIAL_ENDTIME        = 1517536800; // 2018-02-02, 02:00:00 UTC
    uint256 public constant INITIAL_STAGE          = 1;


    //
    // Purchases
    //

    // Minimum amount of ETH that can be used for purchase.
    uint256 public constant CONTRIBUTION_MIN      = 0.1 ether;

    // Price of tokens, based on the 1 ETH = 1700 BLZ conversion ratio.
    uint256 public constant TOKENS_PER_KETHER     = 1700000;

    // Amount of bonus applied to the sale. 2000 = 20.00% bonus, 750 = 7.50% bonus, 0 = no bonus.
    uint256 public constant BONUS                 = 0;

    // Maximum amount of tokens that can be purchased for each account.
    uint256 public constant TOKENS_ACCOUNT_MAX    = 17000 * DECIMALSFACTOR;
}


// ----------------------------------------------------------------------------
// BluzelleToken - ERC20 Compatible Token
//
// Copyright (c) 2017 Bluzelle Networks Pte Ltd.
// http://www.bluzelle.com/
//
// The MIT Licence.
// ----------------------------------------------------------------------------



// ----------------------------------------------------------------------------
// The Bluzelle token is a standard ERC20 token with the addition of a few
// concepts such as:
//
// 1. Finalization
// Tokens can only be transfered by contributors after the contract has
// been finalized.
//
// 2. Ops Managed Model
// In addition to owner, there is a ops role which is used during the sale,
// by the sale contract, in order to transfer tokens.
// ----------------------------------------------------------------------------
contract BluzelleToken is FinalizableToken, BluzelleTokenConfig {


   event TokensReclaimed(uint256 _amount);


   function BluzelleToken() public
      FinalizableToken(TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS, TOKEN_TOTALSUPPLY)
   {
   }


   // Allows the owner to reclaim tokens that have been sent to the token address itself.
   function reclaimTokens() public onlyOwner returns (bool) {

      address account = address(this);
      uint256 amount  = balanceOf(account);

      if (amount == 0) {
         return false;
      }

      balances[account] = balances[account].sub(amount);
      balances[owner] = balances[owner].add(amount);

      Transfer(account, owner, amount);

      TokensReclaimed(amount);

      return true;
   }
}


// ----------------------------------------------------------------------------
// BluzelleTokenSale - Token Sale Contract
//
// Copyright (c) 2017 Bluzelle Networks Pte Ltd.
// http://www.bluzelle.com/
//
// The MIT Licence.
// ----------------------------------------------------------------------------



contract BluzelleTokenSale is FlexibleTokenSale, BluzelleTokenSaleConfig {

   //
   // Whitelist
   //

   // This is the stage or whitelist group that is currently in effect.
   // Everybody that's been whitelisted for earlier stages should be able to
   // contribute in the current stage.
   uint256 public currentStage;

   // Keeps track of the amount of bonus to apply for a given stage. If set
   // to 0, the base class bonus will be used.
   mapping(uint256 => uint256) public stageBonus;

   // Keeps track of the amount of tokens that a specific account has received.
   mapping(address => uint256) public accountTokensPurchased;

   // This a mapping of address -> stage that they are allowed to participate in.
   // For example, if someone has been whitelisted for stage 2, they will be able
   // to participate for stages 2 and above but they would not be able to participate
   // in stage 1. A stage value of 0 means that the participant is not whitelisted.
   mapping(address => uint256) public whitelist;


   //
   // Events
   //
   event CurrentStageUpdated(uint256 _newStage);
   event StageBonusUpdated(uint256 _stage, uint256 _bonus);
   event WhitelistedStatusUpdated(address indexed _address, uint256 _stage);


   function BluzelleTokenSale(address wallet) public
      FlexibleTokenSale(INITIAL_STARTTIME, INITIAL_ENDTIME, wallet)
   {
      currentStage        = INITIAL_STAGE;
      tokensPerKEther     = TOKENS_PER_KETHER;
      bonus               = BONUS;
      maxTokensPerAccount = TOKENS_ACCOUNT_MAX;
      contributionMin     = CONTRIBUTION_MIN;
   }


   // Allows the admin to determine what is the current stage for
   // the sale. It can only move forward.
   function setCurrentStage(uint256 _stage) public onlyOwner returns(bool) {
      require(_stage > 0);

      if (currentStage == _stage) {
         return false;
      }

      currentStage = _stage;

      CurrentStageUpdated(_stage);

      return true;
   }


   // Allows the admin to set a bonus amount to apply for a specific stage.
   function setStageBonus(uint256 _stage, uint256 _bonus) public onlyOwner returns(bool) {
      require(_stage > 0);
      require(_bonus <= 10000);

      if (stageBonus[_stage] == _bonus) {
         // Nothing to change.
         return false;
      }

      stageBonus[_stage] = _bonus;

      StageBonusUpdated(_stage, _bonus);

      return true;
   }


   // Allows the owner or ops to add/remove people from the whitelist.
   function setWhitelistedStatus(address _address, uint256 _stage) public onlyOwnerOrOps returns (bool) {
      return setWhitelistedStatusInternal(_address, _stage);
   }


   function setWhitelistedStatusInternal(address _address, uint256 _stage) private returns (bool) {
      require(_address != address(0));
      require(_address != address(this));
      require(_address != walletAddress);

      whitelist[_address] = _stage;

      WhitelistedStatusUpdated(_address, _stage);

      return true;
   }


   // Allows the owner or ops to add/remove people from the whitelist, in batches. This makes
   // it easier/cheaper/faster to upload whitelist data in bulk. Note that the function is using an
   // unbounded loop so the call should take care to not exceed the tx gas limit or block gas limit.
   function setWhitelistedBatch(address[] _addresses, uint256 _stage) public onlyOwnerOrOps returns (bool) {
      require(_addresses.length > 0);

      for (uint256 i = 0; i < _addresses.length; i++) {
         require(setWhitelistedStatusInternal(_addresses[i], _stage));
      }

      return true;
   }


   // This is an extension to the buyToken function in FlexibleTokenSale which also takes
   // care of checking contributors against the whitelist. Since buyTokens supports proxy payments
   // we check that both the sender and the beneficiary have been whitelisted.
   function buyTokensInternal(address _beneficiary, uint256 _bonus) internal returns (uint256) {
      require(whitelist[msg.sender] > 0);
      require(whitelist[_beneficiary] > 0);
      require(currentStage >= whitelist[msg.sender]);

      uint256 _beneficiaryStage = whitelist[_beneficiary];
      require(currentStage >= _beneficiaryStage);

      uint256 applicableBonus = stageBonus[_beneficiaryStage];
      if (applicableBonus == 0) {
         applicableBonus = _bonus;
      }

      uint256 tokensPurchased = super.buyTokensInternal(_beneficiary, applicableBonus);

      accountTokensPurchased[_beneficiary] = accountTokensPurchased[_beneficiary].add(tokensPurchased);

      return tokensPurchased;
   }


   // Returns the number of tokens that the user has purchased. We keep a separate balance from
   // the token contract in case we'd like to do additional sales with new purchase limits. This behavior
   // is different from the base implementation which just checks the token balance from the token
   // contract directly.
   function getUserTokenBalance(address _beneficiary) internal view returns (uint256) {
      return accountTokensPurchased[_beneficiary];
   }
}

    Contract ABI  
[{"constant":false,"inputs":[],"name":"resume","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bonus","type":"uint256"}],"name":"setBonus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokensPerKEther","type":"uint256"}],"name":"setTokensPerKEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"stageBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"cancelOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_ENDTIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stage","type":"uint256"}],"name":"setCurrentStage","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reclaimTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"BONUS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addresses","type":"address[]"},{"name":"_stage","type":"uint256"}],"name":"setWhitelistedBatch","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenConversionFactor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_ACCOUNT_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMALS","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_STARTTIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"}],"name":"setSaleWindow","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"walletAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"suspended","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOpsAddress","type":"address"}],"name":"setOpsAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_TOTALSUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DECIMALSFACTOR","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":"opsAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxTokensPerAccount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensPerKEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_stage","type":"uint256"}],"name":"setWhitelistedStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_walletAddress","type":"address"}],"name":"setWalletAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwnerOrOps","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stage","type":"uint256"},{"name":"_bonus","type":"uint256"}],"name":"setStageBonus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"finalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTION_MIN","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"contributionMin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_proposedOwner","type":"address"}],"name":"initiateOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_STAGE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEtherCollected","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accountTokensPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"suspend","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"completeOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOps","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxTokens","type":"uint256"}],"name":"setMaxTokensPerAccount","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_PER_KETHER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"wallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newStage","type":"uint256"}],"name":"CurrentStageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_stage","type":"uint256"},{"indexed":false,"name":"_bonus","type":"uint256"}],"name":"StageBonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_address","type":"address"},{"indexed":false,"name":"_stage","type":"uint256"}],"name":"WhitelistedStatusUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newValue","type":"uint256"}],"name":"TokensPerKEtherUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newMax","type":"uint256"}],"name":"MaxTokensPerAccountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newValue","type":"uint256"}],"name":"BonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_startTime","type":"uint256"},{"indexed":false,"name":"_endTime","type":"uint256"}],"name":"SaleWindowUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newAddress","type":"address"}],"name":"WalletAddressUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleSuspended","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleResumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_beneficiary","type":"address"},{"indexed":false,"name":"_cost","type":"uint256"},{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokensReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newAddress","type":"address"}],"name":"OpsAddressUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_proposedOwner","type":"address"}],"name":"OwnershipTransferInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newOwner","type":"address"}],"name":"OwnershipTransferCompleted","type":"event"},{"anonymous":false,"inputs":[],"name":"OwnershipTransferCanceled","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000f57600080fd5b604051602080611d718339810160405280805160008054600160a060020a03191633600160a060020a03161790556001805460a060020a60ff02191690559150635a5fffa09050635a73c62082600160a060020a038116151561007157600080fd5b30600160a060020a031681600160a060020a03161415151561009257600080fd5b600b8054600160a060020a03909216600160a060020a03199092169190911790556001805460a060020a60ff02191681556005805460ff191690556003929092556004556000600781905567016345785d8a0000600955600d819055600e55600f55506219f0a060065569039992648a23c8a00000600855611c58806101196000396000f3006060604052600436106102795763ffffffff60e060020a600035041663046f7da281146102855780630b98f975146102ac5780630e9d02cc146102c257806318821400146102d85780631f209d9a1461036257806323452b9c1461038a5780632a9053181461039d5780632f54bf6e146103b0578063312defb4146103cf5780633197cbb6146103e257806338c67b73146103f55780633c54caa51461040b5780634b8624c41461041e5780634bb278f3146104315780635207c3911461044457806353105fbc146104955780635b2b345c146104a85780635b7f415c146104bb5780635bf5d54c146104e457806363b20117146104f7578063677ab6671461050a578063680e354a1461051d5780636ad5b3ea14610536578063702efdf314610565578063707789c51461057857806374c950fb1461059757806375b4d78c146105aa57806378e97925146105bd5780638bc04eb7146105d05780638da5cb5b146105e35780638ea64376146105f65780639a02edfe146106095780639b19251a1461061c578063a5bc770c1461063b578063a9a615e91461064e578063ac1a386a14610670578063adcf59ee1461068f578063aed396c6146106ae578063b3f05b97146106c7578063ba9bb827146106da578063bcc13d1d146106ed578063c0b6f56114610700578063c4d66de81461071f578063c7091c5e1461073e578063c7a0206114610751578063d153b60c14610764578063d18e81b314610777578063d7bb913f1461078a578063e6400bbe146107a9578063e71a7811146107bc578063ec8ac4d8146107cf578063ef326c6d146107e3578063f18e120b14610802578063f527c85614610818578063fc0c546a1461082b575b6102823361083e565b50005b341561029057600080fd5b610298610854565b604051901515815260200160405180910390f35b34156102b757600080fd5b6102986004356108be565b34156102cd57600080fd5b610298600435610926565b34156102e357600080fd5b6102eb61098c565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561032757808201518382015260200161030f565b50505050905090810190601f1680156103545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561036d57600080fd5b6103786004356109c3565b60405190815260200160405180910390f35b341561039557600080fd5b6102986109d5565b34156103a857600080fd5b6102eb610a4a565b34156103bb57600080fd5b610298600160a060020a0360043516610a81565b34156103da57600080fd5b610378610a95565b34156103ed57600080fd5b610378610a9d565b341561040057600080fd5b610298600435610aa3565b341561041657600080fd5b610298610b1b565b341561042957600080fd5b610378610cf7565b341561043c57600080fd5b610298610cfc565b341561044f57600080fd5b61029860046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496505093359350610da492505050565b34156104a057600080fd5b610378610e12565b34156104b357600080fd5b610378610e18565b34156104c657600080fd5b6104ce610e26565b60405160ff909116815260200160405180910390f35b34156104ef57600080fd5b610378610e2b565b341561050257600080fd5b610378610e31565b341561051557600080fd5b610378610e37565b341561052857600080fd5b610298600435602435610e3f565b341561054157600080fd5b610549610ebf565b604051600160a060020a03909116815260200160405180910390f35b341561057057600080fd5b610298610ece565b341561058357600080fd5b610298600160a060020a0360043516610ed7565b34156105a257600080fd5b610378610f82565b34156105b557600080fd5b610378610f92565b34156105c857600080fd5b610378610f98565b34156105db57600080fd5b610378610f9e565b34156105ee57600080fd5b610549610faa565b341561060157600080fd5b610549610fb9565b341561061457600080fd5b610378610fc8565b341561062757600080fd5b610378600160a060020a0360043516610fce565b341561064657600080fd5b610378610fe0565b341561065957600080fd5b610298600160a060020a0360043516602435610fe6565b341561067b57600080fd5b610298600160a060020a036004351661100d565b341561069a57600080fd5b610298600160a060020a03600435166110ea565b34156106b957600080fd5b610298600435602435611104565b34156106d257600080fd5b6102986111ae565b34156106e557600080fd5b6103786111cf565b34156106f857600080fd5b6103786111db565b341561070b57600080fd5b610298600160a060020a03600435166111e1565b341561072a57600080fd5b610298600160a060020a03600435166112a1565b341561074957600080fd5b61037861141f565b341561075c57600080fd5b610378611424565b341561076f57600080fd5b61054961142a565b341561078257600080fd5b610378611439565b341561079557600080fd5b610378600160a060020a036004351661143d565b34156107b457600080fd5b61029861144f565b34156107c757600080fd5b6102986114bf565b610378600160a060020a036004351661083e565b34156107ee57600080fd5b610298600160a060020a036004351661153a565b341561080d57600080fd5b610298600435611567565b341561082357600080fd5b6103786115c0565b341561083657600080fd5b6105496115c7565b600061084c826007546115d6565b90505b919050565b600061085f33610a81565b151560011461086d57600080fd5b60055460ff161515610881575060006108bb565b6005805460ff191690557fbcbdbf400d5c713d9679ffa947f717848591ab5a7d1608c49119db603c4942cb60405160405180910390a15060015b90565b60006108c933610a81565b15156001146108d757600080fd5b6127108211156108e657600080fd5b60078290557f04a7ca0e55f887a637b560614f621b92b79423e20152fea70bc4be66edaee3d68260405190815260200160405180910390a1506001919050565b600061093133610a81565b151560011461093f57600080fd5b6000821161094c57600080fd5b60068290557fee386bebbe46d39825c2b93313aa1ab1dc57d4774cac81c6debb8c611c9227ab8260405190815260200160405180910390a1506001919050565b60408051908101604052600e81527f426c757a656c6c6520546f6b656e000000000000000000000000000000000000602082015281565b60106020526000908152604090205481565b60006109e033610a81565b15156001146109ee57600080fd5b600154600160a060020a03161515610a08575060016108bb565b60018054600160a060020a03191690557f670699162ea7ba4de638b5a57c2148aed9ee8bd69740a5e6a7db727e3886c88b60405160405180910390a150600190565b60408051908101604052600381527f424c5a0000000000000000000000000000000000000000000000000000000000602082015281565b600054600160a060020a0390811691161490565b635a73c62081565b60045481565b6000610aae33610a81565b1515600114610abc57600080fd5b60008211610ac957600080fd5b81600f541415610adb5750600061084f565b600f8290557fbd102993c090f400138a05c1b5b0c9eadb8d94399c432f6522fab9cf26bd180b8260405190815260200160405180910390a1506001919050565b6000806000610b2933610a81565b1515600114610b3757600080fd5b600c54600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610b9057600080fd5b6102c65a03f11515610ba157600080fd5b5050506040518051925050811515610bbc5760009250610cf2565b600c54600160a060020a0316638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610c0457600080fd5b6102c65a03f11515610c1557600080fd5b5050506040518051915050600160a060020a0381161515610c3557600080fd5b600c54600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610c9457600080fd5b6102c65a03f11515610ca557600080fd5b505050604051805190501515610cba57600080fd5b7fbce3cc672456937708767d1642a17cacb1962753bd5cff46c8dbd377906a6b4b8260405190815260200160405180910390a1600192505b505090565b600081565b6000610d0733610a81565b1515600114610d1557600080fd5b60015474010000000000000000000000000000000000000000900460ff1615610d3d57600080fd5b6001805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790557f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a150600190565b600080610db0336110ea565b1515610dbb57600080fd5b6000845111610dc957600080fd5b5060005b8351811015610e0857610df5848281518110610de557fe5b90602001906020020151846116ec565b1515610e0057600080fd5b600101610dcd565b5060019392505050565b600a5481565b69039992648a23c8a0000081565b601281565b600f5481565b600d5481565b635a5fffa081565b6000610e4a33610a81565b1515600114610e5857600080fd5b60008311610e6557600080fd5b828211610e7157600080fd5b600383905560048290557f7291acdf619347e3dd338a8b65d1788570a0f1bc413e94e9e7333d0561c6ed58838360405191825260208201526040908101905180910390a15060015b92915050565b600b54600160a060020a031681565b60055460ff1681565b6000610ee233610a81565b1515600114610ef057600080fd5b600054600160a060020a0383811691161415610f0b57600080fd5b30600160a060020a031682600160a060020a031614151515610f2c57600080fd5b60028054600160a060020a031916600160a060020a038481169190911791829055167f06171a5d6c06d67b0cfa679c07db377a27d1170797663fd98d395229d8c3650860405160405180910390a2506001919050565b6b019d971e4fe8401e7400000081565b60075481565b60035481565b670de0b6b3a764000081565b600054600160a060020a031681565b600254600160a060020a031681565b60085481565b60126020526000908152604090205481565b60065481565b6000610ff1336110ea565b1515610ffc57600080fd5b61100683836116ec565b9392505050565b600061101833610a81565b151560011461102657600080fd5b600160a060020a038216151561103b57600080fd5b30600160a060020a031682600160a060020a03161415151561105c57600080fd5b600c54600160a060020a038381169116141561107757600080fd5b611080826110ea565b1561108a57600080fd5b600b8054600160a060020a031916600160a060020a0384161790557f0428ca271a7bee83fddcf583de5ba0a5a69f42cbe32587b07bb38925ed96de8d82604051600160a060020a03909116815260200160405180910390a1506001919050565b60006110f582610a81565b8061084c575061084c8261153a565b600061110f33610a81565b151560011461111d57600080fd5b6000831161112a57600080fd5b61271082111561113957600080fd5b60008381526010602052604090205482141561115757506000610eb9565b600083815260106020526040908190208390557f1744d5a5c185d64a1877cf5e5950b2e4043b955c9923252820fb9cf6ad2b257590849084905191825260208201526040908101905180910390a150600192915050565b60015474010000000000000000000000000000000000000000900460ff1681565b67016345785d8a000081565b60095481565b60006111ec33610a81565b15156001146111fa57600080fd5b600160a060020a038216151561120f57600080fd5b30600160a060020a031682600160a060020a03161415151561123057600080fd5b600054600160a060020a038381169116141561124b57600080fd5b60018054600160a060020a031916600160a060020a038481169190911791829055167f20f5afdf40bf7b43c89031a5d4369a30b159e512d164aa46124bcb706b4a1caf60405160405180910390a2506001919050565b60006112ac33610a81565b15156001146112ba57600080fd5b600c54600160a060020a0316156112d057600080fd5b600160a060020a03821615156112e557600080fd5b30600160a060020a031682600160a060020a03161415151561130657600080fd5b600b54600160a060020a038381169116141561132157600080fd5b61132a826110ea565b1561133457600080fd5b600c8054600160a060020a031916600160a060020a0384169081179091556113d5906004906113c990600390829063313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561139e57600080fd5b6102c65a03f115156113af57600080fd5b50505060405180516012915060ff1663ffffffff61179816565b9063ffffffff6117ad16565b600a90810a90819055600090116113eb57600080fd5b7f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c860405160405180910390a1506001919050565b600181565b600e5481565b600154600160a060020a031681565b4290565b60116020526000908152604090205481565b600061145a33610a81565b151560011461146857600080fd5b60055460ff16151560011415611480575060006108bb565b6005805460ff191660011790557fe14916b4c867f32e91547d295f9b845b805d5b8c813daa3adbc1597f80a0c5eb60405160405180910390a150600190565b60015460009033600160a060020a039081169116146114dd57600080fd5b60008054600160a060020a03338116600160a060020a0319928316179283905560018054909216909155167f624adc4c72536289dd9d5439ccdeccd8923cb9af95fb626b21935447c77b840760405160405180910390a250600190565b600254600090600160a060020a03161580159061084c575050600254600160a060020a0390811691161490565b600061157233610a81565b151560011461158057600080fd5b60088290557f2de896f66f29831ace4b07f5658ac41de20910c13ce8b8db17bc102a80beff268260405190815260200160405180910390a1506001919050565b6219f0a081565b600c54600160a060020a031681565b600160a060020a03331660009081526012602052604081205481908190819081901161160157600080fd5b600160a060020a0386166000908152601260205260408120541161162457600080fd5b600160a060020a033316600090815260126020526040902054600f54101561164b57600080fd5b600160a060020a038616600090815260126020526040902054600f549093508390101561167757600080fd5b6000838152601060205260409020549150811515611693578491505b61169d86836117bf565b600160a060020a0387166000908152601160205260409020549091506116c9908263ffffffff6117ad16565b600160a060020a0387166000908152601160205260409020559250505092915050565b6000600160a060020a038316151561170357600080fd5b30600160a060020a031683600160a060020a03161415151561172457600080fd5b600b54600160a060020a038481169116141561173f57600080fd5b600160a060020a038316600081815260126020526040908190208490557f5beb3f610f1d5275b6ce198b03b5f6ebdeee3f94c2ed7c2941109390a303cd0f9084905190815260200160405180910390a250600192915050565b6000818310156117a757600080fd5b50900390565b60008282018381101561100657600080fd5b6000806000806000806000806000600160149054906101000a900460ff161515156117e957600080fd5b60055460ff16156117f957600080fd5b600354611804611439565b101561180f57600080fd5b60045461181a611439565b111561182557600080fd5b60095434101561183457600080fd5b600160a060020a038b16151561184957600080fd5b30600160a060020a03168b600160a060020a03161415151561186a57600080fd5b600c54600160a060020a038c81169116141561188557600080fd5b600b5433600160a060020a03908116911614156118a157600080fd5b600c54600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156118fa57600080fd5b6102c65a03f1151561190b57600080fd5b50505060405180519850506000881161192357600080fd5b600a5461196b9061195f61193f8d61271063ffffffff6117ad16565b60065461195390349063ffffffff611bd516565b9063ffffffff611bd516565b9063ffffffff611bfc16565b96506000871161197a57600080fd5b34955060009450879350600060085411156119ca576119988b611c11565b60085490935083106119a957600080fd5b6008546119bc908463ffffffff61179816565b9150878210156119ca578193505b600084116119d757600080fd5b83871115611a3c579295508592611a1f611a0b6119fc8c61271063ffffffff6117ad16565b6006549063ffffffff611bd516565b600a5461195f908a9063ffffffff611bd516565b955085341115611a3c57611a39348763ffffffff61179816565b94505b611a4c348663ffffffff61179816565b600b54909150600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515611a8257600080fd5b600d54611a95908863ffffffff6117ad16565b600d55600e54611aab908263ffffffff6117ad16565b600e55600c54600160a060020a031663a9059cbb8c8960006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611b0d57600080fd5b6102c65a03f11515611b1e57600080fd5b505050604051805190501515611b3357600080fd5b6000851115611b6d57600160a060020a03331685156108fc0286604051600060405180830381858888f193505050501515611b6d57600080fd5b7f8fafebcaf9d154343dad25669bfa277f4fbacd7ac6b0c4fed522580e040a0f338b87896040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150949998505050505050505050565b6000828202831580611bf15750828482811515611bee57fe5b04145b151561100657600080fd5b60008183811515611c0957fe5b049392505050565b600160a060020a0316600090815260116020526040902054905600a165627a7a72305820c8dbbe176deeed0a10c085b277755263dd5fa9e252d70dd1a0720fb7a5a0784d0029000000000000000000000000e9638c2d07eac8774d46b85e47cf53f52d60239f

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

-----Decoded View---------------
Found 1 constructor arguments :
Arg [0] : 000000000000000000000000e9638c2d07eac8774d46b85e47cf53f52d60239f


   Swarm Source:
bzzr://c8dbbe176deeed0a10c085b277755263dd5fa9e252d70dd1a0720fb7a5a0784d

 

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.