Sponsored:   LH-CRYPTO - 200 instruments (BTC, EUR, GOLD, OIL, SHARES). Leverage up to 1:500. OPEN ACCOUNT
 Latest 25 transactions from a total of 84 transactions

TxHash Age From To Value [TxFee]
0x01a394d56ae5a7f8cf0957f9dbeb480eaa6f9db9405b23d1ac0522fb4c9cc8f2154 days 7 hrs ago0xce6bcbdc9fc99daa12f88ddad3313955cb02e50d  IN   SirinLabs_RefundVault0 Ether0.001090231
0xdf8266f065d29f006a88c2aa977f9bb5807dd8bf5747d43a24a9fc88674b9fec157 days 9 hrs ago0xc552cd7ce3a3085539bbb8f05e219623d4dcb7ec  IN   SirinLabs_RefundVault0 Ether0.00153492
0x25177a3c2370a6b7386993b9396aacddff8dbd6c3f704aee083134b93edfd4d0182 days 22 hrs ago0xef6311562a8cb1f1fba5e6f3b8149aee7cb8b57f  IN   SirinLabs_RefundVault0 Ether0.000938367
0x8e3da7e3ab678dfc767b8ec40b50aa29dd6ed13134d7a6915b7f5ff1c1cc2af6217 days 9 hrs ago0xc552cd7ce3a3085539bbb8f05e219623d4dcb7ec  IN   SirinLabs_RefundVault0 Ether0.0084
0x093dfbe8246fac480de52b669dafbb62e4b7489b2c03a4f1b7a1c45cdc780c5b222 days 4 hrs ago0xc552cd7ce3a3085539bbb8f05e219623d4dcb7ec  IN   SirinLabs_RefundVault0 Ether0.00012
0xf7e0516aebc252606ab293528c2cd5b1064f8d97912735bc1ee648a7c5295e82255 days 6 hrs ago0x75fdaaf541b0a4bd2795b7e92bd8643a6a050991  IN   SirinLabs_RefundVault0 Ether0.00095202
0xebe11269e0748ab7f1ae27311c2c49daf24767cf1b404539b3e212858c2a0d5a259 days 5 hrs ago0x75fdaaf541b0a4bd2795b7e92bd8643a6a050991  IN   SirinLabs_RefundVault0 Ether0.00136152
0x8f98b73a9fe840c81ece17fe7b3ad40890c019c530b054ab591121d347b2300d259 days 5 hrs ago0x75fdaaf541b0a4bd2795b7e92bd8643a6a050991  IN   SirinLabs_RefundVault0 Ether0.00136152
0x13867abeb76fa1aca7f19b56853d5d57a267ca3c9d5b2b275816b5a4f7a2e396259 days 5 hrs ago0x75fdaaf541b0a4bd2795b7e92bd8643a6a050991  IN   SirinLabs_RefundVault0 Ether0.0022947
0xebc8b15cb1041387a9c9e887c7bc6164f84c647541b9bbb87309aeff8cbf0ea3259 days 13 hrs ago0x3c1b63e0f1067a364c14134147dbf2eae9b2460c  IN   SirinLabs_RefundVault0 Ether0.001584486
0x6974b779e10f3b71589660d06e3545e354efe9525506efb267f847c9d0c1ff03259 days 14 hrs ago0x9a19cc5ef84c06201ecee42cda4841b1f8100ecd  IN   SirinLabs_RefundVault0 Ether0.00107292
0x9ae1c9c4909012a56578c34fae9482a4a7f8956151aae8416e30bcaf353151fd263 days 9 hrs ago0x2e7fe98baea832772c160fe6436f510e1ae0f3ee  IN   SirinLabs_RefundVault0 Ether0.001136232
0x1491d307eb79eabc3867da6283cac54bd82cd577789dbc6163a3ff9f95201243263 days 13 hrs ago0xeff2ce0beb6b1b582b1bdb392959c23fe5f41168  IN   SirinLabs_RefundVault0 Ether0.002568615
0x74aeb1ce357dc561637838f89d3f286b01227a8b31bec8754d4f886f77e6ad38264 days 4 hrs ago0x490363a262e6c4aae310a5e36c57ffbd8f6a48bb  IN   SirinLabs_RefundVault0 Ether0.000976866
0x67aef4c35e82e0081e25c90f23d64f01a74ff3277f3cd057cc5215b1a588ade4264 days 7 hrs ago0x35abce9092cf57d3a3fcd1706a33a173b2aff342  IN   SirinLabs_RefundVault0 Ether0.002985345
0x35396fb0e8fdcaf80623225c37cb76937ff3d7caa8bf554821ccf96444c839ac264 days 7 hrs ago0xd7dfa87d9ce8f3aed4d6099589b9fe55be0241ee  IN   SirinLabs_RefundVault0 Ether0.001236355
0x9650cb465b32230fd32cce083f4ff95be1329ee0db7d06d6a654f4a988ceb21a264 days 7 hrs ago0x7ac6433058e1df596d9dc764ba35a4b55037f0c5  IN   SirinLabs_RefundVault0 Ether0.001183575
0x894dea675106fe20ee8cc98effb2e89ad585d6fe3e9c4a4983a4b7c07a2d2958264 days 7 hrs ago0xb85b498e5ccbd4d33b2f4140d5bfbb7a34aef047  IN   SirinLabs_RefundVault0 Ether0.001136232
0x5e9836b97eeea04c5f74f75e32366c26ddb729063f7164176962369290ad22f5264 days 8 hrs ago0xdc9fbececa49457fbcb2ee1dfd576a8be06a5c30  IN   SirinLabs_RefundVault0 Ether0.000743889
0x617fcfad02e42b5180023e73d16b742b42ac9716996cff8ecbdf5ee7b81cd508264 days 9 hrs ago0xdc9fbececa49457fbcb2ee1dfd576a8be06a5c30  IN   SirinLabs_RefundVault0 Ether0.001433429
0x3f90466682d080d88ae0ac56cd8c6a7706f85ce5477101943384d10272dd19f3264 days 9 hrs ago0xdc9fbececa49457fbcb2ee1dfd576a8be06a5c30  IN   SirinLabs_RefundVault0 Ether0.001433429
0xa13e34f296f47cdadcdaada63a30a1a94ab24a5a078f5eed82785fc74aa2499c264 days 9 hrs ago0xdc9fbececa49457fbcb2ee1dfd576a8be06a5c30  IN   SirinLabs_RefundVault0 Ether0.001776957
0x61d02ea4277b60a661249f83fec79a87fb71600f82a745483c0f75cd9b7c0c87266 days 8 hrs ago0x774910e6fc4107dbd9bd48aa31c3e690e66d87b6  IN   SirinLabs_RefundVault0 Ether0.001487778
0x069a71036e35e76e420febcda6e5aded9cc7f1b726c6b9e40ce7f67534579655272 days 19 hrs ago0xdc9fbececa49457fbcb2ee1dfd576a8be06a5c30  IN   SirinLabs_RefundVault0 Ether0.001776957
0xe8d6dbd55ca86543e7504fb66b1e70091d5f84be6f853619ce05644b3a7a8765272 days 19 hrs ago0xf39d30fa570db7940e5b3a3e42694665a1449e4b  IN   SirinLabs_RefundVault0 Ether0.000695037
[ 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
0xb664af1994eb3f895a93efceb946908078d9772da42ed0f28ed7a35ef2fcae3d5147935262 days 12 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c520.730707148404206815 Ether
0x9ae1c9c4909012a56578c34fae9482a4a7f8956151aae8416e30bcaf353151fd5142824263 days 9 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c56,000 Ether
0x1491d307eb79eabc3867da6283cac54bd82cd577789dbc6163a3ff9f952012435141751263 days 13 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0xeff2ce0beb6b1b582b1bdb392959c23fe5f411681,477.95 Ether
0x67aef4c35e82e0081e25c90f23d64f01a74ff3277f3cd057cc5215b1a588ade45137485264 days 7 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x35abce9092cf57d3a3fcd1706a33a173b2aff3421 Ether
0x35396fb0e8fdcaf80623225c37cb76937ff3d7caa8bf554821ccf96444c839ac5137431264 days 7 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0xd7dfa87d9ce8f3aed4d6099589b9fe55be0241ee0.954 Ether
0x9650cb465b32230fd32cce083f4ff95be1329ee0db7d06d6a654f4a988ceb21a5137290264 days 7 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c516,000 Ether
0x894dea675106fe20ee8cc98effb2e89ad585d6fe3e9c4a4983a4b7c07a2d29585137279264 days 7 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c511,600 Ether
0x5e9836b97eeea04c5f74f75e32366c26ddb729063f7164176962369290ad22f55137130264 days 8 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c513,182.232089999999999998 Ether
0x617fcfad02e42b5180023e73d16b742b42ac9716996cff8ecbdf5ee7b81cd5085136936264 days 9 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c5200 Ether
0x3f90466682d080d88ae0ac56cd8c6a7706f85ce5477101943384d10272dd19f35136927264 days 9 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c5200 Ether
0xa13e34f296f47cdadcdaada63a30a1a94ab24a5a078f5eed82785fc74aa2499c5136895264 days 9 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c52,000 Ether
0x61d02ea4277b60a661249f83fec79a87fb71600f82a745483c0f75cd9b7c0c875125486266 days 8 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c511,179.49 Ether
0x069a71036e35e76e420febcda6e5aded9cc7f1b726c6b9e40ce7f675345796555087073272 days 19 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c52,000 Ether
0xe8d6dbd55ca86543e7504fb66b1e70091d5f84be6f853619ce05644b3a7a87655087053272 days 19 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0xf39d30fa570db7940e5b3a3e42694665a1449e4b225 Ether
0xcec9ed9950c52f688811d5e0b332fbd1336451dd7b1cefe5e0135a6242f6207d5077027274 days 12 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c52 Ether
0x60e3296d9793d4e5c10b2850bc8e593aa9b319dc322dc2d935efb9a1b78fdcb25071282275 days 11 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x00d3b0d6d429287f77e70eb30af577e9f8ff091412.9703196 Ether
0x4ed3526f035d1d29e4afc7f86b2b5c85b3d2080838e3d08ccad270561d2ddbf05022159283 days 16 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x3e8d41c1f71252905509a7de3c8fa4b9670292f90.3682 Ether
0x3a7371ffdf0fc3b19c4e0e102a874ee76527df21cc3c8fd2e0cf3e50094c9e405013902285 days 2 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c52,000 Ether
0x91a521690a0d0523cc41d79497bcfc318994aa69ef47cbdb817cd7396e82c7354997889287 days 20 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c5601.9999999999999992 Ether
0xb85fa9d41fc2fa8bbd90fb331de5a197610008674dbcbfe0d5cc5198612175764987092289 days 15 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c5800 Ether
0xf95e2de147cfce8a8e7b6ebcf57e0ba92f626cdfe8fa12e083e11e9bd19204c84987091289 days 15 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c5800 wei
0x61fd08f727d92338ece73ab6037b8bcb402b52d0bbf07401e652dad4ee0630d84984467290 days 2 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c50.96 Ether
0xdd18e743608212bb9758561b47eb1e0f8378fb1cf702921f7d78a183102007e64983841290 days 4 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c5600 Ether
0x4d44baab6ade8726f425b85a1d0f89a70fff4ca5e7a3d84beb867cf4bfe184324967759292 days 21 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c5600 Ether
0x9b02711c5c5e544a42ec6607285b4b1a7767bee46a0e2c0fd86dd2d4371324e74964395293 days 11 hrs ago0xa4ddd3977920796bfb14ca8d0fb97491fa72a11d0x5978c1473ee84dd9cf3d90d0e931a79906ee52c59,999 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

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



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;


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

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

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

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


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


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


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


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


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

}




