Sponsored Link:   INVOX FINANCE - Helps Small Businesses Grow Worldwide with 9% Interest Loans. 20% bonus! ICO Open
  Latest 25 txns from a total Of 151737 transactions View All

TxHash Age From To Value [TxFee]
0x4e2f5904c6e1249b438b0ab717e4e645b129e17956c5d720e9f16620a2c2851a 31 secs ago0xf2408a2db3379df5285aed3f561877c60b254820  IN   RequestToken0 Ether0.00103564
0xb66b5ddb9bc2a2228bd038d50af27c312f0669b0ded4a8f23527370c8d4863ce 31 secs ago0xa0c49ceba87badf13d309c10aadcfa040bd8d879  IN   RequestToken0 Ether0.00011186
0x1d5fc62b8a26fe4bbe31d6aada00f744617ef6a857e27becd65ba4e3862af7111 min ago0xaecf0cc4a46cc44aa2604e0b45076efd2ee80483  IN   RequestToken0 Ether0.000111924
0x9a987c2a1332698d5a965348b5cbaf69935e18103df92d0688f7b8d2aea7094110 mins ago0xf2408a2db3379df5285aed3f561877c60b254820  IN   RequestToken0 Ether0.00103564
0xedbf8fb833a9d997965c0618994b635e6a469d79c6e1dd7758004850b72f5c9610 mins ago0x81960cdb487a927780ead676374b8b98366debcb  IN   RequestToken0 Ether0.00011186
0x0d2015929958ab8d017df43a2ce6007e62992699473d457141394c242ff945b910 mins ago0xf079be145754aca7dc7b4a0224b598ae913efce1  IN   RequestToken0 Ether0.000298976
0x498cc09f11b9eeda721c8ef3513ddbd9226b254353d9fa0c211ef4a8f688516d13 mins agoBinanceWallet_1  IN   RequestToken0 Ether0.00288046
0x90f1707f4698cdfcfac41e5f7cf24b5636eab40efaef11d4462bd904d4907a3b20 mins ago0xf2408a2db3379df5285aed3f561877c60b254820  IN   RequestToken0 Ether0.00037372
0xe08a6595a65d86a36f481be7bca0484f6ac81518332d5515dea694c8fde8d88422 mins ago0xc8a86220d0f907c9a8f4f82fff1ff2c98e354a86  IN   RequestToken0 Ether0.001532252
0xba40e93f5a42daa69d115d50d226bdd55a3c8ce8c9b8d0ec369d3092ac022b0e22 mins ago0x703e09793aab5f7e39afa4253f0b9142403695e1  IN   RequestToken0 Ether0.000130578
0x929aba84293dfeb26e4e3e5ee4c3018e8b8de5fed5f555fd8ab672792e7949b723 mins ago0xd03db9cf89a9b1f856a8e1650cfd78faf2338eb2  IN   RequestToken0 Ether0.00052308
0x34a3f63958fec1e663912d0059d0e884a5e82c0c5520ad5c18e225709ab4754129 mins ago0x2b5634c42055806a59e9107ed44d43c426e58258  IN   RequestToken0 Ether0.00078462
0x8664ca844a1c4aac43bbaf5122f214e5313d24ae5d7e283fbd9fb910b42485b830 mins ago0x5f0090bab0d9b38a9bae470e7bb9d9c37621831c  IN   RequestToken0 Ether0.00011186
0xade840fbdfa062800adcf017e52db5f5739dd481d10cdd10fd900eedd94620aa30 mins ago0xf74d556cbb95b7bccdad8284bc68110c74c91e7b  IN   RequestToken0 Ether0.00011122
0x54abbdd1624ac56ea2f1c39df5776dc431ad5247ce4668f37195d866f6fe47d430 mins ago0xf2408a2db3379df5285aed3f561877c60b254820  IN   RequestToken0 Ether0.001270648
0x2da730e020494635ff55537728f891ba451e56134583e4c663599fe7fbc7100932 mins ago0xf1aefa558b55e57bba9790cbc75ef8f2f9f8f2f9  IN   RequestToken0 Ether0.00022244
0x0917a1375be5c8eeeab33027b6635d138a09de566355d0b25acf2603d369ab3733 mins ago0x61c9ad9777ca1fdb61d6ab345e2cd24bd013a60f  IN   RequestToken0 Ether0.001529628
0xd24ca63f767e0be75862dea02cf7697a6ea35e51eb7625ac52488a89e61e77f535 mins ago0x5a6169233f02631f7f3d822486357a1b9b48b4b9  IN   RequestToken0 Ether0.000052766492
0x70dcd330d608ff41ce46008459775b063fba9a35c8a280f003b909e92b14a99f36 mins agoBinanceWallet_2  IN   RequestToken0 Ether0.00205546
0x0f78e95345f331019d850799e752da06d3c57e5e3e535ff50ced076c9dad00e336 mins agoBinanceWallet  IN   RequestToken0 Ether0.00205546
0x8575f907d2f7123bfe1c16b9460ace9b81fab65e7675d1b36d380ae7808e31cf36 mins agoBinanceWallet  IN   RequestToken0 Ether0.00205546
0x423155b45afe788f0aa4d28d118c4d0e2cb7326de7f78ed0b51bd3eb4ebf10df39 mins ago0x5a6169233f02631f7f3d822486357a1b9b48b4b9  IN   RequestToken0 Ether0.000319711
0xf4baf613df6191e9c127c84404a674a7261ea770f0c555172480ddcc4beca23840 mins ago0xf2408a2db3379df5285aed3f561877c60b254820  IN   RequestToken0 Ether0.00037372
0xbf595e8e2988862958c478062ad680995d409cd9b72f83fd6508d610ade9082040 mins ago0x123d9cfb96b5ef80287e7783f66723f4bd8766ba  IN   RequestToken0 Ether0.00037372
0xf5336a93c6e2305b0ac9a8198c49e7b8d569061a7f48f9f32e2d9f01c9636b6340 mins ago0xdb862a76b5a0c833ab4a0fa0ca1a2e8b0570cba2  IN   RequestToken0 Ether0.00011218
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
  Latest 1 Internal Transaction

