ETH Price: $2,493.34 (-2.41%)

Contract

0x548D32216D01617452892eA360bFCE9cE8dc9729
 

Overview

ETH Balance

1.094633542751937375 ETH

Eth Value

$2,729.29 (@ $2,493.34/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Buy74340352019-03-24 22:18:292041 days ago1553465909IN
0x548D3221...cE8dc9729
0.002 ETH0.000124562
Buy74340282019-03-24 22:17:222041 days ago1553465842IN
0x548D3221...cE8dc9729
0.016 ETH0.000124562
Buy73145232019-03-06 7:57:292059 days ago1551859049IN
0x548D3221...cE8dc9729
0.001 ETH0.000309984
Buy68737502018-12-12 15:37:032143 days ago1544629023IN
0x548D3221...cE8dc9729
0.008 ETH0.000373686
Buy68737462018-12-12 15:36:232143 days ago1544628983IN
0x548D3221...cE8dc9729
0.016 ETH0.000373686
Buy68728212018-12-12 12:08:142143 days ago1544616494IN
0x548D3221...cE8dc9729
0.016 ETH0.000373686
Buy68728192018-12-12 12:07:542143 days ago1544616474IN
0x548D3221...cE8dc9729
0.016 ETH0.000435967
Buy68728172018-12-12 12:07:132143 days ago1544616433IN
0x548D3221...cE8dc9729
0.016 ETH0.000435967
Buy68728142018-12-12 12:06:252143 days ago1544616385IN
0x548D3221...cE8dc9729
0.016 ETH0.000435967
Buy68728082018-12-12 12:05:192143 days ago1544616319IN
0x548D3221...cE8dc9729
0.016 ETH0.000160957
Buy68728062018-12-12 12:05:032143 days ago1544616303IN
0x548D3221...cE8dc9729
0.016 ETH0.000435967
Buy68728012018-12-12 12:03:432143 days ago1544616223IN
0x548D3221...cE8dc9729
0.016 ETH0.000540967
Buy68713702018-12-12 6:24:362143 days ago1544595876IN
0x548D3221...cE8dc9729
0.008 ETH0.00038645
Buy63557042018-09-18 17:51:212228 days ago1537293081IN
0x548D3221...cE8dc9729
0.001 ETH0.000312485
Buy63557042018-09-18 17:51:212228 days ago1537293081IN
0x548D3221...cE8dc9729
0.002 ETH0.000114975
Buy63555762018-09-18 17:19:572228 days ago1537291197IN
0x548D3221...cE8dc9729
0.002 ETH0.00031145
Buy63555692018-09-18 17:17:542228 days ago1537291074IN
0x548D3221...cE8dc9729
0.001 ETH0.000312485
Buy63555082018-09-18 17:03:412228 days ago1537290221IN
0x548D3221...cE8dc9729
0.004 ETH0.00038645
Buy60368502018-07-27 2:45:262282 days ago1532659526IN
0x548D3221...cE8dc9729
0.002 ETH0.000130782.1
Buy60368502018-07-27 2:45:262282 days ago1532659526IN
0x548D3221...cE8dc9729
0.002 ETH0.000146563.1
Buy60367492018-07-27 2:17:182282 days ago1532657838IN
0x548D3221...cE8dc9729
0.001 ETH0.000187493
Buy60317272018-07-26 5:46:262283 days ago1532583986IN
0x548D3221...cE8dc9729
0.001 ETH0.000309984
Buy59480742018-07-12 1:48:132297 days ago1531360093IN
0x548D3221...cE8dc9729
0.001 ETH0.000697479
Buy54732502018-04-20 8:48:092379 days ago1524214089IN
0x548D3221...cE8dc9729
0.001 ETH0.000154992
Buy52688192018-03-17 1:53:022414 days ago1521251582IN
0x548D3221...cE8dc9729
0.016 ETH0.000231843
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
74340352019-03-24 22:18:292041 days ago1553465909
0x548D3221...cE8dc9729
0.0017 ETH
74340282019-03-24 22:17:222041 days ago1553465842
0x548D3221...cE8dc9729
0.0136 ETH
73145232019-03-06 7:57:292059 days ago1551859049
0x548D3221...cE8dc9729
0x548D3221...cE8dc9729
0.00085 ETH
68737502018-12-12 15:37:032143 days ago1544629023
0x548D3221...cE8dc9729
0.0068 ETH
68737462018-12-12 15:36:232143 days ago1544628983
0x548D3221...cE8dc9729
0.0136 ETH
68728212018-12-12 12:08:142143 days ago1544616494
0x548D3221...cE8dc9729
0.0136 ETH
68728192018-12-12 12:07:542143 days ago1544616474
0x548D3221...cE8dc9729
0.0136 ETH
68728172018-12-12 12:07:132143 days ago1544616433
0x548D3221...cE8dc9729
0.0136 ETH
68728142018-12-12 12:06:252143 days ago1544616385
0x548D3221...cE8dc9729
0.0136 ETH
68728062018-12-12 12:05:032143 days ago1544616303
0x548D3221...cE8dc9729
0.0136 ETH
68728012018-12-12 12:03:432143 days ago1544616223
0x548D3221...cE8dc9729
0.0136 ETH
68713702018-12-12 6:24:362143 days ago1544595876
0x548D3221...cE8dc9729
0.0068 ETH
63557042018-09-18 17:51:212228 days ago1537293081
0x548D3221...cE8dc9729
0x548D3221...cE8dc9729
0.00085 ETH
63555762018-09-18 17:19:572228 days ago1537291197
0x548D3221...cE8dc9729
0.0017 ETH
63555692018-09-18 17:17:542228 days ago1537291074
0x548D3221...cE8dc9729
0x548D3221...cE8dc9729
0.00085 ETH
63555082018-09-18 17:03:412228 days ago1537290221
0x548D3221...cE8dc9729
0.0034 ETH
60368502018-07-27 2:45:262282 days ago1532659526
0x548D3221...cE8dc9729
0.0017 ETH
60368502018-07-27 2:45:262282 days ago1532659526
0x548D3221...cE8dc9729
0.0017 ETH
60367492018-07-27 2:17:182282 days ago1532657838
0x548D3221...cE8dc9729
0x548D3221...cE8dc9729
0.00085 ETH
60317272018-07-26 5:46:262283 days ago1532583986
0x548D3221...cE8dc9729
0x548D3221...cE8dc9729
0.00085 ETH
59480742018-07-12 1:48:132297 days ago1531360093
0x548D3221...cE8dc9729
0x548D3221...cE8dc9729
0.00085 ETH
54732502018-04-20 8:48:092379 days ago1524214089
0x548D3221...cE8dc9729
0x548D3221...cE8dc9729
0.00085 ETH
52688192018-03-17 1:53:022414 days ago1521251582
0x548D3221...cE8dc9729
0.0136 ETH
52281612018-03-10 3:52:592421 days ago1520653979
0x548D3221...cE8dc9729
0.0304 ETH
52265682018-03-09 21:29:372421 days ago1520630977
0x548D3221...cE8dc9729
0.0068 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ChemistryCore

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.19;


contract ERC721 {
    // Required methods
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) external view returns (address owner);
    function approve(address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function transferFrom(address _from, address _to, uint256 _tokenId) external;
    function takeOwnership(uint256 _tokenId) external;

    // Events
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);

    // Optional
    // function name() public view returns (string name);
    // function symbol() public view returns (string symbol);
    // function tokensOfOwner(address _owner) external view returns (uint256[] tokenIds);
    // function tokenMetadata(uint256 _tokenId, string _preferredTransport) public view returns (string infoUrl);
    function supportsInterface(bytes4 _interfaceID) external view returns (bool);
}