/**
 * @title Claimable
 * @dev Extension for the Ownable contract, where the ownership needs to be claimed.
 * This allows the new owner to accept the transfer.
 */
contract Claimable is Ownable {
    address public pendingOwner;

    /**
     * @dev Modifier throws if called by any account other than the pendingOwner.
     */
    modifier onlyPendingOwner() {
        require(msg.sender == pendingOwner);
        _;
    }

    /**
     * @dev Allows the current owner to set the pendingOwner address.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) onlyOwner public {
        pendingOwner = newOwner;
    }

    /**
     * @dev Allows the pendingOwner address to finalize the transfer.
     */
    function claimOwnership() onlyPendingOwner public {
        OwnershipTransferred(owner, pendingOwner);
        owner = pendingOwner;
        pendingOwner = address(0);
    }
}


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




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




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

  mapping(address => uint256) balances;

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

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

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

}


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

contract LimitedTransferToken is ERC20 {

  /**
   * @dev Checks whether it can transfer or otherwise throws.
   */
  modifier canTransfer(address _sender, uint256 _value) {
   require(_value <= transferableTokens(_sender, uint64(now)));
   _;
  }

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

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

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




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

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


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

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

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

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

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

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

}




/**
 * @title Mintable token
 * @dev Simple ERC20 Token example, with mintable token creation
 * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120
 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol
 */

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

  bool public mintingFinished = false;


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

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

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

