ETH Price: $2,124.46 (+5.85%)

Contract

0x17dCA359D37deB852f8b26ee37Ea87A9DD2bDfa4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim72544752019-02-22 20:36:232567 days ago1550867783IN
0x17dCA359...9DD2bDfa4
0 ETH0.000063413
Reject Mint72544582019-02-22 20:31:272567 days ago1550867487IN
0x17dCA359...9DD2bDfa4
0 ETH0.000156715
Approve Mint72544542019-02-22 20:30:312567 days ago1550867431IN
0x17dCA359...9DD2bDfa4
0 ETH0.000187125
Approve Mint72544512019-02-22 20:29:452567 days ago1550867385IN
0x17dCA359...9DD2bDfa4
0 ETH0.000374555
Buy Tokens72544012019-02-22 20:13:552567 days ago1550866435IN
0x17dCA359...9DD2bDfa4
0.00000001 ETH0.000475375
Buy Tokens72544002019-02-22 20:13:412567 days ago1550866421IN
0x17dCA359...9DD2bDfa4
0.00000003 ETH0.000475375
Buy Tokens72543992019-02-22 20:13:322567 days ago1550866412IN
0x17dCA359...9DD2bDfa4
0.00000007 ETH0.000550375
Set New Validato...72543372019-02-22 19:50:482567 days ago1550865048IN
0x17dCA359...9DD2bDfa4
0 ETH0.000152515

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
-72544752019-02-22 20:36:232567 days ago1550867783
0x17dCA359...9DD2bDfa4
0.00000003 ETH
-72544542019-02-22 20:30:312567 days ago1550867431
0x17dCA359...9DD2bDfa4
0.00000007 ETH
-72544512019-02-22 20:29:452567 days ago1550867385
0x17dCA359...9DD2bDfa4
0.00000001 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

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

Contract Name:
CompliantCrowdsale

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-02-01
*/

pragma solidity 0.4.24;


/**
 * @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.
    */
    constructor(address _owner) public {
        owner = _owner;
    }

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

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

}



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

    event NewValidatorSet(address indexed previousOwner, address indexed newValidator);

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

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

    /**
    * @dev Allows the current validator to transfer control of the contract to a newValidator.
    * @param newValidator The address to become next validator.
    */
    function setNewValidator(address newValidator) public onlyValidator {
        require(newValidator != address(0));
        emit NewValidatorSet(validator, newValidator);
        validator = newValidator;
    }
}










/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  /**
  * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}



contract TokenInterface {
    function mint(address _to, uint256 _amount) public returns (bool);
    function finishMinting() public returns (bool);
    function transferOwnership(address newOwner) public;
}


/**
 * @title Crowdsale
 * @dev Crowdsale is a base contract for managing a token crowdsale.
 * Crowdsales have a start and end timestamps, where investors can make
 * token purchases and the crowdsale will assign them tokens based
 * on a token per ETH rate. Funds collected are forwarded to a wallet
 * as they arrive. The contract requires a MintableToken that will be
 * minted as contributions arrive, note that the crowdsale contract
 * must be owner of the token in order to be able to mint it.
 */
contract Crowdsale {
    using SafeMath for uint256;

    // The token being sold
    address public token;

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

    // address where funds are collected
    address public wallet;

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

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

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


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

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

    /** @dev fallback function redirects to buy tokens */
    function () external payable {
        buyTokens(msg.sender);
    }

    /** @dev buy tokens
      * @param beneficiary the address to which the tokens have to be minted
      */
    function buyTokens(address beneficiary) public payable {
        require(beneficiary != address(0));
        require(validPurchase());

        uint256 weiAmount = msg.value;

        // calculate token amount to be created
        uint256 tokens = getTokenAmount(weiAmount);

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

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

        forwardFunds();
    }

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

    // Override this method to have a way to add business logic to your crowdsale when buying
    function getTokenAmount(uint256 weiAmount) internal view returns(uint256) {
        return weiAmount.mul(rate);
    }

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

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

}




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

    bool public isFinalized = false;

    event Finalized();
 
    constructor(address _owner) public Ownable(_owner) {}

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

        finalization();
        emit Finalized();

        isFinalized = true;
    }

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