/**
 * @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) public onlyOwner{
        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 public paused = false;

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

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

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

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

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 ChemistryBase is Ownable {
    
    struct Element{
        bytes32 symbol;
    }
   
    /*** EVENTS ***/

    event Create(address owner, uint256 atomicNumber, bytes32 symbol);
    
    /// @dev Transfer event as defined in current draft of ERC721. Emitted every time a element
    ///  ownership is assigned.
    event Transfer(address from, address to, uint256 tokenId);

    /*** CONSTANTS ***/
    
    // currently known number of elements in periodic table
    uint256 public tableSize = 173;

    /*** STORAGE ***/

    /// @dev An array containing the element struct for all Elements in existence. The ID
    ///  of each element is actually an index of this array.
    Element[] public elements;

    /// @dev A mapping from element IDs to the address that owns them. All elements have
    ///  some valid owner address, even miner elements are created with a non-zero owner.
    mapping (uint256 => address) public elementToOwner;

    // @dev A mapping from owner address to count of tokens that address owns.
    //  Used internally inside balanceOf() to resolve ownership count.
    mapping (address => uint256) internal ownersTokenCount;

    /// @dev A mapping from element IDs to an address that has been approved to call
    ///  transferFrom(). Each Element can only have one approved address for transfer
    ///  at any time. A zero value means no approval is outstanding.
    mapping (uint256 => address) public elementToApproved;
    
    mapping (address => bool) public authorized;
    
    mapping (uint256 => uint256) public currentPrice;
    
	function addAuthorization (address _authorized) onlyOwner external {
		authorized[_authorized] = true;
	}

	function removeAuthorization (address _authorized) onlyOwner external {
		delete authorized[_authorized];
	}
	
	modifier onlyAuthorized() {
		require(authorized[msg.sender]);
		_;
	}
    
    /// @dev Assigns ownership of a specific element to an address.
    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        // Since the number of elements is capped to 'numberOfElements'(173) we can't overflow this
        ownersTokenCount[_to]++;
        // transfer ownership
        elementToOwner[_tokenId] = _to;
        // When creating new element _from is 0x0, but we can't account that address.
        if (_from != address(0)) {
            ownersTokenCount[_from]--;
            // clear any previously approved ownership exchange
            delete elementToApproved[_tokenId];
        }
        // Emit the transfer event.
        Transfer(_from, _to, _tokenId);
    }

    /// @dev An internal method that creates a new element and stores it. This
    ///  method doesn't do any checking and should only be called when the
    ///  input data is known to be valid. Will generate both a Arise event
    ///  and a Transfer event.
    function _createElement(bytes32 _symbol, uint256 _price)
        internal
        returns (uint256) {
        	    
        address owner = address(this);
        Element memory _element = Element({
            symbol : _symbol
        });
        uint256 newElementId = elements.push(_element) - 1;
        
        currentPrice[newElementId] = _price;
        
        // emit the create event
        Create(owner, newElementId, _symbol);
        
        // This will assign ownership, and also emit the Transfer event as
        // per ERC721 draft
        _transfer(0, owner, newElementId);

        return newElementId;
    }
    
    function setTableSize(uint256 _newSize) external onlyOwner {
        tableSize = _newSize;
    }
    
    function transferOwnership(address newOwner) public onlyOwner{
        delete authorized[owner];
        authorized[newOwner] = true;
        super.transferOwnership(newOwner);
    }
}

