ETH Price: $1,851.44 (-8.91%)
 

Overview

ETH Balance

0.0046 ETH

Eth Value

$8.52 (@ $1,851.44/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Purchase Genes58017232018-06-16 23:29:092813 days ago1529191749IN
0x5d7517C2...A866eC9A2
0.002 ETH0.000161542
Purchase Genes57959122018-06-15 23:44:532814 days ago1529106293IN
0x5d7517C2...A866eC9A2
0.005 ETH0.000161542
Purchase Genes57958302018-06-15 23:24:062814 days ago1529105046IN
0x5d7517C2...A866eC9A2
0.01 ETH0.000258473.2
Purchase Genes57932252018-06-15 12:36:212814 days ago1529066181IN
0x5d7517C2...A866eC9A2
0.005 ETH0.00067047
Purchase Genes57729482018-06-11 23:57:172818 days ago1528761437IN
0x5d7517C2...A866eC9A2
0.01 ETH0.000080692
Purchase Genes57700652018-06-11 11:56:032818 days ago1528718163IN
0x5d7517C2...A866eC9A2
0.01 ETH0.000383084
Purchase Genes57617992018-06-10 0:37:552820 days ago1528591075IN
0x5d7517C2...A866eC9A2
0.01 ETH0.000242313
Purchase Genes57617962018-06-10 0:36:392820 days ago1528590999IN
0x5d7517C2...A866eC9A2
0.01 ETH0.000323084
Purchase Genes57617952018-06-10 0:36:142820 days ago1528590974IN
0x5d7517C2...A866eC9A2
0.01 ETH0.000242313
Purchase Genes57327052018-06-04 20:30:432825 days ago1528144243IN
0x5d7517C2...A866eC9A2
0.01 ETH0.00067047
Purchase Genes57249542018-06-03 11:39:592826 days ago1528025999IN
0x5d7517C2...A866eC9A2
0.01 ETH0.000574636
Stop Selling Gen...56756132018-05-25 18:05:452835 days ago1527271545IN
0x5d7517C2...A866eC9A2
0 ETH0.00019847
Stop Selling Gen...56756042018-05-25 18:03:322835 days ago1527271412IN
0x5d7517C2...A866eC9A2
0 ETH0.00029187
Stop Selling Gen...56755912018-05-25 17:58:442835 days ago1527271124IN
0x5d7517C2...A866eC9A2
0 ETH0.00029187
Set ERC Contract55458792018-05-02 22:38:432858 days ago1525300723IN
0x5d7517C2...A866eC9A2
0 ETH0.000057152

Latest 11 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer58017232018-06-16 23:29:092813 days ago1529191749
0x5d7517C2...A866eC9A2
0.0019 ETH
Transfer57959122018-06-15 23:44:532814 days ago1529106293
0x5d7517C2...A866eC9A2
0.00475 ETH
Transfer57958302018-06-15 23:24:062814 days ago1529105046
0x5d7517C2...A866eC9A2
0.0095 ETH
Transfer57932252018-06-15 12:36:212814 days ago1529066181
0x5d7517C2...A866eC9A2
0.00475 ETH
Transfer57729482018-06-11 23:57:172818 days ago1528761437
0x5d7517C2...A866eC9A2
0.0095 ETH
Transfer57700652018-06-11 11:56:032818 days ago1528718163
0x5d7517C2...A866eC9A2
0.0095 ETH
Transfer57617992018-06-10 0:37:552820 days ago1528591075
0x5d7517C2...A866eC9A2
0.0095 ETH
Transfer57617962018-06-10 0:36:392820 days ago1528590999
0x5d7517C2...A866eC9A2
0.0095 ETH
Transfer57617952018-06-10 0:36:142820 days ago1528590974
0x5d7517C2...A866eC9A2
0.0095 ETH
Transfer57327052018-06-04 20:30:432825 days ago1528144243
0x5d7517C2...A866eC9A2
0.0095 ETH
Transfer57249542018-06-03 11:39:592826 days ago1528025999
0x5d7517C2...A866eC9A2
0.0095 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

Contract Source Code Verified (Exact Match)

Contract Name:
GenesMarket

Compiler Version
v0.4.23+commit.124ca40d

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-05-04
*/

pragma solidity ^0.4.21;

/// @author Luis Freitas, Miguel Amaral (https://repop.world)
contract REPOPAccessControl {
    address public ceoAddress;
    address public cfoAddress;
    address public cooAddress;

    bool public paused = false;

    modifier onlyCEO() {
        require(msg.sender == ceoAddress);
        _;
    }

    modifier onlyCFO() {
        require(msg.sender == cfoAddress);
        _;
    }

    modifier onlyCOO() {
        require(msg.sender == cooAddress);
        _;
    }

    modifier onlyCLevel() {
        require(
            msg.sender == cooAddress ||
            msg.sender == ceoAddress ||
            msg.sender == cfoAddress
        );
        _;
    }

    function setCEO(address _newCEO) external onlyCEO {
        require(_newCEO != address(0));

        ceoAddress = _newCEO;
    }

    function setCFO(address _newCFO) external onlyCEO {
        require(_newCFO != address(0));

        cfoAddress = _newCFO;
    }

    function setCOO(address _newCOO) external onlyCEO {
        require(_newCOO != address(0));

        cooAddress = _newCOO;
    }

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused {
        require(paused);
        _;
    }

    function pause() external onlyCLevel whenNotPaused {
        paused = true;
    }

    function unpause() public onlyCEO whenPaused {

        paused = false;
    }
}

contract PullPayment {
  mapping(address => uint) public payments;

  function asyncSend(address dest, uint amount) internal {
    payments[dest] += amount;
  }

  function withdrawPayments() external {
    uint payment = payments[msg.sender];
    payments[msg.sender] = 0;
    if (!msg.sender.send(payment)) {
      payments[msg.sender] = payment;
    }
  }
}


/// @author Dieter Shirley <dete@axiomzen.co> (https://github.com/dete)
contract ERC721 {

  function approve(address _to, uint256 _tokenId) public;
  function balanceOf(address _owner) public view returns (uint256 balance);
  function implementsERC721() public pure returns (bool);
  function ownerOf(uint256 _tokenId) public view returns (address addr);
  function takeOwnership(uint256 _tokenId) public;
  function totalSupply() public view returns (uint256 total);
  function transferFrom(address _from, address _to, uint256 _tokenId) public;
  function transfer(address _to, uint256 _tokenId) public;
  function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl);

  event Transfer(address indexed from, address indexed to, uint256 tokenId);
  event Approval(address indexed owner, address indexed approved, uint256 tokenId);
  function supportsInterface(bytes4 _interfaceID) external view returns (bool);
}

