ETH Price: $2,579.20 (-3.95%)
Gas: 5 Gwei

Contract

0xFbBc46458C53154C0D1B45C801c28a99F95FA709
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer81044092019-07-07 13:17:571862 days ago1562505477IN
0xFbBc4645...9F95FA709
0 ETH0.000066993
Transfer81025412019-07-07 6:29:171863 days ago1562480957IN
0xFbBc4645...9F95FA709
0 ETH0.000133996
Transfer81024772019-07-07 6:13:041863 days ago1562479984IN
0xFbBc4645...9F95FA709
0 ETH0.000223616
Transfer74728442019-03-31 0:01:021961 days ago1553990462IN
0xFbBc4645...9F95FA709
0 ETH0.000149074
Approve73707162019-03-15 1:47:371977 days ago1552614457IN
0xFbBc4645...9F95FA709
0 ETH0.000046121
Transfer73706412019-03-15 1:32:371977 days ago1552613557IN
0xFbBc4645...9F95FA709
0 ETH0.000022331
Transfer73582332019-03-13 3:09:121979 days ago1552446552IN
0xFbBc4645...9F95FA709
0 ETH0.000087093.9
Transfer73521392019-03-12 4:24:551980 days ago1552364695IN
0xFbBc4645...9F95FA709
0 ETH0.000022331
Transfer73520142019-03-12 3:51:361980 days ago1552362696IN
0xFbBc4645...9F95FA709
0 ETH0.000044662
Transfer73518282019-03-12 3:06:401980 days ago1552360000IN
0xFbBc4645...9F95FA709
0 ETH0.000022331
Transfer70166162019-01-05 21:38:422045 days ago1546724322IN
0xFbBc4645...9F95FA709
0 ETH0.000019720.88581365
Transfer67526062018-11-22 16:14:492089 days ago1542903289IN
0xFbBc4645...9F95FA709
0 ETH0.0005217614
Transfer67229072018-11-17 19:04:022094 days ago1542481442IN
0xFbBc4645...9F95FA709
0 ETH0.000089334
Transfer67205802018-11-17 9:48:352094 days ago1542448115IN
0xFbBc4645...9F95FA709
0 ETH0.000089334
Transfer67202962018-11-17 8:43:272095 days ago1542444207IN
0xFbBc4645...9F95FA709
0 ETH0.000089334
Transfer66740672018-11-09 19:12:182102 days ago1541790738IN
0xFbBc4645...9F95FA709
0 ETH0.000089334
Transfer66739062018-11-09 18:31:352102 days ago1541788295IN
0xFbBc4645...9F95FA709
0 ETH0.000089334
Transfer66616042018-11-07 18:09:542104 days ago1541614194IN
0xFbBc4645...9F95FA709
0 ETH0.000089334
Transfer66545802018-11-06 14:37:472105 days ago1541515067IN
0xFbBc4645...9F95FA709
0 ETH0.000371557.09982054
Transfer64466402018-10-03 16:16:542139 days ago1538583414IN
0xFbBc4645...9F95FA709
0 ETH0.000110824.96237491
Transfer64424522018-10-02 23:37:462140 days ago1538523466IN
0xFbBc4645...9F95FA709
0 ETH0.0016426544
Transfer64349032018-10-01 18:10:082141 days ago1538417408IN
0xFbBc4645...9F95FA709
0 ETH0.0015280241
Approve64220962018-09-29 15:51:072143 days ago1538236267IN
0xFbBc4645...9F95FA709
0 ETH0.000415089
Transfer63663782018-09-20 11:56:322152 days ago1537444592IN
0xFbBc4645...9F95FA709
0 ETH0.000379817.2575744
Transfer63658562018-09-20 9:54:262152 days ago1537437266IN
0xFbBc4645...9F95FA709
0 ETH0.000444838.5
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-12-31
*/

pragma solidity ^0.4.18;

// Project: High Reward Coin
// v4, 2017-12-31
// This code is the property of CryptoB2B.io
// Copying in whole or in part is prohibited.
// Authors: Ivan Fedorov and Dmitry Borodin
// Do you want the same ICO platform? www.cryptob2b.io


