ETH Price: $3,271.81 (-4.06%)
Gas: 18 Gwei

Contract

0x8644663047Df80c1626261065070DA7A5350AdA3
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Release49912262018-01-29 1:50:232347 days ago1517190623IN
0x86446630...A5350AdA3
0 ETH0.000235683
Release49910002018-01-29 1:01:392347 days ago1517187699IN
0x86446630...A5350AdA3
0 ETH0.0008641911
Dev Allocation49909872018-01-29 0:57:362347 days ago1517187456IN
0x86446630...A5350AdA3
0 ETH0.0003732415
Release49884182018-01-28 14:39:462348 days ago1517150386IN
0x86446630...A5350AdA3
0 ETH0.0015712620
Dev Allocation49884112018-01-28 14:38:182348 days ago1517150298IN
0x86446630...A5350AdA3
0 ETH0.000024881
Release49884022018-01-28 14:36:092348 days ago1517150169IN
0x86446630...A5350AdA3
0 ETH0.0009992220
Dev Allocation49883882018-01-28 14:32:222348 days ago1517149942IN
0x86446630...A5350AdA3
0 ETH0.0020174820
Dev Allocation49883112018-01-28 14:13:562348 days ago1517148836IN
0x86446630...A5350AdA3
0 ETH0.000027371.1
Release49882002018-01-28 13:49:192348 days ago1517147359IN
0x86446630...A5350AdA3
0 ETH0.000007850.1
Finalize49879582018-01-28 12:53:082348 days ago1517143988IN
0x86446630...A5350AdA3
0 ETH0.001525522
Transfer49843232018-01-27 22:20:262348 days ago1517091626IN
0x86446630...A5350AdA3
0.04 ETH0.0034823332
Transfer49843012018-01-27 22:14:072348 days ago1517091247IN
0x86446630...A5350AdA3
0.04 ETH0.00050420
Transfer49842162018-01-27 21:53:472348 days ago1517090027IN
0x86446630...A5350AdA3
24.8 ETH0.0034823332
Transfer49838902018-01-27 20:27:362348 days ago1517084856IN
0x86446630...A5350AdA3
1 ETH0.0021764620
Transfer49750392018-01-26 8:57:582350 days ago1516957078IN
0x86446630...A5350AdA3
0.00001 ETH0.00050420
Finalize49702332018-01-25 13:34:332351 days ago1516887273IN
0x86446630...A5350AdA3
0 ETH0.0004641220
Finalize49699442018-01-25 12:18:342351 days ago1516882714IN
0x86446630...A5350AdA3
0 ETH0.0004641220
Finalize49698392018-01-25 11:56:232351 days ago1516881383IN
0x86446630...A5350AdA3
0 ETH0.0004641220
Transfer49695712018-01-25 10:52:592351 days ago1516877579IN
0x86446630...A5350AdA3
0.2 ETH0.000108821
Transfer49684602018-01-25 6:14:082351 days ago1516860848IN
0x86446630...A5350AdA3
0.30669452 ETH0.0065293860
Transfer49649572018-01-24 16:12:112352 days ago1516810331IN
0x86446630...A5350AdA3
0.02 ETH0.0021764620
Transfer49649422018-01-24 16:09:122352 days ago1516810152IN
0x86446630...A5350AdA3
0.02 ETH0.0004220
Transfer49611442018-01-24 0:46:302352 days ago1516754790IN
0x86446630...A5350AdA3
0.51 ETH0.0022852821
Transfer49601642018-01-23 20:59:252352 days ago1516741165IN
0x86446630...A5350AdA3
0.01 ETH0.0054411550
Transfer49549042018-01-22 23:24:362353 days ago1516663476IN
0x86446630...A5350AdA3
0.025 ETH0.0043529240
View all transactions

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
49879582018-01-28 12:53:082348 days ago1517143988
0x86446630...A5350AdA3
28.55620303 ETH
49879582018-01-28 12:53:082348 days ago1517143988
0x86446630...A5350AdA3
3.17291144 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x35fd00D4...1B068C256
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Crowdsale

Compiler Version
v0.4.20+commit.3155dd80

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-03-04
*/

pragma solidity ^ 0.4.17;


library SafeMath {

    function mul(uint a, uint b) internal pure returns(uint) {
        uint c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

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

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


contract ERC20 {
    uint public totalSupply;

    function balanceOf(address who) public view returns(uint);

    function allowance(address owner, address spender) public view returns(uint);

    function transfer(address to, uint value) public returns(bool ok);

    function transferFrom(address from, address to, uint value) public returns(bool ok);

    function approve(address spender, uint value) public returns(bool ok);

    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}


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

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

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

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

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

}


/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
    event Pause();
    event Unpause();

    bool public paused = false;

  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
    modifier whenPaused() {
        require(paused);
        _;
    }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
    function pause() public onlyOwner whenNotPaused {
        paused = true;
        Pause();
    }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
    function unpause() public onlyOwner whenPaused {
        paused = false;
        Unpause();
    }
}