library SafeMath {

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

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

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

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

contract MetadataContract{

    function getMetadata(uint256 _tokenId) public view returns (bytes32[4] buffer, uint256 count) {
        buffer[0] = "https://meta.repop.world/";
        buffer[1] = uintToBytes(_tokenId);
        count = 64;
    }

      function _memcpy(uint _dest, uint _src, uint _len) private view {

        for(; _len >= 32; _len -= 32) {
            assembly {
                mstore(_dest, mload(_src))
            }
            _dest += 32;
            _src += 32;
        }

        uint256 mask = 256 ** (32 - _len) - 1;
        assembly {
            let srcpart := and(mload(_src), not(mask))
            let destpart := and(mload(_dest), mask)
            mstore(_dest, or(destpart, srcpart))
        }
    }

    function _toString(bytes32[4] _rawBytes, uint256 _stringLength) private view returns (string) {
        var outputString = new string(_stringLength);
        uint256 outputPtr;
        uint256 bytesPtr;

        assembly {
            outputPtr := add(outputString, 32)
            bytesPtr := _rawBytes
        }

        _memcpy(outputPtr, bytesPtr, _stringLength);

        return outputString;
    }

    function getMetadataUrl(uint256 _tokenId) external view returns (string infoUrl) {
        bytes32[4] memory buffer;
        uint256 count;
        (buffer, count) = getMetadata(_tokenId);

        return _toString(buffer, count);
    }

    function uintToBytes(uint v) public view returns (bytes32 ret) {
        if (v == 0) {
            ret = '0';
        }
        else {
            while (v > 0) {
                ret = bytes32(uint(ret) / (2 ** 8));
                ret |= bytes32(((v % 10) + 48) * 2 ** (8 * 31));
                v /= 10;
            }
        }
        return ret;
    }
}


/// @author Luis Freitas, Miguel Amaral (https://repop.world)
contract REPOPERC721 is ERC721, REPOPAccessControl{

  MetadataContract public metadataContract;

  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('tokensOfOwner(address)')) ^
      bytes4(keccak256('tokenMetadata(uint256)'));

    function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl) {
      require(metadataContract != address(0));
      require(_tokenId >= 0 && _tokenId <= pops.length);

      return metadataContract.getMetadataUrl(_tokenId);
    }

    function setMetadataContractAddress(address contractAddress) public onlyCEO{
      require(contractAddress != address(0));
      metadataContract = MetadataContract(contractAddress);
    }

    string public constant name = "REPOP WORLD";
    string public constant symbol = "POP";

    function supportsInterface(bytes4 _interfaceID) external view returns (bool)
    {
        return ((_interfaceID == InterfaceSignature_ERC165) || (_interfaceID == InterfaceSignature_ERC721));
    }

    function approve(address _to, uint256 _tokenId) public whenNotPaused{

        require(_owns(msg.sender, _tokenId));

        popIndexToApproved[_tokenId] = _to;

        emit Approval(msg.sender, _to, _tokenId);
    }

    function balanceOf(address _owner) public view returns (uint256 balance){
        return ownershipTokenCount[_owner];
    }

    function implementsERC721() public pure returns (bool){
        return true;
    }

    function ownerOf(uint256 _tokenId) public view returns (address owner) {
        owner = popIndexToOwner[_tokenId];
        require(owner != address(0));
    }

    function takeOwnership(uint256 _tokenId) public {
        address currentOwner = ownerOf(_tokenId);
        address newOwner = msg.sender;

        require(_addressNotNull(newOwner));
        require(_approved(newOwner, _tokenId));

        _transfer(newOwner, _tokenId);
        emit Transfer(currentOwner, newOwner, _tokenId);
    }

    function tokensOfOwner(address _owner) external view returns(uint256[] ownerTokens) {
        uint256 tokenCount = balanceOf(_owner);
        if (tokenCount == 0) {

            return new uint256[](0);
        } else {
            uint256[] memory result = new uint256[](tokenCount);
            uint256 totalPops = totalSupply();
            uint256 resultIndex = 0;
            uint256 popId;

            for (popId = 1; popId <= totalPops; popId++) {
                if (popIndexToOwner[popId] == _owner) {
                    result[resultIndex] = popId;
                    resultIndex++;
                }
            }
            return result;
        }
    }

    function totalSupply() public view returns (uint256 total) {
        return pops.length;
    }

    function transfer(address _to, uint256 _tokenId ) public whenNotPaused{
      require(_owns(msg.sender, _tokenId));
      require(_addressNotNull(_to));

      _transfer(_to, _tokenId);

      emit Transfer(msg.sender, _to, _tokenId);
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) public whenNotPaused{
        require(_owns(_from, _tokenId));
        require(_approved(msg.sender, _tokenId));
        require(_addressNotNull(_to));

        _transfer(_to, _tokenId);

        emit Transfer(_from, _to, _tokenId);
    }


    function _addressNotNull(address _to) private pure returns (bool){
        return _to != address(0);
    }

    function _approved(address _to, uint256 _tokenId) private view returns (bool) {
        return popIndexToApproved[_tokenId] == _to;
    }

    function _owns(address claimant, uint256 _tokenId) private view returns (bool) {
        return claimant == popIndexToOwner[_tokenId];
    }

    function _transfer(address _to, uint256 _tokenID) internal {
        address owner = popIndexToOwner[_tokenID];
        ownershipTokenCount[owner] = ownershipTokenCount[owner] - 1 ;
        popIndexToApproved[_tokenID] = 0;
        popIndexToOwner[_tokenID] = _to;
        ownershipTokenCount[_to] = ownershipTokenCount[_to] + 1;
    }

    event Birth(address owner, uint256 popId, uint256 aParentId, uint256 bParentId, uint256 genes);
    event Transfer(address from, address to, uint256 tokenId);

    struct Pop {
      uint256 genes;
      uint64 birthTime;
      uint64 cooldownEndTimestamp;
      uint32 aParentId;
      uint32 bParentId;
      bytes32 popName;
      uint16 cooldownIndex;
      uint16 generation;
    }

    uint32[14] public cooldowns = [
        uint32(10 minutes),
        uint32(20 minutes),
        uint32(40 minutes),
        uint32(1 hours),
        uint32(2 hours),
        uint32(3 hours),
        uint32(4 hours),
        uint32(5 hours),
        uint32(6 hours),
        uint32(12 hours),
        uint32(1 days),
        uint32(3 days),
        uint32(5 days),
        uint32(7 days)
    ];

    Pop[] public pops;

    mapping (uint256 => address) public popIndexToOwner;
    mapping (address => uint256) public ownershipTokenCount;
    mapping (uint256 => address) public popIndexToApproved;
    mapping (uint256 => uint256) public genesToTokenId;

    function getPop(uint256 _popId) public view
                    returns (
                                bool isReady,
                                uint256 genes,
                                uint64 birthTime,
                                uint64 cooldownEndTimestamp,
                                uint32 aParentId,
                                uint32 bParentId,
                                bytes32 popName,
                                uint16 cooldownIndex,
                                uint16 generation){
        Pop memory pop = pops[_popId];
        return(
                isReady = (pop.cooldownEndTimestamp <= now),
                pop.genes,
                pop.birthTime,
                pop.cooldownEndTimestamp,
                pop.aParentId,
                pop.bParentId,
                pop.popName,
                pop.cooldownIndex,
                pop.generation);
    }


    function createNewPop(uint256 genes, string popName) public onlyCLevel whenNotPaused{
        bytes32 name32 = stringToBytes32(popName);
        uint256 index = pops.push(Pop(genes,uint64(now),1,0,0,name32,0,0)) -1;

        emit Birth(msg.sender,index,0,0,genes);

        genesToTokenId[genes] = index;

        popIndexToOwner[index] = msg.sender;
        ownershipTokenCount[msg.sender] = ownershipTokenCount[msg.sender]+1;
    }

    function _triggerCooldown(Pop storage _pop) internal {
        _pop.cooldownEndTimestamp = uint64(now + cooldowns[_pop.cooldownIndex]);
    }

    function stringToBytes32(string memory source) internal pure returns (bytes32 result) {
        bytes memory tempEmptyStringTest = bytes(source);
        if (tempEmptyStringTest.length == 0) {
            return 0x0;
        }
        assembly {
            result := mload(add(source, 32))
        }
    }

    function setPopNameOriginal(uint256 popId, string newName) external onlyCLevel{
      Pop storage pop = pops[popId];
      require(pop.generation == 0);
      bytes32 name32 = stringToBytes32(newName);
      pop.popName = name32;
    }

    function setDNA(uint256 popId, uint256 newDna) external onlyCLevel{
      require(_owns(msg.sender, popId));
      Pop storage pop = pops[popId];
      pop.genes = newDna;
    }

}

contract CarefulTransfer {
    uint constant suggestedExtraGasToIncludeWithSends = 23000;

    function carefulSendWithFixedGas(
        address _toAddress,
        uint _valueWei,
        uint _extraGasIncluded
    ) internal returns (bool success) {
        return _toAddress.call.value(_valueWei).gas(_extraGasIncluded)();
    }
}

contract MoneyManager is PullPayment, CarefulTransfer, REPOPAccessControl {

    function _repopTransaction(address _receiver, uint256 _amountWei, uint256 _marginPerThousandForDevelopers) internal {
        uint256 commissionWei = (_amountWei * _marginPerThousandForDevelopers) / 1000;
        uint256 compensationWei = _amountWei - commissionWei;

        if( ! carefulSendWithFixedGas(_receiver,compensationWei,23000)) {
            asyncSend(_receiver, compensationWei);
        }
    }

    function withdraw(uint amount) external onlyCFO {
        require(amount < address(this).balance);
        cfoAddress.transfer(amount);
    }

    function getBalance() public view returns (uint256 balance) {
        return address(this).balance;
    }
}

library RoundMoneyNicely {
    function roundMoneyDownNicely(uint _rawValueWei) internal pure
    returns (uint nicerValueWei) {
        if (_rawValueWei < 1 finney) {
            return _rawValueWei;
        } else if (_rawValueWei < 10 finney) {
            return 10 szabo * (_rawValueWei / 10 szabo);
        } else if (_rawValueWei < 100 finney) {
            return 100 szabo * (_rawValueWei / 100 szabo);
        } else if (_rawValueWei < 1 ether) {
            return 1 finney * (_rawValueWei / 1 finney);
        } else if (_rawValueWei < 10 ether) {
            return 10 finney * (_rawValueWei / 10 finney);
        } else if (_rawValueWei < 100 ether) {
            return 100 finney * (_rawValueWei / 100 finney);
        } else if (_rawValueWei < 1000 ether) {
            return 1 ether * (_rawValueWei / 1 ether);
        } else if (_rawValueWei < 10000 ether) {
            return 10 ether * (_rawValueWei / 10 ether);
        } else {
            return _rawValueWei;
        }
    }

    function roundMoneyUpToWholeFinney(uint _valueWei) pure internal
    returns (uint valueFinney) {
        return (1 finney + _valueWei - 1 wei) / 1 finney;
    }
}