// (A1)
// The main contract for the sale and management of rounds.
contract CrowdsaleBL{
    using SafeMath for uint256;

    enum ICOType {round1, round2}
    enum Roles {beneficiary, accountant, manager, observer, bounty, team, company}

    Token public token;

    bool public isFinalized;
    bool public isInitialized;
    bool public isPausedCrowdsale;

    mapping (uint8 => address) public wallets;
   

    uint256 public startTime = 1516435200;    // 20.01.2018 08:00:00
    uint256 public endTime = 1519171199;      // 20.02.2018 23:59:59

    // How many tokens (excluding the bonus) are transferred to the investor in exchange for 1 ETH
    // **THOUSANDS** 10^3 for human, 1*10**3 for Solidity, 1e3 for MyEtherWallet (MEW).
    // Example: if 1ETH = 40.5 Token ==> use 40500
    uint256 public rate = 400000; // Tokens

    // If the round does not attain this value before the closing date, the round is recognized as a
    // failure and investors take the money back (the founders will not interfere in any way).
    // **QUINTILLIONS** 10^18 / 1*10**18 / 1e18. Example: softcap=15ETH ==> use 15*10**18 (Solidity) or 15e18 (MEW)
    uint256 public softCap = 1240000*10**18; // 1,24M Tokens (~ $1 000 000)

    // The maximum possible amount of income
    // **QUINTILLIONS** 10^18 / 1*10**18 / 1e18. Example: hardcap=123.45ETH ==> use 123450*10**15 (Solidity) or 12345e15 (MEW)
    uint256 public hardCap = 9240000*10**18; // 9,24M Tokens (~ $12 700 00)

    // If the last payment is slightly higher than the hardcap, then the usual contracts do
    // not accept it, because it goes beyond the hardcap. However it is more reasonable to accept the
    // last payment, very slightly raising the hardcap. The value indicates by how many Token emitted the
    // last payment can exceed the hardcap to allow it to be paid. Immediately after this buy, the
    // round closes. The funders should write here a small number, not more than 1% of the CAP.
    // Can be equal to zero, to cancel.
    // **QUINTILLIONS** 10^18 / 1*10**18 / 1e18
    uint256 public overLimit = 20000*10**18; // Tokens (~$20000)

    // The minimum possible payment from an investor in ETH. Payments below this value will be rejected.
    // **QUINTILLIONS** 10^18 / 1*10**18 / 1e18. Example: minPay=0.1ETH ==> use 100*10**15 (Solidity) or 100e15 (MEW)
    uint256 public minPay = 36*10**15; // 0,036 ETH (~$25)

    uint256 public ethWeiRaised;
    uint256 public nonEthWeiRaised;
    uint256 weiRound1;
    uint256 public tokenReserved;

    RefundVault public vault;
    SVTAllocation public lockedAllocation;
    
    
    struct BonusBlock {uint256 amount; uint256 procent;}
    BonusBlock[] public bonusPattern;

    ICOType ICO = ICOType.round2; // only ICO round #2 (no pre-ICO)

    uint256 allToken;

    bool public bounty;
    bool public team;
    bool public company;
    bool public partners;

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

    event Finalized();
    event Initialized();

    function CrowdsaleBL(Token _token, uint256 firstMint) public
    {
        // Initially, all next 7 roles/wallets are given to the Manager. The Manager is an employee of the company
        // with knowledge of IT, who publishes the contract and sets it up. However, money and tokens require
        // a Beneficiary and other roles (Accountant, Team, etc.). The Manager will not have the right
        // to receive them. To enable this, the Manager must either enter specific wallets here, or perform
        // this via method changeWallet. In the finalization methods it is written which wallet and
        // what percentage of tokens are received.

        // Receives all the money (when finalizing pre-ICO & ICO)
        wallets[uint8(Roles.beneficiary)] = 0xe06bD713B2e33C218FDD56295Af74d45cE8c9D98; //msg.sender;

        // Receives all the tokens for non-ETH investors (when finalizing pre-ICO & ICO)
        wallets[uint8(Roles.accountant)] = 0xddC98d7d9CdD82172daD7467c8E341cfBEb077DD; //msg.sender;

        // All rights except the rights to receive tokens or money. Has the right to change any other
        // wallets (Beneficiary, Accountant, ...), but only if the round has not started. Once the
        // round is initialized, the Manager has lost all rights to change the wallets.
        // If the ICO is conducted by one person, then nothing needs to be changed. Permit all 7 roles
        // point to a single wallet.
        wallets[uint8(Roles.manager)] = msg.sender;

        // Has only the right to call paymentsInOtherCurrency (please read the document)
        wallets[uint8(Roles.observer)] = 0x76d737F21296cd1ED6938DbCA217615681b06336; //msg.sender;


        wallets[uint8(Roles.bounty)] = 0x4918fc7974d7Ee6F266f9256DfcA610FD735Bf27; //msg.sender;

        // When the round is finalized, all team tokens are transferred to a special freezing
        // contract. As soon as defrosting is over, only the Team wallet will be able to
        // collect all the tokens. It does not store the address of the freezing contract,
        // but the final wallet of the project team.
        wallets[uint8(Roles.team)] = 0xc59403026685F553f8a6937C53452b9d1DE4c707; // msg.sender;

        // startTime, endDiscountTime, endTime (then you can change it in the setup)
        //changePeriod(now + 5 minutes, now + 5 + 10 minutes, now + 5 + 12 minutes);

        wallets[uint8(Roles.company)] = 0xc59403026685F553f8a6937C53452b9d1DE4c707; //msg.sender;
        
        token = _token;
        token.setOwner();

        token.pause(); // block exchange tokens

        token.addUnpausedWallet(msg.sender);
        token.addUnpausedWallet(wallets[uint8(Roles.company)]);
        token.addUnpausedWallet(wallets[uint8(Roles.bounty)]);
        token.addUnpausedWallet(wallets[uint8(Roles.accountant)]);

        if (firstMint > 0){
            token.mint(msg.sender,firstMint);
        }

    }

    // Returns the name of the current round in plain text. Constant.
    function ICOSaleType()  public constant returns(string){
        return (ICO == ICOType.round1)?'round1':'round2';
    }

    // Transfers the funds of the investor to the contract of return of funds. Internal.
    function forwardFunds() internal {
        vault.deposit.value(msg.value)(msg.sender);
    }

    // Check for the possibility of buying tokens. Inside. Constant.
    function validPurchase() internal constant returns (bool) {

        // The round started and did not end
        bool withinPeriod = (now > startTime && now < endTime);

        // Rate is greater than or equal to the minimum
        bool nonZeroPurchase = msg.value >= minPay;

        // round is initialized and no "Pause of trading" is set
        return withinPeriod && nonZeroPurchase && isInitialized && !isPausedCrowdsale;
    }

    // Check for the ability to finalize the round. Constant.
    function hasEnded() public constant returns (bool) {

        bool timeReached = now > endTime;

        bool capReached = token.totalSupply().add(tokenReserved) >= hardCap;

        return (timeReached || capReached) && isInitialized;
    }
    
    function finalizeAll() external {
        finalize();
        finalize1();
        finalize2();
        finalize3();
        finalize4();
    }

    // Finalize. Only available to the Manager and the Beneficiary. If the round failed, then
    // anyone can call the finalization to unlock the return of funds to investors
    // You must call a function to finalize each round (after the pre-ICO & after the ICO)
    function finalize() public {

        require(wallets[uint8(Roles.manager)] == msg.sender || wallets[uint8(Roles.beneficiary)] == msg.sender|| !goalReached());
        require(!isFinalized);
        require(hasEnded());

        isFinalized = true;
        finalization();
        Finalized();
    }

    // The logic of finalization. Internal
    function finalization() internal {

        // If the goal of the achievement
        if (goalReached()) {

            // Send ether to Beneficiary
            vault.close(wallets[uint8(Roles.beneficiary)]);

            // if there is anything to give
            if (tokenReserved > 0) {

                // Issue tokens of non-eth investors to Accountant account
                token.mint(wallets[uint8(Roles.accountant)],tokenReserved);

                // Reset the counter
                tokenReserved = 0;
            }

            // If the finalization is Round 1 pre-ICO
            if (ICO == ICOType.round1) {

                // Reset settings
                isInitialized = false;
                isFinalized = false;

                // Switch to the second round (to ICO)
                ICO = ICOType.round2;

                // Reset the collection counter
                weiRound1 = weiRaised();
                ethWeiRaised = 0;
                nonEthWeiRaised = 0;

            }
            else // If the second round is finalized
            {

                // Record how many tokens we have issued
                allToken = token.totalSupply();

                // Permission to collect tokens to those who can pick them up
                bounty = true;
                team = true;
                company = true;
                partners = true;

            }

        }
        else // If they failed round
        {
            // Allow investors to withdraw their funds
            vault.enableRefunds();
        }
    }

    // The Manager freezes the tokens for the Team.
    // You must call a function to finalize Round 2 (only after the ICO)
    function finalize1() public {
        require(wallets[uint8(Roles.manager)] == msg.sender || wallets[uint8(Roles.beneficiary)] == msg.sender);
        require(team);
        team = false;
        lockedAllocation = new SVTAllocation(token, wallets[uint8(Roles.team)]);
        token.addUnpausedWallet(lockedAllocation);
        // 6% - tokens to Team wallet after freeze (77% for investors)
        // *** CHECK THESE NUMBERS ***
        token.mint(lockedAllocation, allToken.mul(6).div(77));
    }

    function finalize2() public {
        require(wallets[uint8(Roles.manager)] == msg.sender || wallets[uint8(Roles.beneficiary)] == msg.sender);
        require(bounty);
        bounty = false;
        // 2% - tokens to bounty wallet (77% for investors)
        // *** CHECK THESE NUMBERS ***
        token.mint(wallets[uint8(Roles.bounty)], allToken.mul(2).div(77));
    }

    function finalize3() public {
        require(wallets[uint8(Roles.manager)] == msg.sender || wallets[uint8(Roles.beneficiary)] == msg.sender);
        require(company);
        company = false;
        // 2% - tokens to company wallet (77% for investors)
        // *** CHECK THESE NUMBERS ***
        token.mint(wallets[uint8(Roles.company)],allToken.mul(2).div(77));
    }

    function finalize4()  public {
        require(wallets[uint8(Roles.manager)] == msg.sender || wallets[uint8(Roles.beneficiary)] == msg.sender);
        require(partners);
        partners = false;
        // 13% - tokens to partners+referral wallet (77% for investors)
        // *** CHECK THESE NUMBERS ***
        token.mint(wallets[uint8(Roles.accountant)],allToken.mul(13).div(77));
    }


    // Initializing the round. Available to the manager. After calling the function,
    // the Manager loses all rights: Manager can not change the settings (setup), change
    // wallets, prevent the beginning of the round, etc. You must call a function after setup
    // for the initial round (before the Pre-ICO and before the ICO)
    function initialize() public{

        // Only the Manager
        require(wallets[uint8(Roles.manager)] == msg.sender);

        // If not yet initialized
        require(!isInitialized);

        // And the specified start time has not yet come
        // If initialization return an error, check the start date!
        require(now <= startTime);

        initialization();

        Initialized();

        isInitialized = true;
    }

    function initialization() internal {
	    vault = new RefundVault();
    }

    // At the request of the investor, we raise the funds (if the round has failed because of the hardcap)
    function claimRefund() public{
        vault.refund(msg.sender);
    }

    // We check whether we collected the necessary minimum funds. Constant.
    function goalReached() public constant returns (bool) {
        return token.totalSupply().add(tokenReserved) >= softCap;
    }

    // Customize. The arguments are described in the constructor above.
    function setup(uint256 _startTime, uint256 _endTime, uint256 _softCap, uint256 _hardCap, uint256 _rate, uint256 _overLimit, uint256 _minPay, uint256[] _amount, uint256[] _procent) public{
            changePeriod(_startTime, _endTime);
            changeRate(_rate, _minPay);
            changeCap(_softCap, _hardCap, _overLimit);
            if(_amount.length > 0)
                setBonusPattern(_amount,_procent);
    }

	// Change the date and time: the beginning of the round, the end of the bonus, the end of the round. Available to Manager
    // Description in the Crowdsale constructor
    function changePeriod(uint256 _startTime, uint256 _endTime) public{

        require(wallets[uint8(Roles.manager)] == msg.sender);

        require(!isInitialized);

        // Date and time are correct
        require(now <= _startTime);
        require(_startTime < _endTime);

        startTime = _startTime;
        endTime = _endTime;
    }
    

    // Change the price (the number of tokens per 1 eth), the maximum hardCap for the last bet,
    // the minimum bet. Available to the Manager.
    // Description in the Crowdsale constructor
    function changeRate(uint256 _rate, uint256 _minPay) public {

         require(wallets[uint8(Roles.manager)] == msg.sender || wallets[uint8(Roles.observer)] == msg.sender);

         require(_rate > 0);

         rate = _rate;
         minPay = _minPay;
    }
    
    function changeCap(uint256 _softCap, uint256 _hardCap, uint256 _overLimit) public {
        require(wallets[uint8(Roles.manager)] == msg.sender);
        require(!isInitialized);
        require(_hardCap > _softCap);
        softCap = _softCap;
        hardCap = _hardCap;
        overLimit = _overLimit;
    }
    
    function setBonusPattern(uint256[] _amount, uint256[] _procent) public {
        require(wallets[uint8(Roles.manager)] == msg.sender);
        require(!isInitialized);
        require(_amount.length == _procent.length);
        bonusPattern.length = _amount.length;
        for(uint256 i = 0; i < _amount.length; i++){
            bonusPattern[i] = BonusBlock(_amount[i],_procent[i]);
        }
    }

    // Collected funds for the current round. Constant.
    function weiRaised() public constant returns(uint256){
        return ethWeiRaised.add(nonEthWeiRaised);
    }

    // Returns the amount of fees for both phases. Constant.
    function weiTotalRaised() public constant returns(uint256){
        return weiRound1.add(weiRaised());
    }


    // The ability to quickly check pre-ICO (only for Round 1, only 1 time). Completes the pre-ICO by
    // transferring the specified number of tokens to the Accountant's wallet. Available to the Manager.
    // Use only if this is provided by the script and white paper. In the normal scenario, it
    // does not call and the funds are raised normally. We recommend that you delete this
    // function entirely, so as not to confuse the auditors. Initialize & Finalize not needed.
    // ** QUINTILIONS **  10^18 / 1*10**18 / 1e18
//    function fastICO(uint256 _totalSupply) public {
//      require(wallets[uint8(Roles.manager)] == msg.sender);
//      require(ICO == ICOType.round1 && !isInitialized);
//      token.mint(wallets[uint8(Roles.accountant)], _totalSupply);
//      ICO = ICOType.round2;
//    }

    // Remove the "Pause of exchange". Available to the manager at any time. If the
    // manager refuses to remove the pause, then 30 days after the successful
    // completion of the ICO, anyone can remove a pause and allow the exchange to continue.
    // The manager does not interfere and will not be able to delay the term.
    // He can only cancel the pause before the appointed time.
    function tokenUnpause() public {
        require(wallets[uint8(Roles.manager)] == msg.sender
        	|| (now > endTime + 30 days && ICO == ICOType.round2 && isFinalized && goalReached()));
        token.unpause();
    }

    // Enable the "Pause of exchange". Available to the manager until the ICO is completed.
    // The manager cannot turn on the pause, for example, 3 years after the end of the ICO.
    function tokenPause() public {
        require(wallets[uint8(Roles.manager)] == msg.sender && !isFinalized);
        token.pause();
    }

    // Pause of sale. Available to the manager.
    function crowdsalePause() public {
        require(wallets[uint8(Roles.manager)] == msg.sender);
        require(isPausedCrowdsale == false);
        isPausedCrowdsale = true;
    }

    // Withdrawal from the pause of sale. Available to the manager.
    function crowdsaleUnpause() public {
        require(wallets[uint8(Roles.manager)] == msg.sender);
        require(isPausedCrowdsale == true);
        isPausedCrowdsale = false;
    }

    // Checking whether the rights to address ignore the "Pause of exchange". If the
    // wallet is included in this list, it can translate tokens, ignoring the pause. By default,
    // only the following wallets are included:
    //    - Accountant wallet (he should immediately transfer tokens, but not to non-ETH investors)
    //    - Contract for freezing the tokens for the Team (but Team wallet not included)
    // Inside. Constant.
    function unpausedWallet(address _wallet) internal constant returns(bool) {
        bool _accountant = wallets[uint8(Roles.accountant)] == _wallet;
        bool _manager = wallets[uint8(Roles.manager)] == _wallet;
        bool _bounty = wallets[uint8(Roles.bounty)] == _wallet;
        bool _company = wallets[uint8(Roles.company)] == _wallet;
        return _accountant || _manager || _bounty || _company;
    }

    // For example - After 5 years of the project's existence, all of us suddenly decided collectively
    // (company + investors) that it would be more profitable for everyone to switch to another smart
    // contract responsible for tokens. The company then prepares a new token, investors
    // disassemble, study, discuss, etc. After a general agreement, the manager allows any investor:
	//      - to burn the tokens of the previous contract
	//      - generate new tokens for a new contract
	// It is understood that after a general solution through this function all investors
	// will collectively (and voluntarily) move to a new token.
    function moveTokens(address _migrationAgent) public {
        require(wallets[uint8(Roles.manager)] == msg.sender);
        token.setMigrationAgent(_migrationAgent);
    }

	// Change the address for the specified role.
	// Available to any wallet owner except the observer.
	// Available to the manager until the round is initialized.
	// The Observer's wallet or his own manager can change at any time.
    function changeWallet(Roles _role, address _wallet) public
    {
        require(
        		(msg.sender == wallets[uint8(_role)] && _role != Roles.observer)
      		||
      			(msg.sender == wallets[uint8(Roles.manager)] && (!isInitialized || _role == Roles.observer))
      	);
        address oldWallet = wallets[uint8(_role)];
        wallets[uint8(_role)] = _wallet;
        if(!unpausedWallet(oldWallet))
            token.delUnpausedWallet(oldWallet);
        if(unpausedWallet(_wallet))
            token.addUnpausedWallet(_wallet);
    }

    // If a little more than a year has elapsed (ICO start date + 400 days), a smart contract
    // will allow you to send all the money to the Beneficiary, if any money is present. This is
    // possible if you mistakenly launch the ICO for 30 years (not 30 days), investors will transfer
    // money there and you will not be able to pick them up within a reasonable time. It is also
    // possible that in our checked script someone will make unforeseen mistakes, spoiling the
    // finalization. Without finalization, money cannot be returned. This is a rescue option to
    // get around this problem, but available only after a year (400 days).

	// Another reason - the ICO was a failure, but not all ETH investors took their money during the year after.
	// Some investors may have lost a wallet key, for example.

	// The method works equally with the pre-ICO and ICO. When the pre-ICO starts, the time for unlocking
	// the distructVault begins. If the ICO is then started, then the term starts anew from the first day of the ICO.

	// Next, act independently, in accordance with obligations to investors.

	// Within 400 days of the start of the Round, if it fails only investors can take money. After
	// the deadline this can also include the company as well as investors, depending on who is the first to use the method.
    function distructVault() public {
        require(wallets[uint8(Roles.beneficiary)] == msg.sender);
        require(now > startTime + 400 days);
        vault.del(wallets[uint8(Roles.beneficiary)]);
    }
    
    
    
    function getBonus(uint256 _tokenValue) public constant returns (uint256 value) {
        uint256 totalToken = tokenReserved.add(token.totalSupply());
        uint256 tokenValue = _tokenValue;
        uint256 currentBonus;
        uint256 calculateBonus = 0;
        uint16 i;
        for (i = 0; i < bonusPattern.length; i++){
            if(totalToken >= bonusPattern[i].amount)
                continue;
            currentBonus = tokenValue.mul(bonusPattern[i].procent.add(100000)).div(100000);
            if(totalToken.add(calculateBonus).add(currentBonus) < bonusPattern[i].amount) {
                calculateBonus = calculateBonus.add(currentBonus);
                tokenValue = 0;
                break;
            }
            currentBonus = bonusPattern[i].amount.sub(totalToken.add(calculateBonus));
            tokenValue = tokenValue.sub(currentBonus.mul(100000).div(bonusPattern[i].procent.add(100000)));
            calculateBonus = calculateBonus + currentBonus;
        }
        return calculateBonus.add(tokenValue);
    }


	// We accept payments other than Ethereum (ETH) and other currencies, for example, Bitcoin (BTC).
	// Perhaps other types of cryptocurrency - see the original terms in the white paper and on the ICO website.

	// We release tokens on Ethereum. During the pre-ICO and ICO with a smart contract, you directly transfer
	// the tokens there and immediately, with the same transaction, receive tokens in your wallet.

	// When paying in any other currency, for example in BTC, we accept your money via one common wallet.
	// Our manager fixes the amount received for the bitcoin wallet and calls the method of the smart
    // contract paymentsInOtherCurrency to inform him how much foreign currency has been received - on a daily basis.
    // The smart contract pins the number of accepted ETH directly and the number of BTC. Smart contract
    // monitors softcap and hardcap, so as not to go beyond this framework.

	// In theory, it is possible that when approaching hardcap, we will receive a transfer (one or several
	// transfers) to the wallet of BTC, that together with previously received money will exceed the hardcap in total.
	// In this case, we will refund all the amounts above, in order not to exceed the hardcap.

	// Collection of money in BTC will be carried out via one common wallet. The wallet's address will be published
	// everywhere (in a white paper, on the ICO website, on Telegram, on Bitcointalk, in this code, etc.)
	// Anyone interested can check that the administrator of the smart contract writes down exactly the amount
	// in ETH (in equivalent for BTC) there. In theory, the ability to bypass a smart contract to accept money in
	// BTC and not register them in ETH creates a possibility for manipulation by the company. Thanks to
	// paymentsInOtherCurrency however, this threat is leveled.

	// Any user can check the amounts in BTC and the variable of the smart contract that accounts for this
	// (paymentsInOtherCurrency method). Any user can easily check the incoming transactions in a smart contract
	// on a daily basis. Any hypothetical tricks on the part of the company can be exposed and panic during the ICO,
	// simply pointing out the incompatibility of paymentsInOtherCurrency (ie, the amount of ETH + BTC collection)
	// and the actual transactions in BTC. The company strictly adheres to the described principles of openness.

	// The company administrator is required to synchronize paymentsInOtherCurrency every working day (but you
	// cannot synchronize if there are no new BTC payments). In the case of unforeseen problems, such as
	// brakes on the Ethereum network, this operation may be difficult. You should only worry if the
	// administrator does not synchronize the amount for more than 96 hours in a row, and the BTC wallet
	// receives significant amounts.

	// This scenario ensures that for the sum of all fees in all currencies this value does not exceed hardcap.

    // Common BTC wallet: 12sEoiXPs8a6sJbC2qkbZDjmHsSBv7cGwC

    // ** QUINTILLIONS ** 10^18 / 1**18 / 1e18
    function paymentsInOtherCurrency(uint256 _token, uint256 _value) public {
        require(wallets[uint8(Roles.observer)] == msg.sender);
        bool withinPeriod = (now >= startTime && now <= endTime);

        bool withinCap = token.totalSupply().add(_token) <= hardCap.add(overLimit);
        require(withinPeriod && withinCap && isInitialized);

        nonEthWeiRaised = _value;
        tokenReserved = _token;

    }


    // The function for obtaining smart contract funds in ETH. If all the checks are true, the token is
    // transferred to the buyer, taking into account the current bonus.
    function buyTokens(address beneficiary) public payable {
        require(beneficiary != 0x0);
        require(validPurchase());

        uint256 weiAmount = msg.value;

        // calculate token amount to be created
        uint256 tokens = getBonus(weiAmount*rate/1000);
        
        // hardCap is not reached, and in the event of a transaction, it will not be exceeded by more than OverLimit
        bool withinCap = tokens <= hardCap.sub(token.totalSupply().add(tokenReserved)).add(overLimit);
        
        require(withinCap);

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

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

        forwardFunds();
    }

    // buyTokens alias
    function () public payable {
        buyTokens(msg.sender);
    }

}