ParentTxHash Block Age From To Value
0x0ce57bf9142799a03d46614696ab36b458a9683ab1257bf2e10ce7f6cd54f8ad4345153194 days 3 hrs ago0x97208bf5dc25e6fd4719cfc2a3c1d1a59a974c3b  Contract Creation0 Ether
[ Download CSV Export  ] 
Warning: The compiled contract might be susceptible to ZeroFunctionSelector (very low-severity) Solidity compiler bugs.

Contract Source Code Verified (Exact match)
Contract Name: RequestToken
Compiler Version: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
pragma solidity 0.4.15;

/**
 * @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() {
    owner = msg.sender;
  }


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


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

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

  function div(uint256 a, uint256 b) internal constant 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 constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

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

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

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

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

  mapping(address => uint256) balances;

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

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

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

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

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


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

    uint256 _allowance = allowed[_from][msg.sender];

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

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

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

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

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval (address _spender, uint _addedValue)
    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)
    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 StandardCrowdsale 
 * @dev StandardCrowdsale 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.
 * @dev from Crowdsale by Zepellin with small changes. Changes are commented with "Request Modification"
 */
contract StandardCrowdsale {
    using SafeMath for uint256;

    // The token being sold
    StandardToken public token; // Request Modification : change to not mintable

    // 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 value weis paid for purchase
     * @param amount amount of tokens purchased
     */
    event TokenPurchase(address indexed purchaser, uint256 value, uint256 amount);

    function StandardCrowdsale(
        uint256 _startTime, 
        uint256 _endTime, 
        uint256 _rate, 
        address _wallet) 
    {
        require(_startTime >= now);
        require(_endTime >= _startTime);
        require(_rate > 0);
        require(_wallet != 0x0);

        startTime = _startTime;
        endTime = _endTime;
        rate = _rate;
        wallet = _wallet;

        token = createTokenContract(); // Request Modification : change to StandardToken + position
    }

    // creates the token to be sold.
    // Request Modification : change to StandardToken
    // override this method to have crowdsale of a specific mintable token.
    function createTokenContract() 
        internal 
        returns(StandardToken) 
    {
        return new StandardToken();
    }

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

    // low level token purchase function
    // Request Modification : change to not mint but transfer from this contract
    function buyTokens() 
       public 
       payable 
    {
        require(validPurchase());

        uint256 weiAmount = msg.value;

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

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

        require(token.transfer(msg.sender, tokens)); // Request Modification : changed here - tranfer instead of mintable
        TokenPurchase(msg.sender, 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 
        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 
        constant 
        returns(bool) 
    {
        return now > endTime;
    }

    modifier onlyBeforeSale() {
        require(now < startTime);
        _;
    }

    // Request Modification : Add check 24hours before token sale
    modifier only24HBeforeSale() {
        require(now < startTime.sub(1 days));
        _;
    }
}

/**
 * @title CappedCrowdsale
 * @dev Extension of Crowdsale with a max amount of funds raised
 */
contract CappedCrowdsale is StandardCrowdsale {
  using SafeMath for uint256;

  uint256 public cap;

  function CappedCrowdsale(uint256 _cap) {
    require(_cap > 0);
    cap = _cap;
  }

  // overriding Crowdsale#validPurchase to add extra cap logic
  // @return true if investors can buy at the moment
  // Request Modification : delete constant because needed in son contract
  function validPurchase() internal returns (bool) {
    bool withinCap = weiRaised.add(msg.value) <= cap;
    return super.validPurchase() && withinCap;
  }

  // overriding Crowdsale#hasEnded to add cap logic
  // @return true if crowdsale event has ended
  function hasEnded() public constant returns (bool) {
    bool capReached = weiRaised >= cap;
    return super.hasEnded() || capReached;
  }
}

/**
 * @title ProgressiveIndividualCappedCrowdsale
 * @dev Extension of Crowdsale with a progressive individual cap
 * @dev This contract is not made for crowdsale superior to 256 * TIME_PERIOD_IN_SEC
 * @author Request.network
 */
contract ProgressiveIndividualCappedCrowdsale is StandardCrowdsale, Ownable {

    uint public constant TIME_PERIOD_IN_SEC = 1 days;
    uint public constant GAS_LIMIT_IN_WEI = 50000000000 wei; // limit gas price -50 Gwei wales stopper
    uint256 public baseEthCapPerAddress = 0 ether;

    mapping(address=>uint) public participated;

    /**
     * @dev overriding CappedCrowdsale#validPurchase to add an individual cap
     * @return true if investors can buy at the moment
     */
    function validPurchase() 
        internal 
        returns(bool)
    {
        require(tx.gasprice <= GAS_LIMIT_IN_WEI);
        uint ethCapPerAddress = getCurrentEthCapPerAddress();
        participated[msg.sender] = participated[msg.sender].add(msg.value);
        return super.validPurchase() && participated[msg.sender] <= ethCapPerAddress;
    }

    /**
     * @dev Set the individual cap for the first day. This function can not be called withing the 24h before the sale for security reasons
     * @param _baseEthCapPerAddress base cap in wei
     */
    function setBaseEthCapPerAddress(uint256 _baseEthCapPerAddress) 
        public
        onlyOwner 
        only24HBeforeSale
    {
        baseEthCapPerAddress = _baseEthCapPerAddress;
    }

    /**
     * @dev Get the current individual cap. 
     * @dev This amount increase everyday in an exponential way. Day 1: base cap, Day 2: 2 * base cap, Day 3: 4 * base cap ...
     * @return individual cap in wei
     */
    function getCurrentEthCapPerAddress() 
        public
        constant
        returns(uint)
    {
        if (block.timestamp < startTime) return 0;
        uint timeSinceStartInSec = block.timestamp.sub(startTime);
        uint currentPeriod = timeSinceStartInSec.div(TIME_PERIOD_IN_SEC).add(1);

        // for currentPeriod > 256 will always return baseEthCapPerAddress
        return (2 ** currentPeriod.sub(1)).mul(baseEthCapPerAddress);
    }
}

/**
 * @title WhitelistedCrowdsale
 * @dev This is an extension to add whitelist to a crowdsale
 * @author Request.network
 *
 */
contract WhitelistedCrowdsale is StandardCrowdsale, Ownable {
    
    mapping(address=>bool) public registered;

    event RegistrationStatusChanged(address target, bool isRegistered);

    /**
     * @dev Changes registration status of an address for participation.
     * @param target Address that will be registered/deregistered.
     * @param isRegistered New registration status of address.
     */
    function changeRegistrationStatus(address target, bool isRegistered)
        public
        onlyOwner
        only24HBeforeSale
    {
        registered[target] = isRegistered;
        RegistrationStatusChanged(target, isRegistered);
    }

    /**
     * @dev Changes registration statuses of addresses for participation.
     * @param targets Addresses that will be registered/deregistered.
     * @param isRegistered New registration status of addresses.
     */
    function changeRegistrationStatuses(address[] targets, bool isRegistered)
        public
        onlyOwner
        only24HBeforeSale
    {
        for (uint i = 0; i < targets.length; i++) {
            changeRegistrationStatus(targets[i], isRegistered);
        }
    }

    /**
     * @dev overriding Crowdsale#validPurchase to add whilelist
     * @return true if investors can buy at the moment, false otherwise
     */
    function validPurchase() internal returns (bool) {
        return super.validPurchase() && registered[msg.sender];
    }
}

/**
 * @title The RequestToken contract
 * @dev The Request Token contract
 * @dev inherite from StandardToken and Ownable by Zeppelin
 * @author Request.network
 */
contract RequestToken is StandardToken, Ownable {
    string  public  constant name = "Request Token";
    string  public  constant symbol = "REQ";
    uint8    public  constant decimals = 18;

    uint    public  transferableStartTime;

    address public  tokenSaleContract;
    address public  earlyInvestorWallet;


    modifier onlyWhenTransferEnabled() 
    {
        if ( now <= transferableStartTime ) {
            require(msg.sender == tokenSaleContract || msg.sender == earlyInvestorWallet || msg.sender == owner);
        }
        _;
    }

    modifier validDestination(address to) 
    {
        require(to != address(this));
        _;
    }

    function RequestToken(
        uint tokenTotalAmount, 
        uint _transferableStartTime, 
        address _admin, 
        address _earlyInvestorWallet) 
    {
        // Mint all tokens. Then disable minting forever.
        totalSupply = tokenTotalAmount * (10 ** uint256(decimals));

        balances[msg.sender] = totalSupply;
        Transfer(address(0x0), msg.sender, totalSupply);

        transferableStartTime = _transferableStartTime;
        tokenSaleContract = msg.sender;
        earlyInvestorWallet = _earlyInvestorWallet;

        transferOwnership(_admin); // admin could drain tokens and eth that were sent here by mistake
    }

    /**
     * @dev override transfer token for a specified address to add onlyWhenTransferEnabled and validDestination
     * @param _to The address to transfer to.
     * @param _value The amount to be transferred.
     */
    function transfer(address _to, uint _value)
        public
        validDestination(_to)
        onlyWhenTransferEnabled
        returns (bool) 
    {
        return super.transfer(_to, _value);
    }

    /**
     * @dev override transferFrom token for a specified address to add onlyWhenTransferEnabled and validDestination
     * @param _from The address to transfer from.
     * @param _to The address to transfer to.
     * @param _value The amount to be transferred.
     */
    function transferFrom(address _from, address _to, uint _value)
        public
        validDestination(_to)
        onlyWhenTransferEnabled
        returns (bool) 
    {
        return super.transferFrom(_from, _to, _value);
    }

    event Burn(address indexed _burner, uint _value);

    /**
     * @dev burn tokens
     * @param _value The amount to be burned.
     * @return always true (necessary in case of override)
     */
    function burn(uint _value) 
        public
        onlyWhenTransferEnabled
        returns (bool)
    {
        balances[msg.sender] = balances[msg.sender].sub(_value);
        totalSupply = totalSupply.sub(_value);
        Burn(msg.sender, _value);
        Transfer(msg.sender, address(0x0), _value);
        return true;
    }

    /**
     * @dev burn tokens in the behalf of someone
     * @param _from The address of the owner of the token.
     * @param _value The amount to be burned.
     * @return always true (necessary in case of override)
     */
    function burnFrom(address _from, uint256 _value) 
        public
        onlyWhenTransferEnabled
        returns(bool) 
    {
        assert(transferFrom(_from, msg.sender, _value));
        return burn(_value);
    }

    /**
     * @dev transfer to owner any tokens send by mistake on this contracts
     * @param token The address of the token to transfer.
     * @param amount The amount to be transfered.
     */
    function emergencyERC20Drain(ERC20 token, uint amount )
        public
        onlyOwner 
    {
        token.transfer(owner, amount);
    }
}

/**
 * @title RequestTokenSale
 * @dev 
 * We add new features to a base crowdsale using multiple inheritance.
 * We are using the following extensions:
 * CappedCrowdsale - sets a max boundary for raised funds
 * WhitelistedCrowdsale - add a whitelist
 * ProgressiveIndividualCappedCrowdsale - add a Progressive individual cap
 *
 * The code is based on the contracts of Open Zeppelin and we add our contracts : RequestTokenSale, WhiteListedCrowdsale, ProgressiveIndividualCappedCrowdsale and the Request Token
 *
 * @author Request.network
 */
contract RequestTokenSale is Ownable, CappedCrowdsale, WhitelistedCrowdsale, ProgressiveIndividualCappedCrowdsale {
    // hard cap of the token sale in ether
    uint private constant HARD_CAP_IN_WEI = 100000 ether;

    // Total of Request Token supply
    uint public constant TOTAL_REQUEST_TOKEN_SUPPLY = 1000000000;

    // Token sale rate from ETH to REQ
    uint private constant RATE_ETH_REQ = 5000;

    // Token initialy distributed for the team (15%)
    address public constant TEAM_VESTING_WALLET = 0xA76bC39aE4B88ef203C6Afe3fD219549d86D12f2;
    uint public constant TEAM_VESTING_AMOUNT = 150000000e18;

    // Token initialy distributed for the early investor (20%)
    address public constant EARLY_INVESTOR_WALLET = 0xa579E31b930796e3Df50A56829cF82Db98b6F4B3;
    uint public constant EARLY_INVESTOR_AMOUNT = 200000000e18;

    // Token initialy distributed for the early foundation (15%)
    // wallet use also to gather the ether of the token sale
    address private constant REQUEST_FOUNDATION_WALLET = 0xdD76B55ee6dAfe0c7c978bff69206d476a5b9Ce7;
    uint public constant REQUEST_FOUNDATION_AMOUNT = 150000000e18;

    // PERIOD WHEN TOKEN IS NOT TRANSFERABLE AFTER THE SALE
    uint public constant PERIOD_AFTERSALE_NOT_TRANSFERABLE_IN_SEC = 3 days;

    function RequestTokenSale(uint256 _startTime, uint256 _endTime)
      ProgressiveIndividualCappedCrowdsale()
      WhitelistedCrowdsale()
      CappedCrowdsale(HARD_CAP_IN_WEI)
      StandardCrowdsale(_startTime, _endTime, RATE_ETH_REQ, REQUEST_FOUNDATION_WALLET)
    {
        token.transfer(TEAM_VESTING_WALLET, TEAM_VESTING_AMOUNT);

        token.transfer(EARLY_INVESTOR_WALLET, EARLY_INVESTOR_AMOUNT);

        token.transfer(REQUEST_FOUNDATION_WALLET, REQUEST_FOUNDATION_AMOUNT);
    }

    /**
     * @dev Create the Request token (override createTokenContract of StandardCrowdsale)
     * @return the StandardToken created
     */
    function createTokenContract () 
      internal 
      returns(StandardToken) 
    {
        return new RequestToken(TOTAL_REQUEST_TOKEN_SUPPLY, endTime.add(PERIOD_AFTERSALE_NOT_TRANSFERABLE_IN_SEC), REQUEST_FOUNDATION_WALLET, EARLY_INVESTOR_WALLET);
    }

    /**
     * @dev Transfer the unsold tokens to the request Foundation multisign wallet 
     * @dev Only for owner
     * @return the StandardToken created
     */
    function drainRemainingToken () 
      public
      onlyOwner
    {
        require(hasEnded());
        token.transfer(REQUEST_FOUNDATION_WALLET, token.balanceOf(this));
    }
  
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenSaleContract","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"earlyInvestorWallet","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"}],"name":"burnFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"emergencyERC20Drain","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"transferableStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[{"name":"tokenTotalAmount","type":"uint256"},{"name":"_transferableStartTime","type":"uint256"},{"name":"_admin","type":"address"},{"name":"_earlyInvestorWallet","type":"address"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_burner","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000f57600080fd5b604051608080611081833981016040528080519190602001805191906020018051919060200180519150505b5b60038054600160a060020a03191633600160a060020a03161790555b670de0b6b3a764000084026000818155600160a060020a0333168082526001602052604080832084905590927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915190815260200160405180910390a3600483905560058054600160a060020a03338116600160a060020a031992831617909255600680549284169290911691909117905561010082640100000000610bdd61010a82021704565b5b50505050610196565b60035433600160a060020a0390811691161461012557600080fd5b600160a060020a038116151561013a57600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360038054600160a060020a031916600160a060020a0383161790555b5b50565b610edc806101a56000396000f300606060405236156101045763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610109578063095ea7b31461019457806318160ddd146101ca57806323b872dd146101ef578063313ce5671461022b57806342966c68146102545780635d5aa2771461027e57806366188463146102ad578063661990bc146102e357806370a082311461031257806379cc6790146103435780638da5cb5b1461037957806395d89b41146103a8578063a9059cbb14610433578063d73dd62314610469578063db0e16f11461049f578063dd62ed3e146104c3578063f2fde38b146104fa578063f6f5eb591461051b575b600080fd5b341561011457600080fd5b61011c610540565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101595780820151818401525b602001610140565b50505050905090810190601f1680156101865780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561019f57600080fd5b6101b6600160a060020a0360043516602435610577565b604051901515815260200160405180910390f35b34156101d557600080fd5b6101dd6105e4565b60405190815260200160405180910390f35b34156101fa57600080fd5b6101b6600160a060020a03600435811690602435166044356105ea565b604051901515815260200160405180910390f35b341561023657600080fd5b61023e61067f565b60405160ff909116815260200160405180910390f35b341561025f57600080fd5b6101b6600435610684565b604051901515815260200160405180910390f35b341561028957600080fd5b6102916107bf565b604051600160a060020a03909116815260200160405180910390f35b34156102b857600080fd5b6101b6600160a060020a03600435166024356107ce565b604051901515815260200160405180910390f35b34156102ee57600080fd5b6102916108ca565b604051600160a060020a03909116815260200160405180910390f35b341561031d57600080fd5b6101dd600160a060020a03600435166108d9565b60405190815260200160405180910390f35b341561034e57600080fd5b6101b6600160a060020a03600435166024356108f8565b604051901515815260200160405180910390f35b341561038457600080fd5b61029161097a565b604051600160a060020a03909116815260200160405180910390f35b34156103b357600080fd5b61011c610989565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101595780820151818401525b602001610140565b50505050905090810190601f1680156101865780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561043e57600080fd5b6101b6600160a060020a03600435166024356109c0565b604051901515815260200160405180910390f35b341561047457600080fd5b6101b6600160a060020a0360043516602435610a53565b604051901515815260200160405180910390f35b34156104aa57600080fd5b6104c1600160a060020a0360043516602435610af8565b005b34156104ce57600080fd5b6101dd600160a060020a0360043581169060243516610bb0565b60405190815260200160405180910390f35b341561050557600080fd5b6104c1600160a060020a0360043516610bdd565b005b341561052657600080fd5b6101dd610c76565b60405190815260200160405180910390f35b60408051908101604052600d81527f5265717565737420546f6b656e00000000000000000000000000000000000000602082015281565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60005481565b60008230600160a060020a031681600160a060020a03161415151561060e57600080fd5b60045442116106665760055433600160a060020a0390811691161480610642575060065433600160a060020a039081169116145b8061065b575060035433600160a060020a039081169116145b151561066657600080fd5b5b610672858585610c7c565b91505b5b5b509392505050565b601281565b60045460009042116106df5760055433600160a060020a03908116911614806106bb575060065433600160a060020a039081169116145b806106d4575060035433600160a060020a039081169116145b15156106df57600080fd5b5b600160a060020a033316600090815260016020526040902054610709908363ffffffff610da816565b600160a060020a03331660009081526001602052604081209190915554610736908363ffffffff610da816565b600055600160a060020a0333167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405190815260200160405180910390a2600033600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a35060015b5b919050565b600554600160a060020a031681565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120548083111561082b57600160a060020a033381166000908152600260209081526040808320938816835292905290812055610862565b61083b818463ffffffff610da816565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a3600191505b5092915050565b600654600160a060020a031681565b600160a060020a0381166000908152600160205260409020545b919050565b60045460009042116109535760055433600160a060020a039081169116148061092f575060065433600160a060020a039081169116145b80610948575060035433600160a060020a039081169116145b151561095357600080fd5b5b61095f8333846105ea565b151561096757fe5b61097082610684565b90505b5b92915050565b600354600160a060020a031681565b60408051908101604052600381527f5245510000000000000000000000000000000000000000000000000000000000602082015281565b60008230600160a060020a031681600160a060020a0316141515156109e457600080fd5b6004544211610a3c5760055433600160a060020a0390811691161480610a18575060065433600160a060020a039081169116145b80610a31575060035433600160a060020a039081169116145b1515610a3c57600080fd5b5b610a478484610dbf565b91505b5b5b5092915050565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054610a8b908363ffffffff610e9616565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a35060015b92915050565b60035433600160a060020a03908116911614610b1357600080fd5b600354600160a060020a038084169163a9059cbb9116836000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610b8f57600080fd5b6102c65a03f11515610ba057600080fd5b505050604051805150505b5b5050565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60035433600160a060020a03908116911614610bf857600080fd5b600160a060020a0381161515610c0d57600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b60045481565b600080600160a060020a0384161515610c9457600080fd5b50600160a060020a03808516600081815260026020908152604080832033909516835293815283822054928252600190529190912054610cda908463ffffffff610da816565b600160a060020a038087166000908152600160205260408082209390935590861681522054610d0f908463ffffffff610e9616565b600160a060020a038516600090815260016020526040902055610d38818463ffffffff610da816565b600160a060020a03808716600081815260026020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3600191505b509392505050565b600082821115610db457fe5b508082035b92915050565b6000600160a060020a0383161515610dd657600080fd5b600160a060020a033316600090815260016020526040902054610dff908363ffffffff610da816565b600160a060020a033381166000908152600160205260408082209390935590851681522054610e34908363ffffffff610e9616565b600160a060020a0380851660008181526001602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060015b92915050565b600082820183811015610ea557fe5b8091505b50929150505600a165627a7a72305820a569b7054f9995c1906846443e96a492d28d975a665c2cdf93ae8ea466b8677c0029000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000059e99ef0000000000000000000000000dd76b55ee6dafe0c7c978bff69206d476a5b9ce7000000000000000000000000a579e31b930796e3df50a56829cf82db98b6f4b3

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

-----Decoded View---------------
Found 4 constructor arguments :
Arg [0] : 000000000000000000000000000000000000000000000000000000003B9ACA00
Arg [1] : 0000000000000000000000000000000000000000000000000000000059E99EF0
Arg [2] : 000000000000000000000000dD76B55ee6dAfe0c7c978bff69206d476a5b9Ce7
Arg [3] : 000000000000000000000000a579e31b930796e3df50a56829cf82db98b6f4b3


   Swarm Source:
bzzr://a569b7054f9995c1906846443e96a492d28d975a665c2cdf93ae8ea466b8677c

 

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.