/*
    Smart Token interface
*/
contract ISmartToken {

    // =================================================================================================================
    //                                      Members
    // =================================================================================================================

    bool public transfersEnabled = false;

    // =================================================================================================================
    //                                      Event
    // =================================================================================================================

    // triggered when a smart token is deployed - the _token address is defined for forward compatibility, in case we want to trigger the event from a factory
    event NewSmartToken(address _token);
    // triggered when the total supply is increased
    event Issuance(uint256 _amount);
    // triggered when the total supply is decreased
    event Destruction(uint256 _amount);

    // =================================================================================================================
    //                                      Functions
    // =================================================================================================================

    function disableTransfers(bool _disable) public;
    function issue(address _to, uint256 _amount) public;
    function destroy(address _from, uint256 _amount) public;
}


/**
    BancorSmartToken
*/
contract LimitedTransferBancorSmartToken is MintableToken, ISmartToken, LimitedTransferToken {

    // =================================================================================================================
    //                                      Modifiers
    // =================================================================================================================

    /**
     * @dev Throws if destroy flag is not enabled.
     */
    modifier canDestroy() {
        require(destroyEnabled);
        _;
    }

    // =================================================================================================================
    //                                      Members
    // =================================================================================================================

    // We add this flag to avoid users and owner from destroy tokens during crowdsale,
    // This flag is set to false by default and blocks destroy function,
    // We enable destroy option on finalize, so destroy will be possible after the crowdsale.
    bool public destroyEnabled = false;

    // =================================================================================================================
    //                                      Public Functions
    // =================================================================================================================

    function setDestroyEnabled(bool _enable) onlyOwner public {
        destroyEnabled = _enable;
    }

    // =================================================================================================================
    //                                      Impl ISmartToken
    // =================================================================================================================

    //@Override
    function disableTransfers(bool _disable) onlyOwner public {
        transfersEnabled = !_disable;
    }

    //@Override
    function issue(address _to, uint256 _amount) onlyOwner public {
        require(super.mint(_to, _amount));
        Issuance(_amount);
    }

    //@Override
    function destroy(address _from, uint256 _amount) canDestroy public {

        require(msg.sender == _from || msg.sender == owner); // validate input

        balances[_from] = balances[_from].sub(_amount);
        totalSupply = totalSupply.sub(_amount);

        Destruction(_amount);
        Transfer(_from, 0x0, _amount);
    }

    // =================================================================================================================
    //                                      Impl LimitedTransferToken
    // =================================================================================================================


    // Enable/Disable token transfer
    // Tokens will be locked in their wallets until the end of the Crowdsale.
    // @holder - token`s owner
    // @time - not used (framework unneeded functionality)
    //
    // @Override
    function transferableTokens(address holder, uint64 time) public constant returns (uint256) {
        require(transfersEnabled);
        return super.transferableTokens(holder, time);
    }
}