// (B)
// The contract for freezing tokens for the team..
contract SVTAllocation {
    using SafeMath for uint256;

    Token public token;

	address public owner;

    uint256 public unlockedAt;

    uint256 tokensCreated = 0;

    // The contract takes the ERC20 coin address from which this contract will work and from the
    // owner (Team wallet) who owns the funds.
    function SVTAllocation(Token _token, address _owner) public{

    	// How many days to freeze from the moment of finalizing ICO
        unlockedAt = now + 1 years;
        token = _token;
        owner = _owner;
    }

    // If the time of freezing expired will return the funds to the owner.
    function unlock() public{
        require(now >= unlockedAt);
        require(token.transfer(owner,token.balanceOf(this)));
    }
}



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

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

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

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



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

    /**
     * @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));
        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 _paused = false;

    function paused() public constant returns(bool)
    {
        return _paused;
    }

    /**
     * @dev modifier to allow actions only when the contract IS paused
     */
    modifier whenNotPaused() {
        require(!paused());
        _;
    }

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

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


// Contract interface for transferring current tokens to another
contract MigrationAgent
{
    function migrateFrom(address _from, uint256 _value) public;
}



// (A2)
// Contract token
contract Token is Pausable{
    using SafeMath for uint256;

    string public constant name = "High Reward Coin";
    string public constant symbol = "HRC";
    uint8 public constant decimals = 18;

    uint256 public totalSupply;

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

    mapping (address => bool) public unpausedWallet;

    bool public mintingFinished = false;

    uint256 public totalMigrated;
    address public migrationAgent;

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

    event Mint(address indexed to, uint256 amount);
    event MintFinished();

    event Migrate(address indexed _from, address indexed _to, uint256 _value);

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

     function Token() public {
         owner = 0x0;
     }

     function setOwner() public{
         require(owner == 0x0);
         owner = msg.sender;
     }

    // Balance of the specified address
    function balanceOf(address _owner) public constant returns (uint256 balance) {
        return balances[_owner];
    }

    // Transfer of tokens from one account to another
    function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {
        require (_value > 0);
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        Transfer(msg.sender, _to, _value);
        return true;
    }

    // Returns the number of tokens that _owner trusted to spend from his account _spender
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }

    // Trust _sender and spend _value tokens from your account
    function approve(address _spender, uint256 _value) public returns (bool) {

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

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

    // Transfer of tokens from the trusted address _from to the address _to in the number _value
    function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) {
        var _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);

        require (_value > 0);

        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;
    }

    // Issue new tokens to the address _to in the amount _amount. Available to the owner of the contract (contract Crowdsale)
    function mint(address _to, uint256 _amount) public onlyOwner canMint returns (bool) {
        totalSupply = totalSupply.add(_amount);
        balances[_to] = balances[_to].add(_amount);
        Mint(_to, _amount);
        Transfer(0x0, _to, _amount);
        return true;
    }

    // Stop the release of tokens. This is not possible to cancel. Available to the owner of the contract.