contract AuctionManager is MoneyManager {
    event Bid(address bidder, uint256 bid, uint256 auctionId);
    event NewAuction( uint256 itemForAuctionID, uint256 durationSeconds, address seller);
    event NewAuctionWinner(address highestBidder, uint256 auctionId);

    struct Auction{
        uint auctionStart;
        uint auctionEnd;
        uint highestBid;
        address highestBidder;
        bool ended;
    }

    bool public isAuctionManager = true;
    uint256 private marginPerThousandForDevelopers = 50;
    uint256 private percentageBidIncrease = 33;
    uint256 private auctionsStartBid = 0.1 ether;
    address private auctionsStartAddress;

    mapping (uint256 => uint256) public _itemID2auctionID;
    mapping (uint256 => uint256) public _auctionID2itemID;
    Auction[] public _auctionsArray;

    ERC721 public nonFungibleContract;

    function AuctionManager() public {
        ceoAddress = msg.sender;
        cooAddress = msg.sender;
        cfoAddress = msg.sender;

        auctionsStartAddress = msg.sender;
        _auctionsArray.push(Auction(0,0,0,0,false));
    }

    function setERCContract(address candidateAddress) public onlyCEO {
        ERC721 candidateContract = ERC721(candidateAddress);

        nonFungibleContract = candidateContract;
    }

    function getERCContractAddress() public view returns (address) {
        return address(nonFungibleContract);
    }

    function getAllActiveAuctions()  external view returns (uint256[] popsIDs,uint256[] auctionsIDs,uint256[] sellingPrices, address[] highestBidders, bool[] canBeEnded){

        uint256[] memory toReturnPopsIDs = new uint256[](_auctionsArray.length);
        uint256[] memory toReturnAuctionsIDs = new uint256[](_auctionsArray.length);
        uint256[] memory toReturnSellingPrices = new uint256[](_auctionsArray.length);
        address[] memory toReturnSellerAddress = new address[](_auctionsArray.length);
        bool[] memory toReturnCanBeEnded = new bool[](_auctionsArray.length);
        uint256 index = 0;

        for(uint256 i = 1; i < _auctionsArray.length; i++){
            uint256 popId = _auctionID2itemID[i];
            uint256 price = requiredBid(i);

            if(_auctionsArray[i].ended == false){
                toReturnPopsIDs[index] = popId;
                toReturnAuctionsIDs[index] = i;
                toReturnSellingPrices[index] = price;
                toReturnSellerAddress[index] = _auctionsArray[i].highestBidder;
                toReturnCanBeEnded[index] = _auctionsArray[i].auctionEnd < now;
                index++;
            }
        }
        return (toReturnPopsIDs,toReturnAuctionsIDs,toReturnSellingPrices,toReturnSellerAddress,toReturnCanBeEnded);
    }

    function getAllAuctions()  external view returns (uint256[] popsIDs,uint256[] auctionsIDs,uint256[] sellingPrices){

        uint256[] memory toReturnPopsIDs = new uint256[](_auctionsArray.length);
        uint256[] memory toReturnAuctionsIDs = new uint256[](_auctionsArray.length);
        uint256[] memory toReturnSellingPrices = new uint256[](_auctionsArray.length);

        uint256 index = 0;

        for(uint256 i = 1; i < _auctionsArray.length; i++){
            uint256 popId = _auctionID2itemID[i];
            uint256 price = requiredBid(i);
            toReturnPopsIDs[index] = popId;
            toReturnAuctionsIDs[index] = i;
            toReturnSellingPrices[index] = price;
            index++;
        }
        return (toReturnPopsIDs,toReturnAuctionsIDs,toReturnSellingPrices);
    }


    function createAuction(uint256 _itemForAuctionID, uint256 _auctionDurationSeconds, address _seller) public {
        require(msg.sender == getERCContractAddress());
        require(_auctionDurationSeconds >= 20 seconds);
        require(_auctionDurationSeconds < 45 days);
        require(_itemForAuctionID != 0);
        require(_seller != 0);

        _takeOwnershipOfTokenFrom(_itemForAuctionID,_seller);

        uint256 auctionEnd = SafeMath.add(now,_auctionDurationSeconds);
        uint256 auctionID = _itemID2auctionID[_itemForAuctionID];
        if(auctionID == 0){
            uint256 index = _auctionsArray.push(Auction(now, auctionEnd, 0, _seller, false)) - 1;
            _itemID2auctionID[_itemForAuctionID] = index;
            _auctionID2itemID[index] = _itemForAuctionID;
        } else {
            Auction storage previousAuction = _auctionsArray[auctionID];
            require(previousAuction.ended == true);
            previousAuction.auctionStart = now;
            previousAuction.auctionEnd = auctionEnd;
            previousAuction.highestBidder = _seller;
            previousAuction.highestBid = 0;
            previousAuction.ended = false;
        }
        emit NewAuction(_itemForAuctionID, _auctionDurationSeconds, _seller);
    }

    function bid(uint auctionID) public payable whenNotPaused{
        require(auctionID != 0);
        Auction storage auction = _auctionsArray[auctionID];
        require(auction.ended == false);
        require(auction.auctionEnd >= now);
        uint claimBidPrice = requiredBid(auctionID);
        uint256 bidValue = msg.value;
        require(bidValue >= claimBidPrice);
        address previousHighestBidder = auction.highestBidder;
        auction.highestBid = msg.value;
        auction.highestBidder = msg.sender;
        _repopTransaction(previousHighestBidder, msg.value, marginPerThousandForDevelopers);
        emit Bid(msg.sender, msg.value, auctionID);
    }

    function endAuction(uint auctionID) public{
        require(auctionID != 0);
        Auction storage auction = _auctionsArray[auctionID];
        require(auction.ended == false);
        require(auction.auctionEnd < now);
        auction.ended = true;
        nonFungibleContract.transfer(auction.highestBidder, _auctionID2itemID[auctionID]);
        emit NewAuctionWinner(auction.highestBidder, auctionID);
    }

    function requiredBid(uint _auctionID) constant public returns (uint256 amountToOutBid) {
        require(_auctionID != 0);
        Auction memory auction = _auctionsArray[_auctionID];
        if(auction.highestBid == 0){
            return auctionsStartBid;
        } else {
            uint256 amountRequiredToOutBid = (auction.highestBid * (100 + percentageBidIncrease)) / 100;
            amountRequiredToOutBid = RoundMoneyNicely.roundMoneyDownNicely(amountRequiredToOutBid);
            return amountRequiredToOutBid;
        }
    }

    function getAuction(uint _itemForAuctionID) external constant returns (uint256 itemID, uint256 auctionStart, uint256 auctionEnd, address highestBidder, uint256 highestBid, bool ended){
        require(_itemForAuctionID != 0);
        Auction memory auction = _auctionsArray[_itemID2auctionID[_itemForAuctionID]];
        if(auction.highestBidder != 0) {
            itemID = _itemForAuctionID;
            auctionStart =  auction.auctionStart;
            auctionEnd =    auction.auctionEnd;
            highestBidder = auction.highestBidder;
            highestBid =    auction.highestBid;
            ended =         auction.ended;
            return(itemID,auctionStart,auctionEnd,highestBidder,highestBid,ended);
        } else {
            revert();
        }
    }

    function getAuctionStartBid() public view returns(uint256){
      return auctionsStartBid;
    }

    function setAuctionStartBid(uint256 _auctionStartBid) public onlyCLevel{
      auctionsStartBid = _auctionStartBid;
    }

    function _addressNotNull(address _to) private pure returns (bool){
        return _to != address(0);
    }


    function _takeOwnershipOfToken(uint256 _itemForAuctionID) internal {

        nonFungibleContract.takeOwnership(_itemForAuctionID);
    }

    function _takeOwnershipOfTokenFrom(uint256 _itemForAuctionID, address previousOwner) internal {
        nonFungibleContract.transferFrom(previousOwner,this,_itemForAuctionID);
    }
}