// Whitelist smart contract
// This smart contract keeps list of addresses to whitelist
contract WhiteList is Ownable {
    
    mapping(address => bool) public whiteList;
    uint public totalWhiteListed; //white listed users number

    event LogWhiteListed(address indexed user, uint whiteListedNum);
    event LogWhiteListedMultiple(uint whiteListedNum);
    event LogRemoveWhiteListed(address indexed user);

    // @notice it will return status of white listing
    // @return true if user is white listed and false if is not
    function isWhiteListed(address _user) external view returns (bool) {

        return whiteList[_user]; 
    }

    // @notice it will remove whitelisted user
    // @param _contributor {address} of user to unwhitelist
    function removeFromWhiteList(address _user) external onlyOwner() returns (bool) {
       
        require(whiteList[_user] == true);
        whiteList[_user] = false;
        totalWhiteListed--;
        LogRemoveWhiteListed(_user);
        return true;
    }

    // @notice it will white list one member
    // @param _user {address} of user to whitelist
    // @return true if successful
    function addToWhiteList(address _user) external onlyOwner()  returns (bool) {

        if (whiteList[_user] != true) {
            whiteList[_user] = true;
            totalWhiteListed++;
            LogWhiteListed(_user, totalWhiteListed);            
        }
        return true;
    }

    // @notice it will white list multiple members
    // @param _user {address[]} of users to whitelist
    // @return true if successful
    function addToWhiteListMultiple(address[] _users) external onlyOwner()  returns (bool) {

        for (uint i = 0; i < _users.length; ++i) {

            if (whiteList[_users[i]] != true) {
                whiteList[_users[i]] = true;
                totalWhiteListed++;                          
            }           
        }
        LogWhiteListedMultiple(totalWhiteListed); 
        return true;
    }
}


// @note this contract can be inherited by Crowdsale and TeamAllocation contracts and
// control release of tokens through even time release based on the inputted duration time interval
contract TokenVesting is Ownable {
    using SafeMath for uint;

    struct TokenHolder {
        uint weiReceived; // amount of ETH contributed
        uint tokensToSend; // amount of tokens  sent  
        bool refunded; // true if user has been refunded       
        uint releasedAmount; // amount released through vesting schedule
        bool revoked; // true if right to continue vesting is revoked
    }

    event Released(uint256 amount, uint256 tokenDecimals);
    event ContractUpdated(bool done);

    uint256 public cliff;  // time in  when vesting should begin
    uint256 public startCountDown;  // time when countdown starts
    uint256 public duration; // duration of period in which vesting takes place   
    Token public token;  // token contract containing tokens
    mapping(address => TokenHolder) public tokenHolders; //tokenHolder list
    WhiteList public whiteList; // whitelist contract
    uint256 public presaleBonus;
    
    // @note constructor 
    /**
    function TokenVesting(uint256 _start, uint256 _cliff, uint256 _duration) public {   
         require(_cliff <= _duration);   
        duration = _duration;
        cliff = _start.add(_cliff);
        startCountDown = _start;         
        ContractUpdated(true);                    
    }
    */
    // @notice Specify address of token contract
    // @param _tokenAddress {address} address of token contract
    // @return res {bool}
    function initilizeVestingAndTokenAndWhiteList(Token _tokenAddress, 
                                        uint256 _start, 
                                        uint256 _cliff, 
                                        uint256 _duration,
                                        uint256 _presaleBonus, 
                                        WhiteList _whiteList) external onlyOwner() returns(bool res) {
        require(_cliff <= _duration);   
        require(_tokenAddress != address(0));
        duration = _duration;
        cliff = _start.add(_cliff);
        startCountDown = _start;  
        token = _tokenAddress; 
        whiteList = _whiteList;
        presaleBonus = _presaleBonus;
        ContractUpdated(true);
        return true;    
    }

    // @notice Specify address of token contract
    // @param _tokenAddress {address} address of token contract
    // @return res {bool}
    function initilizeVestingAndToken(Token _tokenAddress, 
                                        uint256 _start, 
                                        uint256 _cliff, 
                                        uint256 _duration,
                                        uint256 _presaleBonus
                                        ) external onlyOwner() returns(bool res) {
        require(_cliff <= _duration);   
        require(_tokenAddress != address(0));
        duration = _duration;
        cliff = _start.add(_cliff);
        startCountDown = _start;  
        token = _tokenAddress;        
        presaleBonus = _presaleBonus;
        ContractUpdated(true);
        return true;    
    }

    function returnVestingSchedule() external view returns (uint, uint, uint) {

        return (duration, cliff, startCountDown);
    }

    // @note owner can revoke access to continue vesting of tokens
    // @param _user {address} of user to revoke their right to vesting
    function revoke(address _user) public onlyOwner() {

        TokenHolder storage tokenHolder = tokenHolders[_user];
        tokenHolder.revoked = true; 
    }

    function vestedAmountAvailable() public view returns (uint amount, uint decimals) {

        TokenHolder storage tokenHolder = tokenHolders[msg.sender];
        uint tokensToRelease = vestedAmount(tokenHolder.tokensToSend);

     //   if (tokenHolder.releasedAmount + tokensToRelease > tokenHolder.tokensToSend)
      //      return (tokenHolder.tokensToSend - tokenHolder.releasedAmount, token.decimals());
     //   else 
        return (tokensToRelease - tokenHolder.releasedAmount, token.decimals());
    }
    
    // @notice Transfers vested available tokens to beneficiary   
    function release() public {

        TokenHolder storage tokenHolder = tokenHolders[msg.sender];        
        // check if right to vesting is not revoked
        require(!tokenHolder.revoked);                                   
        uint tokensToRelease = vestedAmount(tokenHolder.tokensToSend);      
        uint currentTokenToRelease = tokensToRelease - tokenHolder.releasedAmount;
        tokenHolder.releasedAmount += currentTokenToRelease;            
        token.transfer(msg.sender, currentTokenToRelease);

        Released(currentTokenToRelease, token.decimals());
    }
  
    // @notice this function will determine vested amount
    // @param _totalBalance {uint} total balance of tokens assigned to this user
    // @return {uint} amount of tokens available to transfer
    function vestedAmount(uint _totalBalance) public view returns (uint) {

        if (now < cliff) {
            return 0;
        } else if (now >= startCountDown.add(duration)) {
            return _totalBalance;
        } else {
            return _totalBalance.mul(now.sub(startCountDown)) / duration;
        }
    }
}