contract ElementTokenImpl is ChemistryBase, ERC721 {

    /// @notice Name and symbol of the non fungible token, as defined in ERC721.
    string public constant name = "CryptoChemistry";
    string public constant symbol = "CC";

    bytes4 constant InterfaceSignature_ERC165 =
        bytes4(keccak256('supportsInterface(bytes4)'));

    bytes4 constant InterfaceSignature_ERC721 =
        bytes4(keccak256('name()')) ^
        bytes4(keccak256('symbol()')) ^
        bytes4(keccak256('totalSupply()')) ^
        bytes4(keccak256('balanceOf(address)')) ^
        bytes4(keccak256('ownerOf(uint256)')) ^
        bytes4(keccak256('approve(address,uint256)')) ^
        bytes4(keccak256('transfer(address,uint256)')) ^
        bytes4(keccak256('transferFrom(address,address,uint256)')) ^
        bytes4(keccak256('takeOwnership(uint256)')) ^
        bytes4(keccak256('tokensOfOwner(address)'));

    /// @notice Introspection interface as per ERC-165 (https://github.com/ethereum/EIPs/issues/165).
    ///  Returns true for any standardized interfaces implemented by this contract. We implement
    ///  ERC-165 and ERC-721.
    function supportsInterface(bytes4 _interfaceID) external view returns (bool)
    {
        return ((_interfaceID == InterfaceSignature_ERC165) || (_interfaceID == InterfaceSignature_ERC721));
    }

    /** @dev Checks if a given address is the current owner of the specified Element tokenId.
     * @param _claimant the address we are validating against.
     * @param _tokenId element id
     */
    function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return elementToOwner[_tokenId] == _claimant;    
    }

    function _ownerApproved(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return elementToOwner[_tokenId] == _claimant && elementToApproved[_tokenId] == address(0);    
    }

    /// @dev Checks if a given address currently has transferApproval for a particular element.
    /// @param _claimant the address we are confirming element is approved for.
    /// @param _tokenId element id
    function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return elementToApproved[_tokenId] == _claimant;
    }

    /// @dev Marks an address as being approved for transferFrom(), overwriting any previous
    ///  approval. Setting _approved to address(0) clears all transfer approval.
    ///  NOTE: _approve() does NOT send the Approval event.
    function _approve(uint256 _tokenId, address _approved) internal {
        elementToApproved[_tokenId] = _approved;
    }

    /// @notice Returns the number of tokens owned by a specific address.
    /// @param _owner The owner address to check.
    /// @dev Required for ERC-721 compliance
    function balanceOf(address _owner) public view returns (uint256 count) {
        return ownersTokenCount[_owner];
    }

    /// @notice Transfers a element to another address
    /// @param _to The address of the recipient, can be a user or contract.
    /// @param _tokenId The ID of the element to transfer.
    /// @dev Required for ERC-721 compliance.
    function transfer(address _to, uint256 _tokenId) external {
        // Safety check to prevent against an unexpected 0x0 default.
        require(_to != address(0));
        // Disallow transfers to this contract to prevent accidental misuse.
        require(_to != address(this));

        // You can only send your own element.
        require(_owns(msg.sender, _tokenId));

        // Reassign ownership, clear pending approvals, emit Transfer event.
        _transfer(msg.sender, _to, _tokenId);
    }

    /// @notice Grant another address the right to transfer a specific element via
    ///  transferFrom(). This is the preferred flow for transfering NFTs to contracts.
    /// @param _to The address to be granted transfer approval. Pass address(0) to
    ///  clear all approvals.
    /// @param _tokenId The ID of the element that can be transferred if this call succeeds.
    /// @dev Required for ERC-721 compliance.
    function approve(address _to, uint256 _tokenId) external {
        // Only an owner can grant transfer approval.
        require(_owns(msg.sender, _tokenId));

        // Register the approval (replacing any previous approval).
        _approve(_tokenId, _to);

        // Emit approval event.
        Approval(msg.sender, _to, _tokenId);
    }

    /// @notice Transfer a element owned by another address, for which the calling address
    ///  has previously been granted transfer approval by the owner.
    /// @param _from The address that owns the element to be transfered.
    /// @param _to The address that should take ownership of the element. Can be any address,
    ///  including the caller.
    /// @param _tokenId The ID of the element to be transferred.
    /// @dev Required for ERC-721 compliance.
    function transferFrom(address _from, address _to, uint256 _tokenId)
        external
    {
        // Safety check to prevent against an unexpected 0x0 default.
        require(_to != address(0));
        // Disallow transfers to this contract to prevent accidental misuse.
        require(_to != address(this));
        // Check for approval and valid ownership
        require(_approvedFor(msg.sender, _tokenId));
        require(_owns(_from, _tokenId));

        // Reassign ownership (also clears pending approvals and emits Transfer event).
        _transfer(_from, _to, _tokenId);
    }

    /// @notice Returns the total number of tokens currently in existence.
    /// @dev Required for ERC-721 compliance.
    function totalSupply() public view returns (uint256) {
        return elements.length;
    }

    /// @notice Returns the address currently assigned ownership of a given element.
    /// @dev Required for ERC-721 compliance.
    function ownerOf(uint256 _tokenId)
        external
        view
        returns (address owner)
    {
        owner = elementToOwner[_tokenId];

        require(owner != address(0));
    }
    
    function takeOwnership(uint256 _tokenId) external {
        address _from = elementToOwner[_tokenId];
        
        // Check for approval and valid ownership
        require(_approvedFor(msg.sender, _tokenId));
        require(_from != address(0));

        // Reassign ownership (also clears pending approvals and emits Transfer event).
        _transfer(_from, msg.sender, _tokenId);
    }

    /// @notice Returns a list of all element IDs assigned to an address.
    /// @param _owner The owner whose tokens we are interested in.
    function tokensOfOwner(address _owner) external view returns(uint256[] ownerTokens) {
        uint256 tokenCount = balanceOf(_owner);

        if (tokenCount == 0) {
            // Return an empty array
            return new uint256[](0);
        } else {
            uint256[] memory result = new uint256[](tokenCount);
            uint256 totalElements = totalSupply();
            uint256 resultIndex = 0;

            uint256 elementId;

            for (elementId = 0; elementId < totalElements; elementId++) {
                if (elementToOwner[elementId] == _owner) {
                    result[resultIndex] = elementId;
                    resultIndex++;
                }
            }

            return result;
        }
    }
    
}

contract ContractOfSale is ElementTokenImpl {
    using SafeMath for uint256;
    
  	event Sold (uint256 elementId, address oldOwner, address newOwner, uint256 price);
  	
  	uint256 private constant LIMIT_1 = 20 finney;
  	uint256 private constant LIMIT_2 = 500 finney;
  	uint256 private constant LIMIT_3 = 2000 finney;
  	uint256 private constant LIMIT_4 = 5000 finney;
  	
  	/* Buying */
  	function calculateNextPrice (uint256 _price) public pure returns (uint256 _nextPrice) {
	    if (_price < LIMIT_1) {
	      return _price.mul(2);//100%
	    } else if (_price < LIMIT_2) {
	      return _price.mul(13500).div(10000);//35%
	    } else if (_price < LIMIT_3) {
	      return _price.mul(12500).div(10000);//25%
	    } else if (_price < LIMIT_4) {
	      return _price.mul(11700).div(10000);//17%
	    } else {
	      return _price.mul(11500).div(10000);//15%
	    }
  	}

	function _calculateOwnerCut (uint256 _price) internal pure returns (uint256 _devCut) {
		if (_price < LIMIT_1) {
	      return _price.mul(1500).div(10000); // 15%
	    } else if (_price < LIMIT_2) {
	      return _price.mul(500).div(10000); // 5%
	    } else if (_price < LIMIT_3) {
	      return _price.mul(400).div(10000); // 4%
	    } else if (_price < LIMIT_4) {
	      return _price.mul(300).div(10000); // 3%
	    } else {
	      return _price.mul(200).div(10000); // 2%
	    }
  	}

	function buy (uint256 _itemId) external payable{
        uint256 price = currentPrice[_itemId];
	    //
        require(currentPrice[_itemId] > 0);
        //
        require(elementToOwner[_itemId] != address(0));
        //
        require(msg.value >= price);
        //
        require(elementToOwner[_itemId] != msg.sender);
        //
        require(msg.sender != address(0));
        
        address oldOwner = elementToOwner[_itemId];
        //
        address newOwner = msg.sender;
        //
        //
        uint256 excess = msg.value.sub(price);
        //
        _transfer(oldOwner, newOwner, _itemId);
        //
        currentPrice[_itemId] = calculateNextPrice(price);
        
        Sold(_itemId, oldOwner, newOwner, price);

        uint256 ownerCut = _calculateOwnerCut(price);

        oldOwner.transfer(price.sub(ownerCut));
        if (excess > 0) {
            newOwner.transfer(excess);
        }
    }
    
	function priceOfElement(uint256 _elementId) external view returns (uint256 _price) {
		return currentPrice[_elementId];
	}

	function priceOfElements(uint256[] _elementIds) external view returns (uint256[] _prices) {
	    uint256 length = _elementIds.length;
	    _prices = new uint256[](length);
	    
	    for(uint256 i = 0; i < length; i++) {
	        _prices[i] = currentPrice[_elementIds[i]];
	    }
	}

	function nextPriceOfElement(uint256 _itemId) public view returns (uint256 _nextPrice) {
		return calculateNextPrice(currentPrice[_itemId]);
	}

}