contract MarketManager is MoneyManager {
    event PopPurchased(address seller, address buyer, uint256 popId, uint256 sellingPrice);
    event PopCancelSale(address popOwner, uint256 popId);
    event PopChangedPrice(address popOwner, uint256 popId, uint256 newPrice);

    struct Sale {
        uint256 sellingPrice;

        address seller;
    }

    bool public isMarketManager = true;
    uint256 private marginPerThousandForDevelopers = 50;
    uint256 private MAX_SELLING_PRICE = 100000 ether;
    mapping (uint256 => uint256) public _itemID2saleID;
    mapping (uint256 => uint256) public _saleID2itemID;
    Sale[] public _salesArray;
    ERC721 public nonFungibleContract;

    function MarketManager() public {
        ceoAddress = msg.sender;
        cooAddress = msg.sender;
        cfoAddress = msg.sender;
        _salesArray.push(Sale(0,0));
        _itemID2saleID[0] = 0;
        _saleID2itemID[0] = 0;
    }

    function setERCContract(address candidateAddress) public onlyCEO {
        require(candidateAddress != address(0));
        ERC721 candidateContract = ERC721(candidateAddress);
        nonFungibleContract = candidateContract;
    }

    function getERCContractAddress() public view returns (address) {
        return address(nonFungibleContract);
    }

    function getAllActiveSales()  external view returns (uint256[] popsIDs,uint256[] sellingPrices,address[] sellerAddresses){

        uint256[] memory toReturnPopsIDs = new uint256[](_salesArray.length);
        uint256[] memory toReturnSellingPrices = new uint256[](_salesArray.length);
        address[] memory toReturnSellerAddress = new address[](_salesArray.length);
        uint256 index = 0;

        for(uint256 i = 1; i < _salesArray.length; i++){
            uint256 popId = _saleID2itemID[i];
            uint256 price = _salesArray[i].sellingPrice;
            address seller = _salesArray[i].seller;

            if(seller != 0){
                toReturnSellerAddress[index] = seller;
                toReturnPopsIDs[index] = popId;
                toReturnSellingPrices[index] = price;
                index++;
            }
        }
        return (toReturnPopsIDs,toReturnSellingPrices,toReturnSellerAddress);
    }

    function getAllSalesByAddress(address addr)  external view returns (uint256[] popsIDs,uint256[] sellingPrices,address[] sellerAddresses){

        uint256[] memory toReturnPopsIDs = new uint256[](_salesArray.length);
        uint256[] memory toReturnSellingPrices = new uint256[](_salesArray.length);
        address[] memory toReturnSellerAddress = new address[](_salesArray.length);
        uint256 index = 0;

        for(uint256 i = 1; i < _salesArray.length; i++){
            uint256 popId = _saleID2itemID[i];
            uint256 price = _salesArray[i].sellingPrice;
            address seller = _salesArray[i].seller;

            if(seller == addr){
                toReturnSellerAddress[index] = seller;
                toReturnPopsIDs[index] = popId;
                toReturnSellingPrices[index] = price;
                index++;
            }
        }
        return (toReturnPopsIDs,toReturnSellingPrices,toReturnSellerAddress);
    }

    function purchasePop(uint256 _popId) public payable whenNotPaused{
        uint256 saleID = _itemID2saleID[_popId];
        require(saleID != 0);
        Sale storage sale = _salesArray[saleID];
        address popOwner = sale.seller;
        require(popOwner != 0);
        address newOwner = msg.sender;
        uint256 sellingPrice = sale.sellingPrice;
        require(popOwner != newOwner);
        require(_addressNotNull(newOwner));
        require(msg.value == sellingPrice);
        sale.seller = 0;
        nonFungibleContract.transfer(newOwner,_popId);
        _repopTransaction(popOwner, msg.value, marginPerThousandForDevelopers);
        emit PopPurchased(popOwner, msg.sender, _popId, msg.value);
    }

    function sellerOf(uint _popId) public view returns (address) {
        uint256 saleID = _itemID2saleID[_popId];
        Sale memory sale = _salesArray[saleID];
        return sale.seller;
    }

    function sellPop(address seller, uint256 _popId, uint256 _sellingPrice) public whenNotPaused{
        require(_sellingPrice < MAX_SELLING_PRICE);
        require(msg.sender == getERCContractAddress());
        require(_sellingPrice > 0);
        _takeOwnershipOfTokenFrom(_popId,seller);
        uint256 saleID = _itemID2saleID[_popId];
        if(saleID == 0) {
            uint256  index = _salesArray.push(Sale(_sellingPrice,seller)) - 1;
            _itemID2saleID[_popId] = index;
            _saleID2itemID[index] = _popId;
        } else {
            Sale storage sale = _salesArray[saleID];
            require(sale.seller == 0);
            sale.seller = seller;
            sale.sellingPrice = _sellingPrice;
        }
    }

    function cancelSellPop(uint256 _popId) public {
        Sale storage sale = _salesArray[_itemID2saleID[_popId]];
        require(sale.seller == msg.sender);
        sale.seller = 0;
        nonFungibleContract.transfer(msg.sender,_popId);

        emit PopCancelSale(msg.sender, _popId);
    }

    function changeSellPOPPrice(uint256 _popId, uint256 _newSellingValue) public whenNotPaused{
      require(_newSellingValue < MAX_SELLING_PRICE);
      require(_newSellingValue > 0);
      Sale storage sale = _salesArray[_itemID2saleID[_popId]];
      require(sale.seller == msg.sender);
      sale.sellingPrice = _newSellingValue;
      emit PopChangedPrice(msg.sender, _popId, _newSellingValue);
    }

    function _addressNotNull(address _to) private pure returns (bool){
        return _to != address(0);
    }

    function _takeOwnershipOfToken(uint256 _itemForAuctionID) internal {
        nonFungibleContract.takeOwnership(_itemForAuctionID);
    }

    function _takeOwnershipOfTokenFrom(uint256 _itemForAuctionID, address previousOwner) internal {
        nonFungibleContract.transferFrom(previousOwner,this,_itemForAuctionID);
    }
}

contract CloningInterface{
  function isGeneScience() public pure returns (bool);
  function mixGenes(uint256 genes1, uint256 genes2) public returns (uint256);
}

contract GenesMarket is MoneyManager {
    event GenesCancelSale(address popOwner, uint256 popId);
    event GenesPurchased(address buyer, address popOwner, uint256 popId, uint256 amount, uint256 price);
    event GenesChangedPrice(address popOwner, uint256 popId, uint256 newPrice);

    struct GeneForSale {
            uint256 sellingPrice;
            address currentOwner;
    }

    mapping (uint256 => uint256) public _itemID2geneSaleID;
    mapping (uint256 => uint256) public _geneSaleID2itemID;
    GeneForSale[] public _genesForSaleArray;
    uint256 marginPerThousandForDevelopers = 50;
    uint256 MAX_SELLING_PRICE = 10000 ether;

    mapping(address => mapping (uint256 => uint256)) _genesOwned;
    mapping(address => uint256[]) _ownedGenesPopsId;
    bool public isGenesMarket = true;

    function GenesMarket() public {
        ceoAddress = msg.sender;
        cooAddress = msg.sender;
        cfoAddress = msg.sender;
        _genesForSaleArray.push(GeneForSale(0,0));
    }

    ERC721 public nonFungibleContract;
    function setERCContract(address candidateAddress) public onlyCEO() {
        ERC721 candidateContract = ERC721(candidateAddress);
        nonFungibleContract = candidateContract;
    }

    function getERCContractAddress() public view returns (address) {
        return address(nonFungibleContract);
    }

    function startSellingGenes(uint256 _popId, uint256 _sellingPrice, address _seller) public {
        require(_sellingPrice < MAX_SELLING_PRICE);
        require(msg.sender == getERCContractAddress());
        require(_sellingPrice > 0);
        _takeOwnershipOfTokenFrom(_popId,_seller);
        uint256 geneSaleID = _itemID2geneSaleID[_popId];
        if(geneSaleID == 0){

            uint256 index = _genesForSaleArray.push(GeneForSale(_sellingPrice,_seller)) - 1;
            _itemID2geneSaleID[_popId] = index;
            _geneSaleID2itemID[index] = _popId;

        }else {
            GeneForSale storage previousSale = _genesForSaleArray[geneSaleID];
            previousSale.sellingPrice = _sellingPrice;
            previousSale.currentOwner = _seller;
        }
    }

    function stopSellingGenes(uint _popId) public {
        uint256 geneSaleID = _itemID2geneSaleID[_popId];
        require(geneSaleID != 0);
        GeneForSale storage gene = _genesForSaleArray[geneSaleID];
        require(msg.sender == gene.currentOwner);
        require(gene.sellingPrice != 0);
        gene.sellingPrice = 0;
        nonFungibleContract.transfer(gene.currentOwner, _popId);

        emit GenesCancelSale(msg.sender, _popId);
    }


    function sellerOf(uint _popId) public view returns (address) {
        uint256 geneSaleID = _itemID2geneSaleID[_popId];
        GeneForSale memory gene = _genesForSaleArray[geneSaleID];
        if(gene.sellingPrice != 0) {
            return gene.currentOwner;
        } else {
            return 0;
        }
    }

    function useBottle(address _user, uint _popId) external whenNotPaused {
        require(msg.sender == getERCContractAddress());
        require(_genesOwned[_user][_popId] > 0);
        _genesOwned[_user][_popId] = _genesOwned[_user][_popId] - 1;
    }


    function purchaseGenes(uint256 _popId, uint256 _amountGenes, bool update) public payable whenNotPaused{
        require(_amountGenes > 0);
        uint256 geneSaleID = _itemID2geneSaleID[_popId];
        GeneForSale memory gene = _genesForSaleArray[geneSaleID];
        require(gene.sellingPrice != 0);
        address popOwner = gene.currentOwner;
        address genesReceiver = msg.sender;
        uint256 sellingPrice = gene.sellingPrice;
        require(popOwner != genesReceiver);
        require(msg.value == SafeMath.mul(sellingPrice, _amountGenes));
        if( update && _genesOwned[msg.sender][_popId] == 0) {
            _ownedGenesPopsId[msg.sender].push(_popId);
        }
        _genesOwned[msg.sender][_popId] = _genesOwned[msg.sender][_popId] + _amountGenes;
        _repopTransaction(popOwner, msg.value, marginPerThousandForDevelopers);
        emit GenesPurchased(msg.sender, popOwner, _popId, _amountGenes, msg.value);
    }

    function getGenesForSale() public view returns (uint[] popIDs, uint[] sellingPrices, uint[] geneSaleIDs, address[] sellers){
        uint256[] memory toReturnPopsIDs = new uint256[](_genesForSaleArray.length);
        uint256[] memory toReturnSellingPrices = new uint256[](_genesForSaleArray.length);
        uint256[] memory toReturnGeneSaleID = new uint256[](_genesForSaleArray.length);
        address[] memory toReturnSellers = new address[](_genesForSaleArray.length);
        uint256 index = 0;

        for(uint256 i = 1; i < _genesForSaleArray.length; i++){
            uint256 popId = _geneSaleID2itemID[i];
            uint256 price = _genesForSaleArray[i].sellingPrice;

            if(price != 0){
                toReturnGeneSaleID[index] = i;
                toReturnPopsIDs[index] = popId;
                toReturnSellingPrices[index] = price;
                toReturnSellers[index] = _genesForSaleArray[i].currentOwner;
                index++;
            }
        }
        return (toReturnPopsIDs,toReturnSellingPrices,toReturnGeneSaleID, toReturnSellers);
    }

    function getGenesForSaleBySeller(address seller) public view returns (uint[] popIDs, uint[] sellingPrices, uint[] geneSaleIDs, address[] sellers){
        uint256[] memory toReturnPopsIDs = new uint256[](_genesForSaleArray.length);
        uint256[] memory toReturnSellingPrices = new uint256[](_genesForSaleArray.length);
        uint256[] memory toReturnGeneSaleID = new uint256[](_genesForSaleArray.length);
        address[] memory toReturnSellers = new address[](_genesForSaleArray.length);
        uint256 index = 0;

        for(uint256 i = 1; i < _genesForSaleArray.length; i++){
            uint256 popId = _geneSaleID2itemID[i];
            uint256 price = _genesForSaleArray[i].sellingPrice;

            if(price != 0){
              if(_genesForSaleArray[i].currentOwner == seller){
                toReturnGeneSaleID[index] = i;
                toReturnPopsIDs[index] = popId;
                toReturnSellingPrices[index] = price;
                toReturnSellers[index] = _genesForSaleArray[i].currentOwner;
                index++;
              }
            }
        }
        return (toReturnPopsIDs,toReturnSellingPrices,toReturnGeneSaleID, toReturnSellers);
    }

    function getAmountOfGene(uint _popId) public view returns (uint amount){
        return _genesOwned[msg.sender][_popId];
    }

    function getMyGenes() public view returns (uint[] popIDs, uint[] amount) {
        uint256[] memory toReturnPopsIDs = new uint256[](_ownedGenesPopsId[msg.sender].length);
        uint256[] memory toReturnAmount = new uint256[](_ownedGenesPopsId[msg.sender].length);

        for(uint256 i = 0; i < _ownedGenesPopsId[msg.sender].length; i++) {
            toReturnPopsIDs[i] = _ownedGenesPopsId[msg.sender][i];
            toReturnAmount[i] = _genesOwned[msg.sender][_ownedGenesPopsId[msg.sender][i]];
        }
        return (toReturnPopsIDs,toReturnAmount);
    }

    function changeSellGenesPrice(uint256 _popId, uint256 _newSellingValue) public whenNotPaused{
      require(_newSellingValue < MAX_SELLING_PRICE);
      require(_newSellingValue > 0);
      uint256 geneSaleID = _itemID2geneSaleID[_popId];
      require(geneSaleID != 0);

      GeneForSale storage gene = _genesForSaleArray[geneSaleID];

      require(msg.sender == gene.currentOwner);
      require(gene.sellingPrice != 0);

      gene.sellingPrice = _newSellingValue;

      emit GenesChangedPrice(msg.sender, _popId, _newSellingValue);
    }

    function _takeOwnershipOfTokenFrom(uint256 _popId, address previousOwner) internal {
        nonFungibleContract.transferFrom(previousOwner,this,_popId);
    }
}