contract Whitelist is Ownable {
    mapping(address => bool) internal investorMap;

    /**
    * event for investor approval logging
    * @param investor approved investor
    */
    event Approved(address indexed investor);

    /**
    * event for investor disapproval logging
    * @param investor disapproved investor
    */
    event Disapproved(address indexed investor);

    constructor(address _owner) 
        public 
        Ownable(_owner) 
    {
        
    }

    /** @param _investor the address of investor to be checked
      * @return true if investor is approved
      */
    function isInvestorApproved(address _investor) external view returns (bool) {
        require(_investor != address(0));
        return investorMap[_investor];
    }

    /** @dev approve an investor
      * @param toApprove investor to be approved
      */
    function approveInvestor(address toApprove) external onlyOwner {
        investorMap[toApprove] = true;
        emit Approved(toApprove);
    }

    /** @dev approve investors in bulk
      * @param toApprove array of investors to be approved
      */
    function approveInvestorsInBulk(address[] toApprove) external onlyOwner {
        for (uint i = 0; i < toApprove.length; i++) {
            investorMap[toApprove[i]] = true;
            emit Approved(toApprove[i]);
        }
    }

    /** @dev disapprove an investor
      * @param toDisapprove investor to be disapproved
      */
    function disapproveInvestor(address toDisapprove) external onlyOwner {
        delete investorMap[toDisapprove];
        emit Disapproved(toDisapprove);
    }

    /** @dev disapprove investors in bulk
      * @param toDisapprove array of investors to be disapproved
      */
    function disapproveInvestorsInBulk(address[] toDisapprove) external onlyOwner {
        for (uint i = 0; i < toDisapprove.length; i++) {
            delete investorMap[toDisapprove[i]];
            emit Disapproved(toDisapprove[i]);
        }
    }
}