contract ChemistryCore is ContractOfSale {
    
    function ChemistryCore() public {
        owner = msg.sender;
        authorized[msg.sender] = true;
        
        _createElement("0", 2 ** 255);//philosophers stone is priceless
    }
    
    function addElement(bytes32 _symbol) external onlyAuthorized() {
        uint256 elementId = elements.length + 1;
        
        require(currentPrice[elementId] == 0);
        require(elementToOwner[elementId] == address(0));
        require(elementId <= tableSize + 1);
        
        _createElement(_symbol, 1 finney);
    }
    
    function addElements(bytes32[] _symbols) external onlyAuthorized() {
        uint256 elementId = elements.length + 1;
        
        uint256 length = _symbols.length;
        uint256 size = tableSize + 1;
        for(uint256 i = 0; i < length; i ++) {
            
            require(currentPrice[elementId] == 0);
            require(elementToOwner[elementId] == address(0));
            require(elementId <= size);
            
            _createElement(_symbols[i], 1 finney);
            elementId++;
        }
        
    }

    function withdrawAll() onlyOwner() external {
        owner.transfer(this.balance);
    }

    function withdrawAmount(uint256 _amount) onlyOwner() external {
        owner.transfer(_amount);
    }
    
    function() external payable {
        require(msg.sender == address(this));
    }
    
    function getElementsFromIndex(uint32 indexFrom, uint32 count) external view returns (bytes32[] memory elementsData) {
        //check length
        uint256 lenght = (elements.length - indexFrom >= count ? count : elements.length - indexFrom);
        
        elementsData = new bytes32[](lenght);
        for(uint256 i = 0; i < lenght; i ++) {
            elementsData[i] = elements[indexFrom + i].symbol;
        }
    }
    
    function getElementOwners(uint256[] _elementIds) external view returns (address[] memory owners) {
        uint256 lenght = _elementIds.length;
        owners = new address[](lenght);
        
        for(uint256 i = 0; i < lenght; i ++) {
            owners[i] = elementToOwner[_elementIds[i]];
        }
    }
    
	function getElementView(uint256 _id) external view returns (string symbol) {
		symbol = _bytes32ToString(elements[_id].symbol);
    }
	
	function getElement(uint256 _id) external view returns (bytes32 symbol) {
		symbol = elements[_id].symbol;
    }
    
    function getElements(uint256[] _elementIds) external view returns (bytes32[] memory elementsData) {
        elementsData = new bytes32[](_elementIds.length);
        for(uint256 i = 0; i < _elementIds.length; i++) {
            elementsData[i] = elements[_elementIds[i]].symbol;
        }
    }
    
    function getElementInfoView(uint256 _itemId) external view returns (address _owner, uint256 _price, uint256 _nextPrice, string _symbol) {
	    _price = currentPrice[_itemId];
		return (elementToOwner[_itemId], _price, calculateNextPrice(_price), _bytes32ToString(elements[_itemId].symbol));
	}
    
    function getElementInfo(uint256 _itemId) external view returns (address _owner, uint256 _price, uint256 _nextPrice, bytes32 _symbol) {
	    _price = currentPrice[_itemId];
		return (elementToOwner[_itemId], _price, calculateNextPrice(_price), elements[_itemId].symbol);
	}
    
    function _bytes32ToString(bytes32 data) internal pure returns (string) {
        bytes memory bytesString = new bytes(32);
        uint charCount = 0;
        for (uint j = 0; j < 32; j++) {
            byte char = byte(bytes32(uint256(data) * 2 ** (8 * j)));
            if (char != 0) {
                bytesString[charCount] = char;
                charCount++;
            }
        }
        bytes memory bytesStringTrimmed = new bytes(charCount);
        for (j = 0; j < charCount; j++) {
            bytesStringTrimmed[j] = bytesString[j];
        }
        return string(bytesStringTrimmed);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_elementId","type":"uint256"}],"name":"priceOfElement","outputs":[{"name":"_price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawAmount","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":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbols","type":"bytes32[]"}],"name":"addElements","outputs":[],"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":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"nextPriceOfElement","outputs":[{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"bytes32"}],"name":"addElement","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_authorized","type":"address"}],"name":"addAuthorization","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getElement","outputs":[{"name":"symbol","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_elementIds","type":"uint256[]"}],"name":"getElementOwners","outputs":[{"name":"owners","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"elementToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_elementIds","type":"uint256[]"}],"name":"getElements","outputs":[{"name":"elementsData","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_elementIds","type":"uint256[]"}],"name":"priceOfElements","outputs":[{"name":"_prices","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getElementView","outputs":[{"name":"symbol","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"currentPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"ownerTokens","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAll","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":"_authorized","type":"address"}],"name":"removeAuthorization","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"getElementInfo","outputs":[{"name":"_owner","type":"address"},{"name":"_price","type":"uint256"},{"name":"_nextPrice","type":"uint256"},{"name":"_symbol","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"getElementInfoView","outputs":[{"name":"_owner","type":"address"},{"name":"_price","type":"uint256"},{"name":"_nextPrice","type":"uint256"},{"name":"_symbol","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"elementToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"authorized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"indexFrom","type":"uint32"},{"name":"count","type":"uint32"}],"name":"getElementsFromIndex","outputs":[{"name":"elementsData","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tableSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"calculateNextPrice","outputs":[{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"elements","outputs":[{"name":"symbol","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newSize","type":"uint256"}],"name":"setTableSize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"elementId","type":"uint256"},{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"},{"indexed":false,"name":"price","type":"uint256"}],"name":"Sold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"atomicNumber","type":"uint256"},{"indexed":false,"name":"symbol","type":"bytes32"}],"name":"Create","type":"event"}]