//    function finishMinting() public onlyOwner returns (bool) {
//        mintingFinished = true;
//        MintFinished();
//        return true;
//    }

    // Redefinition of the method of the returning status of the "Exchange pause".
    // Never for the owner of an unpaused wallet.
    function paused() public constant returns(bool) {
        return super.paused() && !unpausedWallet[msg.sender];
    }


    // Add a wallet ignoring the "Exchange pause". Available to the owner of the contract.
    function addUnpausedWallet(address _wallet) public onlyOwner {
        unpausedWallet[_wallet] = true;
    }

    // Remove the wallet ignoring the "Exchange pause". Available to the owner of the contract.
    function delUnpausedWallet(address _wallet) public onlyOwner {
         unpausedWallet[_wallet] = false;
    }

    // Enable the transfer of current tokens to others. Only 1 time. Disabling this is not possible.
    // Available to the owner of the contract.
    function setMigrationAgent(address _migrationAgent) public onlyOwner {
        require(migrationAgent == 0x0);
        migrationAgent = _migrationAgent;
    }

    // Reissue your tokens.
    function migrate() public
    {
        uint256 value = balances[msg.sender];
        require(value > 0);

        totalSupply = totalSupply.sub(value);
        totalMigrated = totalMigrated.add(value);
        MigrationAgent(migrationAgent).migrateFrom(msg.sender, value);
        Migrate(msg.sender,migrationAgent,value);
        balances[msg.sender] = 0;
    }
}