// Crowdsale Smart Contract
// This smart contract collects ETH and in return sends  tokens to the Backers
contract Crowdsale is Pausable, TokenVesting {

    using SafeMath for uint;

    address public multisigETH; // Multisig contract that will receive the ETH
    address public commissionAddress;  // address to deposit commissions
    uint public tokensForTeam; // tokens for the team
    uint public ethReceivedPresale; // Number of ETH received in presale
    uint public ethReceivedMain; // Number of ETH received in main sale
    uint public totalTokensSent; // Number of tokens sent to ETH contributors
    uint public tokensSentMain;
    uint public tokensSentPresale;       
    uint public tokensSentDev;         
    uint public startBlock; // Crowdsale start block
    uint public endBlock; // Crowdsale end block
    uint public maxCap; // Maximum number of token to sell
    uint public minCap; // Minimum number of ETH to raise
    uint public minContributionMainSale; // Minimum amount to contribute in main sale
    uint public minContributionPresale; // Minimum amount to contribut in presale
    uint public maxContribution;
    bool public crowdsaleClosed; // Is crowdsale still on going
    uint public tokenPriceWei;
    uint public refundCount;
    uint public totalRefunded;
    uint public campaignDurationDays; // campaign duration in days 
    uint public firstPeriod; 
    uint public secondPeriod; 
    uint public thirdPeriod; 
    uint public firstBonus; 
    uint public secondBonus;
    uint public thirdBonus;
    uint public multiplier;
    uint public status;    
    Step public currentStep;  // To allow for controlled steps of the campaign 
   
    // Looping through Backer
    //mapping(address => Backer) public backers; //backer list
    address[] public holdersIndex;   // to be able to itarate through backers when distributing the tokens
    address[] public devIndex;   // to be able to itarate through backers when distributing the tokens

    // @notice to set and determine steps of crowdsale
    enum Step {      
        FundingPreSale,     // presale mode
        FundingMainSale,  // public mode
        Refunding  // in case campaign failed during this step contributors will be able to receive refunds
    }

    // @notice to verify if action is not performed out of the campaing range
    modifier respectTimeFrame() {
        if ((block.number < startBlock) || (block.number > endBlock)) 
            revert();
        _;
    }

    modifier minCapNotReached() {
        if (totalTokensSent >= minCap) 
            revert();
        _;
    }

    // Events
    event LogReceivedETH(address indexed backer, uint amount, uint tokenAmount);
    event LogStarted(uint startBlockLog, uint endBlockLog);
    event LogFinalized(bool success);  
    event LogRefundETH(address indexed backer, uint amount);
    event LogStepAdvanced();
    event LogDevTokensAllocated(address indexed dev, uint amount);
    event LogNonVestedTokensSent(address indexed user, uint amount);

    // Crowdsale  {constructor}
    // @notice fired when contract is crated. Initilizes all constnat variables.
    function Crowdsale(uint _decimalPoints,
                        address _multisigETH,
                        uint _toekensForTeam, 
                        uint _minContributionPresale,
                        uint _minContributionMainSale,
                        uint _maxContribution,                        
                        uint _maxCap, 
                        uint _minCap, 
                        uint _tokenPriceWei, 
                        uint _campaignDurationDays,
                        uint _firstPeriod, 
                        uint _secondPeriod, 
                        uint _thirdPeriod, 
                        uint _firstBonus, 
                        uint _secondBonus,
                        uint _thirdBonus) public {
        multiplier = 10**_decimalPoints;
        multisigETH = _multisigETH; 
        tokensForTeam = _toekensForTeam * multiplier; 
        minContributionPresale = _minContributionPresale; 
        minContributionMainSale = _minContributionMainSale;
        maxContribution = _maxContribution;       
        maxCap = _maxCap * multiplier;       
        minCap = _minCap * multiplier;
        tokenPriceWei = _tokenPriceWei;
        campaignDurationDays = _campaignDurationDays;
        firstPeriod = _firstPeriod; 
        secondPeriod = _secondPeriod; 
        thirdPeriod = _thirdPeriod;
        firstBonus = _firstBonus;
        secondBonus = _secondBonus;
        thirdBonus = _thirdBonus;       
        //TODO replace this address below with correct address.
        commissionAddress = 0x326B5E9b8B2ebf415F9e91b42c7911279d296ea1;
        //commissionAddress = 0x853A3F142430658A32f75A0dc891b98BF4bDF5c1;
        currentStep = Step.FundingPreSale; 
    }

    // @notice to populate website with status of the sale 
    function returnWebsiteData() external view returns(uint, 
        uint, uint, uint, uint, uint, uint, uint, uint, uint, bool, bool, uint, Step) {
    
        return (startBlock, endBlock, numberOfBackers(), ethReceivedPresale + ethReceivedMain, maxCap, minCap, 
                totalTokensSent, tokenPriceWei, minContributionPresale, minContributionMainSale, 
                paused, crowdsaleClosed, token.decimals(), currentStep);
    }
    
    // @notice this function will determine status of crowdsale
    function determineStatus() external view returns (uint) {
       
        if (crowdsaleClosed)            // ICO finihsed
            return 1;   

        if (block.number < endBlock && totalTokensSent < maxCap - 100)   // ICO in progress
            return 2;            
    
        if (totalTokensSent < minCap && block.number > endBlock)      // ICO failed    
            return 3;            
    
        if (endBlock == 0)           // ICO hasn't been started yet 
            return 4;            
    
        return 0;         
    } 

    // {fallback function}
    // @notice It will call internal function which handels allocation of Ether and calculates tokens.
    function () public payable {    
             
        contribute(msg.sender);
    }

    // @notice to allow for contribution from interface
    function contributePublic() external payable {
        contribute(msg.sender);
    }

    // @notice set the step of the campaign from presale to public sale
    // contract is deployed in presale mode
    // WARNING: there is no way to go back
    function advanceStep() external onlyOwner() {
        currentStep = Step.FundingMainSale;
        LogStepAdvanced();
    }

    // @notice It will be called by owner to start the sale    
    function start() external onlyOwner() {
        startBlock = block.number;
        endBlock = startBlock + (4*60*24*campaignDurationDays); // assumption is that one block takes 15 sec. 
        crowdsaleClosed = false;
        LogStarted(startBlock, endBlock);
    }

    // @notice This function will finalize the sale.
    // It will only execute if predetermined sale time passed or all tokens are sold.
    function finalize() external onlyOwner() {

        require(!crowdsaleClosed);                       
        require(block.number >= endBlock || totalTokensSent > maxCap - 1000);
                    // - 1000 is used to allow closing of the campaing when contribution is near 
                    // finished as exact amount of maxCap might be not feasible e.g. you can't easily buy few tokens. 
                    // when min contribution is 0.1 Eth.  

        require(totalTokensSent >= minCap);
        crowdsaleClosed = true;
        
        // transfer commission portion to the platform
        commissionAddress.transfer(determineCommissions());         
        
        // transfer remaning funds to the campaign wallet
        multisigETH.transfer(this.balance);
        
        /*if (!token.transfer(owner, token.balanceOf(this))) 
            revert(); // transfer tokens to admin account  
            
        if (!token.burn(this, token.balanceOf(this))) 
            revert();  // burn all the tokens remaining in the contract   */
        token.unlock();    // release lock from transfering tokens. 

        LogFinalized(true);        
    }

    // @notice it will allow contributors to get refund in case campaign failed
    // @return {bool} true if successful
    function refund() external whenNotPaused returns (bool) {      
        
        uint totalEtherReceived = ethReceivedPresale + ethReceivedMain;

        require(totalEtherReceived < minCap);  // ensure that campaign failed
        require(this.balance > 0);  // contract will hold 0 ether at the end of campaign.
                                    // contract needs to be funded through fundContract() 
        TokenHolder storage backer = tokenHolders[msg.sender];

        require(backer.weiReceived > 0);  // ensure that user has sent contribution
        require(!backer.refunded);        // ensure that user hasn't been refunded yet

        backer.refunded = true;  // save refund status to true
        refundCount++;
        totalRefunded += backer.weiReceived;

        if (!token.burn(msg.sender, backer.tokensToSend)) // burn tokens
            revert();        
        msg.sender.transfer(backer.weiReceived);  // send back the contribution 
        LogRefundETH(msg.sender, backer.weiReceived);
        return true;
    }

    // @notice allocate tokens to dev/team/advisors
    // @param _dev {address} 
    // @param _amount {uint} amount of tokens
    function devAllocation(address _dev, uint _amount) external onlyOwner() returns (bool) {

        require(_dev != address(0));
        require(crowdsaleClosed); 
        require(totalTokensSent.add(_amount) <= token.totalSupply());
        devIndex.push(_dev);
        TokenHolder storage tokenHolder = tokenHolders[_dev];
        tokenHolder.tokensToSend = _amount;
        tokensSentDev += _amount;
        totalTokensSent += _amount;        
        LogDevTokensAllocated(_dev, _amount); // Register event
        return true;

    }

    // @notice Failsafe drain
    function drain(uint _amount) external onlyOwner() {
        owner.transfer(_amount);           
    }

    // @notice transfer tokens which are not subject to vesting
    // @param _recipient {addres}
    // @param _amont {uint} amount to transfer
    function transferTokens(address _recipient, uint _amount) external onlyOwner() returns (bool) {

        require(_recipient != address(0));
        if (!token.transfer(_recipient, _amount))
            revert();
        LogNonVestedTokensSent(_recipient, _amount);
    }

    // @notice determine amount of commissions for the platform    
    function determineCommissions() public view returns (uint) {
     
        if (this.balance <= 500 ether) {
            return (this.balance * 10)/100;
        }else if (this.balance <= 1000 ether) {
            return (this.balance * 8)/100;
        }else if (this.balance < 10000 ether) {
            return (this.balance * 6)/100;
        }else {
            return (this.balance * 6)/100;
        }
    }

    // @notice return number of contributors
    // @return  {uint} number of contributors
    function numberOfBackers() public view returns (uint) {
        return holdersIndex.length;
    }

    // @notice It will be called by fallback function whenever ether is sent to it
    // @param  _backer {address} address of beneficiary
    // @return res {bool} true if transaction was successful
    function contribute(address _backer) internal whenNotPaused respectTimeFrame returns(bool res) {

        //require(msg.value <= maxContribution);

        if (whiteList != address(0))  // if whitelist initialized verify member whitelist status
            require(whiteList.isWhiteListed(_backer));  // ensure that user is whitelisted
          
        uint tokensToSend = calculateNoOfTokensToSend(); // calculate number of tokens

        // Ensure that max cap hasn't been reached
        require(totalTokensSent + tokensToSend <= maxCap);
        
        TokenHolder storage backer = tokenHolders[_backer];

        if (backer.weiReceived == 0)
            holdersIndex.push(_backer);

        if (Step.FundingMainSale == currentStep) { // Update the total Ether received and tokens sent during public sale
            require(msg.value >= minContributionMainSale); // stop when required minimum is not met    
            ethReceivedMain = ethReceivedMain.add(msg.value);
            tokensSentMain += tokensToSend;
        }else {  
            require(msg.value >= minContributionPresale); // stop when required minimum is not met
            ethReceivedPresale = ethReceivedPresale.add(msg.value); 
            tokensSentPresale += tokensToSend;
        }  
       
        backer.tokensToSend += tokensToSend;
        backer.weiReceived = backer.weiReceived.add(msg.value);       
        totalTokensSent += tokensToSend;      
        
        // tokens are not transferrd to contributors during this phase
        // tokens will be transferred based on the vesting schedule, when contributor
        // calls release() function of this contract
        LogReceivedETH(_backer, msg.value, tokensToSend); // Register event
        return true;
    }

    // @notice This function will return number of tokens based on time intervals in the campaign
    function calculateNoOfTokensToSend() internal view returns (uint) {

        uint tokenAmount = msg.value.mul(multiplier) / tokenPriceWei;

        if (Step.FundingMainSale == currentStep) {
        
            if (block.number <= startBlock + firstPeriod) {  
                return  tokenAmount + tokenAmount.mul(firstBonus) / 100;
            }else if (block.number <= startBlock + secondPeriod) {
                return  tokenAmount + tokenAmount.mul(secondBonus) / 100; 
            }else if (block.number <= startBlock + thirdPeriod) { 
                return  tokenAmount + tokenAmount.mul(thirdBonus) / 100;        
            }else {              
                return  tokenAmount; 
            }
        }else 
            return  tokenAmount + tokenAmount.mul(presaleBonus) / 100;
    }  
}