606060405260ad60015534156200001557600080fd5b60008054600160a060020a033316600160a060020a03199182168117909116811782558152600660205260409020805460ff19166001179055620000a87f30000000000000000000000000000000000000000000000000000000000000007f800000000000000000000000000000000000000000000000000000000000000064010000000062001744620000af82021704565b50620002c2565b600080620000bc62000260565b6000309250602060405190810160405286815260028054919350600191808301620000e8838262000272565b60009283526020909220859101815190555003600081815260076020526040908190208790559091507f2d49e37741dfbdb18a354011122af0d6b3bc41a42d6b1efa3919635173c02fc09084908390899051600160a060020a03909316835260208301919091526040808301919091526060909101905180910390a162000180600084836401000000006200182a6200018982021704565b95945050505050565b600160a060020a03808316600081815260046020908152604080832080546001019055858352600390915290208054600160a060020a03191690911790558316156200020b57600160a060020a03831660009081526004602090815260408083208054600019019055838352600590915290208054600160a060020a03191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b60206040519081016040526000815290565b8154818355818115116200029957600083815260209020620002999181019083016200029e565b505050565b620002bf91905b80821115620002bb5760008155600101620002a5565b5090565b90565b611cb780620002d26000396000f3006060604052600436106101d75763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146101f957806303c49580146102455780630562b9f71461026d57806306fdde0314610283578063095ea7b31461030d578063128952e41461032f57806318160ddd1461034d57806323b872dd146103605780632864ddde146103885780633440465e1461039e57806335b28153146103b45780633a7d22bc146103d35780633a98c533146103e9578063438a13491461045a578063630c010e1461048c5780636352211e146104aa5780636b8fd600146104c057806370a08231146104de57806370d0cc86146104fd5780637a3c4c17146105135780638462151c14610529578063853828b6146105485780638da5cb5b1461055b57806394f3f81d1461056e5780639584894c1461058d57806395d89b41146105d95780639738b602146105ec578063a3ce534914610699578063a9059cbb146106af578063b2e6ceeb146106d1578063b9181611146106e7578063c037d9ce14610706578063d403011414610728578063d96a094a1461073b578063e08503ec14610746578063e0d64b371461075c578063f2fde38b14610772578063fa88532914610791575b30600160a060020a031633600160a060020a03161415156101f757600080fd5b005b341561020457600080fd5b6102317fffffffff00000000000000000000000000000000000000000000000000000000600435166107a7565b604051901515815260200160405180910390f35b341561025057600080fd5b61025b600435610a2e565b60405190815260200160405180910390f35b341561027857600080fd5b6101f7600435610a40565b341561028e57600080fd5b610296610a91565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d25780820151838201526020016102ba565b50505050905090810190601f1680156102ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031857600080fd5b6101f7600160a060020a0360043516602435610ac8565b341561033a57600080fd5b6101f76004803560248101910135610b3b565b341561035857600080fd5b61025b610c09565b341561036b57600080fd5b6101f7600160a060020a0360043581169060243516604435610c10565b341561039357600080fd5b61025b600435610c80565b34156103a957600080fd5b6101f7600435610c98565b34156103bf57600080fd5b6101f7600160a060020a0360043516610d23565b34156103de57600080fd5b61025b600435610d62565b34156103f457600080fd5b6104076004803560248101910135610d85565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561044657808201518382015260200161042e565b505050509050019250505060405180910390f35b341561046557600080fd5b610470600435610e24565b604051600160a060020a03909116815260200160405180910390f35b341561049757600080fd5b6104076004803560248101910135610e3f565b34156104b557600080fd5b610470600435610ec9565b34156104cb57600080fd5b6104076004803560248101910135610eed565b34156104e957600080fd5b61025b600160a060020a0360043516610f6a565b341561050857600080fd5b610296600435610f85565b341561051e57600080fd5b61025b600435610fb0565b341561053457600080fd5b610407600160a060020a0360043516610fc2565b341561055357600080fd5b6101f76110a4565b341561056657600080fd5b6104706110fa565b341561057957600080fd5b6101f7600160a060020a0360043516611109565b341561059857600080fd5b6105a3600435611145565b604051600160a060020a039094168452602084019290925260408084019190915260608301919091526080909101905180910390f35b34156105e457600080fd5b61029661119f565b34156105f757600080fd5b6106026004356111d6565b604051600160a060020a0385168152602081018490526040810183905260806060820181815290820183818151815260200191508051906020019080838360005b8381101561065b578082015183820152602001610643565b50505050905090810190601f1680156106885780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34156106a457600080fd5b610470600435611235565b34156106ba57600080fd5b6101f7600160a060020a0360043516602435611250565b34156106dc57600080fd5b6101f76004356112aa565b34156106f257600080fd5b610231600160a060020a03600435166112f7565b341561071157600080fd5b61040763ffffffff6004358116906024351661130c565b341561073357600080fd5b61025b6113bb565b6101f76004356113c1565b341561075157600080fd5b61025b600435611589565b341561076757600080fd5b61025b60043561164e565b341561077d57600080fd5b6101f7600160a060020a036004351661166d565b341561079c57600080fd5b6101f76004356116c9565b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610a2657506040517f746f6b656e734f664f776e657228616464726573732900000000000000000000815260160160405180910390206040517f74616b654f776e6572736869702875696e743235362900000000000000000000815260160160405180910390206040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d652829000000000000000000000000000000000000000000000000000081526006016040518091039020181818181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b60009081526007602052604090205490565b60005433600160a060020a03908116911614610a5b57600080fd5b600054600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610a8e57600080fd5b50565b60408051908101604052600f81527f43727970746f4368656d69737472790000000000000000000000000000000000602082015281565b610ad233826116e9565b1515610add57600080fd5b610ae78183611709565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050565b600160a060020a03331660009081526006602052604081205481908190819060ff161515610b6857600080fd5b50506002546001805491810193508492500160005b82811015610c015760008481526007602052604090205415610b9e57600080fd5b600084815260036020526040902054600160a060020a031615610bc057600080fd5b81841115610bcd57600080fd5b610bf4868683818110610bdc57fe5b905060200201356000191666038d7ea4c68000611744565b5060019384019301610b7d565b505050505050565b6002545b90565b600160a060020a0382161515610c2557600080fd5b30600160a060020a031682600160a060020a031614151515610c4657600080fd5b610c50338261180a565b1515610c5b57600080fd5b610c6583826116e9565b1515610c7057600080fd5b610c7b83838361182a565b505050565b600081815260076020526040812054610a2690611589565b600160a060020a03331660009081526006602052604081205460ff161515610cbf57600080fd5b5060025460010160008181526007602052604090205415610cdf57600080fd5b600081815260036020526040902054600160a060020a031615610d0157600080fd5b6001805401811115610d1257600080fd5b610c7b8266038d7ea4c68000611744565b60005433600160a060020a03908116911614610d3e57600080fd5b600160a060020a03166000908152600660205260409020805460ff19166001179055565b6000600282815481101515610d7357fe5b60009182526020909120015492915050565b610d8d611c3c565b81600081604051805910610d9e5750595b90808252806020026020018201604052509250600090505b81811015610e1c5760036000868684818110610dce57fe5b6020908102929092013583525081019190915260400160002054600160a060020a0316838281518110610dfd57fe5b600160a060020a03909216602092830290910190910152600101610db6565b505092915050565b600360205260009081526040902054600160a060020a031681565b610e47611c3c565b600082604051805910610e575750595b90808252806020026020018201604052509150600090505b82811015610ec2576002848483818110610e8557fe5b90506020020135815481101515610e9857fe5b600091825260209091200154828281518110610eb057fe5b60209081029091010152600101610e6f565b5092915050565b600081815260036020526040902054600160a060020a0316801515610a2957600080fd5b610ef5611c3c565b81600081604051805910610f065750595b90808252806020026020018201604052509250600090505b81811015610e1c5760076000868684818110610f3657fe5b90506020020135815260200190815260200160002054838281518110610f5857fe5b60209081029091010152600101610f1e565b600160a060020a031660009081526004602052604090205490565b610f8d611c3c565b610a26600283815481101515610f9f57fe5b60009182526020909120015461191a565b60076020526000908152604090205481565b610fca611c3c565b6000610fd4611c3c565b6000806000610fe287610f6a565b9450841515611012576000604051805910610ffa5750595b9080825280602002602001820160405250955061109a565b846040518059106110205750595b9080825280602002602001820160405250935061103b610c09565b925060009150600090505b8281101561109657600081815260036020526040902054600160a060020a038881169116141561108e578084838151811061107d57fe5b602090810290910101526001909101905b600101611046565b8395505b5050505050919050565b60005433600160a060020a039081169116146110bf57600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156110f857600080fd5b565b600054600160a060020a031681565b60005433600160a060020a0390811691161461112457600080fd5b600160a060020a03166000908152600660205260409020805460ff19169055565b600081815260076020908152604080832054600390925282205482908190600160a060020a03168361117681611589565b600280548990811061118457fe5b60009182526020909120015492989197509550909350915050565b60408051908101604052600281527f4343000000000000000000000000000000000000000000000000000000000000602082015281565b60008060006111e3611c3c565b600085815260076020908152604080832054600390925290912054909350600160a060020a03168361121481611589565b611226600289815481101515610f9f57fe5b93509350935093509193509193565b600560205260009081526040902054600160a060020a031681565b600160a060020a038216151561126557600080fd5b30600160a060020a031682600160a060020a03161415151561128657600080fd5b61129033826116e9565b151561129b57600080fd5b6112a633838361182a565b5050565b600081815260036020526040902054600160a060020a03166112cc338361180a565b15156112d757600080fd5b600160a060020a03811615156112ec57600080fd5b6112a681338461182a565b60066020526000908152604090205460ff1681565b611314611c3c565b6000808363ffffffff168563ffffffff166002805490500310156113435760025463ffffffff8616900361134b565b8363ffffffff165b91508160405180591061135b5750595b90808252806020026020018201604052509250600090505b81811015610e1c576002805463ffffffff8716830190811061139157fe5b6000918252602090912001548382815181106113a957fe5b60209081029091010152600101611373565b60015481565b600081815260076020526040812054908080808085116113e057600080fd5b600086815260036020526040902054600160a060020a0316151561140357600080fd5b348590101561141157600080fd5b60008681526003602052604090205433600160a060020a039081169116141561143957600080fd5b33600160a060020a0316151561144e57600080fd5b600086815260036020526040902054600160a060020a0316935033925061147b348663ffffffff611aca16565b915061148884848861182a565b61149185611589565b60076000888152602001908152602001600020819055507f23f50d55776d8003622a982ade45a6c7f083116c8dbbcd980f59942f440badb186858588604051938452600160a060020a039283166020850152911660408084019190915260608301919091526080909101905180910390a161150b85611adc565b9050600160a060020a0384166108fc61152a878463ffffffff611aca16565b9081150290604051600060405180830381858888f19350505050151561154f57600080fd5b6000821115610c0157600160a060020a03831682156108fc0283604051600060405180830381858888f193505050501515610c0157600080fd5b600066470de4df8200008210156115b2576115ab82600263ffffffff611b9416565b9050610a29565b6706f05b59d3b200008210156115e6576115ab6127106115da846134bc63ffffffff611b9416565b9063ffffffff611bc616565b671bc16d674ec8000082101561160e576115ab6127106115da846130d463ffffffff611b9416565b674563918244f40000821015611636576115ab6127106115da84612db463ffffffff611b9416565b6115ab6127106115da84612cec63ffffffff611b9416565b600280548290811061165c57fe5b600091825260209091200154905081565b60005433600160a060020a0390811691161461168857600080fd5b60008054600160a060020a03908116825260066020526040808320805460ff19908116909155918416835290912080549091166001179055610a8e81611bdd565b60005433600160a060020a039081169116146116e457600080fd5b600155565b600090815260036020526040902054600160a060020a0391821691161490565b600091825260056020526040909120805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b60008061174f611c3c565b60003092506020604051908101604052868152600280549193506001918083016117798382611c4e565b60009283526020909220859101815190555003600081815260076020526040908190208790559091507f2d49e37741dfbdb18a354011122af0d6b3bc41a42d6b1efa3919635173c02fc09084908390899051600160a060020a03909316835260208301919091526040808301919091526060909101905180910390a16118016000848361182a565b95945050505050565b600090815260056020526040902054600160a060020a0391821691161490565b600160a060020a0380831660008181526004602090815260408083208054600101905585835260039091529020805473ffffffffffffffffffffffffffffffffffffffff191690911790558316156118c557600160a060020a0383166000908152600460209081526040808320805460001901905583835260059091529020805473ffffffffffffffffffffffffffffffffffffffff191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b611922611c3c565b61192a611c3c565b6000806000611937611c3c565b60206040518059106119465750595b818152601f19601f83011681016020016040529050945060009350600092505b60208310156119f1576008830260020a870291507fff000000000000000000000000000000000000000000000000000000000000008216156119e657818585815181106119af57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001909301925b600190920191611966565b836040518059106119ff5750595b818152601f19601f830116810160200160405290509050600092505b83831015611ac057848381518110611a2f57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002818481518110611a8557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600190920191611a1b565b9695505050505050565b600082821115611ad657fe5b50900390565b600066470de4df820000821015611b05576115ab6127106115da846105dc63ffffffff611b9416565b6706f05b59d3b20000821015611b2d576115ab6127106115da846101f463ffffffff611b9416565b671bc16d674ec80000821015611b55576115ab6127106115da8461019063ffffffff611b9416565b674563918244f40000821015611b7d576115ab6127106115da8461012c63ffffffff611b9416565b6115ab6127106115da8460c863ffffffff611b9416565b600080831515611ba75760009150610ec2565b50828202828482811515611bb757fe5b0414611bbf57fe5b9392505050565b6000808284811515611bd457fe5b04949350505050565b60005433600160a060020a03908116911614611bf857600080fd5b600160a060020a0381161515611c0d57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60206040519081016040526000815290565b815481835581811511610c7b57600083815260209020610c7b918101908301610c0d91905b80821115611c875760008155600101611c73565b50905600a165627a7a723058200be9c02cb501ccfd354664c3a4ccc82dff25dd614b3f299e49bc73aefac9e7300029