// (A3)
// Contract for freezing of investors' funds. Hence, investors will be able to withdraw money if the
// round does not attain the softcap. From here the wallet of the beneficiary will receive all the
// money (namely, the beneficiary, not the manager's wallet).
contract RefundVault is Ownable {
    using SafeMath for uint256;

    enum State { Active, Refunding, Closed }

    mapping (address => uint256) public deposited;
    State public state;

    event Closed();
    event RefundsEnabled();
    event Refunded(address indexed beneficiary, uint256 weiAmount);
    event Deposited(address indexed beneficiary, uint256 weiAmount);

    function RefundVault() public {
        state = State.Active;
    }

    // Depositing funds on behalf of an ICO investor. Available to the owner of the contract (Crowdsale Contract).
    function deposit(address investor) onlyOwner public payable {
        require(state == State.Active);
        deposited[investor] = deposited[investor].add(msg.value);
        Deposited(investor,msg.value);
    }

    // Move the collected funds to a specified address. Available to the owner of the contract.
    function close(address _wallet) onlyOwner public {
        require(state == State.Active);
        require(_wallet != 0x0);
        state = State.Closed;
        Closed();
        _wallet.transfer(this.balance);
    }

    // Allow refund to investors. Available to the owner of the contract.
    function enableRefunds() onlyOwner public {
        require(state == State.Active);
        state = State.Refunding;
        RefundsEnabled();
    }

    // Return the funds to a specified investor. In case of failure of the round, the investor
    // should call this method of this contract (RefundVault) or call the method claimRefund of Crowdsale
    // contract. This function should be called either by the investor himself, or the company
    // (or anyone) can call this function in the loop to return funds to all investors en masse.
    function refund(address investor) public {
        require(state == State.Refunding);
        require(deposited[investor] > 0);
        uint256 depositedValue = deposited[investor];
        deposited[investor] = 0;
        investor.transfer(depositedValue);
        Refunded(investor, depositedValue);
    }

    // Destruction of the contract with return of funds to the specified address. Available to
    // the owner of the contract.
    function del(address _wallet) external onlyOwner {
        selfdestruct(_wallet);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"delUnpausedWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_migrationAgent","type":"address"}],"name":"setMigrationAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"migrationAgent","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"migrate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalMigrated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"addUnpausedWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"unpausedWallet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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"},{"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":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Migrate","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]

