Source Code
Overview
ETH Balance
0.0046 ETH
Eth Value
$8.52 (@ $1,851.44/ETH)Latest 15 from a total of 15 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Purchase Genes | 5801723 | 2813 days ago | IN | 0.002 ETH | 0.00016154 | ||||
| Purchase Genes | 5795912 | 2814 days ago | IN | 0.005 ETH | 0.00016154 | ||||
| Purchase Genes | 5795830 | 2814 days ago | IN | 0.01 ETH | 0.00025847 | ||||
| Purchase Genes | 5793225 | 2814 days ago | IN | 0.005 ETH | 0.0006704 | ||||
| Purchase Genes | 5772948 | 2818 days ago | IN | 0.01 ETH | 0.00008069 | ||||
| Purchase Genes | 5770065 | 2818 days ago | IN | 0.01 ETH | 0.00038308 | ||||
| Purchase Genes | 5761799 | 2820 days ago | IN | 0.01 ETH | 0.00024231 | ||||
| Purchase Genes | 5761796 | 2820 days ago | IN | 0.01 ETH | 0.00032308 | ||||
| Purchase Genes | 5761795 | 2820 days ago | IN | 0.01 ETH | 0.00024231 | ||||
| Purchase Genes | 5732705 | 2825 days ago | IN | 0.01 ETH | 0.0006704 | ||||
| Purchase Genes | 5724954 | 2826 days ago | IN | 0.01 ETH | 0.00057463 | ||||
| Stop Selling Gen... | 5675613 | 2835 days ago | IN | 0 ETH | 0.0001984 | ||||
| Stop Selling Gen... | 5675604 | 2835 days ago | IN | 0 ETH | 0.0002918 | ||||
| Stop Selling Gen... | 5675591 | 2835 days ago | IN | 0 ETH | 0.0002918 | ||||
| Set ERC Contract | 5545879 | 2858 days ago | IN | 0 ETH | 0.00005715 |
Latest 11 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 5801723 | 2813 days ago | 0.0019 ETH | ||||
| Transfer | 5795912 | 2814 days ago | 0.00475 ETH | ||||
| Transfer | 5795830 | 2814 days ago | 0.0095 ETH | ||||
| Transfer | 5793225 | 2814 days ago | 0.00475 ETH | ||||
| Transfer | 5772948 | 2818 days ago | 0.0095 ETH | ||||
| Transfer | 5770065 | 2818 days ago | 0.0095 ETH | ||||
| Transfer | 5761799 | 2820 days ago | 0.0095 ETH | ||||
| Transfer | 5761796 | 2820 days ago | 0.0095 ETH | ||||
| Transfer | 5761795 | 2820 days ago | 0.0095 ETH | ||||
| Transfer | 5732705 | 2825 days ago | 0.0095 ETH | ||||
| Transfer | 5724954 | 2826 days ago | 0.0095 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GenesMarket
Compiler Version
v0.4.23+commit.124ca40d
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
60806040526003805460a060020a60ff0219169055603260075569021e19e0c9bab2400000600855600b805460ff1916600117905534801561004057600080fd5b5060018054600160a060020a03338116600160a060020a031992831681178455600380548416821790556002805484169091178155604080518082019091526000808252602082018181526006805497880181559091529051949091027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f810194909455517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4090930180549390911692909116919091179055611876806101086000396000f30060806040526004361061017e5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416626fbd8881146101835780630519ce79146101a057806305f8b0cf146101d15780630a0f8168146101f25780630af15f6e1461020757806312065fe01461021f578063264c22bb1461024657806327d7874c1461025e5780632ba73c151461027f5780632e1a7d4d146102a05780633f4ba83a146102b85780634e0a3379146102cd5780635c975abb146102ee5780636103d70b1461031757806361b9c6a31461032c578063622ddaba1461035057806367085633146104945780636c456d0f1461054257806373a699ad146105575780637c37605c1461056c5780637fab624b146105935780638456cb59146105a6578063b047fb50146105bb578063c8bca274146105d0578063d2ae8eaa146105e8578063dd1b7a0f146105fd578063e05c5a8314610612578063e2982c211461062a578063ecb2e7a21461064b578063ff9a33f814610663575b600080fd5b34801561018f57600080fd5b5061019e60043560243561069c565b005b3480156101ac57600080fd5b506101b561078e565b60408051600160a060020a039092168252519081900360200190f35b3480156101dd57600080fd5b5061019e600160a060020a036004351661079d565b3480156101fe57600080fd5b506101b56107f1565b34801561021357600080fd5b5061019e600435610800565b34801561022b57600080fd5b50610234610941565b60408051918252519081900360200190f35b34801561025257600080fd5b5061023460043561094f565b34801561026a57600080fd5b5061019e600160a060020a0360043516610975565b34801561028b57600080fd5b5061019e600160a060020a03600435166109d4565b3480156102ac57600080fd5b5061019e600435610a33565b3480156102c457600080fd5b5061019e610aa2565b3480156102d957600080fd5b5061019e600160a060020a0360043516610af5565b3480156102fa57600080fd5b50610303610b54565b604080519115158252519081900360200190f35b34801561032357600080fd5b5061019e610b64565b34801561033857600080fd5b5061019e600160a060020a0360043516602435610bc2565b34801561035c57600080fd5b50610371600160a060020a0360043516610c5c565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103bd5781810151838201526020016103a5565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156103fc5781810151838201526020016103e4565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561043b578181015183820152602001610423565b50505050905001858103825286818151815260200191508051906020019060200280838360005b8381101561047a578181015183820152602001610462565b505050509050019850505050505050505060405180910390f35b3480156104a057600080fd5b506104a9610e7d565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104ed5781810151838201526020016104d5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561052c578181015183820152602001610514565b5050505090500194505050505060405180910390f35b34801561054e57600080fd5b506101b5611000565b34801561056357600080fd5b50610303611014565b34801561057857600080fd5b5061019e600435602435600160a060020a036044351661101d565b61019e60043560243560443515156111a7565b3480156105b257600080fd5b5061019e611373565b3480156105c757600080fd5b506101b56113ff565b3480156105dc57600080fd5b5061023460043561140e565b3480156105f457600080fd5b50610371611420565b34801561060957600080fd5b506101b5611604565b34801561061e57600080fd5b506101b5600435611618565b34801561063657600080fd5b50610234600160a060020a0360043516611699565b34801561065757600080fd5b506102346004356116ab565b34801561066f57600080fd5b5061067b6004356116bd565b60408051928352600160a060020a0390911660208301528051918290030190f35b600354600090819060a060020a900460ff16156106b857600080fd5b60085483106106c657600080fd5b600083116106d357600080fd5b60008481526004602052604090205491508115156106f057600080fd5b60068054839081106106fe57fe5b6000918252602090912060016002909202019081015490915033600160a060020a0390811691161461072f57600080fd5b8054151561073c57600080fd5b82815560408051600160a060020a03331681526020810186905280820185905290517f765372e35f49661e88a647c39890fab72616e6765769de864cd1e3f2af1ca64f9181900360600190a150505050565b600254600160a060020a031681565b60015460009033600160a060020a039081169116146107bb57600080fd5b50600b8054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600154600160a060020a031681565b6000818152600460205260408120549081151561081c57600080fd5b600680548390811061082a57fe5b6000918252602090912060016002909202019081015490915033600160a060020a0390811691161461085b57600080fd5b8054151561086857600080fd5b6000808255600b546001830154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810188905290516101009093049091169263a9059cbb9260448084019382900301818387803b1580156108e057600080fd5b505af11580156108f4573d6000803e3d6000fd5b505060408051600160a060020a03331681526020810187905281517f539389ce614e9351811256b578685f60bdfea88b7fc3ea01124d9c337ad18a829450908190039091019150a1505050565b600160a060020a0330163190565b33600160a060020a03166000908152600960209081526040808320938352929052205490565b60015433600160a060020a0390811691161461099057600080fd5b600160a060020a03811615156109a557600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146109ef57600080fd5b600160a060020a0381161515610a0457600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025433600160a060020a03908116911614610a4e57600080fd5b600160a060020a033016318110610a6457600080fd5b600254604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015610a9e573d6000803e3d6000fd5b5050565b60015433600160a060020a03908116911614610abd57600080fd5b60035460a060020a900460ff161515610ad557600080fd5b6003805474ff000000000000000000000000000000000000000019169055565b60015433600160a060020a03908116911614610b1057600080fd5b600160a060020a0381161515610b2557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035460a060020a900460ff1681565b600160a060020a033316600081815260208190526040808220805490839055905190929183156108fc02918491818181858888f193505050501515610bbf57600160a060020a03331660009081526020819052604090208190555b50565b60035460a060020a900460ff1615610bd957600080fd5b610be1611000565b600160a060020a031633600160a060020a0316141515610c0057600080fd5b600160a060020a038216600090815260096020908152604080832084845290915281205411610c2e57600080fd5b600160a060020a03919091166000908152600960209081526040808320938352929052208054600019019055565b606080606080606080606080600080600080600680549050604051908082528060200260200182016040528015610c9d578160200160208202803883390190505b506006546040805182815260208084028201019091529199508015610ccc578160200160208202803883390190505b506006546040805182815260208084028201019091529198508015610cfb578160200160208202803883390190505b506006546040805182815260208084028201019091529197508015610d2a578160200160208202803883390190505b50945060009350600192505b600654831015610e6857600083815260056020526040902054600680549193509084908110610d6157fe5b600091825260209091206002909102015490508015610e5d578c600160a060020a0316600684815481101515610d9357fe5b6000918252602090912060016002909202010154600160a060020a03161415610e5d57828685815181101515610dc557fe5b6020908102909101015287518290899086908110610ddf57fe5b6020908102909101015286518190889086908110610df957fe5b602090810290910101526006805484908110610e1157fe5b60009182526020909120600160029092020101548551600160a060020a0390911690869086908110610e3f57fe5b600160a060020a039092166020928302909101909101526001909301925b600190920191610d36565b50959b949a5092985090965091945050505050565b6060806060806000600a600033600160a060020a0316600160a060020a0316815260200190815260200160002080549050604051908082528060200260200182016040528015610ed7578160200160208202803883390190505b50600160a060020a0333166000908152600a602090815260409182902054825181815281830281019092019092529194508015610f1e578160200160208202803883390190505b509150600090505b600160a060020a0333166000908152600a6020526040902054811015610ff657600160a060020a0333166000908152600a60205260409020805482908110610f6a57fe5b90600052602060002001548382815181101515610f8357fe5b6020908102909101810191909152600160a060020a0333166000908152600982526040808220600a9093528120805484908110610fbc57fe5b90600052602060002001548152602001908152602001600020548282815181101515610fe457fe5b60209081029091010152600101610f26565b5090939092509050565b600b546101009004600160a060020a031690565b600b5460ff1681565b60008060006008548510151561103257600080fd5b61103a611000565b600160a060020a031633600160a060020a031614151561105957600080fd5b6000851161106657600080fd5b61107086856116f2565b600086815260046020526040902054925082151561115157604080518082018252868152600160a060020a03868116602080840191825260068054600181018255600091825294517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600287029081019190915592517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40909301805473ffffffffffffffffffffffffffffffffffffffff1916939094169290921790925589815260048252838120839055828152600590915291909120879055915061119f565b600680548490811061115f57fe5b6000918252602090912060029091020185815560018101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03871617905590505b505050505050565b60006111b1611833565b6003546000908190819060a060020a900460ff16156111cf57600080fd5b600087116111dc57600080fd5b6000888152600460205260409020546006805491965090869081106111fd57fe5b6000918252602091829020604080518082019091526002909202018054808352600190910154600160a060020a0316928201929092529450151561124057600080fd5b505050602081015181513390600160a060020a03808416908316141561126557600080fd5b61126f8188611782565b341461127a57600080fd5b8580156112a85750600160a060020a03331660009081526009602090815260408083208b8452909152902054155b156112d957600160a060020a0333166000908152600a60209081526040822080546001810182559083529120018890555b33600160a060020a031660009081526009602090815260408083208b8452909152902080548801905560075461131290849034906117b8565b60408051600160a060020a033381168252851660208201528082018a90526060810189905234608082015290517f6825106c47586fb4e428378780ec1db9a84b062c6f8070b7e2aa0584c0c8f75c9181900360a00190a15050505050505050565b60035433600160a060020a039081169116148061139e575060015433600160a060020a039081169116145b806113b7575060025433600160a060020a039081169116145b15156113c257600080fd5b60035460a060020a900460ff16156113d957600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a179055565b600354600160a060020a031681565b60056020526000908152604090205481565b606080606080606080606080600080600080600680549050604051908082528060200260200182016040528015611461578160200160208202803883390190505b506006546040805182815260208084028201019091529199508015611490578160200160208202803883390190505b5060065460408051828152602080840282010190915291985080156114bf578160200160208202803883390190505b5060065460408051828152602080840282010190915291975080156114ee578160200160208202803883390190505b50945060009350600192505b6006548310156115f05760008381526005602052604090205460068054919350908490811061152557fe5b6000918252602090912060029091020154905080156115e55782868581518110151561154d57fe5b602090810290910101528751829089908690811061156757fe5b602090810290910101528651819088908690811061158157fe5b60209081029091010152600680548490811061159957fe5b60009182526020909120600160029092020101548551600160a060020a03909116908690869081106115c757fe5b600160a060020a039092166020928302909101909101526001909301925b6001909201916114fa565b50959a949950929750909550919350505050565b600b546101009004600160a060020a031681565b600080611623611833565b60008481526004602052604090205460068054919350908390811061164457fe5b6000918252602091829020604080518082019091526002909202018054808352600190910154600160a060020a03169282019290925291501561168d5780602001519250611692565b600092505b5050919050565b60006020819052908152604090205481565b60046020526000908152604090205481565b60068054829081106116cb57fe5b600091825260209091206002909102018054600190910154909150600160a060020a031682565b600b54604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301523081166024830152604482018690529151610100909304909116916323b872dd9160648082019260009290919082900301818387803b15801561176e57600080fd5b505af115801561119f573d6000803e3d6000fd5b60008083151561179557600091506117b1565b508282028284828115156117a557fe5b04146117ad57fe5b8091505b5092915050565b6103e8818302048083036117cf85826159d86117e6565b15156117df576117df8582611811565b5050505050565b600083600160a060020a0316838390604051600060405180830381858888f198975050505050505050565b600160a060020a03909116600090815260208190526040902080549091019055565b6040805180820190915260008082526020820152905600a165627a7a72305820517910ead418fd504e35b97fdd9587cd4de9da732805f6e0559eab86865d652c0029
Deployed Bytecode
0x60806040526004361061017e5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416626fbd8881146101835780630519ce79146101a057806305f8b0cf146101d15780630a0f8168146101f25780630af15f6e1461020757806312065fe01461021f578063264c22bb1461024657806327d7874c1461025e5780632ba73c151461027f5780632e1a7d4d146102a05780633f4ba83a146102b85780634e0a3379146102cd5780635c975abb146102ee5780636103d70b1461031757806361b9c6a31461032c578063622ddaba1461035057806367085633146104945780636c456d0f1461054257806373a699ad146105575780637c37605c1461056c5780637fab624b146105935780638456cb59146105a6578063b047fb50146105bb578063c8bca274146105d0578063d2ae8eaa146105e8578063dd1b7a0f146105fd578063e05c5a8314610612578063e2982c211461062a578063ecb2e7a21461064b578063ff9a33f814610663575b600080fd5b34801561018f57600080fd5b5061019e60043560243561069c565b005b3480156101ac57600080fd5b506101b561078e565b60408051600160a060020a039092168252519081900360200190f35b3480156101dd57600080fd5b5061019e600160a060020a036004351661079d565b3480156101fe57600080fd5b506101b56107f1565b34801561021357600080fd5b5061019e600435610800565b34801561022b57600080fd5b50610234610941565b60408051918252519081900360200190f35b34801561025257600080fd5b5061023460043561094f565b34801561026a57600080fd5b5061019e600160a060020a0360043516610975565b34801561028b57600080fd5b5061019e600160a060020a03600435166109d4565b3480156102ac57600080fd5b5061019e600435610a33565b3480156102c457600080fd5b5061019e610aa2565b3480156102d957600080fd5b5061019e600160a060020a0360043516610af5565b3480156102fa57600080fd5b50610303610b54565b604080519115158252519081900360200190f35b34801561032357600080fd5b5061019e610b64565b34801561033857600080fd5b5061019e600160a060020a0360043516602435610bc2565b34801561035c57600080fd5b50610371600160a060020a0360043516610c5c565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103bd5781810151838201526020016103a5565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156103fc5781810151838201526020016103e4565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561043b578181015183820152602001610423565b50505050905001858103825286818151815260200191508051906020019060200280838360005b8381101561047a578181015183820152602001610462565b505050509050019850505050505050505060405180910390f35b3480156104a057600080fd5b506104a9610e7d565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156104ed5781810151838201526020016104d5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561052c578181015183820152602001610514565b5050505090500194505050505060405180910390f35b34801561054e57600080fd5b506101b5611000565b34801561056357600080fd5b50610303611014565b34801561057857600080fd5b5061019e600435602435600160a060020a036044351661101d565b61019e60043560243560443515156111a7565b3480156105b257600080fd5b5061019e611373565b3480156105c757600080fd5b506101b56113ff565b3480156105dc57600080fd5b5061023460043561140e565b3480156105f457600080fd5b50610371611420565b34801561060957600080fd5b506101b5611604565b34801561061e57600080fd5b506101b5600435611618565b34801561063657600080fd5b50610234600160a060020a0360043516611699565b34801561065757600080fd5b506102346004356116ab565b34801561066f57600080fd5b5061067b6004356116bd565b60408051928352600160a060020a0390911660208301528051918290030190f35b600354600090819060a060020a900460ff16156106b857600080fd5b60085483106106c657600080fd5b600083116106d357600080fd5b60008481526004602052604090205491508115156106f057600080fd5b60068054839081106106fe57fe5b6000918252602090912060016002909202019081015490915033600160a060020a0390811691161461072f57600080fd5b8054151561073c57600080fd5b82815560408051600160a060020a03331681526020810186905280820185905290517f765372e35f49661e88a647c39890fab72616e6765769de864cd1e3f2af1ca64f9181900360600190a150505050565b600254600160a060020a031681565b60015460009033600160a060020a039081169116146107bb57600080fd5b50600b8054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600154600160a060020a031681565b6000818152600460205260408120549081151561081c57600080fd5b600680548390811061082a57fe5b6000918252602090912060016002909202019081015490915033600160a060020a0390811691161461085b57600080fd5b8054151561086857600080fd5b6000808255600b546001830154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810188905290516101009093049091169263a9059cbb9260448084019382900301818387803b1580156108e057600080fd5b505af11580156108f4573d6000803e3d6000fd5b505060408051600160a060020a03331681526020810187905281517f539389ce614e9351811256b578685f60bdfea88b7fc3ea01124d9c337ad18a829450908190039091019150a1505050565b600160a060020a0330163190565b33600160a060020a03166000908152600960209081526040808320938352929052205490565b60015433600160a060020a0390811691161461099057600080fd5b600160a060020a03811615156109a557600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146109ef57600080fd5b600160a060020a0381161515610a0457600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025433600160a060020a03908116911614610a4e57600080fd5b600160a060020a033016318110610a6457600080fd5b600254604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015610a9e573d6000803e3d6000fd5b5050565b60015433600160a060020a03908116911614610abd57600080fd5b60035460a060020a900460ff161515610ad557600080fd5b6003805474ff000000000000000000000000000000000000000019169055565b60015433600160a060020a03908116911614610b1057600080fd5b600160a060020a0381161515610b2557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035460a060020a900460ff1681565b600160a060020a033316600081815260208190526040808220805490839055905190929183156108fc02918491818181858888f193505050501515610bbf57600160a060020a03331660009081526020819052604090208190555b50565b60035460a060020a900460ff1615610bd957600080fd5b610be1611000565b600160a060020a031633600160a060020a0316141515610c0057600080fd5b600160a060020a038216600090815260096020908152604080832084845290915281205411610c2e57600080fd5b600160a060020a03919091166000908152600960209081526040808320938352929052208054600019019055565b606080606080606080606080600080600080600680549050604051908082528060200260200182016040528015610c9d578160200160208202803883390190505b506006546040805182815260208084028201019091529199508015610ccc578160200160208202803883390190505b506006546040805182815260208084028201019091529198508015610cfb578160200160208202803883390190505b506006546040805182815260208084028201019091529197508015610d2a578160200160208202803883390190505b50945060009350600192505b600654831015610e6857600083815260056020526040902054600680549193509084908110610d6157fe5b600091825260209091206002909102015490508015610e5d578c600160a060020a0316600684815481101515610d9357fe5b6000918252602090912060016002909202010154600160a060020a03161415610e5d57828685815181101515610dc557fe5b6020908102909101015287518290899086908110610ddf57fe5b6020908102909101015286518190889086908110610df957fe5b602090810290910101526006805484908110610e1157fe5b60009182526020909120600160029092020101548551600160a060020a0390911690869086908110610e3f57fe5b600160a060020a039092166020928302909101909101526001909301925b600190920191610d36565b50959b949a5092985090965091945050505050565b6060806060806000600a600033600160a060020a0316600160a060020a0316815260200190815260200160002080549050604051908082528060200260200182016040528015610ed7578160200160208202803883390190505b50600160a060020a0333166000908152600a602090815260409182902054825181815281830281019092019092529194508015610f1e578160200160208202803883390190505b509150600090505b600160a060020a0333166000908152600a6020526040902054811015610ff657600160a060020a0333166000908152600a60205260409020805482908110610f6a57fe5b90600052602060002001548382815181101515610f8357fe5b6020908102909101810191909152600160a060020a0333166000908152600982526040808220600a9093528120805484908110610fbc57fe5b90600052602060002001548152602001908152602001600020548282815181101515610fe457fe5b60209081029091010152600101610f26565b5090939092509050565b600b546101009004600160a060020a031690565b600b5460ff1681565b60008060006008548510151561103257600080fd5b61103a611000565b600160a060020a031633600160a060020a031614151561105957600080fd5b6000851161106657600080fd5b61107086856116f2565b600086815260046020526040902054925082151561115157604080518082018252868152600160a060020a03868116602080840191825260068054600181018255600091825294517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600287029081019190915592517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40909301805473ffffffffffffffffffffffffffffffffffffffff1916939094169290921790925589815260048252838120839055828152600590915291909120879055915061119f565b600680548490811061115f57fe5b6000918252602090912060029091020185815560018101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03871617905590505b505050505050565b60006111b1611833565b6003546000908190819060a060020a900460ff16156111cf57600080fd5b600087116111dc57600080fd5b6000888152600460205260409020546006805491965090869081106111fd57fe5b6000918252602091829020604080518082019091526002909202018054808352600190910154600160a060020a0316928201929092529450151561124057600080fd5b505050602081015181513390600160a060020a03808416908316141561126557600080fd5b61126f8188611782565b341461127a57600080fd5b8580156112a85750600160a060020a03331660009081526009602090815260408083208b8452909152902054155b156112d957600160a060020a0333166000908152600a60209081526040822080546001810182559083529120018890555b33600160a060020a031660009081526009602090815260408083208b8452909152902080548801905560075461131290849034906117b8565b60408051600160a060020a033381168252851660208201528082018a90526060810189905234608082015290517f6825106c47586fb4e428378780ec1db9a84b062c6f8070b7e2aa0584c0c8f75c9181900360a00190a15050505050505050565b60035433600160a060020a039081169116148061139e575060015433600160a060020a039081169116145b806113b7575060025433600160a060020a039081169116145b15156113c257600080fd5b60035460a060020a900460ff16156113d957600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a179055565b600354600160a060020a031681565b60056020526000908152604090205481565b606080606080606080606080600080600080600680549050604051908082528060200260200182016040528015611461578160200160208202803883390190505b506006546040805182815260208084028201019091529199508015611490578160200160208202803883390190505b5060065460408051828152602080840282010190915291985080156114bf578160200160208202803883390190505b5060065460408051828152602080840282010190915291975080156114ee578160200160208202803883390190505b50945060009350600192505b6006548310156115f05760008381526005602052604090205460068054919350908490811061152557fe5b6000918252602090912060029091020154905080156115e55782868581518110151561154d57fe5b602090810290910101528751829089908690811061156757fe5b602090810290910101528651819088908690811061158157fe5b60209081029091010152600680548490811061159957fe5b60009182526020909120600160029092020101548551600160a060020a03909116908690869081106115c757fe5b600160a060020a039092166020928302909101909101526001909301925b6001909201916114fa565b50959a949950929750909550919350505050565b600b546101009004600160a060020a031681565b600080611623611833565b60008481526004602052604090205460068054919350908390811061164457fe5b6000918252602091829020604080518082019091526002909202018054808352600190910154600160a060020a03169282019290925291501561168d5780602001519250611692565b600092505b5050919050565b60006020819052908152604090205481565b60046020526000908152604090205481565b60068054829081106116cb57fe5b600091825260209091206002909102018054600190910154909150600160a060020a031682565b600b54604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301523081166024830152604482018690529151610100909304909116916323b872dd9160648082019260009290919082900301818387803b15801561176e57600080fd5b505af115801561119f573d6000803e3d6000fd5b60008083151561179557600091506117b1565b508282028284828115156117a557fe5b04146117ad57fe5b8091505b5092915050565b6103e8818302048083036117cf85826159d86117e6565b15156117df576117df8582611811565b5050505050565b600083600160a060020a0316838390604051600060405180830381858888f198975050505050505050565b600160a060020a03909116600090815260208190526040902080549091019055565b6040805180820190915260008082526020820152905600a165627a7a72305820517910ead418fd504e35b97fdd9587cd4de9da732805f6e0559eab86865d652c0029
Swarm Source
bzzr://517910ead418fd504e35b97fdd9587cd4de9da732805f6e0559eab86865d652c
Loading...
Loading
Loading...
Loading
Net Worth in USD
$8.52
Net Worth in ETH
0.0046
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,851.44 | 0.0046 | $8.52 |
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.