/** @title Compliant Crowdsale */
contract CompliantCrowdsale is Validator, FinalizableCrowdsale {
    Whitelist public whiteListingContract;

    struct MintStruct {
        address to;
        uint256 tokens;
        uint256 weiAmount;
    }

    mapping (uint => MintStruct) public pendingMints;
    uint256 public currentMintNonce;
    mapping (address => uint) public rejectedMintBalance;

    modifier checkIsInvestorApproved(address _account) {
        require(whiteListingContract.isInvestorApproved(_account));
        _;
    }

    modifier checkIsAddressValid(address _account) {
        require(_account != address(0));
        _;
    }

    /**
    * event for rejected mint logging
    * @param to address for which buy tokens got rejected
    * @param value number of tokens
    * @param amount number of ethers invested
    * @param nonce request recorded at this particular nonce
    * @param reason reason for rejection
    */
    event MintRejected(
        address indexed to,
        uint256 value,
        uint256 amount,
        uint256 indexed nonce,
        uint256 reason
    );

    /**
    * event for buy tokens request logging
    * @param beneficiary address for which buy tokens is requested
    * @param tokens number of tokens
    * @param weiAmount number of ethers invested
    * @param nonce request recorded at this particular nonce
    */
    event ContributionRegistered(
        address beneficiary,
        uint256 tokens,
        uint256 weiAmount,
        uint256 nonce
    );

    /**
    * event for rate update logging
    * @param rate new rate
    */
    event RateUpdated(uint256 rate);

    /**
    * event for whitelist contract update logging
    * @param _whiteListingContract address of the new whitelist contract
    */
    event WhiteListingContractSet(address indexed _whiteListingContract);

    /**
    * event for claimed ether logging
    * @param account user claiming the ether
    * @param amount ether claimed
    */
    event Claimed(address indexed account, uint256 amount);

    /** @dev Constructor
      * @param whitelistAddress Ethereum address of the whitelist contract
      * @param _startTime crowdsale start time
      * @param _endTime crowdsale end time
      * @param _rate number of tokens to be sold per ether
      * @param _wallet Ethereum address of the wallet
      * @param _token Ethereum address of the token contract
      * @param _owner Ethereum address of the owner
      */
    constructor(
        address whitelistAddress,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _rate,
        address _wallet,
        address _token,
        address _owner
    )
        public
        FinalizableCrowdsale(_owner)
        Crowdsale(_startTime, _endTime, _rate, _wallet, _token)
    {
        setWhitelistContract(whitelistAddress);
    }

    /** @dev Updates whitelist contract address
      * @param whitelistAddress address of the new whitelist contract 
      */
    function setWhitelistContract(address whitelistAddress)
        public 
        onlyValidator 
        checkIsAddressValid(whitelistAddress)
    {
        whiteListingContract = Whitelist(whitelistAddress);
        emit WhiteListingContractSet(whiteListingContract);
    }

    /** @dev buy tokens request
      * @param beneficiary the address to which the tokens have to be minted
      */
    function buyTokens(address beneficiary)
        public 
        payable
        checkIsInvestorApproved(beneficiary)
    {
        require(validPurchase());

        uint256 weiAmount = msg.value;

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

        pendingMints[currentMintNonce] = MintStruct(beneficiary, tokens, weiAmount);
        emit ContributionRegistered(beneficiary, tokens, weiAmount, currentMintNonce);

        currentMintNonce++;
    }

    /** @dev Updates token rate 
    * @param _rate New token rate 
    */ 
    function updateRate(uint256 _rate) public onlyOwner { 
        require(_rate > 0);
        rate = _rate;
        emit RateUpdated(rate);
    }

    /** @dev approve buy tokens request
      * @param nonce request recorded at this particular nonce
      */
    function approveMint(uint256 nonce)
        external 
        onlyValidator
    {
        require(_approveMint(nonce));
    }

    /** @dev reject buy tokens request
      * @param nonce request recorded at this particular nonce
      * @param reason reason for rejection
      */
    function rejectMint(uint256 nonce, uint256 reason)
        external 
        onlyValidator
    {
        _rejectMint(nonce, reason);
    }

    /** @dev approve buy tokens requests in bulk
      * @param nonces request recorded at these nonces
      */
    function bulkApproveMints(uint256[] nonces)
        external 
        onlyValidator
    {
        for (uint i = 0; i < nonces.length; i++) {
            require(_approveMint(nonces[i]));
        }        
    }
    
    /** @dev reject buy tokens requests
      * @param nonces request recorded at these nonces
      * @param reasons reasons for rejection
      */
    function bulkRejectMints(uint256[] nonces, uint256[] reasons)
        external 
        onlyValidator
    {
        require(nonces.length == reasons.length);
        for (uint i = 0; i < nonces.length; i++) {
            _rejectMint(nonces[i], reasons[i]);
        }
    }

    /** @dev approve buy tokens request called internally in the approveMint and bulkApproveMints functions
      * @param nonce request recorded at this particular nonce
      */
    function _approveMint(uint256 nonce)
        private
        checkIsInvestorApproved(pendingMints[nonce].to)
        returns (bool)
    {
        // update state
        weiRaised = weiRaised.add(pendingMints[nonce].weiAmount);

        //No need to use mint-approval on token side, since the minting is already approved in the crowdsale side
        TokenInterface(token).mint(pendingMints[nonce].to, pendingMints[nonce].tokens);
        
        emit TokenPurchase(
            msg.sender,
            pendingMints[nonce].to,
            pendingMints[nonce].weiAmount,
            pendingMints[nonce].tokens
        );

        forwardFunds(pendingMints[nonce].weiAmount);
        delete pendingMints[nonce];

        return true;
    }

    /** @dev reject buy tokens request called internally in the rejectMint and bulkRejectMints functions
      * @param nonce request recorded at this particular nonce
      * @param reason reason for rejection
      */
    function _rejectMint(uint256 nonce, uint256 reason)
        private
        checkIsAddressValid(pendingMints[nonce].to)
    {
        rejectedMintBalance[pendingMints[nonce].to] = rejectedMintBalance[pendingMints[nonce].to].add(pendingMints[nonce].weiAmount);
        
        emit MintRejected(
            pendingMints[nonce].to,
            pendingMints[nonce].tokens,
            pendingMints[nonce].weiAmount,
            nonce,
            reason
        );
        
        delete pendingMints[nonce];
    }

    /** @dev claim back ether if buy tokens request is rejected */
    function claim() external {
        require(rejectedMintBalance[msg.sender] > 0);
        uint256 value = rejectedMintBalance[msg.sender];
        rejectedMintBalance[msg.sender] = 0;

        msg.sender.transfer(value);

        emit Claimed(msg.sender, value);
    }

    function finalization() internal {
        TokenInterface(token).finishMinting();
        transferTokenOwnership(owner);
        super.finalization();
    }

    /** @dev Updates token contract address
      * @param newToken New token contract address
      */
    function setTokenContract(address newToken)
        external 
        onlyOwner
        checkIsAddressValid(newToken)
    {
        token = newToken;
    }

    /** @dev transfers ownership of the token contract
      * @param newOwner New owner of the token contract
      */
    function transferTokenOwnership(address newOwner)
        public 
        onlyOwner
        checkIsAddressValid(newOwner)
    {
        TokenInterface(token).transferOwnership(newOwner);
    }

    function forwardFunds(uint256 amount) internal {
        wallet.transfer(amount);
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"whitelistAddress","type":"address"}],"name":"setWhitelistContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newValidator","type":"address"}],"name":"setNewValidator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"nonces","type":"uint256[]"},{"name":"reasons","type":"uint256[]"}],"name":"bulkRejectMints","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferTokenOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"validator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"nonces","type":"uint256[]"}],"name":"bulkApproveMints","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","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":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"pendingMints","outputs":[{"name":"to","type":"address"},{"name":"tokens","type":"uint256"},{"name":"weiAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rate","type":"uint256"}],"name":"updateRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentMintNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"nonce","type":"uint256"}],"name":"approveMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"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":"whiteListingContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newToken","type":"address"}],"name":"setTokenContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"rejectedMintBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"nonce","type":"uint256"},{"name":"reason","type":"uint256"}],"name":"rejectMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"hasEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"whitelistAddress","type":"address"},{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"},{"name":"_rate","type":"uint256"},{"name":"_wallet","type":"address"},{"name":"_token","type":"address"},{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":true,"name":"nonce","type":"uint256"},{"indexed":false,"name":"reason","type":"uint256"}],"name":"MintRejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"beneficiary","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"weiAmount","type":"uint256"},{"indexed":false,"name":"nonce","type":"uint256"}],"name":"ContributionRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"rate","type":"uint256"}],"name":"RateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_whiteListingContract","type":"address"}],"name":"WhiteListingContractSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newValidator","type":"address"}],"name":"NewValidatorSet","type":"event"}]