/**
  A Token which is 'Bancor' compatible and can mint new tokens and pause token-transfer functionality
*/
contract SirinSmartToken is LimitedTransferBancorSmartToken {

    // =================================================================================================================
    //                                         Members
    // =================================================================================================================

    string public name = "SIRIN";

    string public symbol = "SRN";

    uint8 public decimals = 18;

    // =================================================================================================================
    //                                         Constructor
    // =================================================================================================================

    function SirinSmartToken() public {
        //Apart of 'Bancor' computability - triggered when a smart token is deployed
        NewSmartToken(address(this));
    }
}


/**
 * @title RefundVault
 * @dev This contract is used for storing TOKENS AND ETHER while a crowdsale is in progress for a period of 60 DAYS.
 * Investor can ask for a full/part refund for his ether against token. Once tokens are Claimed by the investor, they cannot be refunded.
 * After 60 days, all ether will be withdrawn from the vault`s wallet, leaving all tokens to be claimed by the their owners.
 **/
contract RefundVault is Claimable {
    using SafeMath for uint256;

    // =================================================================================================================
    //                                      Enums
    // =================================================================================================================

    enum State { Active, Refunding, Closed }

    // =================================================================================================================
    //                                      Members
    // =================================================================================================================

    // Refund time frame
    uint256 public constant REFUND_TIME_FRAME = 60 days;

    mapping (address => uint256) public depositedETH;
    mapping (address => uint256) public depositedToken;

    address public etherWallet;
    SirinSmartToken public token;
    State public state;
    uint256 public refundStartTime;

    // =================================================================================================================
    //                                      Events
    // =================================================================================================================

    event Active();
    event Closed();
    event Deposit(address indexed beneficiary, uint256 etherWeiAmount, uint256 tokenWeiAmount);
    event RefundsEnabled();
    event RefundedETH(address beneficiary, uint256 weiAmount);
    event TokensClaimed(address indexed beneficiary, uint256 weiAmount);

    // =================================================================================================================
    //                                      Modifiers
    // =================================================================================================================

    modifier isActiveState() {
        require(state == State.Active);
        _;
    }

    modifier isRefundingState() {
        require(state == State.Refunding);
        _;
    }
    
    modifier isCloseState() {
        require(state == State.Closed);
        _;
    }

    modifier isRefundingOrCloseState() {
        require(state == State.Refunding || state == State.Closed);
        _;
    }

    modifier  isInRefundTimeFrame() {
        require(refundStartTime <= now && refundStartTime + REFUND_TIME_FRAME > now);
        _;
    }

    modifier isRefundTimeFrameExceeded() {
        require(refundStartTime + REFUND_TIME_FRAME < now);
        _;
    }
    

    // =================================================================================================================
    //                                      Ctors
    // =================================================================================================================

    function RefundVault(address _etherWallet, SirinSmartToken _token) public {
        require(_etherWallet != address(0));
        require(_token != address(0));

        etherWallet = _etherWallet;
        token = _token;
        state = State.Active;
        Active();
    }

    // =================================================================================================================
    //                                      Public Functions
    // =================================================================================================================

    function deposit(address investor, uint256 tokensAmount) isActiveState onlyOwner public payable {

        depositedETH[investor] = depositedETH[investor].add(msg.value);
        depositedToken[investor] = depositedToken[investor].add(tokensAmount);

        Deposit(investor, msg.value, tokensAmount);
    }

    function close() isRefundingState onlyOwner isRefundTimeFrameExceeded public {
        state = State.Closed;
        Closed();
        etherWallet.transfer(this.balance);
    }

    function enableRefunds() isActiveState onlyOwner public {
        state = State.Refunding;
        refundStartTime = now;

        RefundsEnabled();
    }

    //@dev Refund ether back to the investor in returns of proportional amount of SRN
    //back to the Sirin`s wallet
    function refundETH(uint256 ETHToRefundAmountWei) isInRefundTimeFrame isRefundingState public {
        require(ETHToRefundAmountWei != 0);

        uint256 depositedTokenValue = depositedToken[msg.sender];
        uint256 depositedETHValue = depositedETH[msg.sender];

        require(ETHToRefundAmountWei <= depositedETHValue);

        uint256 refundTokens = ETHToRefundAmountWei.mul(depositedTokenValue).div(depositedETHValue);

        assert(refundTokens > 0);

        depositedETH[msg.sender] = depositedETHValue.sub(ETHToRefundAmountWei);
        depositedToken[msg.sender] = depositedTokenValue.sub(refundTokens);

        token.destroy(address(this),refundTokens);
        msg.sender.transfer(ETHToRefundAmountWei);

        RefundedETH(msg.sender, ETHToRefundAmountWei);
    }

    //@dev Transfer tokens from the vault to the investor while releasing proportional amount of ether
    //to Sirin`s wallet.
    //Can be triggerd by the investor only
    function claimTokens(uint256 tokensToClaim) isRefundingOrCloseState public {
        require(tokensToClaim != 0);
        
        address investor = msg.sender;
        require(depositedToken[investor] > 0);
        
        uint256 depositedTokenValue = depositedToken[investor];
        uint256 depositedETHValue = depositedETH[investor];

        require(tokensToClaim <= depositedTokenValue);

        uint256 claimedETH = tokensToClaim.mul(depositedETHValue).div(depositedTokenValue);

        assert(claimedETH > 0);

        depositedETH[investor] = depositedETHValue.sub(claimedETH);
        depositedToken[investor] = depositedTokenValue.sub(tokensToClaim);

        token.transfer(investor, tokensToClaim);
        if(state != State.Closed) {
            etherWallet.transfer(claimedETH);
        }

        TokensClaimed(investor, tokensToClaim);
    }

    // @dev investors can claim tokens by calling the function
    // @param tokenToClaimAmount - amount of the token to claim
    function claimAllTokens() isRefundingOrCloseState public  {
        uint256 depositedTokenValue = depositedToken[msg.sender];
        claimTokens(depositedTokenValue);
    }


}



