ETH Price: $3,360.51 (-2.18%)

Contract

0x871979236d4D7d1293aa811F6EC84DDE40F98ca6
 
Transaction Hash
Method
Block
From
To
Claim90857372019-12-10 23:33:241813 days ago1576020804IN
0x87197923...E40F98ca6
0 ETH0.0017096220
Claim63996592018-09-25 23:32:192254 days ago1537918339IN
0x87197923...E40F98ca6
0 ETH0.0048173460
Claim58690692018-06-28 12:27:432343 days ago1530188863IN
0x87197923...E40F98ca6
0 ETH0.000401445
Claim55855942018-05-09 20:57:492393 days ago1525899469IN
0x87197923...E40F98ca6
0 ETH0.0102541
Claim55393252018-05-01 18:58:352401 days ago1525201115IN
0x87197923...E40F98ca6
0 ETH0.0102541
Claim53999522018-04-07 23:31:092425 days ago1523143869IN
0x87197923...E40F98ca6
0 ETH0.00783468120
Claim48868852018-01-10 19:41:222512 days ago1515613282IN
0x87197923...E40F98ca6
0 ETH0.0045764757
Claim47507012017-12-17 21:55:272536 days ago1513547727IN
0x87197923...E40F98ca6
0 ETH0.0032115640
Claim44803212017-11-03 4:03:382580 days ago1509681818IN
0x87197923...E40F98ca6
0 ETH0.0016860621
Claim44540582017-10-29 21:45:312585 days ago1509313531IN
0x87197923...E40F98ca6
0 ETH0.0040144550
Claim44540412017-10-29 21:42:082585 days ago1509313328IN
0x87197923...E40F98ca6
0 ETH0.0040144550
Claim44540322017-10-29 21:39:552585 days ago1509313195IN
0x87197923...E40F98ca6
0 ETH0.012550
Claim44540222017-10-29 21:38:252585 days ago1509313105IN
0x87197923...E40F98ca6
0 ETH0.007530
Claim44540102017-10-29 21:35:392585 days ago1509312939IN
0x87197923...E40F98ca6
0 ETH0.00630
Claim44385892017-10-27 9:49:392587 days ago1509097779IN
0x87197923...E40F98ca6
0 ETH0.00630
Claim44384802017-10-27 9:25:242587 days ago1509096324IN
0x87197923...E40F98ca6
0 ETH0.00630
Claim44384772017-10-27 9:24:292587 days ago1509096269IN
0x87197923...E40F98ca6
0 ETH0.0006681630
Claim44208872017-10-24 13:18:102590 days ago1508851090IN
0x87197923...E40F98ca6
0 ETH0.0048173460
Claim43689702017-10-15 20:56:042599 days ago1508100964IN
0x87197923...E40F98ca6
0 ETH0.0040144550
Claim43478332017-10-08 13:58:362606 days ago1507471116IN
0x87197923...E40F98ca6
0 ETH0.000240863
Claim43428762017-10-06 20:20:222608 days ago1507321222IN
0x87197923...E40F98ca6
0 ETH0.0040144550
Claim43428572017-10-06 20:12:042608 days ago1507320724IN
0x87197923...E40F98ca6
0 ETH0.0011550
Claim43226292017-09-29 18:47:052615 days ago1506710825IN
0x87197923...E40F98ca6
0 ETH0.0016057820
Claim43211202017-09-29 6:19:352615 days ago1506665975IN
0x87197923...E40F98ca6
0 ETH0.0016860621
Claim43185522017-09-28 8:23:202616 days ago1506587000IN
0x87197923...E40F98ca6
0 ETH0.0016860621
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenVault

Compiler Version
v0.4.8+commit.60cc1668

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2017-06-20
*/