contract REPOPCore is REPOPERC721, MoneyManager{
    uint256 public refresherFee = 0.01 ether;
    AuctionManager public auctionManager;
    MarketManager public marketManager;
    GenesMarket public genesMarket;
    CloningInterface public geneScience;

    event CloneWithTwoPops(address creator, uint256 cloneId, uint256 aParentId, uint256 bParentId);
    event CloneWithPopAndBottle(address creator, uint256 cloneId, uint256 popId, uint256 bottleId);
    event SellingPop(address seller, uint256 popId, uint256 price);
    event SellingGenes(address seller, uint256 popId, uint256 price);
    event ChangedPopName(address owner, uint256 popId, bytes32 newName);
    event CooldownRemoval(uint256 popId, address owner, uint256 paidFee);

    function REPOPCore() public{

      ceoAddress = msg.sender;
      cooAddress = msg.sender;
      cfoAddress = msg.sender;

      createNewPop(0x0, "Satoshi Nakamoto");
    }

    function createNewAuction(uint256 _itemForAuctionID, uint256 _auctionDurationSeconds) public onlyCLevel{
        approve(address(auctionManager),_itemForAuctionID);
        auctionManager.createAuction(_itemForAuctionID,_auctionDurationSeconds,msg.sender);
    }

    function setAuctionManagerAddress(address _address) external onlyCEO {
        AuctionManager candidateContract = AuctionManager(_address);


        require(candidateContract.isAuctionManager());


        auctionManager = candidateContract;
    }

    function getAuctionManagerAddress() public view returns (address) {
        return address(auctionManager);
    }

    function setMarketManagerAddress(address _address) external onlyCEO {
        MarketManager candidateContract = MarketManager(_address);
        require(candidateContract.isMarketManager());
        marketManager = candidateContract;
    }

    function getMarketManagerAddress() public view returns (address) {
        return address(marketManager);
    }

    function setGeneScienceAddress(address _address) external onlyCEO {
      CloningInterface candidateContract = CloningInterface(_address);
      require(candidateContract.isGeneScience());
      geneScience = candidateContract;
    }

    function getGeneScienceAddress() public view returns (address) {
        return address(geneScience);
    }

    function setGenesMarketAddress(address _address) external onlyCEO {
      GenesMarket candidateContract = GenesMarket(_address);
      require(candidateContract.isGenesMarket());
      genesMarket = candidateContract;
    }

    function getGenesMarketAddress() public view returns (address) {
        return address(genesMarket);
    }

    function sellPop(uint256 _popId, uint256 _price) public {
        Pop storage pop = pops[_popId];
        require(pop.cooldownEndTimestamp <= now);
        approve(address(marketManager),_popId);
        marketManager.sellPop(msg.sender,_popId,_price);
        emit SellingPop(msg.sender, _popId, _price);
    }

    function sellGenes(uint256 _popId, uint256 _price) public {
        require(_popId > 0);
        approve(address(genesMarket),_popId);
        genesMarket.startSellingGenes(_popId,_price,msg.sender);
        emit SellingGenes(msg.sender, _popId, _price);
    }

    function getOwnerInAnyPlatformById(uint256 popId) public view returns (address){
      if(ownerOf(popId) == address(marketManager)){
        return marketManager.sellerOf(popId);
      }
      else if(ownerOf(popId) == address(genesMarket)){
        return genesMarket.sellerOf(popId);
      }
      else if(ownerOf(popId) == address(auctionManager)){
        return ceoAddress;
      }
      else{
        return ownerOf(popId);
      }
      return 0x0;
    }

    function setPopName(uint256 popId, string newName) external {
      require(_ownerOfPopInAnyPlatform(popId));
      Pop storage pop = pops[popId];
      require(pop.generation > 0);
      bytes32 name32 = stringToBytes32(newName);
      pop.popName = name32;
      emit ChangedPopName(msg.sender, popId, name32);
    }

    function removeCooldown(uint256 popId)
      external
      payable
      {
        require(_ownerOfPopInAnyPlatform(popId));
        require(msg.value >= refresherFee);
        Pop storage pop = pops[popId];
        pop.cooldownEndTimestamp = 1;
        emit CooldownRemoval(popId, msg.sender, refresherFee);
      }

    function _ownerOfPopInAnyPlatform(uint _popId) internal view returns (bool) {
      return ownerOf(_popId) == msg.sender || genesMarket.sellerOf(_popId) == msg.sender || marketManager.sellerOf(_popId) == msg.sender;
    }

    function getOwnershipForCloning(uint _popId) internal view returns (bool) {
        return ownerOf(_popId) == msg.sender || genesMarket.sellerOf(_popId) == msg.sender;
    }

    function changeRefresherFee(uint256 _newFee) public onlyCLevel{
        refresherFee = _newFee;
    }

    function cloneWithTwoPops(uint256 _aParentId, uint256 _bParentId)
      external
      whenNotPaused
      returns (uint256)
      {
        require(_aParentId > 0);
        require(_bParentId > 0);
        require(getOwnershipForCloning(_aParentId));
        require(getOwnershipForCloning(_bParentId));
        Pop storage aParent = pops[_aParentId];

        Pop storage bParent = pops[_bParentId];

        require(aParent.genes != bParent.genes);
        require(aParent.cooldownEndTimestamp <= now);
        require(bParent.cooldownEndTimestamp <= now);

        uint16 parentGen = aParent.generation;
        if (bParent.generation > aParent.generation) {
            parentGen = bParent.generation;
        }

        uint16 cooldownIndex = parentGen + 1;
        if (cooldownIndex > 13) {
            cooldownIndex = 13;
        }

        uint256 childGenes = geneScience.mixGenes(aParent.genes, bParent.genes);

        _triggerCooldown(aParent);
        _triggerCooldown(bParent);

        uint256 index = pops.push(Pop(childGenes,uint64(now), 1, uint32(_aParentId), uint32(_bParentId), 0, cooldownIndex, parentGen + 1)) -1;

        popIndexToOwner[index] = msg.sender;
        ownershipTokenCount[msg.sender] = ownershipTokenCount[msg.sender]+1;

        emit CloneWithTwoPops(msg.sender, index, _aParentId, _bParentId);
        emit Birth(msg.sender, index, _aParentId, _bParentId,childGenes);

        return index;
    }

    function cloneWithPopAndBottle(uint256 _aParentId, uint256 _bParentId_bottle)
        external
        whenNotPaused
        returns (uint256)
        {
          require(_aParentId > 0);
          require(getOwnershipForCloning(_aParentId));
          Pop storage aParent = pops[_aParentId];
          Pop memory bParent = pops[_bParentId_bottle];

          require(aParent.genes != bParent.genes);
          require(aParent.cooldownEndTimestamp <= now);

          uint16 parentGen = aParent.generation;
          if (bParent.generation > aParent.generation) {
              parentGen = bParent.generation;
          }

          uint16 cooldownIndex = parentGen + 1;
          if (cooldownIndex > 13) {
              cooldownIndex = 13;
          }

          genesMarket.useBottle(msg.sender, _bParentId_bottle);

          uint256 childGenes = geneScience.mixGenes(aParent.genes, bParent.genes);

          _triggerCooldown(aParent);

          uint256 index = pops.push(Pop(childGenes,uint64(now), 1, uint32(_aParentId), uint32(_bParentId_bottle), 0, cooldownIndex, parentGen + 1)) -1;

          popIndexToOwner[index] = msg.sender;
          ownershipTokenCount[msg.sender] = ownershipTokenCount[msg.sender]+1;

          emit CloneWithPopAndBottle(msg.sender, index, _aParentId, _bParentId_bottle);
          emit Birth(msg.sender, index, _aParentId, _bParentId_bottle, childGenes);

          return index;
        }
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"_popId","type":"uint256"},{"name":"_newSellingValue","type":"uint256"}],"name":"changeSellGenesPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"candidateAddress","type":"address"}],"name":"setERCContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_popId","type":"uint256"}],"name":"stopSellingGenes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getBalance","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_popId","type":"uint256"}],"name":"getAmountOfGene","outputs":[{"name":"amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCFO","type":"address"}],"name":"setCFO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawPayments","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_popId","type":"uint256"}],"name":"useBottle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"seller","type":"address"}],"name":"getGenesForSaleBySeller","outputs":[{"name":"popIDs","type":"uint256[]"},{"name":"sellingPrices","type":"uint256[]"},{"name":"geneSaleIDs","type":"uint256[]"},{"name":"sellers","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMyGenes","outputs":[{"name":"popIDs","type":"uint256[]"},{"name":"amount","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getERCContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isGenesMarket","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_popId","type":"uint256"},{"name":"_sellingPrice","type":"uint256"},{"name":"_seller","type":"address"}],"name":"startSellingGenes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_popId","type":"uint256"},{"name":"_amountGenes","type":"uint256"},{"name":"update","type":"bool"}],"name":"purchaseGenes","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"_geneSaleID2itemID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getGenesForSale","outputs":[{"name":"popIDs","type":"uint256[]"},{"name":"sellingPrices","type":"uint256[]"},{"name":"geneSaleIDs","type":"uint256[]"},{"name":"sellers","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nonFungibleContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_popId","type":"uint256"}],"name":"sellerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"payments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"_itemID2geneSaleID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"_genesForSaleArray","outputs":[{"name":"sellingPrice","type":"uint256"},{"name":"currentOwner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"popOwner","type":"address"},{"indexed":false,"name":"popId","type":"uint256"}],"name":"GenesCancelSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"buyer","type":"address"},{"indexed":false,"name":"popOwner","type":"address"},{"indexed":false,"name":"popId","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"GenesPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"popOwner","type":"address"},{"indexed":false,"name":"popId","type":"uint256"},{"indexed":false,"name":"newPrice","type":"uint256"}],"name":"GenesChangedPrice","type":"event"}]