0x60806040526007805460a060020a60ff021916905534801561002057600080fd5b5060405160e0806112be83398101604090815281516020830151918301516060840151608085015160a086015160c09096015160008054600160a060020a031916331790559395929391929091808087878787874285101561008157600080fd5b8484101561008e57600080fd5b6000831161009b57600080fd5b600160a060020a03821615156100b057600080fd5b600160a060020a03811615156100c557600080fd5b60029490945560039290925560055560048054600160a060020a0319908116600160a060020a0393841617909155600180548216938316939093179092556007805490921692169190911790555061012587640100000000610131810204565b505050505050506101af565b600054600160a060020a0316331461014857600080fd5b80600160a060020a038116151561015e57600080fd5b60088054600160a060020a031916600160a060020a0384811691909117918290556040519116907f770a556255467946acb4da5df8ae3bd252346205b8191641a036b89f441f975d90600090a25050565b611100806101be6000396000f30060806040526004361061015e5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166312f2614081146101695780631456979f1461018a5780631d7c194e146101ab57806321e6b53d146101d75780632c4e722e146101f85780633197cbb61461021f5780633a5381b5146102345780633b59cb24146102655780634042b66f146102855780634bb278f31461029a5780634e71d92d146102af578063521eb273146102c457806363900ca6146102d957806369ea17711461031957806378e979251461033157806379b2614d146103465780638aa6e6de1461035b5780638d4e4083146103735780638da5cb5b1461039c578063b0e1f553146103b1578063bbcd5bbe146103c6578063c1e47662146103e7578063cf4186cb14610408578063ec8ac4d814610423578063ecb70fb714610437578063f2fde38b1461044c578063fc0c546a1461046d575b61016733610482565b005b34801561017557600080fd5b50610167600160a060020a0360043516610609565b34801561019657600080fd5b50610167600160a060020a0360043516610687565b3480156101b757600080fd5b50610167602460048035828101929082013591813591820191013561070e565b3480156101e357600080fd5b50610167600160a060020a036004351661077d565b34801561020457600080fd5b5061020d61082d565b60408051918252519081900360200190f35b34801561022b57600080fd5b5061020d610833565b34801561024057600080fd5b50610249610839565b60408051600160a060020a039092168252519081900360200190f35b34801561027157600080fd5b506101676004803560248101910135610848565b34801561029157600080fd5b5061020d61089f565b3480156102a657600080fd5b506101676108a5565b3480156102bb57600080fd5b5061016761095f565b3480156102d057600080fd5b506102496109f6565b3480156102e557600080fd5b506102f1600435610a05565b60408051600160a060020a039094168452602084019290925282820152519081900360600190f35b34801561032557600080fd5b50610167600435610a30565b34801561033d57600080fd5b5061020d610a8f565b34801561035257600080fd5b5061020d610a95565b34801561036757600080fd5b50610167600435610a9b565b34801561037f57600080fd5b50610388610ac9565b604080519115158252519081900360200190f35b3480156103a857600080fd5b50610249610aea565b3480156103bd57600080fd5b50610249610af9565b3480156103d257600080fd5b50610167600160a060020a0360043516610b08565b3480156103f357600080fd5b5061020d600160a060020a0360043516610b58565b34801561041457600080fd5b50610167600435602435610b6a565b610167600160a060020a0360043516610482565b34801561044357600080fd5b50610388610b8f565b34801561045857600080fd5b50610167600160a060020a0360043516610b97565b34801561047957600080fd5b50610249610c1f565b600854604080517fa59af340000000000000000000000000000000000000000000000000000000008152600160a060020a03808516600483015291516000938493869391169163a59af3409160248082019260209290919082900301818887803b1580156104ef57600080fd5b505af1158015610503573d6000803e3d6000fd5b505050506040513d602081101561051957600080fd5b5051151561052657600080fd5b61052e610c2e565b151561053957600080fd5b60055434935061055090849063ffffffff610c5e16565b6040805160608181018352600160a060020a0380891680845260208085018781528587018b8152600a8054600090815260098552899020975188549616600160a060020a03199096169590951787559051600187015551600290950194909455905484519182529281018590528084018890529081019190915290519193507febd5a5df4567e1ac2664b9104c4482e110c7b0392ba6afca036e8462f7d89cd3919081900360800190a15050600a805460010190555050565b600054600160a060020a0316331461062057600080fd5b80600160a060020a038116151561063657600080fd5b60088054600160a060020a031916600160a060020a0384811691909117918290556040519116907f770a556255467946acb4da5df8ae3bd252346205b8191641a036b89f441f975d90600090a25050565b600054600160a060020a0316331461069e57600080fd5b600160a060020a03811615156106b357600080fd5b60008054604051600160a060020a03808516939216917fb845aa14512b0a33bc681ec85e8670ad87301081c1a11343e30d5851ca5d206b91a360008054600160a060020a031916600160a060020a0392909216919091179055565b60008054600160a060020a0316331461072657600080fd5b83821461073257600080fd5b5060005b838110156107765761076e85858381811061074d57fe5b90506020020135848484818110151561076257fe5b90506020020135610c94565b600101610736565b5050505050565b600754600160a060020a0316331461079457600080fd5b80600160a060020a03811615156107aa57600080fd5b600154604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b15801561081157600080fd5b505af1158015610825573d6000803e3d6000fd5b505050505050565b60055481565b60035481565b600054600160a060020a031681565b60008054600160a060020a0316331461086057600080fd5b5060005b8181101561089a5761088783838381811061087b57fe5b90506020020135610da3565b151561089257600080fd5b600101610864565b505050565b60065481565b600754600160a060020a031633146108bc57600080fd5b60075474010000000000000000000000000000000000000000900460ff16156108e457600080fd5b6108ec610b8f565b15156108f757600080fd5b6108ff610fd8565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a16007805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b336000908152600b6020526040812054811061097a57600080fd5b50336000818152600b6020526040808220805490839055905190929183156108fc02918491818181858888f193505050501580156109bc573d6000803e3d6000fd5b5060408051828152905133917fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a919081900360200190a250565b600454600160a060020a031681565b600960205260009081526040902080546001820154600290920154600160a060020a03909116919083565b600754600160a060020a03163314610a4757600080fd5b60008111610a5457600080fd5b60058190556040805182815290517fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b9181900360200190a150565b60025481565b600a5481565b600054600160a060020a03163314610ab257600080fd5b610abb81610da3565b1515610ac657600080fd5b50565b60075474010000000000000000000000000000000000000000900460ff1681565b600754600160a060020a031681565b600854600160a060020a031681565b600754600160a060020a03163314610b1f57600080fd5b80600160a060020a0381161515610b3557600080fd5b5060018054600160a060020a031916600160a060020a0392909216919091179055565b600b6020526000908152604090205481565b600054600160a060020a03163314610b8157600080fd5b610b8b8282610c94565b5050565b600354421190565b600754600160a060020a03163314610bae57600080fd5b600160a060020a0381161515610bc357600080fd5b600754604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360078054600160a060020a031916600160a060020a0392909216919091179055565b600154600160a060020a031681565b60008060006002544210158015610c4757506003544211155b915050341515818015610c575750805b9250505090565b600080831515610c715760009150610c8d565b50828202828482811515610c8157fe5b0414610c8957fe5b8091505b5092915050565b600082815260096020526040902054600160a060020a0316801515610cb857600080fd5b600083815260096020908152604080832060028101549054600160a060020a03168452600b90925290912054610cf39163ffffffff61108b16565b60008481526009602081815260408084208054600160a060020a039081168652600b84528286209690965593889052918152825460018401546002909401548351948552918401919091528282018690529051869391909116917f416bf61e626db4475cb9910facca78486402afc994ecc9138c7605dc688fae1a919081900360600190a3505060009081526009602052604081208054600160a060020a03191681556001810182905560020155565b60008181526009602090815260408083205460085482517fa59af340000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820181905293519394919092169263a59af34092602480820193929182900301818887803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b505050506040513d6020811015610e4557600080fd5b50511515610e5257600080fd5b600083815260096020526040902060020154600654610e769163ffffffff61108b16565b600655600180546000858152600960209081526040808320805495015481517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a0396871660048201526024810191909152905194909316936340c10f1993604480820194918390030190829087803b158015610efa57600080fd5b505af1158015610f0e573d6000803e3d6000fd5b505050506040513d6020811015610f2457600080fd5b5050600083815260096020908152604091829020805460028201546001909201548451928352928201929092528251600160a060020a039092169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad189281900390910190a3600083815260096020526040902060020154610fa69061109a565b505060009081526009602052604081208054600160a060020a0319168155600180820183905560029091019190915590565b600160009054906101000a9004600160a060020a0316600160a060020a0316637d64bcb46040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050506040513d602081101561106e57600080fd5b505060075461108590600160a060020a031661077d565b6110895b565b600082820183811015610c8957fe5b600454604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015610b8b573d6000803e3d6000fd00a165627a7a723058208390d555af0feab2fb6b313ac9f21f360589edbb1f7e72d39058358a1571ffb30029000000000000000000000000e849977f05b004fb920cb1e4a64a47e7bcb4aee9000000000000000000000000000000000000000000000000000000005c7054c00000000000000000000000000000000000000000000000000000000062547dbc0000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000c6e9a57495429e070b56f743deb82ee2d135cc3e000000000000000000000000ed16d449dfc45cc96777ae983387a32509e45c45000000000000000000000000c6e9a57495429e070b56f743deb82ee2d135cc3e