// The  token
contract Token is ERC20, Ownable {

    using SafeMath for uint;
    // Public variables of the token
    string public name;
    string public symbol;
    uint public decimals; // How many decimals to show.
    string public version = "v0.1";
    uint public totalSupply;
    bool public locked;
    address public crowdSaleAddress;

    mapping(address => uint) public balances;
    mapping(address => mapping(address => uint)) public allowed;
    
    // Lock transfer during the ICO
    modifier onlyUnlocked() {
        if (msg.sender != crowdSaleAddress && locked && msg.sender != owner) 
            revert();
        _;
    }

    modifier onlyAuthorized() {
        if (msg.sender != crowdSaleAddress && msg.sender != owner) 
            revert();
        _;
    }

    // The Token constructor     
    function Token(uint _initialSupply,
            string _tokenName,
            uint _decimalUnits,
            string _tokenSymbol,
            string _version,
            address _crowdSaleAddress) public {      
        locked = true;  // Lock the transfer of tokens during the crowdsale
        totalSupply = _initialSupply * (10**_decimalUnits);     
                                        
        name = _tokenName; // Set the name for display purposes
        symbol = _tokenSymbol; // Set the symbol for display purposes
        decimals = _decimalUnits; // Amount of decimals for display purposes
        version = _version;
        crowdSaleAddress = _crowdSaleAddress;              
        balances[crowdSaleAddress] = totalSupply;   
    }

    function unlock() public onlyAuthorized {
        locked = false;
    }

    function lock() public onlyAuthorized {
        locked = true;
    }

    function burn(address _member, uint256 _value) public onlyAuthorized returns(bool) {
        require(balances[_member] >= _value);
        balances[_member] -= _value;
        totalSupply -= _value;
        Transfer(_member, 0x0, _value);
        return true;
    }

   
    // @notice transfer tokens to given address
    // @param _to {address} address or recipient
    // @param _value {uint} amount to transfer
    // @return  {bool} true if successful
    function transfer(address _to, uint _value) public onlyUnlocked returns(bool) {

        require(_to != address(0));
        require(balances[msg.sender] >= _value);
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        Transfer(msg.sender, _to, _value);
        return true;
    }

    // @notice transfer tokens from given address to another address
    // @param _from {address} from whom tokens are transferred
    // @param _to {address} to whom tokens are transferred
    // @param _value {uint} amount of tokens to transfer
    // @return  {bool} true if successful
    function transferFrom(address _from, address _to, uint256 _value) public onlyUnlocked returns(bool success) {

        require(_to != address(0));
        require(balances[_from] >= _value); // Check if the sender has enough
        require(_value <= allowed[_from][msg.sender]); // Check if allowed is greater or equal
        balances[_from] -= _value; // Subtract from the sender
        balances[_to] += _value; // Add the same to the recipient
        allowed[_from][msg.sender] -= _value;  // adjust allowed
        Transfer(_from, _to, _value);
        return true;
    }

      // @notice to query balance of account
    // @return _owner {address} address of user to query balance
    function balanceOf(address _owner) public view returns(uint balance) {
        return balances[_owner];
    }

    /**
    * @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, uint _value) public returns(bool) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    // @notice to query of allowance of one user to the other
    // @param _owner {address} of the owner of the account
    // @param _spender {address} of the spender of the account
    // @return remaining {uint} amount of remaining allowance
    function allowance(address _owner, address _spender) public view returns(uint 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;
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"tokenPriceWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refundCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numberOfBackers","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"duration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"returnWebsiteData","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"},{"name":"","type":"bool"},{"name":"","type":"uint256"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cliff","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"campaignDurationDays","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"multiplier","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_totalBalance","type":"uint256"}],"name":"vestedAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"status","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startCountDown","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"returnVestingSchedule","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"determineStatus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"holdersIndex","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"determineCommissions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whiteList","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vestedAmountAvailable","outputs":[{"name":"amount","type":"uint256"},{"name":"decimals","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"contributePublic","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"advanceStep","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"refund","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentStep","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minContributionMainSale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"secondBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenHolders","outputs":[{"name":"weiReceived","type":"uint256"},{"name":"tokensToSend","type":"uint256"},{"name":"refunded","type":"bool"},{"name":"releasedAmount","type":"uint256"},{"name":"revoked","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"}],"name":"revoke","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"multisigETH","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"release","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensSentDev","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethReceivedMain","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"commissionAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"thirdBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_start","type":"uint256"},{"name":"_cliff","type":"uint256"},{"name":"_duration","type":"uint256"},{"name":"_presaleBonus","type":"uint256"},{"name":"_whiteList","type":"address"}],"name":"initilizeVestingAndTokenAndWhiteList","outputs":[{"name":"res","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"presaleBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"thirdPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_start","type":"uint256"},{"name":"_cliff","type":"uint256"},{"name":"_duration","type":"uint256"},{"name":"_presaleBonus","type":"uint256"}],"name":"initilizeVestingAndToken","outputs":[{"name":"res","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ethReceivedPresale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokensSent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensSentPresale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"start","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"firstPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleClosed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dev","type":"address"},{"name":"_amount","type":"uint256"}],"name":"devAllocation","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalRefunded","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minContributionPresale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"secondPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensSentMain","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"devIndex","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":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"drain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensForTeam","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_decimalPoints","type":"uint256"},{"name":"_multisigETH","type":"address"},{"name":"_toekensForTeam","type":"uint256"},{"name":"_minContributionPresale","type":"uint256"},{"name":"_minContributionMainSale","type":"uint256"},{"name":"_maxContribution","type":"uint256"},{"name":"_maxCap","type":"uint256"},{"name":"_minCap","type":"uint256"},{"name":"_tokenPriceWei","type":"uint256"},{"name":"_campaignDurationDays","type":"uint256"},{"name":"_firstPeriod","type":"uint256"},{"name":"_secondPeriod","type":"uint256"},{"name":"_thirdPeriod","type":"uint256"},{"name":"_firstBonus","type":"uint256"},{"name":"_secondBonus","type":"uint256"},{"name":"_thirdBonus","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"backer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"}],"name":"LogReceivedETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"startBlockLog","type":"uint256"},{"indexed":false,"name":"endBlockLog","type":"uint256"}],"name":"LogStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"success","type":"bool"}],"name":"LogFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"backer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogRefundETH","type":"event"},{"anonymous":false,"inputs":[],"name":"LogStepAdvanced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"dev","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogDevTokensAllocated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogNonVestedTokensSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"tokenDecimals","type":"uint256"}],"name":"Released","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"done","type":"bool"}],"name":"ContractUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

Deployed Bytecode

0x6060604052600436106102d15763ffffffff60e060020a60003504166305d0f15b81146102dd578063083c6323146103025780630bda4dbf146103155780630dbd5270146103285780630fb5a6b41461033b578063127e499c1461034e57806313b5d4201461036157806313d033c0146103fb57806319711d671461040e5780631b3ed722146104215780631bfce85314610434578063200d2ed21461044a57806321d7bdff1461045d57806323548b8b1461047057806325d104d4146104835780632975659d146104ba5780632a14a9da146104cd5780632b0e64b3146104ff5780633544a8641461051257806335593bcf1461052557806336335e19146105505780633cac38e41461055a5780633f4ba83a1461056d5780633fa615b01461058057806348cd4cb1146105935780634bb278f3146105a6578063590e1ae3146105b95780635bc34f71146105e05780635c975abb146106175780635eec743b1461062a57806361bb246c1461063d578063638b5e531461065057806374a8f103146106a6578063823914d9146106c55780638456cb59146106d857806386d1a69f146106eb578063878a18ef146106fe5780638d3d6576146107115780638da5cb5b146107245780639263b55914610737578063931742d31461074a57806393928c911461075d578063965e08e81461077057806399cb0823146107a55780639e439ff8146107b8578063a20d426c146107cb578063a5cf56f2146107f6578063ac1559d214610809578063b630aa481461081c578063be9a65551461082f578063bec3fa1714610842578063c4e3a63b14610864578063ccb07cef14610877578063d4fbe1e01461088a578063d9082962146108ac578063e44a94d3146108bf578063e4818e4b146108d2578063ed810d02146108e5578063ee73cf66146108f8578063f2fde38b1461090e578063f6b19c741461092d578063fc0c546a14610943578063fde83a3414610956575b6102da33610969565b50005b34156102e857600080fd5b6102f0610ba2565b60405190815260200160405180910390f35b341561030d57600080fd5b6102f0610ba8565b341561032057600080fd5b6102f0610bae565b341561033357600080fd5b6102f0610bb4565b341561034657600080fd5b6102f0610bbb565b341561035957600080fd5b6102f0610bc1565b341561036c57600080fd5b610374610bc7565b604051808f81526020018e81526020018d81526020018c81526020018b81526020018a815260200189815260200188815260200187815260200186815260200185151515158152602001841515151581526020018381526020018260028111156103da57fe5b60ff1681526020019e50505050505050505050505050505060405180910390f35b341561040657600080fd5b6102f0610cd5565b341561041957600080fd5b6102f0610cdb565b341561042c57600080fd5b6102f0610ce1565b341561043f57600080fd5b6102f0600435610ce7565b341561045557600080fd5b6102f0610d57565b341561046857600080fd5b6102f0610d5d565b341561047b57600080fd5b6102f0610d63565b341561048e57600080fd5b610496610d69565b60405180848152602001838152602001828152602001935050505060405180910390f35b34156104c557600080fd5b6102f0610d77565b34156104d857600080fd5b6104e3600435610de9565b604051600160a060020a03909116815260200160405180910390f35b341561050a57600080fd5b6102f0610e11565b341561051d57600080fd5b6104e3610ebb565b341561053057600080fd5b610538610eca565b60405191825260208201526040908101905180910390f35b610558610f6d565b005b341561056557600080fd5b610558610f79565b341561057857600080fd5b610558610fcf565b341561058b57600080fd5b6102f061104e565b341561059e57600080fd5b6102f0611054565b34156105b157600080fd5b61055861105a565b34156105c457600080fd5b6105cc6111c6565b604051901515815260200160405180910390f35b34156105eb57600080fd5b6105f361137b565b6040518082600281111561060357fe5b60ff16815260200191505060405180910390f35b341561062257600080fd5b6105cc611384565b341561063557600080fd5b6102f0611394565b341561064857600080fd5b6102f061139a565b341561065b57600080fd5b61066f600160a060020a03600435166113a0565b60405194855260208501939093529015156040808501919091526060840191909152901515608083015260a0909101905180910390f35b34156106b157600080fd5b610558600160a060020a03600435166113d4565b34156106d057600080fd5b6104e3611418565b34156106e357600080fd5b610558611427565b34156106f657600080fd5b6105586114ab565b341561070957600080fd5b6102f0611618565b341561071c57600080fd5b6102f061161e565b341561072f57600080fd5b6104e3611624565b341561074257600080fd5b6102f0611633565b341561075557600080fd5b6104e3611639565b341561076857600080fd5b6102f0611648565b341561077b57600080fd5b6105cc600160a060020a036004358116906024359060443590606435906084359060a4351661164e565b34156107b057600080fd5b6102f061172f565b34156107c357600080fd5b6102f0611735565b34156107d657600080fd5b6105cc600160a060020a036004351660243560443560643560843561173b565b341561080157600080fd5b6102f0611806565b341561081457600080fd5b6102f061180c565b341561082757600080fd5b6102f0611812565b341561083a57600080fd5b610558611818565b341561084d57600080fd5b6105cc600160a060020a036004351660243561188d565b341561086f57600080fd5b6102f0611986565b341561088257600080fd5b6105cc61198c565b341561089557600080fd5b6105cc600160a060020a0360043516602435611995565b34156108b757600080fd5b6102f0611b0a565b34156108ca57600080fd5b6102f0611b10565b34156108dd57600080fd5b6102f0611b16565b34156108f057600080fd5b6102f0611b1c565b341561090357600080fd5b6104e3600435611b22565b341561091957600080fd5b610558600160a060020a0360043516611b30565b341561093857600080fd5b610558600435611bcb565b341561094e57600080fd5b6104e3611c19565b341561096157600080fd5b6102f0611c28565b600080548190819060a060020a900460ff161561098557600080fd5b601154431080610996575060125443115b156109a057600080fd5b600654600160a060020a031615610a3057600654600160a060020a0316636f9170f68560006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610a0a57600080fd5b6102c65a03f11515610a1b57600080fd5b505050604051805190501515610a3057600080fd5b610a38611c2e565b915060135482600d540111151515610a4f57600080fd5b50600160a060020a038316600090815260056020526040902080541515610ab5576026805460018101610a828382611d69565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386161790555b60255460ff166002811115610ac657fe5b60011415610b0057601554341015610add57600080fd5b600c54610af0903463ffffffff611d1216565b600c55600e805483019055610b2e565b601654341015610b0f57600080fd5b600b54610b22903463ffffffff611d1216565b600b55600f8054830190555b600181018054830190558054610b4a903463ffffffff611d1216565b8155600d805483019055600160a060020a0384167fe3539dcc17b38d337133cfce1f00f1e94765090378d48a1d73171a93e6a1ff78348460405191825260208201526040908101905180910390a25060019392505050565b60195481565b60125481565b601a5481565b6026545b90565b60035481565b60205481565b600080600080600080600080600080600080600080601154601254610bea610bb4565b600c54600b5401601354601454600d54601954601654601554600060149054906101000a900460ff16601860009054906101000a900460ff16600460009054906101000a9004600160a060020a0316600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610c7e57600080fd5b6102c65a03f11515610c8f57600080fd5b50505060405180519050602560009054906101000a900460ff169d509d509d509d509d509d509d509d509d509d509d509d509d509d50909192939495969798999a9b9c9d565b60015481565b601c5481565b60235481565b6000600154421015610cfb57506000610d52565b600354600254610d109163ffffffff611d1216565b4210610d1d575080610d52565b600354610d45610d3860025442611d3690919063ffffffff16565b849063ffffffff611d4816565b811515610d4e57fe5b0490505b919050565b60245481565b60025481565b60135481565b600354600154600254909192565b60185460009060ff1615610d8d57506001610bb8565b60125443108015610da45750606460135403600d54105b15610db157506002610bb8565b601454600d54108015610dc5575060125443115b15610dd257506003610bb8565b6012541515610de357506004610bb8565b50600090565b6026805482908110610df757fe5b600091825260209091200154600160a060020a0316905081565b6000681b1ae4d6e2ef500000600160a060020a0330163111610e46576064600a600160a060020a03301631025b049050610bb8565b683635c9adc5dea00000600160a060020a0330163111610e755760646008600160a060020a0330163102610e3e565b69021e19e0c9bab240000030600160a060020a0316311015610ea65760646006600160a060020a0330163102610e3e565b60646006600160a060020a0330163102610e3e565b600654600160a060020a031681565b600160a060020a033316600090815260056020526040812060018101548291908290610ef590610ce7565b6003830154600454919250820390600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610f4857600080fd5b6102c65a03f11515610f5957600080fd5b505050604051805190509350935050509091565b610f7633610969565b50565b60005433600160a060020a03908116911614610f9457600080fd5b6025805460ff191660011790557f592c878e6add7d4d1ceb88871d699a1f9655424e4cd45f0ca7ad9f98526f286860405160405180910390a1565b60005433600160a060020a03908116911614610fea57600080fd5b60005460a060020a900460ff16151561100257600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60145481565b60115481565b60005433600160a060020a0390811691161461107557600080fd5b60185460ff161561108557600080fd5b6012544310158061109d57506103e860135403600d54115b15156110a857600080fd5b601454600d5410156110b957600080fd5b6018805460ff19166001179055600954600160a060020a03166108fc6110dd610e11565b9081150290604051600060405180830381858888f19350505050151561110257600080fd5b600854600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561113b57600080fd5b600454600160a060020a031663a69df4b56040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561117a57600080fd5b6102c65a03f1151561118b57600080fd5b5050507fe2b612f94c4cb9a16dd0d29db7c97a0e08091b23de2a812f782c2d8b760537706001604051901515815260200160405180910390a1565b600080548190819060a060020a900460ff16156111e257600080fd5b600c54600b546014549101925082106111fa57600080fd5b6000600160a060020a033016311161121157600080fd5b50600160a060020a033316600090815260056020526040812080549091901161123957600080fd5b600281015460ff161561124b57600080fd5b60028101805460ff19166001908117909155601a8054820190558154601b8054909101905560045490820154600160a060020a0390911690639dc29fac90339060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112d757600080fd5b6102c65a03f115156112e857600080fd5b5050506040518051905015156112fd57600080fd5b8054600160a060020a0333169080156108fc0290604051600060405180830381858888f19350505050151561133157600080fd5b33600160a060020a03167f991678bf7f45816a1ff5cf860f3dabd3e26c34d959aa479904bf9caec17af1c5826000015460405190815260200160405180910390a260019250505090565b60255460ff1681565b60005460a060020a900460ff1681565b60155481565b60215481565b600560205260009081526040902080546001820154600283015460038401546004909401549293919260ff91821692911685565b6000805433600160a060020a039081169116146113f057600080fd5b50600160a060020a03166000908152600560205260409020600401805460ff19166001179055565b600854600160a060020a031681565b60005433600160a060020a0390811691161461144257600080fd5b60005460a060020a900460ff161561145957600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600160a060020a03331660009081526005602052604081206004810154909190819060ff16156114da57600080fd5b6114e78360010154610ce7565b6003840180548083039081019091556004549193509150600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561155a57600080fd5b6102c65a03f1151561156b57600080fd5b505050604051805150506004547fd5840651550c173a8bf246eede440a59253bc61eadb2e8887168faad2fad631d908290600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115e157600080fd5b6102c65a03f115156115f257600080fd5b5050506040518051905060405191825260208201526040908101905180910390a1505050565b60105481565b60175481565b600054600160a060020a031681565b600c5481565b600954600160a060020a031681565b60225481565b6000805433600160a060020a0390811691161461166a57600080fd5b8385111561167757600080fd5b600160a060020a038716151561168c57600080fd5b60038490556116a1868663ffffffff611d1216565b6001908155600287905560048054600160a060020a03808b1673ffffffffffffffffffffffffffffffffffffffff1992831617909255600680549286169290911691909117905560078490557f197d0e3bb2b41721838884620cf57f1ed98cc18d2f03a8f182b616bea64af84e90604051901515815260200160405180910390a15060019695505050505050565b60075481565b601f5481565b6000805433600160a060020a0390811691161461175757600080fd5b8284111561176457600080fd5b600160a060020a038616151561177957600080fd5b600383905561178e858563ffffffff611d1216565b600190815560028690556004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03891617905560078390557f197d0e3bb2b41721838884620cf57f1ed98cc18d2f03a8f182b616bea64af84e90604051901515815260200160405180910390a150600195945050505050565b600b5481565b600d5481565b600f5481565b60005433600160a060020a0390811691161461183357600080fd5b436011819055601c5461168002810160128190556018805460ff191690557fa88abb2da4d124e645a64f427adf44fa8111af1831a3f5437591925a2cf7a4e7919060405191825260208201526040908101905180910390a1565b6000805433600160a060020a039081169116146118a957600080fd5b600160a060020a03831615156118be57600080fd5b600454600160a060020a031663a9059cbb848460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561191d57600080fd5b6102c65a03f1151561192e57600080fd5b50505060405180519050151561194357600080fd5b82600160a060020a03167fc0e43987907a4f82c4722f79a2e833ae2fc53dca0daa8b8141726b810591126e8360405190815260200160405180910390a292915050565b601d5481565b60185460ff1681565b60008054819033600160a060020a039081169116146119b357600080fd5b600160a060020a03841615156119c857600080fd5b60185460ff1615156119d957600080fd5b600454600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611a2157600080fd5b6102c65a03f11515611a3257600080fd5b5050506040518051600d54909150611a50908563ffffffff611d1216565b1115611a5b57600080fd5b6027805460018101611a6d8382611d69565b506000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0388169081179091558083526005909152604091829020600181018690556010805487019055600d8054870190559250907f969830dc5773a5b34b166c8a34cd2600c8cb681dab9cc14b1a69b000731fe3aa9085905190815260200160405180910390a25060019392505050565b601b5481565b60165481565b601e5481565b600e5481565b6027805482908110610df757fe5b60005433600160a060020a03908116911614611b4b57600080fd5b600160a060020a0381161515611b6057600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614611be657600080fd5b600054600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610f7657600080fd5b600454600160a060020a031681565b600a5481565b600080601954611c4960235434611d4890919063ffffffff16565b811515611c5257fe5b602554919004915060ff166002811115611c6857fe5b60011415611cf757601d54601154014311611ca7576064611c9460205483611d4890919063ffffffff16565b811515611c9d57fe5b0481019150611d0e565b601e54601154014311611ccb576064611c9460215483611d4890919063ffffffff16565b601f54601154014311611cef576064611c9460225483611d4890919063ffffffff16565b809150611d0e565b6064611c9460075483611d4890919063ffffffff16565b5090565b6000828201838110801590611d275750828110155b1515611d2f57fe5b9392505050565b600082821115611d4257fe5b50900390565b6000828202831580611d275750828482811515611d6157fe5b0414611d2f57fe5b815481835581811511611d8d57600083815260209020611d8d918101908301611d92565b505050565b610bb891905b80821115611d0e5760008155600101611d985600a165627a7a7230582069cf72ba79943bcfb648637d08cf076b6c3c1939f4ef4ea8a462b6f755958e920029

Swarm Source

bzzr://69cf72ba79943bcfb648637d08cf076b6c3c1939f4ef4ea8a462b6f755958e92

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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