60806040526003805460a060020a60ff0219169055603260075569021e19e0c9bab2400000600855600b805460ff1916600117905534801561004057600080fd5b5060018054600160a060020a03338116600160a060020a031992831681178455600380548416821790556002805484169091178155604080518082019091526000808252602082018181526006805497880181559091529051949091027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f810194909455517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090930180549390911692909116919091179055611876806101086000396000f30060806040526004361061017e5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416626fbd8881146101835780630519ce79146101a057806305f8b0cf146101d15780630a0f8168146101f25780630af15f6e1461020757806312065fe01461021f578063264c22bb1461024657806327d7874c1461025e5780632ba73c151461027f5780632e1a7d4d146102a05780633f4ba83a146102b85780634e0a3379146102cd5780635c975abb146102ee5780636103d70b1461031757806361b9c6a31461032c578063622ddaba1461035057806367085633146104945780636c456d0f1461054257806373a699ad146105575780637c37605c1461056c5780637fab624b146105935780638456cb59146105a6578063b047fb50146105bb578063c8bca274146105d0578063d2ae8eaa146105e8578063dd1b7a0f146105fd578063e05c5a8314610612578063e2982c211461062a578063ecb2e7a21461064b578063ff9a33f814610663575b600080fd5b34801561018f57600080fd5b5061019e60043560243561069c565b005b3480156101ac57600080fd5b506101b561078e565b60408051600160a060020a039092168252519081900360200190f35b3480156101dd57600080fd5b5061019e600160a060020a036004351661079d565b3480156101fe57600080fd5b506101b56107f1565b34801561021357600080fd5b5061019e600435610800565b34801561022b57600080fd5b50610234610941565b60408051918252519081900360200190f35b34801561025257600080fd5b5061023460043561094f565b34801561026a57600080fd5b5061019e600160a060020a0360043516610975565b34801561028b57600080fd5b5061019e600160a060020a03600435166109d4565b3480156102ac57600080fd5b5061019e600435610a33565b3480156102c457600080fd5b5061019e610aa2565b3480156102d957600080fd5b5061019e600160a060020a0360043516610af5565b3480156102fa57600080fd5b50610303610b54565b604080519115158252519081900360200190f35b34801561032357600080fd5b5061019e610b64565b34801561033857600080fd5b5061019e600160a060020a0360043516602435610bc2565b34801561035c57600080fd5b50610371600160a060020a0360043516610c5c565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103bd5781810151838201526020016103a5565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156103fc5781810151838201526020016103e4565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561043b578181015183820152602001610423565b50505050905001858103825286818151815260200191508051906020019060200280838360005b8381101561047a578181015183820152602001610462565b505050509050019850505050505050505060405180910390f35b3480156104a057600080fd5b506104a9610e7d565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104ed5781810151838201526020016104d5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561052c578181015183820152602001610514565b5050505090500194505050505060405180910390f35b34801561054e57600080fd5b506101b5611000565b34801561056357600080fd5b50610303611014565b34801561057857600080fd5b5061019e600435602435600160a060020a036044351661101d565b61019e60043560243560443515156111a7565b3480156105b257600080fd5b5061019e611373565b3480156105c757600080fd5b506101b56113ff565b3480156105dc57600080fd5b5061023460043561140e565b3480156105f457600080fd5b50610371611420565b34801561060957600080fd5b506101b5611604565b34801561061e57600080fd5b506101b5600435611618565b34801561063657600080fd5b50610234600160a060020a0360043516611699565b34801561065757600080fd5b506102346004356116ab565b34801561066f57600080fd5b5061067b6004356116bd565b60408051928352600160a060020a0390911660208301528051918290030190f35b600354600090819060a060020a900460ff16156106b857600080fd5b60085483106106c657600080fd5b600083116106d357600080fd5b60008481526004602052604090205491508115156106f057600080fd5b60068054839081106106fe57fe5b6000918252602090912060016002909202019081015490915033600160a060020a0390811691161461072f57600080fd5b8054151561073c57600080fd5b82815560408051600160a060020a03331681526020810186905280820185905290517f765372e35f49661e88a647c39890fab72616e6765769de864cd1e3f2af1ca64f9181900360600190a150505050565b600254600160a060020a031681565b60015460009033600160a060020a039081169116146107bb57600080fd5b50600b8054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600154600160a060020a031681565b6000818152600460205260408120549081151561081c57600080fd5b600680548390811061082a57fe5b6000918252602090912060016002909202019081015490915033600160a060020a0390811691161461085b57600080fd5b8054151561086857600080fd5b6000808255600b546001830154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810188905290516101009093049091169263a9059cbb9260448084019382900301818387803b1580156108e057600080fd5b505af11580156108f4573d6000803e3d6000fd5b505060408051600160a060020a03331681526020810187905281517f539389ce614e9351811256b578685f60bdfea88b7fc3ea01124d9c337ad18a829450908190039091019150a1505050565b600160a060020a0330163190565b33600160a060020a03166000908152600960209081526040808320938352929052205490565b60015433600160a060020a0390811691161461099057600080fd5b600160a060020a03811615156109a557600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146109ef57600080fd5b600160a060020a0381161515610a0457600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025433600160a060020a03908116911614610a4e57600080fd5b600160a060020a033016318110610a6457600080fd5b600254604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015610a9e573d6000803e3d6000fd5b5050565b60015433600160a060020a03908116911614610abd57600080fd5b60035460a060020a900460ff161515610ad557600080fd5b6003805474ff000000000000000000000000000000000000000019169055565b60015433600160a060020a03908116911614610b1057600080fd5b600160a060020a0381161515610b2557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035460a060020a900460ff1681565b600160a060020a033316600081815260208190526040808220805490839055905190929183156108fc02918491818181858888f193505050501515610bbf57600160a060020a03331660009081526020819052604090208190555b50565b60035460a060020a900460ff1615610bd957600080fd5b610be1611000565b600160a060020a031633600160a060020a0316141515610c0057600080fd5b600160a060020a038216600090815260096020908152604080832084845290915281205411610c2e57600080fd5b600160a060020a03919091166000908152600960209081526040808320938352929052208054600019019055565b606080606080606080606080600080600080600680549050604051908082528060200260200182016040528015610c9d578160200160208202803883390190505b506006546040805182815260208084028201019091529199508015610ccc578160200160208202803883390190505b506006546040805182815260208084028201019091529198508015610cfb578160200160208202803883390190505b506006546040805182815260208084028201019091529197508015610d2a578160200160208202803883390190505b50945060009350600192505b600654831015610e6857600083815260056020526040902054600680549193509084908110610d6157fe5b600091825260209091206002909102015490508015610e5d578c600160a060020a0316600684815481101515610d9357fe5b6000918252602090912060016002909202010154600160a060020a03161415610e5d57828685815181101515610dc557fe5b6020908102909101015287518290899086908110610ddf57fe5b6020908102909101015286518190889086908110610df957fe5b602090810290910101526006805484908110610e1157fe5b60009182526020909120600160029092020101548551600160a060020a0390911690869086908110610e3f57fe5b600160a060020a039092166020928302909101909101526001909301925b600190920191610d36565b50959b949a5092985090965091945050505050565b6060806060806000600a600033600160a060020a0316600160a060020a0316815260200190815260200160002080549050604051908082528060200260200182016040528015610ed7578160200160208202803883390190505b50600160a060020a0333166000908152600a602090815260409182902054825181815281830281019092019092529194508015610f1e578160200160208202803883390190505b509150600090505b600160a060020a0333166000908152600a6020526040902054811015610ff657600160a060020a0333166000908152600a60205260409020805482908110610f6a57fe5b90600052602060002001548382815181101515610f8357fe5b6020908102909101810191909152600160a060020a0333166000908152600982526040808220600a9093528120805484908110610fbc57fe5b90600052602060002001548152602001908152602001600020548282815181101515610fe457fe5b60209081029091010152600101610f26565b5090939092509050565b600b546101009004600160a060020a031690565b600b5460ff1681565b60008060006008548510151561103257600080fd5b61103a611000565b600160a060020a031633600160a060020a031614151561105957600080fd5b6000851161106657600080fd5b61107086856116f2565b600086815260046020526040902054925082151561115157604080518082018252868152600160a060020a03868116602080840191825260068054600181018255600091825294517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600287029081019190915592517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40909301805473ffffffffffffffffffffffffffffffffffffffff1916939094169290921790925589815260048252838120839055828152600590915291909120879055915061119f565b600680548490811061115f57fe5b6000918252602090912060029091020185815560018101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03871617905590505b505050505050565b60006111b1611833565b6003546000908190819060a060020a900460ff16156111cf57600080fd5b600087116111dc57600080fd5b6000888152600460205260409020546006805491965090869081106111fd57fe5b6000918252602091829020604080518082019091526002909202018054808352600190910154600160a060020a0316928201929092529450151561124057600080fd5b505050602081015181513390600160a060020a03808416908316141561126557600080fd5b61126f8188611782565b341461127a57600080fd5b8580156112a85750600160a060020a03331660009081526009602090815260408083208b8452909152902054155b156112d957600160a060020a0333166000908152600a60209081526040822080546001810182559083529120018890555b33600160a060020a031660009081526009602090815260408083208b8452909152902080548801905560075461131290849034906117b8565b60408051600160a060020a033381168252851660208201528082018a90526060810189905234608082015290517f6825106c47586fb4e428378780ec1db9a84b062c6f8070b7e2aa0584c0c8f75c9181900360a00190a15050505050505050565b60035433600160a060020a039081169116148061139e575060015433600160a060020a039081169116145b806113b7575060025433600160a060020a039081169116145b15156113c257600080fd5b60035460a060020a900460ff16156113d957600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a179055565b600354600160a060020a031681565b60056020526000908152604090205481565b606080606080606080606080600080600080600680549050604051908082528060200260200182016040528015611461578160200160208202803883390190505b506006546040805182815260208084028201019091529199508015611490578160200160208202803883390190505b5060065460408051828152602080840282010190915291985080156114bf578160200160208202803883390190505b5060065460408051828152602080840282010190915291975080156114ee578160200160208202803883390190505b50945060009350600192505b6006548310156115f05760008381526005602052604090205460068054919350908490811061152557fe5b6000918252602090912060029091020154905080156115e55782868581518110151561154d57fe5b602090810290910101528751829089908690811061156757fe5b602090810290910101528651819088908690811061158157fe5b60209081029091010152600680548490811061159957fe5b60009182526020909120600160029092020101548551600160a060020a03909116908690869081106115c757fe5b600160a060020a039092166020928302909101909101526001909301925b6001909201916114fa565b50959a949950929750909550919350505050565b600b546101009004600160a060020a031681565b600080611623611833565b60008481526004602052604090205460068054919350908390811061164457fe5b6000918252602091829020604080518082019091526002909202018054808352600190910154600160a060020a03169282019290925291501561168d5780602001519250611692565b600092505b5050919050565b60006020819052908152604090205481565b60046020526000908152604090205481565b60068054829081106116cb57fe5b600091825260209091206002909102018054600190910154909150600160a060020a031682565b600b54604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301523081166024830152604482018690529151610100909304909116916323b872dd9160648082019260009290919082900301818387803b15801561176e57600080fd5b505af115801561119f573d6000803e3d6000fd5b60008083151561179557600091506117b1565b508282028284828115156117a557fe5b04146117ad57fe5b8091505b5092915050565b6103e8818302048083036117cf85826159d86117e6565b15156117df576117df8582611811565b5050505050565b600083600160a060020a0316838390604051600060405180830381858888f198975050505050505050565b600160a060020a03909116600090815260208190526040902080549091019055565b6040805180820190915260008082526020820152905600a165627a7a72305820517910ead418fd504e35b97fdd9587cd4de9da732805f6e0559eab86865d652c0029