/**
 * @title Crowdsale
 * @dev Crowdsale is a base contract for managing a token crowdsale.
 * Crowdsales have a start and end timestamps, where investors can make
 * token purchases and the crowdsale will assign them tokens based
 * on a token per ETH rate. Funds collected are forwarded to a wallet
 * as they arrive.
 */
contract Crowdsale {
    using SafeMath for uint256;

    // The token being sold
    SirinSmartToken public token;

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

    uint256 public endTime;

    // address where funds are collected
    address public wallet;

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

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

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

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

        startTime = _startTime;
        endTime = _endTime;
        rate = _rate;
        wallet = _wallet;
        token = _token;
    }

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

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

        uint256 weiAmount = msg.value;

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

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

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

        forwardFunds();
    }

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

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

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

    // @return the crowdsale rate
    function getRate() public view returns (uint256) {
        return rate;
    }


}


/**
 * @title FinalizableCrowdsale
 * @dev Extension of Crowdsale where an owner can do extra work
 * after finishing.
 */
contract FinalizableCrowdsale is Crowdsale, Claimable {
  using SafeMath for uint256;

  bool public isFinalized = false;

  event Finalized();

  /**
   * @dev Must be called after crowdsale ends, to do some extra finalization
   * work. Calls the contract's finalization function.
   */
  function finalize() onlyOwner public {
    require(!isFinalized);
    require(hasEnded());

    finalization();
    Finalized();

    isFinalized = true;
  }

  /**
   * @dev Can be overridden to add finalization logic. The overriding function
   * should call super.finalization() to ensure the chain of finalization is
   * executed entirely.
   */
  function finalization() internal {
  }
}