/*
 * ERC20 interface
 * see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 {
  uint public totalSupply;
  function balanceOf(address who) constant returns (uint);
  function allowance(address owner, address spender) constant returns (uint);

  function transfer(address to, uint value) returns (bool ok);
  function transferFrom(address from, address to, uint value) returns (bool ok);
  function approve(address spender, uint value) returns (bool ok);
  event Transfer(address indexed from, address indexed to, uint value);
  event Approval(address indexed owner, address indexed spender, uint value);
}



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

  function safeDiv(uint a, uint b) internal returns (uint) {
    assert(b > 0);
    uint c = a / b;
    assert(a == b * c + a % b);
    return c;
  }

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

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

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

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

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

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

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



/**
 * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation.
 *
 * Based on code by FirstBlood:
 * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, SafeMath {

  mapping(address => uint) balances;
  mapping (address => mapping (address => uint)) allowed;

  // Interface marker
  bool public constant isToken = true;

  /**
   *
   * Fix for the ERC20 short address attack
   *
   * http://vessenes.com/the-erc20-short-address-attack-explained/
   */
  modifier onlyPayloadSize(uint size) {
     if(msg.data.length < size + 4) {
       throw;
     }
     _;
  }

  function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) returns (bool success) {
    balances[msg.sender] = safeSub(balances[msg.sender], _value);
    balances[_to] = safeAdd(balances[_to], _value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  function transferFrom(address _from, address _to, uint _value)  returns (bool success) {
    var _allowance = allowed[_from][msg.sender];

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

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

  function balanceOf(address _owner) constant returns (uint balance) {
    return balances[_owner];
  }

  function approve(address _spender, uint _value) returns (bool success) {

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

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

  function allowance(address _owner, address _spender) constant returns (uint remaining) {
    return allowed[_owner][_spender];
  }

}



/*
 * Ownable
 *
 * Base contract with an owner.
 * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.
 */
contract Ownable {
  address public owner;

  function Ownable() {
    owner = msg.sender;
  }

  modifier onlyOwner() {
    if (msg.sender != owner) {
      throw;
    }
    _;
  }

  function transferOwnership(address newOwner) onlyOwner {
    if (newOwner != address(0)) {
      owner = newOwner;
    }
  }

}


/**
 * Hold tokens for a group investor of investors until the unlock date.
 *
 * After the unlock date the investor can claim their tokens.
 *
 * Steps
 *
 * - Prepare a spreadsheet for token allocation
 * - Deploy this contract, with the sum to tokens to be distributed, from the owner account
 * - Call setInvestor for all investors from the owner account using a local script and CSV input
 * - Move tokensToBeAllocated in this contract usign StandardToken.transfer()
 * - Call lock from the owner account
 * - Wait until the freeze period is over
 * - After the freeze time is over investors can call claim() from their address to get their tokens
 *
 */
contract TokenVault is Ownable {

  /** How many investors we have now */
  uint public investorCount;

  /** Sum from the spreadsheet how much tokens we should get on the contract. If the sum does not match at the time of the lock the vault is faulty and must be recreated.*/
  uint public tokensToBeAllocated;

  /** How many tokens investors have claimed so far */
  uint public totalClaimed;

  /** How many tokens our internal book keeping tells us to have at the time of lock() when all investor data has been loaded */
  uint public tokensAllocatedTotal;

  /** How much we have allocated to the investors invested */
  mapping(address => uint) public balances;

  /** How many tokens investors have claimed */
  mapping(address => uint) public claimed;

  /** When our claim freeze is over (UNIX timestamp) */
  uint public freezeEndsAt;

  /** When this vault was locked (UNIX timestamp) */
  uint public lockedAt;

  /** We can also define our own token, which will override the ICO one ***/
  StandardToken public token;

  /** What is our current state.
   *
   * Loading: Investor data is being loaded and contract not yet locked
   * Holding: Holding tokens for investors
   * Distributing: Freeze time is over, investors can claim their tokens
   */
  enum State{Unknown, Loading, Holding, Distributing}

  /** We allocated tokens for investor */
  event Allocated(address investor, uint value);

  /** We distributed tokens to an investor */
  event Distributed(address investors, uint count);

  event Locked();

  /**
   * Create presale contract where lock up period is given days
   *
   * @param _owner Who can load investor data and lock
   * @param _freezeEndsAt UNIX timestamp when the vault unlocks
   * @param _token Token contract address we are distributing
   * @param _tokensToBeAllocated Total number of tokens this vault will hold - including decimal multiplcation
   *
   */
  function TokenVault(address _owner, uint _freezeEndsAt, StandardToken _token, uint _tokensToBeAllocated) {

    owner = _owner;

    // Invalid owenr
    if(owner == 0) {
      throw;
    }

    token = _token;

    // Check the address looks like a token contract
    if(!token.isToken()) {
      throw;
    }

    // Give argument
    if(_freezeEndsAt == 0) {
      throw;
    }

    freezeEndsAt = _freezeEndsAt;
    tokensToBeAllocated = _tokensToBeAllocated;
  }

  /**
   * Add a presale participatin allocation.
   */
  function setInvestor(address investor, uint amount) public onlyOwner {

    if(lockedAt > 0) {
      // Cannot add new investors after the vault is locked
      throw;
    }

    if(amount == 0) throw; // No empty buys

    // Don't allow reset
    bool existing = balances[investor] > 0;
    if(existing) {
      throw;
    }

    balances[investor] = amount;

    investorCount++;

    tokensAllocatedTotal += amount;

    Allocated(investor, amount);
  }

  /**
   * Lock the vault.
   *
   *
   * - All balances have been loaded in correctly
   * - Tokens are transferred on this vault correctly
   *
   * Checks are in place to prevent creating a vault that is locked with incorrect token balances.
   *
   */
  function lock() onlyOwner {

    if(lockedAt > 0) {
      throw; // Already locked
    }

    // Do not lock the vault if the given tokens on this contract
    // Note that we do not check != so that we can top up little bit extra
    // due to decimal rounding and having issues with it.
    // This extras will be lost forever when the vault is locked.
    if(token.balanceOf(address(this)) < tokensAllocatedTotal) {
      throw;
    }

    lockedAt = now;

    Locked();
  }

  /**
   * In the case locking failed, then allow the owner to reclaim the tokens on the contract.
   */
  function recoverFailedLock() onlyOwner {
    if(lockedAt > 0) {
      throw;
    }

    // Transfer all tokens on this contract back to the owner
    token.transfer(owner, token.balanceOf(address(this)));
  }

  /**
   * Get the current balance of tokens in the vault.
   */
  function getBalance() public constant returns (uint howManyTokensCurrentlyInVault) {
    return token.balanceOf(address(this));
  }

  /**
   * Claim N bought tokens to the investor as the msg sender.
   *
   */
  function claim() {

    address investor = msg.sender;

    if(lockedAt == 0) {
      throw; // We were never locked
    }

    if(now < freezeEndsAt) {
      throw; // Trying to claim early
    }

    if(balances[investor] == 0) {
      // Not our investor
      throw;
    }

    if(claimed[investor] > 0) {
      throw; // Already claimed
    }

    uint amount = balances[investor];

    claimed[investor] = amount;

    totalClaimed += amount;

    token.transfer(investor, amount);

    Distributed(investor, amount);
  }

  /**
   * Resolve the contract umambigious state.
   */
  function getState() public constant returns(State) {
    if(lockedAt == 0) {
      return State.Loading;
    } else if(now > freezeEndsAt) {
      return State.Distributing;
    } else {
      return State.Holding;
    }
  }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"tokensAllocatedTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getBalance","outputs":[{"name":"howManyTokensCurrentlyInVault","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getState","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"freezeEndsAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"investor","type":"address"},{"name":"amount","type":"uint256"}],"name":"setInvestor","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokensToBeAllocated","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"lockedAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"claimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalClaimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"investorCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"lock","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"recoverFailedLock","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"_owner","type":"address"},{"name":"_freezeEndsAt","type":"uint256"},{"name":"_token","type":"address"},{"name":"_tokensToBeAllocated","type":"uint256"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Allocated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investors","type":"address"},{"indexed":false,"name":"count","type":"uint256"}],"name":"Distributed","type":"event"},{"anonymous":false,"inputs":[],"name":"Locked","type":"event"}]

606060405234610000576040516080806109c783398101604090815281516020830151918301516060909301519092905b5b60008054600160a060020a03191633600160a060020a03161790555b60008054600160a060020a031916600160a060020a03868116919091179182905516151561007a57610000565b60098054600160a060020a031916600160a060020a038481169190911791829055604080516000602091820181905282517feefa597b0000000000000000000000000000000000000000000000000000000081529251949093169363eefa597b936004808501948390030190829087803b156100005760325a03f115610000575050604051511515905061010d57610000565b82151561011957610000565b600783905560028190555b505050505b61088f806101386000396000f300606060405236156100d55763ffffffff60e060020a60003504166311e48cdf81146100da57806312065fe0146100f95780631865c57d1461011857806327e235e3146101465780634e71d92d146101715780636962b010146101805780638da5cb5b1461019f5780638e327dd3146101c8578063990ca3ff146101e6578063b216348214610205578063c884ef8314610224578063d54ad2a11461024f578063d7e64c001461026e578063f2fde38b1461028d578063f83d08ba146102a8578063f85b2160146102b7578063fc0c546a146102c6575b610000565b34610000576100e76102ef565b60408051918252519081900360200190f35b34610000576100e76102f5565b60408051918252519081900360200190f35b3461000057610125610361565b6040518082600381116100005760ff16815260200191505060405180910390f35b34610000576100e7600160a060020a0360043516610395565b60408051918252519081900360200190f35b346100005761017e6103a7565b005b34610000576100e76104fb565b60408051918252519081900360200190f35b34610000576101ac610501565b60408051600160a060020a039092168252519081900360200190f35b346100005761017e600160a060020a0360043516602435610510565b005b34610000576100e76105da565b60408051918252519081900360200190f35b34610000576100e76105e0565b60408051918252519081900360200190f35b34610000576100e7600160a060020a03600435166105e6565b60408051918252519081900360200190f35b34610000576100e76105f8565b60408051918252519081900360200190f35b34610000576100e76105fe565b60408051918252519081900360200190f35b346100005761017e600160a060020a0360043516610604565b005b346100005761017e61065c565b005b346100005761017e61074c565b005b34610000576101ac610854565b60408051600160a060020a039092168252519081900360200190f35b60045481565b6009546040805160006020918201819052825160e060020a6370a08231028152600160a060020a0330811660048301529351919493909316926370a0823192602480830193919282900301818787803b156100005760325a03f115610000575050604051519150505b90565b6000600854600014156103765750600161035e565b6007544211156103885750600361035e565b50600261035e565b5b5b90565b60056020526000908152604090205481565b600854339060009015156103ba57610000565b6007544210156103c957610000565b600160a060020a03821660009081526005602052604090205415156103ed57610000565b600160a060020a038216600090815260066020526040812054111561041157610000565b50600160a060020a038082166000818152600560209081526040808320546006835281842081905560038054820190556009548251840185905282517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101969096526024860182905291519095919091169363a9059cbb9360448083019493928390030190829087803b156100005760325a03f11561000057505060408051600160a060020a03851681526020810184905281517fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af93509081900390910190a15b5050565b60075481565b600054600160a060020a031681565b6000805433600160a060020a0390811691161461052c57610000565b6000600854111561053c57610000565b81151561054857610000565b50600160a060020a03821660009081526005602052604081205411801561056e57610000565b600160a060020a038316600081815260056020908152604091829020859055600180548101905560048054860190558151928352820184905280517f472f36e28bb47edb7c69c9e2ac00a77c66b505df54e9c818ac57110b0629e8c39281900390910190a15b5b505050565b60025481565b60085481565b60066020526000908152604090205481565b60035481565b60015481565b60005433600160a060020a0390811691161461061f57610000565b600160a060020a03811615610657576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b5b50565b60005433600160a060020a0390811691161461067757610000565b6000600854111561068757610000565b600454600960009054906101000a9004600160a060020a0316600160a060020a03166370a08231306000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b156100005760325a03f1156100005750505060405180519050101561071b57610000565b426008556040517f0f2e5b6c72c6a4491efd919a9f9a409f324ef0708c11ee57d410c2cb06c0992b90600090a15b5b565b60005433600160a060020a0390811691161461076757610000565b6000600854111561077757610000565b60095460008054604080516020908101849052815160e060020a6370a0823102815230600160a060020a03908116600483015292519583169563a9059cbb95949093169386936370a08231936024808501949193918390030190829087803b156100005760325a03f11561000057505050604051805190506000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b156100005760325a03f115610000575050505b5b565b600954600160a060020a0316815600a165627a7a723058209197b18e3790e1b4a569e375ecda72cae9d754f28b3d12b276c61d1fa641d258002900000000000000000000000000f6bf3c5033e944feddb3dc8ffb4d47af17ef0b0000000000000000000000000000000000000000000000000000000059c1af80000000000000000000000000b64ef51c888972c908cfacf59b47c1afbc0ab8ac000000000000000000000000000000000000000000000000000166ca4abc6c00

Deployed Bytecode

0x606060405236156100d55763ffffffff60e060020a60003504166311e48cdf81146100da57806312065fe0146100f95780631865c57d1461011857806327e235e3146101465780634e71d92d146101715780636962b010146101805780638da5cb5b1461019f5780638e327dd3146101c8578063990ca3ff146101e6578063b216348214610205578063c884ef8314610224578063d54ad2a11461024f578063d7e64c001461026e578063f2fde38b1461028d578063f83d08ba146102a8578063f85b2160146102b7578063fc0c546a146102c6575b610000565b34610000576100e76102ef565b60408051918252519081900360200190f35b34610000576100e76102f5565b60408051918252519081900360200190f35b3461000057610125610361565b6040518082600381116100005760ff16815260200191505060405180910390f35b34610000576100e7600160a060020a0360043516610395565b60408051918252519081900360200190f35b346100005761017e6103a7565b005b34610000576100e76104fb565b60408051918252519081900360200190f35b34610000576101ac610501565b60408051600160a060020a039092168252519081900360200190f35b346100005761017e600160a060020a0360043516602435610510565b005b34610000576100e76105da565b60408051918252519081900360200190f35b34610000576100e76105e0565b60408051918252519081900360200190f35b34610000576100e7600160a060020a03600435166105e6565b60408051918252519081900360200190f35b34610000576100e76105f8565b60408051918252519081900360200190f35b34610000576100e76105fe565b60408051918252519081900360200190f35b346100005761017e600160a060020a0360043516610604565b005b346100005761017e61065c565b005b346100005761017e61074c565b005b34610000576101ac610854565b60408051600160a060020a039092168252519081900360200190f35b60045481565b6009546040805160006020918201819052825160e060020a6370a08231028152600160a060020a0330811660048301529351919493909316926370a0823192602480830193919282900301818787803b156100005760325a03f115610000575050604051519150505b90565b6000600854600014156103765750600161035e565b6007544211156103885750600361035e565b50600261035e565b5b5b90565b60056020526000908152604090205481565b600854339060009015156103ba57610000565b6007544210156103c957610000565b600160a060020a03821660009081526005602052604090205415156103ed57610000565b600160a060020a038216600090815260066020526040812054111561041157610000565b50600160a060020a038082166000818152600560209081526040808320546006835281842081905560038054820190556009548251840185905282517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101969096526024860182905291519095919091169363a9059cbb9360448083019493928390030190829087803b156100005760325a03f11561000057505060408051600160a060020a03851681526020810184905281517fb649c98f58055c520df0dcb5709eff2e931217ff2fb1e21376130d31bbb1c0af93509081900390910190a15b5050565b60075481565b600054600160a060020a031681565b6000805433600160a060020a0390811691161461052c57610000565b6000600854111561053c57610000565b81151561054857610000565b50600160a060020a03821660009081526005602052604081205411801561056e57610000565b600160a060020a038316600081815260056020908152604091829020859055600180548101905560048054860190558151928352820184905280517f472f36e28bb47edb7c69c9e2ac00a77c66b505df54e9c818ac57110b0629e8c39281900390910190a15b5b505050565b60025481565b60085481565b60066020526000908152604090205481565b60035481565b60015481565b60005433600160a060020a0390811691161461061f57610000565b600160a060020a03811615610657576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b5b50565b60005433600160a060020a0390811691161461067757610000565b6000600854111561068757610000565b600454600960009054906101000a9004600160a060020a0316600160a060020a03166370a08231306000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b156100005760325a03f1156100005750505060405180519050101561071b57610000565b426008556040517f0f2e5b6c72c6a4491efd919a9f9a409f324ef0708c11ee57d410c2cb06c0992b90600090a15b5b565b60005433600160a060020a0390811691161461076757610000565b6000600854111561077757610000565b60095460008054604080516020908101849052815160e060020a6370a0823102815230600160a060020a03908116600483015292519583169563a9059cbb95949093169386936370a08231936024808501949193918390030190829087803b156100005760325a03f11561000057505050604051805190506000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b156100005760325a03f115610000575050505b5b565b600954600160a060020a0316815600a165627a7a723058209197b18e3790e1b4a569e375ecda72cae9d754f28b3d12b276c61d1fa641d2580029

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

00000000000000000000000000f6bf3c5033e944feddb3dc8ffb4d47af17ef0b0000000000000000000000000000000000000000000000000000000059c1af80000000000000000000000000b64ef51c888972c908cfacf59b47c1afbc0ab8ac000000000000000000000000000000000000000000000000000166ca4abc6c00

-----Decoded View---------------
Arg [0] : _owner (address): 0x00f6bF3c5033e944FeDdb3dC8ffB4d47AF17ef0b
Arg [1] : _freezeEndsAt (uint256): 1505865600
Arg [2] : _token (address): 0xB64ef51C888972c908CFacf59B47C1AfBC0Ab8aC
Arg [3] : _tokensToBeAllocated (uint256): 394494000000000

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000000f6bf3c5033e944feddb3dc8ffb4d47af17ef0b
Arg [1] : 0000000000000000000000000000000000000000000000000000000059c1af80
Arg [2] : 000000000000000000000000b64ef51c888972c908cfacf59b47c1afbc0ab8ac
Arg [3] : 000000000000000000000000000000000000000000000000000166ca4abc6c00


Swarm Source

bzzr://9197b18e3790e1b4a569e375ecda72cae9d754f28b3d12b276c61d1fa641d258

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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