60606040526000805460a060020a60ff02191690556005805460ff19169055341561002957600080fd5b60008054600160a060020a033316600160a060020a031991821617169055610d8c806100566000396000f30060606040526004361061013d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166305d2035b811461014257806306301ce81461016957806306fdde031461018a578063095ea7b31461021457806318160ddd1461023657806323b872dd1461025b578063313ce567146102835780633f4ba83a146102ac57806340c10f19146102bf57806340caae06146102e15780635c975abb146102f457806370a082311461030757806375e2ff65146103265780638328dbcd146103455780638456cb59146103745780638da5cb5b146103875780638fd3ab801461039a57806395a0f5eb146103ad57806395d89b41146103c0578063a9059cbb146103d3578063abb00601146103f5578063b8b3db4f14610414578063dd62ed3e14610433578063f2fde38b14610458575b600080fd5b341561014d57600080fd5b610155610477565b604051901515815260200160405180910390f35b341561017457600080fd5b610188600160a060020a0360043516610480565b005b341561019557600080fd5b61019d6104bc565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101d95780820151838201526020016101c1565b50505050905090810190601f1680156102065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561021f57600080fd5b610155600160a060020a03600435166024356104f3565b341561024157600080fd5b610249610599565b60405190815260200160405180910390f35b341561026657600080fd5b610155600160a060020a036004358116906024351660443561059f565b341561028e57600080fd5b6102966106df565b60405160ff909116815260200160405180910390f35b34156102b757600080fd5b6101886106e4565b34156102ca57600080fd5b610155600160a060020a0360043516602435610763565b34156102ec57600080fd5b610188610868565b34156102ff57600080fd5b6101556108a8565b341561031257600080fd5b610249600160a060020a03600435166108dc565b341561033157600080fd5b610188600160a060020a03600435166108f7565b341561035057600080fd5b610358610957565b604051600160a060020a03909116815260200160405180910390f35b341561037f57600080fd5b610188610966565b341561039257600080fd5b6103586109ea565b34156103a557600080fd5b6101886109f9565b34156103b857600080fd5b610249610b2d565b34156103cb57600080fd5b61019d610b33565b34156103de57600080fd5b610155600160a060020a0360043516602435610b6a565b341561040057600080fd5b610188600160a060020a0360043516610c4a565b341561041f57600080fd5b610155600160a060020a0360043516610c89565b341561043e57600080fd5b610249600160a060020a0360043581169060243516610c9e565b341561046357600080fd5b610188600160a060020a0360043516610cc9565b60055460ff1681565b60005433600160a060020a0390811691161461049b57600080fd5b600160a060020a03166000908152600460205260409020805460ff19169055565b60408051908101604052601081527f486967682052657761726420436f696e00000000000000000000000000000000602082015281565b60008115806105255750600160a060020a03338116600090815260036020908152604080832093871683529290522054155b151561053057600080fd5b600160a060020a03338116600081815260036020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60015481565b6000806105aa6108a8565b156105b457600080fd5b50600160a060020a038085166000908152600360209081526040808320339094168352929052908120549083116105ea57600080fd5b600160a060020a038516600090815260026020526040902054610613908463ffffffff610d2816565b600160a060020a038087166000908152600260205260408082209390935590861681522054610648908463ffffffff610d3a16565b600160a060020a038516600090815260026020526040902055610671818463ffffffff610d2816565b600160a060020a03808716600081815260036020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3506001949350505050565b601281565b60005433600160a060020a039081169116146106ff57600080fd5b60005460a060020a900460ff16151561071757600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b6000805433600160a060020a0390811691161461077f57600080fd5b60055460ff161561078f57600080fd5b6001546107a2908363ffffffff610d3a16565b600155600160a060020a0383166000908152600260205260409020546107ce908363ffffffff610d3a16565b600160a060020a0384166000818152600260205260409081902092909255907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859084905190815260200160405180910390a282600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b600054600160a060020a03161561087e57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a0316179055565b60006108b2610d50565b80156108d75750600160a060020a03331660009081526004602052604090205460ff16155b905090565b600160a060020a031660009081526002602052604090205490565b60005433600160a060020a0390811691161461091257600080fd5b600754600160a060020a03161561092857600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754600160a060020a031681565b60005433600160a060020a0390811691161461098157600080fd5b60005460a060020a900460ff161561099857600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600054600160a060020a031681565b600160a060020a033316600090815260026020526040812054908111610a1e57600080fd5b600154610a31908263ffffffff610d2816565b600155600654610a47908263ffffffff610d3a16565b600655600754600160a060020a0316637a3130e333836040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610ab957600080fd5b6102c65a03f11515610aca57600080fd5b5050600754600160a060020a03908116915033167f18df02dcc52b9c494f391df09661519c0069bd8540141946280399408205ca1a8360405190815260200160405180910390a350600160a060020a033316600090815260026020526040812055565b60065481565b60408051908101604052600381527f4852430000000000000000000000000000000000000000000000000000000000602082015281565b6000610b746108a8565b15610b7e57600080fd5b60008211610b8b57600080fd5b600160a060020a033316600090815260026020526040902054610bb4908363ffffffff610d2816565b600160a060020a033381166000908152600260205260408082209390935590851681522054610be9908363ffffffff610d3a16565b600160a060020a0380851660008181526002602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b60005433600160a060020a03908116911614610c6557600080fd5b600160a060020a03166000908152600460205260409020805460ff19166001179055565b60046020526000908152604090205460ff1681565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b60005433600160a060020a03908116911614610ce457600080fd5b600160a060020a0381161515610cf957600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600082821115610d3457fe5b50900390565b600082820183811015610d4957fe5b9392505050565b60005460a060020a900460ff16905600a165627a7a72305820cceb1706d7798fb372ca9edf4f7bb3c6abd601b9861cd3669fb002515ad695c60029