contract SirinCrowdsale is FinalizableCrowdsale {

    // =================================================================================================================
    //                                      Constants
    // =================================================================================================================
    // Max amount of known addresses of which will get SRN by 'Grant' method.
    //
    // grantees addresses will be SirinLabs wallets addresses.
    // these wallets will contain SRN tokens that will be used for 2 purposes only -
    // 1. SRN tokens against raised fiat money
    // 2. SRN tokens for presale bonus.
    // we set the value to 10 (and not to 2) because we want to allow some flexibility for cases like fiat money that is raised close to the crowdsale.
    // we limit the value to 10 (and not larger) to limit the run time of the function that process the grantees array.
    uint8 public constant MAX_TOKEN_GRANTEES = 10;

    // SRN to ETH base rate
    uint256 public constant EXCHANGE_RATE = 500;

    // Refund division rate
    uint256 public constant REFUND_DIVISION_RATE = 2;

    // =================================================================================================================
    //                                      Modifiers
    // =================================================================================================================

    /**
     * @dev Throws if called not during the crowdsale time frame
     */
    modifier onlyWhileSale() {
        require(isActive());
        _;
    }

    // =================================================================================================================
    //                                      Members
    // =================================================================================================================

    // wallets address for 60% of SRN allocation
    address public walletTeam;   //10% of the total number of SRN tokens will be allocated to the team
    address public walletOEM;       //10% of the total number of SRN tokens will be allocated to OEM’s, Operating System implementation, SDK developers and rebate to device and Shield OS™ users
    address public walletBounties;  //5% of the total number of SRN tokens will be allocated to professional fees and Bounties
    address public walletReserve;   //35% of the total number of SRN tokens will be allocated to SIRIN LABS and as a reserve for the company to be used for future strategic plans for the created ecosystem

    // Funds collected outside the crowdsale in wei
    uint256 public fiatRaisedConvertedToWei;

    //Grantees - used for non-ether and presale bonus token generation
    address[] public presaleGranteesMapKeys;
    mapping (address => uint256) public presaleGranteesMap;  //address=>wei token amount

    // The refund vault
    RefundVault public refundVault;

    // =================================================================================================================
    //                                      Events
    // =================================================================================================================
    event GrantAdded(address indexed _grantee, uint256 _amount);

    event GrantUpdated(address indexed _grantee, uint256 _oldAmount, uint256 _newAmount);

    event GrantDeleted(address indexed _grantee, uint256 _hadAmount);

    event FiatRaisedUpdated(address indexed _address, uint256 _fiatRaised);

    event TokenPurchaseWithGuarantee(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);

    // =================================================================================================================
    //                                      Constructors
    // =================================================================================================================

    function SirinCrowdsale(uint256 _startTime,
    uint256 _endTime,
    address _wallet,
    address _walletTeam,
    address _walletOEM,
    address _walletBounties,
    address _walletReserve,
    SirinSmartToken _sirinSmartToken,
    RefundVault _refundVault)
    public
    Crowdsale(_startTime, _endTime, EXCHANGE_RATE, _wallet, _sirinSmartToken) {
        require(_walletTeam != address(0));
        require(_walletOEM != address(0));
        require(_walletBounties != address(0));
        require(_walletReserve != address(0));
        require(_sirinSmartToken != address(0));
        require(_refundVault != address(0));

        walletTeam = _walletTeam;
        walletOEM = _walletOEM;
        walletBounties = _walletBounties;
        walletReserve = _walletReserve;

        token = _sirinSmartToken;
        refundVault  = _refundVault;
    }

    // =================================================================================================================
    //                                      Impl Crowdsale
    // =================================================================================================================

    // @return the rate in SRN per 1 ETH according to the time of the tx and the SRN pricing program.
    // @Override
    function getRate() public view returns (uint256) {
        if (now < (startTime.add(24 hours))) {return 1000;}
        if (now < (startTime.add(2 days))) {return 950;}
        if (now < (startTime.add(3 days))) {return 900;}
        if (now < (startTime.add(4 days))) {return 855;}
        if (now < (startTime.add(5 days))) {return 810;}
        if (now < (startTime.add(6 days))) {return 770;}
        if (now < (startTime.add(7 days))) {return 730;}
        if (now < (startTime.add(8 days))) {return 690;}
        if (now < (startTime.add(9 days))) {return 650;}
        if (now < (startTime.add(10 days))) {return 615;}
        if (now < (startTime.add(11 days))) {return 580;}
        if (now < (startTime.add(12 days))) {return 550;}
        if (now < (startTime.add(13 days))) {return 525;}

        return rate;
    }

    // =================================================================================================================
    //                                      Impl FinalizableCrowdsale
    // =================================================================================================================

    //@Override
    function finalization() internal onlyOwner {
        super.finalization();

        // granting bonuses for the pre crowdsale grantees:
        for (uint256 i = 0; i < presaleGranteesMapKeys.length; i++) {
            token.issue(presaleGranteesMapKeys[i], presaleGranteesMap[presaleGranteesMapKeys[i]]);
        }

        // Adding 60% of the total token supply (40% were generated during the crowdsale)
        // 40 * 2.5 = 100
        uint256 newTotalSupply = token.totalSupply().mul(250).div(100);

        // 10% of the total number of SRN tokens will be allocated to the team
        token.issue(walletTeam, newTotalSupply.mul(10).div(100));

        // 10% of the total number of SRN tokens will be allocated to OEM’s, Operating System implementation,
        // SDK developers and rebate to device and Sirin OS™ users
        token.issue(walletOEM, newTotalSupply.mul(10).div(100));

        // 5% of the total number of SRN tokens will be allocated to professional fees and Bounties
        token.issue(walletBounties, newTotalSupply.mul(5).div(100));

        // 35% of the total number of SRN tokens will be allocated to SIRIN LABS,
        // and as a reserve for the company to be used for future strategic plans for the created ecosystem
        token.issue(walletReserve, newTotalSupply.mul(35).div(100));

        // Re-enable transfers after the token sale.
        token.disableTransfers(false);

        // Re-enable destroy function after the token sale.
        token.setDestroyEnabled(true);

        // Enable ETH refunds and token claim.
        refundVault.enableRefunds();

        // transfer token ownership to crowdsale owner
        token.transferOwnership(owner);

        // transfer refundVault ownership to crowdsale owner
        refundVault.transferOwnership(owner);
    }

    // =================================================================================================================
    //                                      Public Methods
    // =================================================================================================================
    // @return the total funds collected in wei(ETH and none ETH).
    function getTotalFundsRaised() public view returns (uint256) {
        return fiatRaisedConvertedToWei.add(weiRaised);
    }

    // @return true if the crowdsale is active, hence users can buy tokens
    function isActive() public view returns (bool) {
        return now >= startTime && now < endTime;
    }

    // =================================================================================================================
    //                                      External Methods
    // =================================================================================================================
    // @dev Adds/Updates address and token allocation for token grants.
    // Granted tokens are allocated to non-ether, presale, buyers.
    // @param _grantee address The address of the token grantee.
    // @param _value uint256 The value of the grant in wei token.
    function addUpdateGrantee(address _grantee, uint256 _value) external onlyOwner onlyWhileSale{
        require(_grantee != address(0));
        require(_value > 0);

        // Adding new key if not present:
        if (presaleGranteesMap[_grantee] == 0) {
            require(presaleGranteesMapKeys.length < MAX_TOKEN_GRANTEES);
            presaleGranteesMapKeys.push(_grantee);
            GrantAdded(_grantee, _value);
        }
        else {
            GrantUpdated(_grantee, presaleGranteesMap[_grantee], _value);
        }

        presaleGranteesMap[_grantee] = _value;
    }

    // @dev deletes entries from the grants list.
    // @param _grantee address The address of the token grantee.
    function deleteGrantee(address _grantee) external onlyOwner onlyWhileSale {
        require(_grantee != address(0));
        require(presaleGranteesMap[_grantee] != 0);

        //delete from the map:
        delete presaleGranteesMap[_grantee];

        //delete from the array (keys):
        uint256 index;
        for (uint256 i = 0; i < presaleGranteesMapKeys.length; i++) {
            if (presaleGranteesMapKeys[i] == _grantee) {
                index = i;
                break;
            }
        }
        presaleGranteesMapKeys[index] = presaleGranteesMapKeys[presaleGranteesMapKeys.length - 1];
        delete presaleGranteesMapKeys[presaleGranteesMapKeys.length - 1];
        presaleGranteesMapKeys.length--;

        GrantDeleted(_grantee, presaleGranteesMap[_grantee]);
    }

    // @dev Set funds collected outside the crowdsale in wei.
    //  note: we not to use accumulator to allow flexibility in case of humane mistakes.
    // funds are converted to wei using the market conversion rate of USD\ETH on the day on the purchase.
    // @param _fiatRaisedConvertedToWei number of none eth raised.
    function setFiatRaisedConvertedToWei(uint256 _fiatRaisedConvertedToWei) external onlyOwner onlyWhileSale {
        fiatRaisedConvertedToWei = _fiatRaisedConvertedToWei;
        FiatRaisedUpdated(msg.sender, fiatRaisedConvertedToWei);
    }

    /// @dev Accepts new ownership on behalf of the SirinCrowdsale contract. This can be used, by the token sale
    /// contract itself to claim back ownership of the SirinSmartToken contract.
    function claimTokenOwnership() external onlyOwner {
        token.claimOwnership();
    }

    /// @dev Accepts new ownership on behalf of the SirinCrowdsale contract. This can be used, by the token sale
    /// contract itself to claim back ownership of the refundVault contract.
    function claimRefundVaultOwnership() external onlyOwner {
        refundVault.claimOwnership();
    }

    // @dev Buy tokes with guarantee
    function buyTokensWithGuarantee() public payable {
        require(validPurchase());

        uint256 weiAmount = msg.value;

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

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

        token.issue(address(refundVault), tokens);

        refundVault.deposit.value(msg.value)(msg.sender, tokens);

        TokenPurchaseWithGuarantee(msg.sender, address(refundVault), weiAmount, tokens);
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"etherWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimAllTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"REFUND_TIME_FRAME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"close","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokensToClaim","type":"uint256"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"investor","type":"address"},{"name":"tokensAmount","type":"uint256"}],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"refundStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableRefunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"depositedToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ETHToRefundAmountWei","type":"uint256"}],"name":"refundETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"depositedETH","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":"_etherWallet","type":"address"},{"name":"_token","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Active","type":"event"},{"anonymous":false,"inputs":[],"name":"Closed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"etherWeiAmount","type":"uint256"},{"indexed":false,"name":"tokenWeiAmount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[],"name":"RefundsEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"beneficiary","type":"address"},{"indexed":false,"name":"weiAmount","type":"uint256"}],"name":"RefundedETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"weiAmount","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000f57600080fd5b604051604080610c8b833981016040528080519190602001805160008054600160a060020a03191633600160a060020a039081169190911790915590925083161515905061005c57600080fd5b600160a060020a038116151561007157600080fd5b60048054600160a060020a03848116600160a060020a03199283161790925560058054928416929091169190911760a060020a60ff02191690557fc9b0a2a786a606c7564c856e06c58d7280f2198c3db6f5966a7b302319a36c8960405160405180910390a15050610ba3806100e86000396000f3006060604052600436106100d75763ffffffff60e060020a6000350416630cd74cd981146100dc5780631e4bd42c1461010b57806325fd1e291461012057806343d726d61461014557806346e04a2f1461015857806347e7ef241461016e5780634e71e0c8146101855780636aba899b146101985780638c52dc41146101ab5780638da5cb5b146101be578063907b503d146101d15780639531d072146101f0578063c19d93fb14610206578063e30c39781461023d578063f2fde38b14610250578063f5db8bc71461026f578063fc0c546a1461028e575b600080fd5b34156100e757600080fd5b6100ef6102a1565b604051600160a060020a03909116815260200160405180910390f35b341561011657600080fd5b61011e6102b0565b005b341561012b57600080fd5b610133610320565b60405190815260200160405180910390f35b341561015057600080fd5b61011e610327565b341561016357600080fd5b61011e600435610417565b61011e600160a060020a036004351660243561065e565b341561019057600080fd5b61011e610759565b34156101a357600080fd5b6101336107e7565b34156101b657600080fd5b61011e6107ed565b34156101c957600080fd5b6100ef610882565b34156101dc57600080fd5b610133600160a060020a0360043516610891565b34156101fb57600080fd5b61011e6004356108a3565b341561021157600080fd5b610219610a8a565b6040518082600281111561022957fe5b60ff16815260200191505060405180910390f35b341561024857600080fd5b6100ef610a9a565b341561025b57600080fd5b61011e600160a060020a0360043516610aa9565b341561027a57600080fd5b610133600160a060020a0360043516610af3565b341561029957600080fd5b6100ef610b05565b600454600160a060020a031681565b6000600160055460a060020a900460ff1660028111156102cc57fe5b14806102ef5750600260055460a060020a900460ff1660028111156102ed57fe5b145b15156102fa57600080fd5b50600160a060020a03331660009081526003602052604090205461031d81610417565b50565b624f1a0081565b600160055460a060020a900460ff16600281111561034157fe5b1461034b57600080fd5b60005433600160a060020a0390811691161461036657600080fd5b42624f1a006006540110151561037b57600080fd5b6005805474ff00000000000000000000000000000000000000001916740200000000000000000000000000000000000000001790557f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a60405160405180910390a1600454600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561041557600080fd5b565b6000808080600160055460a060020a900460ff16600281111561043657fe5b14806104595750600260055460a060020a900460ff16600281111561045757fe5b145b151561046457600080fd5b84151561047057600080fd5b33600160a060020a038116600090815260036020526040812054919550901161049857600080fd5b600160a060020a0384166000908152600360209081526040808320546002909252909120549093509150828511156104cf57600080fd5b6104ef836104e3878563ffffffff610b1416565b9063ffffffff610b3f16565b9050600081116104fb57fe5b61050b828263ffffffff610b5616565b600160a060020a038516600090815260026020526040902055610534838663ffffffff610b5616565b600160a060020a03808616600090815260036020526040808220939093556005549091169163a9059cbb918791899190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156105ac57600080fd5b6102c65a03f115156105bd57600080fd5b5050506040518051506002905060055460a060020a900460ff1660028111156105e257fe5b1461061a57600454600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151561061a57600080fd5b83600160a060020a03167f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e4308660405190815260200160405180910390a25050505050565b600060055460a060020a900460ff16600281111561067857fe5b1461068257600080fd5b60005433600160a060020a0390811691161461069d57600080fd5b600160a060020a0382166000908152600260205260409020546106c6903463ffffffff610b6816565b600160a060020a0383166000908152600260209081526040808320939093556003905220546106fb908263ffffffff610b6816565b600160a060020a0383166000818152600360205260409081902092909255907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590349084905191825260208201526040908101905180910390a25050565b60015433600160a060020a0390811691161461077457600080fd5b600154600054600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b60065481565b600060055460a060020a900460ff16600281111561080757fe5b1461081157600080fd5b60005433600160a060020a0390811691161461082c57600080fd5b6005805474ff0000000000000000000000000000000000000000191660a060020a179055426006557f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8960405160405180910390a1565b600054600160a060020a031681565b60036020526000908152604090205481565b600080600042600654111580156108c0575042624f1a0060065401115b15156108cb57600080fd5b600160055460a060020a900460ff1660028111156108e557fe5b146108ef57600080fd5b8315156108fb57600080fd5b600160a060020a03331660009081526003602090815260408083205460029092529091205490935091508184111561093257600080fd5b610946826104e3868663ffffffff610b1416565b90506000811161095257fe5b610962828563ffffffff610b5616565b600160a060020a03331660009081526002602052604090205561098b838263ffffffff610b5616565b600160a060020a033381166000908152600360205260409081902092909255600554169063a24835d190309084905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156109fa57600080fd5b6102c65a03f11515610a0b57600080fd5b5050600160a060020a033316905084156108fc0285604051600060405180830381858888f193505050501515610a4057600080fd5b7fab6231f1e734177085d749a58b4b7cc5a0ce9db73b9fd42de7b19e1a66f5dc8b3385604051600160a060020a03909216825260208201526040908101905180910390a150505050565b60055460a060020a900460ff1681565b600154600160a060020a031681565b60005433600160a060020a03908116911614610ac457600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60026020526000908152604090205481565b600554600160a060020a031681565b6000828202831580610b305750828482811515610b2d57fe5b04145b1515610b3857fe5b9392505050565b6000808284811515610b4d57fe5b04949350505050565b600082821115610b6257fe5b50900390565b600082820183811015610b3857fe00a165627a7a723058207b36a11e51eb2c0ed559827d8070af39e29771a0e1db5f247f94c5ef49a6591c00290000000000000000000000005978c1473ee84dd9cf3d90d0e931a79906ee52c500000000000000000000000068d57c9a1c35f63e2c83ee8e49a64e9d70528d25

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000005978c1473ee84dd9cf3d90d0e931a79906ee52c5
Arg [1] : 00000000000000000000000068d57c9a1c35f63e2c83ee8e49a64e9d70528d25


   Swarm Source:
bzzr://7b36a11e51eb2c0ed559827d8070af39e29771a0e1db5f247f94c5ef49a6591c

 

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