Deployed Bytecode

0x60806040526004361061015e5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166312f2614081146101695780631456979f1461018a5780631d7c194e146101ab57806321e6b53d146101d75780632c4e722e146101f85780633197cbb61461021f5780633a5381b5146102345780633b59cb24146102655780634042b66f146102855780634bb278f31461029a5780634e71d92d146102af578063521eb273146102c457806363900ca6146102d957806369ea17711461031957806378e979251461033157806379b2614d146103465780638aa6e6de1461035b5780638d4e4083146103735780638da5cb5b1461039c578063b0e1f553146103b1578063bbcd5bbe146103c6578063c1e47662146103e7578063cf4186cb14610408578063ec8ac4d814610423578063ecb70fb714610437578063f2fde38b1461044c578063fc0c546a1461046d575b61016733610482565b005b34801561017557600080fd5b50610167600160a060020a0360043516610609565b34801561019657600080fd5b50610167600160a060020a0360043516610687565b3480156101b757600080fd5b50610167602460048035828101929082013591813591820191013561070e565b3480156101e357600080fd5b50610167600160a060020a036004351661077d565b34801561020457600080fd5b5061020d61082d565b60408051918252519081900360200190f35b34801561022b57600080fd5b5061020d610833565b34801561024057600080fd5b50610249610839565b60408051600160a060020a039092168252519081900360200190f35b34801561027157600080fd5b506101676004803560248101910135610848565b34801561029157600080fd5b5061020d61089f565b3480156102a657600080fd5b506101676108a5565b3480156102bb57600080fd5b5061016761095f565b3480156102d057600080fd5b506102496109f6565b3480156102e557600080fd5b506102f1600435610a05565b60408051600160a060020a039094168452602084019290925282820152519081900360600190f35b34801561032557600080fd5b50610167600435610a30565b34801561033d57600080fd5b5061020d610a8f565b34801561035257600080fd5b5061020d610a95565b34801561036757600080fd5b50610167600435610a9b565b34801561037f57600080fd5b50610388610ac9565b604080519115158252519081900360200190f35b3480156103a857600080fd5b50610249610aea565b3480156103bd57600080fd5b50610249610af9565b3480156103d257600080fd5b50610167600160a060020a0360043516610b08565b3480156103f357600080fd5b5061020d600160a060020a0360043516610b58565b34801561041457600080fd5b50610167600435602435610b6a565b610167600160a060020a0360043516610482565b34801561044357600080fd5b50610388610b8f565b34801561045857600080fd5b50610167600160a060020a0360043516610b97565b34801561047957600080fd5b50610249610c1f565b600854604080517fa59af340000000000000000000000000000000000000000000000000000000008152600160a060020a03808516600483015291516000938493869391169163a59af3409160248082019260209290919082900301818887803b1580156104ef57600080fd5b505af1158015610503573d6000803e3d6000fd5b505050506040513d602081101561051957600080fd5b5051151561052657600080fd5b61052e610c2e565b151561053957600080fd5b60055434935061055090849063ffffffff610c5e16565b6040805160608181018352600160a060020a0380891680845260208085018781528587018b8152600a8054600090815260098552899020975188549616600160a060020a03199096169590951787559051600187015551600290950194909455905484519182529281018590528084018890529081019190915290519193507febd5a5df4567e1ac2664b9104c4482e110c7b0392ba6afca036e8462f7d89cd3919081900360800190a15050600a805460010190555050565b600054600160a060020a0316331461062057600080fd5b80600160a060020a038116151561063657600080fd5b60088054600160a060020a031916600160a060020a0384811691909117918290556040519116907f770a556255467946acb4da5df8ae3bd252346205b8191641a036b89f441f975d90600090a25050565b600054600160a060020a0316331461069e57600080fd5b600160a060020a03811615156106b357600080fd5b60008054604051600160a060020a03808516939216917fb845aa14512b0a33bc681ec85e8670ad87301081c1a11343e30d5851ca5d206b91a360008054600160a060020a031916600160a060020a0392909216919091179055565b60008054600160a060020a0316331461072657600080fd5b83821461073257600080fd5b5060005b838110156107765761076e85858381811061074d57fe5b90506020020135848484818110151561076257fe5b90506020020135610c94565b600101610736565b5050505050565b600754600160a060020a0316331461079457600080fd5b80600160a060020a03811615156107aa57600080fd5b600154604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b15801561081157600080fd5b505af1158015610825573d6000803e3d6000fd5b505050505050565b60055481565b60035481565b600054600160a060020a031681565b60008054600160a060020a0316331461086057600080fd5b5060005b8181101561089a5761088783838381811061087b57fe5b90506020020135610da3565b151561089257600080fd5b600101610864565b505050565b60065481565b600754600160a060020a031633146108bc57600080fd5b60075474010000000000000000000000000000000000000000900460ff16156108e457600080fd5b6108ec610b8f565b15156108f757600080fd5b6108ff610fd8565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a16007805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b336000908152600b6020526040812054811061097a57600080fd5b50336000818152600b6020526040808220805490839055905190929183156108fc02918491818181858888f193505050501580156109bc573d6000803e3d6000fd5b5060408051828152905133917fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a919081900360200190a250565b600454600160a060020a031681565b600960205260009081526040902080546001820154600290920154600160a060020a03909116919083565b600754600160a060020a03163314610a4757600080fd5b60008111610a5457600080fd5b60058190556040805182815290517fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b9181900360200190a150565b60025481565b600a5481565b600054600160a060020a03163314610ab257600080fd5b610abb81610da3565b1515610ac657600080fd5b50565b60075474010000000000000000000000000000000000000000900460ff1681565b600754600160a060020a031681565b600854600160a060020a031681565b600754600160a060020a03163314610b1f57600080fd5b80600160a060020a0381161515610b3557600080fd5b5060018054600160a060020a031916600160a060020a0392909216919091179055565b600b6020526000908152604090205481565b600054600160a060020a03163314610b8157600080fd5b610b8b8282610c94565b5050565b600354421190565b600754600160a060020a03163314610bae57600080fd5b600160a060020a0381161515610bc357600080fd5b600754604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360078054600160a060020a031916600160a060020a0392909216919091179055565b600154600160a060020a031681565b60008060006002544210158015610c4757506003544211155b915050341515818015610c575750805b9250505090565b600080831515610c715760009150610c8d565b50828202828482811515610c8157fe5b0414610c8957fe5b8091505b5092915050565b600082815260096020526040902054600160a060020a0316801515610cb857600080fd5b600083815260096020908152604080832060028101549054600160a060020a03168452600b90925290912054610cf39163ffffffff61108b16565b60008481526009602081815260408084208054600160a060020a039081168652600b84528286209690965593889052918152825460018401546002909401548351948552918401919091528282018690529051869391909116917f416bf61e626db4475cb9910facca78486402afc994ecc9138c7605dc688fae1a919081900360600190a3505060009081526009602052604081208054600160a060020a03191681556001810182905560020155565b60008181526009602090815260408083205460085482517fa59af340000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820181905293519394919092169263a59af34092602480820193929182900301818887803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b505050506040513d6020811015610e4557600080fd5b50511515610e5257600080fd5b600083815260096020526040902060020154600654610e769163ffffffff61108b16565b600655600180546000858152600960209081526040808320805495015481517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a0396871660048201526024810191909152905194909316936340c10f1993604480820194918390030190829087803b158015610efa57600080fd5b505af1158015610f0e573d6000803e3d6000fd5b505050506040513d6020811015610f2457600080fd5b5050600083815260096020908152604091829020805460028201546001909201548451928352928201929092528251600160a060020a039092169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad189281900390910190a3600083815260096020526040902060020154610fa69061109a565b505060009081526009602052604081208054600160a060020a0319168155600180820183905560029091019190915590565b600160009054906101000a9004600160a060020a0316600160a060020a0316637d64bcb46040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b505050506040513d602081101561106e57600080fd5b505060075461108590600160a060020a031661077d565b6110895b565b600082820183811015610c8957fe5b600454604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015610b8b573d6000803e3d6000fd00a165627a7a723058208390d555af0feab2fb6b313ac9f21f360589edbb1f7e72d39058358a1571ffb30029

Swarm Source

bzzr://8390d555af0feab2fb6b313ac9f21f360589edbb1f7e72d39058358a1571ffb3

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.