Deployed Bytecode

0x6060604052600436106101d75763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146101f957806303c49580146102455780630562b9f71461026d57806306fdde0314610283578063095ea7b31461030d578063128952e41461032f57806318160ddd1461034d57806323b872dd146103605780632864ddde146103885780633440465e1461039e57806335b28153146103b45780633a7d22bc146103d35780633a98c533146103e9578063438a13491461045a578063630c010e1461048c5780636352211e146104aa5780636b8fd600146104c057806370a08231146104de57806370d0cc86146104fd5780637a3c4c17146105135780638462151c14610529578063853828b6146105485780638da5cb5b1461055b57806394f3f81d1461056e5780639584894c1461058d57806395d89b41146105d95780639738b602146105ec578063a3ce534914610699578063a9059cbb146106af578063b2e6ceeb146106d1578063b9181611146106e7578063c037d9ce14610706578063d403011414610728578063d96a094a1461073b578063e08503ec14610746578063e0d64b371461075c578063f2fde38b14610772578063fa88532914610791575b30600160a060020a031633600160a060020a03161415156101f757600080fd5b005b341561020457600080fd5b6102317fffffffff00000000000000000000000000000000000000000000000000000000600435166107a7565b604051901515815260200160405180910390f35b341561025057600080fd5b61025b600435610a2e565b60405190815260200160405180910390f35b341561027857600080fd5b6101f7600435610a40565b341561028e57600080fd5b610296610a91565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d25780820151838201526020016102ba565b50505050905090810190601f1680156102ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031857600080fd5b6101f7600160a060020a0360043516602435610ac8565b341561033a57600080fd5b6101f76004803560248101910135610b3b565b341561035857600080fd5b61025b610c09565b341561036b57600080fd5b6101f7600160a060020a0360043581169060243516604435610c10565b341561039357600080fd5b61025b600435610c80565b34156103a957600080fd5b6101f7600435610c98565b34156103bf57600080fd5b6101f7600160a060020a0360043516610d23565b34156103de57600080fd5b61025b600435610d62565b34156103f457600080fd5b6104076004803560248101910135610d85565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561044657808201518382015260200161042e565b505050509050019250505060405180910390f35b341561046557600080fd5b610470600435610e24565b604051600160a060020a03909116815260200160405180910390f35b341561049757600080fd5b6104076004803560248101910135610e3f565b34156104b557600080fd5b610470600435610ec9565b34156104cb57600080fd5b6104076004803560248101910135610eed565b34156104e957600080fd5b61025b600160a060020a0360043516610f6a565b341561050857600080fd5b610296600435610f85565b341561051e57600080fd5b61025b600435610fb0565b341561053457600080fd5b610407600160a060020a0360043516610fc2565b341561055357600080fd5b6101f76110a4565b341561056657600080fd5b6104706110fa565b341561057957600080fd5b6101f7600160a060020a0360043516611109565b341561059857600080fd5b6105a3600435611145565b604051600160a060020a039094168452602084019290925260408084019190915260608301919091526080909101905180910390f35b34156105e457600080fd5b61029661119f565b34156105f757600080fd5b6106026004356111d6565b604051600160a060020a0385168152602081018490526040810183905260806060820181815290820183818151815260200191508051906020019080838360005b8381101561065b578082015183820152602001610643565b50505050905090810190601f1680156106885780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34156106a457600080fd5b610470600435611235565b34156106ba57600080fd5b6101f7600160a060020a0360043516602435611250565b34156106dc57600080fd5b6101f76004356112aa565b34156106f257600080fd5b610231600160a060020a03600435166112f7565b341561071157600080fd5b61040763ffffffff6004358116906024351661130c565b341561073357600080fd5b61025b6113bb565b6101f76004356113c1565b341561075157600080fd5b61025b600435611589565b341561076757600080fd5b61025b60043561164e565b341561077d57600080fd5b6101f7600160a060020a036004351661166d565b341561079c57600080fd5b6101f76004356116c9565b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610a2657506040517f746f6b656e734f664f776e657228616464726573732900000000000000000000815260160160405180910390206040517f74616b654f776e6572736869702875696e743235362900000000000000000000815260160160405180910390206040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d652829000000000000000000000000000000000000000000000000000081526006016040518091039020181818181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b60009081526007602052604090205490565b60005433600160a060020a03908116911614610a5b57600080fd5b600054600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610a8e57600080fd5b50565b60408051908101604052600f81527f43727970746f4368656d69737472790000000000000000000000000000000000602082015281565b610ad233826116e9565b1515610add57600080fd5b610ae78183611709565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050565b600160a060020a03331660009081526006602052604081205481908190819060ff161515610b6857600080fd5b50506002546001805491810193508492500160005b82811015610c015760008481526007602052604090205415610b9e57600080fd5b600084815260036020526040902054600160a060020a031615610bc057600080fd5b81841115610bcd57600080fd5b610bf4868683818110610bdc57fe5b905060200201356000191666038d7ea4c68000611744565b5060019384019301610b7d565b505050505050565b6002545b90565b600160a060020a0382161515610c2557600080fd5b30600160a060020a031682600160a060020a031614151515610c4657600080fd5b610c50338261180a565b1515610c5b57600080fd5b610c6583826116e9565b1515610c7057600080fd5b610c7b83838361182a565b505050565b600081815260076020526040812054610a2690611589565b600160a060020a03331660009081526006602052604081205460ff161515610cbf57600080fd5b5060025460010160008181526007602052604090205415610cdf57600080fd5b600081815260036020526040902054600160a060020a031615610d0157600080fd5b6001805401811115610d1257600080fd5b610c7b8266038d7ea4c68000611744565b60005433600160a060020a03908116911614610d3e57600080fd5b600160a060020a03166000908152600660205260409020805460ff19166001179055565b6000600282815481101515610d7357fe5b60009182526020909120015492915050565b610d8d611c3c565b81600081604051805910610d9e5750595b90808252806020026020018201604052509250600090505b81811015610e1c5760036000868684818110610dce57fe5b6020908102929092013583525081019190915260400160002054600160a060020a0316838281518110610dfd57fe5b600160a060020a03909216602092830290910190910152600101610db6565b505092915050565b600360205260009081526040902054600160a060020a031681565b610e47611c3c565b600082604051805910610e575750595b90808252806020026020018201604052509150600090505b82811015610ec2576002848483818110610e8557fe5b90506020020135815481101515610e9857fe5b600091825260209091200154828281518110610eb057fe5b60209081029091010152600101610e6f565b5092915050565b600081815260036020526040902054600160a060020a0316801515610a2957600080fd5b610ef5611c3c565b81600081604051805910610f065750595b90808252806020026020018201604052509250600090505b81811015610e1c5760076000868684818110610f3657fe5b90506020020135815260200190815260200160002054838281518110610f5857fe5b60209081029091010152600101610f1e565b600160a060020a031660009081526004602052604090205490565b610f8d611c3c565b610a26600283815481101515610f9f57fe5b60009182526020909120015461191a565b60076020526000908152604090205481565b610fca611c3c565b6000610fd4611c3c565b6000806000610fe287610f6a565b9450841515611012576000604051805910610ffa5750595b9080825280602002602001820160405250955061109a565b846040518059106110205750595b9080825280602002602001820160405250935061103b610c09565b925060009150600090505b8281101561109657600081815260036020526040902054600160a060020a038881169116141561108e578084838151811061107d57fe5b602090810290910101526001909101905b600101611046565b8395505b5050505050919050565b60005433600160a060020a039081169116146110bf57600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156110f857600080fd5b565b600054600160a060020a031681565b60005433600160a060020a0390811691161461112457600080fd5b600160a060020a03166000908152600660205260409020805460ff19169055565b600081815260076020908152604080832054600390925282205482908190600160a060020a03168361117681611589565b600280548990811061118457fe5b60009182526020909120015492989197509550909350915050565b60408051908101604052600281527f4343000000000000000000000000000000000000000000000000000000000000602082015281565b60008060006111e3611c3c565b600085815260076020908152604080832054600390925290912054909350600160a060020a03168361121481611589565b611226600289815481101515610f9f57fe5b93509350935093509193509193565b600560205260009081526040902054600160a060020a031681565b600160a060020a038216151561126557600080fd5b30600160a060020a031682600160a060020a03161415151561128657600080fd5b61129033826116e9565b151561129b57600080fd5b6112a633838361182a565b5050565b600081815260036020526040902054600160a060020a03166112cc338361180a565b15156112d757600080fd5b600160a060020a03811615156112ec57600080fd5b6112a681338461182a565b60066020526000908152604090205460ff1681565b611314611c3c565b6000808363ffffffff168563ffffffff166002805490500310156113435760025463ffffffff8616900361134b565b8363ffffffff165b91508160405180591061135b5750595b90808252806020026020018201604052509250600090505b81811015610e1c576002805463ffffffff8716830190811061139157fe5b6000918252602090912001548382815181106113a957fe5b60209081029091010152600101611373565b60015481565b600081815260076020526040812054908080808085116113e057600080fd5b600086815260036020526040902054600160a060020a0316151561140357600080fd5b348590101561141157600080fd5b60008681526003602052604090205433600160a060020a039081169116141561143957600080fd5b33600160a060020a0316151561144e57600080fd5b600086815260036020526040902054600160a060020a0316935033925061147b348663ffffffff611aca16565b915061148884848861182a565b61149185611589565b60076000888152602001908152602001600020819055507f23f50d55776d8003622a982ade45a6c7f083116c8dbbcd980f59942f440badb186858588604051938452600160a060020a039283166020850152911660408084019190915260608301919091526080909101905180910390a161150b85611adc565b9050600160a060020a0384166108fc61152a878463ffffffff611aca16565b9081150290604051600060405180830381858888f19350505050151561154f57600080fd5b6000821115610c0157600160a060020a03831682156108fc0283604051600060405180830381858888f193505050501515610c0157600080fd5b600066470de4df8200008210156115b2576115ab82600263ffffffff611b9416565b9050610a29565b6706f05b59d3b200008210156115e6576115ab6127106115da846134bc63ffffffff611b9416565b9063ffffffff611bc616565b671bc16d674ec8000082101561160e576115ab6127106115da846130d463ffffffff611b9416565b674563918244f40000821015611636576115ab6127106115da84612db463ffffffff611b9416565b6115ab6127106115da84612cec63ffffffff611b9416565b600280548290811061165c57fe5b600091825260209091200154905081565b60005433600160a060020a0390811691161461168857600080fd5b60008054600160a060020a03908116825260066020526040808320805460ff19908116909155918416835290912080549091166001179055610a8e81611bdd565b60005433600160a060020a039081169116146116e457600080fd5b600155565b600090815260036020526040902054600160a060020a0391821691161490565b600091825260056020526040909120805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b60008061174f611c3c565b60003092506020604051908101604052868152600280549193506001918083016117798382611c4e565b60009283526020909220859101815190555003600081815260076020526040908190208790559091507f2d49e37741dfbdb18a354011122af0d6b3bc41a42d6b1efa3919635173c02fc09084908390899051600160a060020a03909316835260208301919091526040808301919091526060909101905180910390a16118016000848361182a565b95945050505050565b600090815260056020526040902054600160a060020a0391821691161490565b600160a060020a0380831660008181526004602090815260408083208054600101905585835260039091529020805473ffffffffffffffffffffffffffffffffffffffff191690911790558316156118c557600160a060020a0383166000908152600460209081526040808320805460001901905583835260059091529020805473ffffffffffffffffffffffffffffffffffffffff191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b611922611c3c565b61192a611c3c565b6000806000611937611c3c565b60206040518059106119465750595b818152601f19601f83011681016020016040529050945060009350600092505b60208310156119f1576008830260020a870291507fff000000000000000000000000000000000000000000000000000000000000008216156119e657818585815181106119af57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001909301925b600190920191611966565b836040518059106119ff5750595b818152601f19601f830116810160200160405290509050600092505b83831015611ac057848381518110611a2f57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002818481518110611a8557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600190920191611a1b565b9695505050505050565b600082821115611ad657fe5b50900390565b600066470de4df820000821015611b05576115ab6127106115da846105dc63ffffffff611b9416565b6706f05b59d3b20000821015611b2d576115ab6127106115da846101f463ffffffff611b9416565b671bc16d674ec80000821015611b55576115ab6127106115da8461019063ffffffff611b9416565b674563918244f40000821015611b7d576115ab6127106115da8461012c63ffffffff611b9416565b6115ab6127106115da8460c863ffffffff611b9416565b600080831515611ba75760009150610ec2565b50828202828482811515611bb757fe5b0414611bbf57fe5b9392505050565b6000808284811515611bd457fe5b04949350505050565b60005433600160a060020a03908116911614611bf857600080fd5b600160a060020a0381161515611c0d57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60206040519081016040526000815290565b815481835581811511610c7b57600083815260209020610c7b918101908301610c0d91905b80821115611c875760008155600101611c73565b50905600a165627a7a723058200be9c02cb501ccfd354664c3a4ccc82dff25dd614b3f299e49bc73aefac9e7300029

Swarm Source

bzzr://0be9c02cb501ccfd354664c3a4ccc82dff25dd614b3f299e49bc73aefac9e730

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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