Deployed Bytecode

0x60606040526004361061013d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166305d2035b811461014257806306301ce81461016957806306fdde031461018a578063095ea7b31461021457806318160ddd1461023657806323b872dd1461025b578063313ce567146102835780633f4ba83a146102ac57806340c10f19146102bf57806340caae06146102e15780635c975abb146102f457806370a082311461030757806375e2ff65146103265780638328dbcd146103455780638456cb59146103745780638da5cb5b146103875780638fd3ab801461039a57806395a0f5eb146103ad57806395d89b41146103c0578063a9059cbb146103d3578063abb00601146103f5578063b8b3db4f14610414578063dd62ed3e14610433578063f2fde38b14610458575b600080fd5b341561014d57600080fd5b610155610477565b604051901515815260200160405180910390f35b341561017457600080fd5b610188600160a060020a0360043516610480565b005b341561019557600080fd5b61019d6104bc565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101d95780820151838201526020016101c1565b50505050905090810190601f1680156102065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561021f57600080fd5b610155600160a060020a03600435166024356104f3565b341561024157600080fd5b610249610599565b60405190815260200160405180910390f35b341561026657600080fd5b610155600160a060020a036004358116906024351660443561059f565b341561028e57600080fd5b6102966106df565b60405160ff909116815260200160405180910390f35b34156102b757600080fd5b6101886106e4565b34156102ca57600080fd5b610155600160a060020a0360043516602435610763565b34156102ec57600080fd5b610188610868565b34156102ff57600080fd5b6101556108a8565b341561031257600080fd5b610249600160a060020a03600435166108dc565b341561033157600080fd5b610188600160a060020a03600435166108f7565b341561035057600080fd5b610358610957565b604051600160a060020a03909116815260200160405180910390f35b341561037f57600080fd5b610188610966565b341561039257600080fd5b6103586109ea565b34156103a557600080fd5b6101886109f9565b34156103b857600080fd5b610249610b2d565b34156103cb57600080fd5b61019d610b33565b34156103de57600080fd5b610155600160a060020a0360043516602435610b6a565b341561040057600080fd5b610188600160a060020a0360043516610c4a565b341561041f57600080fd5b610155600160a060020a0360043516610c89565b341561043e57600080fd5b610249600160a060020a0360043581169060243516610c9e565b341561046357600080fd5b610188600160a060020a0360043516610cc9565b60055460ff1681565b60005433600160a060020a0390811691161461049b57600080fd5b600160a060020a03166000908152600460205260409020805460ff19169055565b60408051908101604052601081527f486967682052657761726420436f696e00000000000000000000000000000000602082015281565b60008115806105255750600160a060020a03338116600090815260036020908152604080832093871683529290522054155b151561053057600080fd5b600160a060020a03338116600081815260036020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60015481565b6000806105aa6108a8565b156105b457600080fd5b50600160a060020a038085166000908152600360209081526040808320339094168352929052908120549083116105ea57600080fd5b600160a060020a038516600090815260026020526040902054610613908463ffffffff610d2816565b600160a060020a038087166000908152600260205260408082209390935590861681522054610648908463ffffffff610d3a16565b600160a060020a038516600090815260026020526040902055610671818463ffffffff610d2816565b600160a060020a03808716600081815260036020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3506001949350505050565b601281565b60005433600160a060020a039081169116146106ff57600080fd5b60005460a060020a900460ff16151561071757600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b6000805433600160a060020a0390811691161461077f57600080fd5b60055460ff161561078f57600080fd5b6001546107a2908363ffffffff610d3a16565b600155600160a060020a0383166000908152600260205260409020546107ce908363ffffffff610d3a16565b600160a060020a0384166000818152600260205260409081902092909255907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859084905190815260200160405180910390a282600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a350600192915050565b600054600160a060020a03161561087e57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a0316179055565b60006108b2610d50565b80156108d75750600160a060020a03331660009081526004602052604090205460ff16155b905090565b600160a060020a031660009081526002602052604090205490565b60005433600160a060020a0390811691161461091257600080fd5b600754600160a060020a03161561092857600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754600160a060020a031681565b60005433600160a060020a0390811691161461098157600080fd5b60005460a060020a900460ff161561099857600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600054600160a060020a031681565b600160a060020a033316600090815260026020526040812054908111610a1e57600080fd5b600154610a31908263ffffffff610d2816565b600155600654610a47908263ffffffff610d3a16565b600655600754600160a060020a0316637a3130e333836040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610ab957600080fd5b6102c65a03f11515610aca57600080fd5b5050600754600160a060020a03908116915033167f18df02dcc52b9c494f391df09661519c0069bd8540141946280399408205ca1a8360405190815260200160405180910390a350600160a060020a033316600090815260026020526040812055565b60065481565b60408051908101604052600381527f4852430000000000000000000000000000000000000000000000000000000000602082015281565b6000610b746108a8565b15610b7e57600080fd5b60008211610b8b57600080fd5b600160a060020a033316600090815260026020526040902054610bb4908363ffffffff610d2816565b600160a060020a033381166000908152600260205260408082209390935590851681522054610be9908363ffffffff610d3a16565b600160a060020a0380851660008181526002602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b60005433600160a060020a03908116911614610c6557600080fd5b600160a060020a03166000908152600460205260409020805460ff19166001179055565b60046020526000908152604090205460ff1681565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b60005433600160a060020a03908116911614610ce457600080fd5b600160a060020a0381161515610cf957600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600082821115610d3457fe5b50900390565b600082820183811015610d4957fe5b9392505050565b60005460a060020a900460ff16905600a165627a7a72305820cceb1706d7798fb372ca9edf4f7bb3c6abd601b9861cd3669fb002515ad695c60029

Swarm Source

bzzr://cceb1706d7798fb372ca9edf4f7bb3c6abd601b9861cd3669fb002515ad695c6

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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