Deployed Bytecode

0x60806040526004361061017e5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416626fbd8881146101835780630519ce79146101a057806305f8b0cf146101d15780630a0f8168146101f25780630af15f6e1461020757806312065fe01461021f578063264c22bb1461024657806327d7874c1461025e5780632ba73c151461027f5780632e1a7d4d146102a05780633f4ba83a146102b85780634e0a3379146102cd5780635c975abb146102ee5780636103d70b1461031757806361b9c6a31461032c578063622ddaba1461035057806367085633146104945780636c456d0f1461054257806373a699ad146105575780637c37605c1461056c5780637fab624b146105935780638456cb59146105a6578063b047fb50146105bb578063c8bca274146105d0578063d2ae8eaa146105e8578063dd1b7a0f146105fd578063e05c5a8314610612578063e2982c211461062a578063ecb2e7a21461064b578063ff9a33f814610663575b600080fd5b34801561018f57600080fd5b5061019e60043560243561069c565b005b3480156101ac57600080fd5b506101b561078e565b60408051600160a060020a039092168252519081900360200190f35b3480156101dd57600080fd5b5061019e600160a060020a036004351661079d565b3480156101fe57600080fd5b506101b56107f1565b34801561021357600080fd5b5061019e600435610800565b34801561022b57600080fd5b50610234610941565b60408051918252519081900360200190f35b34801561025257600080fd5b5061023460043561094f565b34801561026a57600080fd5b5061019e600160a060020a0360043516610975565b34801561028b57600080fd5b5061019e600160a060020a03600435166109d4565b3480156102ac57600080fd5b5061019e600435610a33565b3480156102c457600080fd5b5061019e610aa2565b3480156102d957600080fd5b5061019e600160a060020a0360043516610af5565b3480156102fa57600080fd5b50610303610b54565b604080519115158252519081900360200190f35b34801561032357600080fd5b5061019e610b64565b34801561033857600080fd5b5061019e600160a060020a0360043516602435610bc2565b34801561035c57600080fd5b50610371600160a060020a0360043516610c5c565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103bd5781810151838201526020016103a5565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156103fc5781810151838201526020016103e4565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561043b578181015183820152602001610423565b50505050905001858103825286818151815260200191508051906020019060200280838360005b8381101561047a578181015183820152602001610462565b505050509050019850505050505050505060405180910390f35b3480156104a057600080fd5b506104a9610e7d565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104ed5781810151838201526020016104d5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561052c578181015183820152602001610514565b5050505090500194505050505060405180910390f35b34801561054e57600080fd5b506101b5611000565b34801561056357600080fd5b50610303611014565b34801561057857600080fd5b5061019e600435602435600160a060020a036044351661101d565b61019e60043560243560443515156111a7565b3480156105b257600080fd5b5061019e611373565b3480156105c757600080fd5b506101b56113ff565b3480156105dc57600080fd5b5061023460043561140e565b3480156105f457600080fd5b50610371611420565b34801561060957600080fd5b506101b5611604565b34801561061e57600080fd5b506101b5600435611618565b34801561063657600080fd5b50610234600160a060020a0360043516611699565b34801561065757600080fd5b506102346004356116ab565b34801561066f57600080fd5b5061067b6004356116bd565b60408051928352600160a060020a0390911660208301528051918290030190f35b600354600090819060a060020a900460ff16156106b857600080fd5b60085483106106c657600080fd5b600083116106d357600080fd5b60008481526004602052604090205491508115156106f057600080fd5b60068054839081106106fe57fe5b6000918252602090912060016002909202019081015490915033600160a060020a0390811691161461072f57600080fd5b8054151561073c57600080fd5b82815560408051600160a060020a03331681526020810186905280820185905290517f765372e35f49661e88a647c39890fab72616e6765769de864cd1e3f2af1ca64f9181900360600190a150505050565b600254600160a060020a031681565b60015460009033600160a060020a039081169116146107bb57600080fd5b50600b8054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600154600160a060020a031681565b6000818152600460205260408120549081151561081c57600080fd5b600680548390811061082a57fe5b6000918252602090912060016002909202019081015490915033600160a060020a0390811691161461085b57600080fd5b8054151561086857600080fd5b6000808255600b546001830154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810188905290516101009093049091169263a9059cbb9260448084019382900301818387803b1580156108e057600080fd5b505af11580156108f4573d6000803e3d6000fd5b505060408051600160a060020a03331681526020810187905281517f539389ce614e9351811256b578685f60bdfea88b7fc3ea01124d9c337ad18a829450908190039091019150a1505050565b600160a060020a0330163190565b33600160a060020a03166000908152600960209081526040808320938352929052205490565b60015433600160a060020a0390811691161461099057600080fd5b600160a060020a03811615156109a557600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146109ef57600080fd5b600160a060020a0381161515610a0457600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025433600160a060020a03908116911614610a4e57600080fd5b600160a060020a033016318110610a6457600080fd5b600254604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015610a9e573d6000803e3d6000fd5b5050565b60015433600160a060020a03908116911614610abd57600080fd5b60035460a060020a900460ff161515610ad557600080fd5b6003805474ff000000000000000000000000000000000000000019169055565b60015433600160a060020a03908116911614610b1057600080fd5b600160a060020a0381161515610b2557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035460a060020a900460ff1681565b600160a060020a033316600081815260208190526040808220805490839055905190929183156108fc02918491818181858888f193505050501515610bbf57600160a060020a03331660009081526020819052604090208190555b50565b60035460a060020a900460ff1615610bd957600080fd5b610be1611000565b600160a060020a031633600160a060020a0316141515610c0057600080fd5b600160a060020a038216600090815260096020908152604080832084845290915281205411610c2e57600080fd5b600160a060020a03919091166000908152600960209081526040808320938352929052208054600019019055565b606080606080606080606080600080600080600680549050604051908082528060200260200182016040528015610c9d578160200160208202803883390190505b506006546040805182815260208084028201019091529199508015610ccc578160200160208202803883390190505b506006546040805182815260208084028201019091529198508015610cfb578160200160208202803883390190505b506006546040805182815260208084028201019091529197508015610d2a578160200160208202803883390190505b50945060009350600192505b600654831015610e6857600083815260056020526040902054600680549193509084908110610d6157fe5b600091825260209091206002909102015490508015610e5d578c600160a060020a0316600684815481101515610d9357fe5b6000918252602090912060016002909202010154600160a060020a03161415610e5d57828685815181101515610dc557fe5b6020908102909101015287518290899086908110610ddf57fe5b6020908102909101015286518190889086908110610df957fe5b602090810290910101526006805484908110610e1157fe5b60009182526020909120600160029092020101548551600160a060020a0390911690869086908110610e3f57fe5b600160a060020a039092166020928302909101909101526001909301925b600190920191610d36565b50959b949a5092985090965091945050505050565b6060806060806000600a600033600160a060020a0316600160a060020a0316815260200190815260200160002080549050604051908082528060200260200182016040528015610ed7578160200160208202803883390190505b50600160a060020a0333166000908152600a602090815260409182902054825181815281830281019092019092529194508015610f1e578160200160208202803883390190505b509150600090505b600160a060020a0333166000908152600a6020526040902054811015610ff657600160a060020a0333166000908152600a60205260409020805482908110610f6a57fe5b90600052602060002001548382815181101515610f8357fe5b6020908102909101810191909152600160a060020a0333166000908152600982526040808220600a9093528120805484908110610fbc57fe5b90600052602060002001548152602001908152602001600020548282815181101515610fe457fe5b60209081029091010152600101610f26565b5090939092509050565b600b546101009004600160a060020a031690565b600b5460ff1681565b60008060006008548510151561103257600080fd5b61103a611000565b600160a060020a031633600160a060020a031614151561105957600080fd5b6000851161106657600080fd5b61107086856116f2565b600086815260046020526040902054925082151561115157604080518082018252868152600160a060020a03868116602080840191825260068054600181018255600091825294517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600287029081019190915592517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40909301805473ffffffffffffffffffffffffffffffffffffffff1916939094169290921790925589815260048252838120839055828152600590915291909120879055915061119f565b600680548490811061115f57fe5b6000918252602090912060029091020185815560018101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03871617905590505b505050505050565b60006111b1611833565b6003546000908190819060a060020a900460ff16156111cf57600080fd5b600087116111dc57600080fd5b6000888152600460205260409020546006805491965090869081106111fd57fe5b6000918252602091829020604080518082019091526002909202018054808352600190910154600160a060020a0316928201929092529450151561124057600080fd5b505050602081015181513390600160a060020a03808416908316141561126557600080fd5b61126f8188611782565b341461127a57600080fd5b8580156112a85750600160a060020a03331660009081526009602090815260408083208b8452909152902054155b156112d957600160a060020a0333166000908152600a60209081526040822080546001810182559083529120018890555b33600160a060020a031660009081526009602090815260408083208b8452909152902080548801905560075461131290849034906117b8565b60408051600160a060020a033381168252851660208201528082018a90526060810189905234608082015290517f6825106c47586fb4e428378780ec1db9a84b062c6f8070b7e2aa0584c0c8f75c9181900360a00190a15050505050505050565b60035433600160a060020a039081169116148061139e575060015433600160a060020a039081169116145b806113b7575060025433600160a060020a039081169116145b15156113c257600080fd5b60035460a060020a900460ff16156113d957600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a179055565b600354600160a060020a031681565b60056020526000908152604090205481565b606080606080606080606080600080600080600680549050604051908082528060200260200182016040528015611461578160200160208202803883390190505b506006546040805182815260208084028201019091529199508015611490578160200160208202803883390190505b5060065460408051828152602080840282010190915291985080156114bf578160200160208202803883390190505b5060065460408051828152602080840282010190915291975080156114ee578160200160208202803883390190505b50945060009350600192505b6006548310156115f05760008381526005602052604090205460068054919350908490811061152557fe5b6000918252602090912060029091020154905080156115e55782868581518110151561154d57fe5b602090810290910101528751829089908690811061156757fe5b602090810290910101528651819088908690811061158157fe5b60209081029091010152600680548490811061159957fe5b60009182526020909120600160029092020101548551600160a060020a03909116908690869081106115c757fe5b600160a060020a039092166020928302909101909101526001909301925b6001909201916114fa565b50959a949950929750909550919350505050565b600b546101009004600160a060020a031681565b600080611623611833565b60008481526004602052604090205460068054919350908390811061164457fe5b6000918252602091829020604080518082019091526002909202018054808352600190910154600160a060020a03169282019290925291501561168d5780602001519250611692565b600092505b5050919050565b60006020819052908152604090205481565b60046020526000908152604090205481565b60068054829081106116cb57fe5b600091825260209091206002909102018054600190910154909150600160a060020a031682565b600b54604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301523081166024830152604482018690529151610100909304909116916323b872dd9160648082019260009290919082900301818387803b15801561176e57600080fd5b505af115801561119f573d6000803e3d6000fd5b60008083151561179557600091506117b1565b508282028284828115156117a557fe5b04146117ad57fe5b8091505b5092915050565b6103e8818302048083036117cf85826159d86117e6565b15156117df576117df8582611811565b5050505050565b600083600160a060020a0316838390604051600060405180830381858888f198975050505050505050565b600160a060020a03909116600090815260208190526040902080549091019055565b6040805180820190915260008082526020820152905600a165627a7a72305820517910ead418fd504e35b97fdd9587cd4de9da732805f6e0559eab86865d652c0029

Swarm Source

bzzr://517910ead418fd504e35b97fdd9587cd4de9da732805f6e0559eab86865d652c

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.