ETH Price: $2,956.24 (-1.03%)
 

Overview

ETH Balance

0.008 ETH

Eth Value

$23.65 (@ $2,956.24/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Change Price50889322018-02-14 13:16:522704 days ago1518614212IN
0x2c38B602...e3ad37310
0 ETH0.000056152
Change Price50889202018-02-14 13:13:002704 days ago1518613980IN
0x2c38B602...e3ad37310
0 ETH0.000056152
Purchase50755472018-02-12 7:02:142707 days ago1518418934IN
0x2c38B602...e3ad37310
0.1 ETH0.000171681
Change Price50730882018-02-11 21:15:112707 days ago1518383711IN
0x2c38B602...e3ad37310
0 ETH0.000028071
Create Promo Num...50730562018-02-11 21:08:052707 days ago1518383285IN
0x2c38B602...e3ad37310
0 ETH0.000106951
Create Promo Num...50730532018-02-11 21:06:582707 days ago1518383218IN
0x2c38B602...e3ad37310
0 ETH0.000106951
Create Promo Num...50730522018-02-11 21:06:472707 days ago1518383207IN
0x2c38B602...e3ad37310
0 ETH0.000213912
Create Promo Num...50730502018-02-11 21:06:022707 days ago1518383162IN
0x2c38B602...e3ad37310
0 ETH0.000243912
Change Price50730502018-02-11 21:06:022707 days ago1518383162IN
0x2c38B602...e3ad37310
0 ETH0.000056152
Create Promo Num...50730452018-02-11 21:04:522707 days ago1518383092IN
0x2c38B602...e3ad37310
0 ETH0.000213912
Create Promo Num...50730012018-02-11 20:54:542707 days ago1518382494IN
0x2c38B602...e3ad37310
0 ETH0.000121821
Create Promo Num...50730012018-02-11 20:54:542707 days ago1518382494IN
0x2c38B602...e3ad37310
0 ETH0.000106821
Create Promo Num...50730002018-02-11 20:54:522707 days ago1518382492IN
0x2c38B602...e3ad37310
0 ETH0.000106821
Create Promo Num...50729982018-02-11 20:54:382707 days ago1518382478IN
0x2c38B602...e3ad37310
0 ETH0.000106821
Create Promo Num...50729952018-02-11 20:53:202707 days ago1518382400IN
0x2c38B602...e3ad37310
0 ETH0.000121821
Create Promo Num...50729582018-02-11 20:43:332707 days ago1518381813IN
0x2c38B602...e3ad37310
0 ETH0.000121951
Create Promo Num...50729542018-02-11 20:42:372707 days ago1518381757IN
0x2c38B602...e3ad37310
0 ETH0.000121951
Create Promo Num...50729512018-02-11 20:42:192707 days ago1518381739IN
0x2c38B602...e3ad37310
0 ETH0.000121951
Create Promo Num...50729482018-02-11 20:41:502707 days ago1518381710IN
0x2c38B602...e3ad37310
0 ETH0.000106951
Create Promo Num...50729272018-02-11 20:36:122707 days ago1518381372IN
0x2c38B602...e3ad37310
0 ETH0.000106951
Set Number Three50709642018-02-11 12:43:502707 days ago1518353030IN
0x2c38B602...e3ad37310
0 ETH0.000027541
Set Number Two50709632018-02-11 12:43:342707 days ago1518353014IN
0x2c38B602...e3ad37310
0 ETH0.000027121
Set Number One50709632018-02-11 12:43:342707 days ago1518353014IN
0x2c38B602...e3ad37310
0 ETH0.000027191
Create Promo Num...50709542018-02-11 12:41:492707 days ago1518352909IN
0x2c38B602...e3ad37310
0 ETH0.000534145
Create Promo Num...50709522018-02-11 12:41:212707 days ago1518352881IN
0x2c38B602...e3ad37310
0 ETH0.000534145
View all transactions

Latest 11 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer50755472018-02-12 7:02:142707 days ago1518418934
0x2c38B602...e3ad37310
0.082 ETH
Transfer50755472018-02-12 7:02:142707 days ago1518418934
0x2c38B602...e3ad37310
0.0005 ETH
Transfer50755472018-02-12 7:02:142707 days ago1518418934
0x2c38B602...e3ad37310
0.0006 ETH
Transfer50755472018-02-12 7:02:142707 days ago1518418934
0x2c38B602...e3ad37310
0.0007 ETH
Transfer50755472018-02-12 7:02:142707 days ago1518418934
0x2c38B602...e3ad37310
0.0008 ETH
Transfer50755472018-02-12 7:02:142707 days ago1518418934
0x2c38B602...e3ad37310
0.0009 ETH
Transfer50755472018-02-12 7:02:142707 days ago1518418934
0x2c38B602...e3ad37310
0.0011 ETH
Transfer50755472018-02-12 7:02:142707 days ago1518418934
0x2c38B602...e3ad37310
0.0012 ETH
Transfer50755472018-02-12 7:02:142707 days ago1518418934
0x2c38B602...e3ad37310
0.0013 ETH
Transfer50755472018-02-12 7:02:142707 days ago1518418934
0x2c38B602...e3ad37310
0.0014 ETH
Transfer50755472018-02-12 7:02:142707 days ago1518418934
0x2c38B602...e3ad37310
0.0015 ETH

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:
EtherNumbers

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

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

pragma solidity ^0.4.18; // solhint-disable-line

/// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens
/// @author Dieter Shirley <[email protected]> (https://github.com/dete)
contract ERC721 {
  // Required methods
  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;

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

  // Optional
  // function name() public view returns (string name);
  // function symbol() public view returns (string symbol);
  // function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 tokenId);
  // function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl);
}

contract EtherNumbers is ERC721 {

  /*** EVENTS ***/

  /// @dev The Birth event is fired whenever a new Gem comes into existence.
  event Birth(uint256 tokenId, string name, address owner);

  /// @dev The TokenSold event is fired whenever a token is sold.
  event TokenSold(uint256 tokenId, uint256 oldPrice, uint256 newPrice, address prevOwner, address winner, string name);

  /// @dev Transfer event as defined in current draft of ERC721.
  ///  ownership is assigned, including births.
  event Transfer(address from, address to, uint256 tokenId);

  /*** CONSTANTS ***/

  /// @notice Name and symbol of the non fungible token, as defined in ERC721.
  string public constant NAME = "EtherNumbers"; // solhint-disable-line
  string public constant SYMBOL = "NumberToken"; // solhint-disable-line

  uint256 private startingPrice = 0.001 ether;
  uint256 private constant PROMO_CREATION_LIMIT = 10000;
  uint256 private firstStepLimit =  0.053613 ether;
  uint256 private secondStepLimit = 0.564957 ether;

  /*** STORAGE ***/

  /// @dev A mapping from gem IDs to the address that owns them. All gems have
  ///  some valid owner address.
  mapping (uint256 => address) public gemIndexToOwner;

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

  /// @dev A mapping from GemIDs to an address that has been approved to call
  ///  transferFrom(). Each Gem can only have one approved address for transfer
  ///  at any time. A zero value means no approval is outstanding.
  mapping (uint256 => address) public gemIndexToApproved;

  // @dev A mapping from GemIDs to the price of the token.
  mapping (uint256 => uint256) private gemIndexToPrice;

  // The addresses of the accounts (or contracts) that can execute actions within each roles.
  address public ceoAddress;
  address public cooAddress;

  uint256 public promoCreatedCount;

  /*** DATATYPES ***/
  struct Gem {
    string name;
  }

  Gem[] private gems;

  /*** ACCESS MODIFIERS ***/
  /// @dev Access modifier for CEO-only functionality
  modifier onlyCEO() {
    require(msg.sender == ceoAddress);
    _;
  }

  /// @dev Access modifier for COO-only functionality
  modifier onlyCOO() {
    require(msg.sender == cooAddress);
    _;
  }

  /// Access modifier for contract owner only functionality
  modifier onlyCLevel() {
    require(
      msg.sender == ceoAddress ||
      msg.sender == cooAddress
    );
    _;
  }

  /*** CONSTRUCTOR ***/
  function EtherNumbers() public {
    ceoAddress = msg.sender;
    cooAddress = msg.sender;
  }

  /*** PUBLIC FUNCTIONS ***/
  /// @notice Grant another address the right to transfer token via takeOwnership() and transferFrom().
  /// @param _to The address to be granted transfer approval. Pass address(0) to
  ///  clear all approvals.
  /// @param _tokenId The ID of the Token that can be transferred if this call succeeds.
  /// @dev Required for ERC-721 compliance.
  function approve(
    address _to,
    uint256 _tokenId
  ) public {
    // Caller must own token.
    require(_owns(msg.sender, _tokenId));

    gemIndexToApproved[_tokenId] = _to;

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

  /// For querying balance of a particular account
  /// @param _owner The address for balance query
  /// @dev Required for ERC-721 compliance.
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return ownershipTokenCount[_owner];
  }

  /// @dev Creates a new promo Person with the given name, with given _price and assignes it to an address.
  function createPromoNumber(address _owner, string _name, uint256 _price) public onlyCOO {
    require(promoCreatedCount < PROMO_CREATION_LIMIT);

    address personOwner = _owner;
    if (personOwner == address(0)) {
      personOwner = cooAddress;
    }

    if (_price <= 0) {
      _price = startingPrice;
    }

    promoCreatedCount++;
    _createGem(_name, personOwner, _price);
  }


  /// @dev Creates a new Gem with the given name.
  function createContractGem(string _name) public onlyCLevel {
    _createGem(_name, address(this), startingPrice);
  }

  /// @notice Returns all the relevant information about a specific gem.
  /// @param _tokenId The tokenId of the gem of interest.
  function getGem(uint256 _tokenId) public view returns (
    string gemName,
    uint256 sellingPrice,
    address owner
  ) {
    Gem storage gem = gems[_tokenId];
    gemName = gem.name;
    sellingPrice = gemIndexToPrice[_tokenId];
    owner = gemIndexToOwner[_tokenId];
  }

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

  /// @dev Required for ERC-721 compliance.
  function name() public pure returns (string) {
    return NAME;
  }

  /// For querying owner of token
  /// @param _tokenId The tokenID for owner inquiry
  /// @dev Required for ERC-721 compliance.
  function ownerOf(uint256 _tokenId)
    public
    view
    returns (address owner)
  {
    owner = gemIndexToOwner[_tokenId];
    require(owner != address(0));
  }

  function payout(address _to) public onlyCLevel {
    _payout(_to);
  }

  // Allows someone to send ether and obtain the token
  function purchase(uint256 _tokenId) public payable {
    address oldOwner = gemIndexToOwner[_tokenId];
    address newOwner = msg.sender;

    uint256 sellingPrice = gemIndexToPrice[_tokenId];

    // Making sure token owner is not sending to self
    require(oldOwner != newOwner);

    // Safety check to prevent against an unexpected 0x0 default.
    require(_addressNotNull(newOwner));

    // Making sure sent amount is greater than or equal to the sellingPrice
    require(msg.value >= sellingPrice);

    uint256 payment = uint256(SafeMath.div(SafeMath.mul(sellingPrice, 82), 100));
    uint256 dividends = uint256(SafeMath.div(SafeMath.mul(sellingPrice, 10), 100));
    uint256 purchaseExcess = SafeMath.sub(msg.value, sellingPrice);

    // Update prices
    if (sellingPrice < firstStepLimit) {
      // first stage
      gemIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 200), 92);
    } else if (sellingPrice < secondStepLimit) {
      // second stage
      gemIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 140), 92);
    } else {
      // third stage
      gemIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 125), 92);
    }


    if (balanceOf(ownerOf(0)) >= 3 || ownerOf(0) == ownerOf(getNumberOne()) || ownerOf(0) == ownerOf(getNumberTwo()) || ownerOf(0) == ownerOf(getNumberThree()) && oldOwner != address(this)) {
        ownerOf(0).transfer(SafeMath.mul(SafeMath.div(dividends, 100), 15));
    } else {
        oldOwner.transfer(SafeMath.mul(SafeMath.div(dividends, 100), 15));
    }

    if (balanceOf(ownerOf(1)) >= 3 || ownerOf(1) == ownerOf(getNumberOne()) || ownerOf(1) == ownerOf(getNumberTwo()) || ownerOf(1) == ownerOf(getNumberThree()) && oldOwner != address(this)) {
        ownerOf(1).transfer(SafeMath.mul(SafeMath.div(dividends, 100), 14));
    } else {
        oldOwner.transfer(SafeMath.mul(SafeMath.div(dividends, 100), 14));
    }

    if (balanceOf(ownerOf(2)) >= 3 || ownerOf(2) == ownerOf(getNumberOne()) || ownerOf(2) == ownerOf(getNumberTwo()) || ownerOf(2) == ownerOf(getNumberThree()) && oldOwner != address(this)) {
        ownerOf(2).transfer(SafeMath.mul(SafeMath.div(dividends, 100), 13));
    } else {
        oldOwner.transfer(SafeMath.mul(SafeMath.div(dividends, 100), 13));
    }

    if (balanceOf(ownerOf(3)) >= 3 || ownerOf(3) == ownerOf(getNumberOne()) || ownerOf(3) == ownerOf(getNumberTwo()) || ownerOf(3) == ownerOf(getNumberThree()) && oldOwner != address(this)) {
        ownerOf(3).transfer(SafeMath.mul(SafeMath.div(dividends, 100), 12));
    } else {
        oldOwner.transfer(SafeMath.mul(SafeMath.div(dividends, 100), 12));
    }

    if (balanceOf(ownerOf(4)) >= 3 || ownerOf(4) == ownerOf(getNumberOne()) || ownerOf(4) == ownerOf(getNumberTwo()) || ownerOf(4) == ownerOf(getNumberThree()) && oldOwner != address(this)) {
        ownerOf(4).transfer(SafeMath.mul(SafeMath.div(dividends, 100), 11));
    } else {
        oldOwner.transfer(SafeMath.mul(SafeMath.div(dividends, 100), 11));
    }

    if (balanceOf(ownerOf(5)) >= 3 || ownerOf(5) == ownerOf(getNumberOne()) || ownerOf(5) == ownerOf(getNumberTwo()) || ownerOf(5) == ownerOf(getNumberThree()) && oldOwner != address(this)) {
        ownerOf(5).transfer(SafeMath.mul(SafeMath.div(dividends, 100), 9));
    } else {
        oldOwner.transfer(SafeMath.mul(SafeMath.div(dividends, 100), 9));
    }

    if (balanceOf(ownerOf(6)) >= 3 || ownerOf(6) == ownerOf(getNumberOne()) || ownerOf(6) == ownerOf(getNumberTwo()) || ownerOf(6) == ownerOf(getNumberThree()) && oldOwner != address(this)) {
        ownerOf(6).transfer(SafeMath.mul(SafeMath.div(dividends, 100), 8));
    } else {
        oldOwner.transfer(SafeMath.mul(SafeMath.div(dividends, 100), 8));
    }

    if (balanceOf(ownerOf(7)) >= 3 || ownerOf(7) == ownerOf(getNumberOne()) || ownerOf(7) == ownerOf(getNumberTwo()) || ownerOf(7) == ownerOf(getNumberThree()) && oldOwner != address(this)) {
        ownerOf(7).transfer(SafeMath.mul(SafeMath.div(dividends, 100), 7));
    } else {
        oldOwner.transfer(SafeMath.mul(SafeMath.div(dividends, 100), 7));
    }

    if (balanceOf(ownerOf(8)) >= 3 || ownerOf(8) == ownerOf(getNumberOne()) || ownerOf(8) == ownerOf(getNumberTwo()) || ownerOf(8) == ownerOf(getNumberThree()) && oldOwner != address(this)) {
        ownerOf(8).transfer(SafeMath.mul(SafeMath.div(dividends, 100), 6));
    } else {
        oldOwner.transfer(SafeMath.mul(SafeMath.div(dividends, 100), 6));
    }

    if (balanceOf(ownerOf(9)) >= 3 || ownerOf(9) == ownerOf(getNumberOne()) || ownerOf(9) == ownerOf(getNumberTwo()) || ownerOf(9) == ownerOf(getNumberThree()) && oldOwner != address(this)) {
        ownerOf(9).transfer(SafeMath.mul(SafeMath.div(dividends, 100), 5));
    } else {
        oldOwner.transfer(SafeMath.mul(SafeMath.div(dividends, 100), 5));
    }


    _transfer(oldOwner, newOwner, _tokenId);

    // Pay previous tokenOwner if owner is not contract
    if (oldOwner != address(this)) {
      oldOwner.transfer(payment); //(1-0.08)
    }




    TokenSold(_tokenId, sellingPrice, gemIndexToPrice[_tokenId], oldOwner, newOwner, gems[_tokenId].name);

    msg.sender.transfer(purchaseExcess);
  }


    uint256 numberOne;
    uint256 numberTwo;
    uint256 numberThree;


  function setNumberOne(uint256 number) public onlyCEO {
      numberOne = number;
  }

  function setNumberTwo(uint256 number) public onlyCEO {
      numberTwo = number;
  }

  function setNumberThree(uint256 number) public onlyCEO {
      numberThree = number;
  }

  function getNumberOne() public view returns (uint256 dailyNumber) {
      return numberOne;
  }

  function getNumberTwo() public view returns (uint256 dailyNumber) {
      return numberTwo;
  }

  function getNumberThree() public view returns (uint256 dailyNumber) {
      return numberThree;
  }




  function changePrice(uint256 _tokenId) public  {
    require(_owns(msg.sender, _tokenId));

    uint256 currentPrice = gemIndexToPrice[_tokenId];
    uint256 onePercent = SafeMath.div(currentPrice, 100);
    uint256 newPrice = SafeMath.mul(onePercent,95);
    gemIndexToPrice[_tokenId] = newPrice;

  }

  function priceOf(uint256 _tokenId) public view returns (uint256 price) {
    return gemIndexToPrice[_tokenId];
  }

  /// @dev Assigns a new address to act as the CEO. Only available to the current CEO.
  /// @param _newCEO The address of the new CEO
  function setCEO(address _newCEO) public onlyCEO {
    require(_newCEO != address(0));

    ceoAddress = _newCEO;
  }

  /// @dev Assigns a new address to act as the COO. Only available to the current COO.
  /// @param _newCOO The address of the new COO
  function setCOO(address _newCOO) public onlyCEO {
    require(_newCOO != address(0));

    cooAddress = _newCOO;
  }

  /// @dev Required for ERC-721 compliance.
  function symbol() public pure returns (string) {
    return SYMBOL;
  }

  /// @notice Allow pre-approved user to take ownership of a token
  /// @param _tokenId The ID of the Token that can be transferred if this call succeeds.
  /// @dev Required for ERC-721 compliance.
  function takeOwnership(uint256 _tokenId) public {
    address newOwner = msg.sender;
    address oldOwner = gemIndexToOwner[_tokenId];

    // Safety check to prevent against an unexpected 0x0 default.
    require(_addressNotNull(newOwner));

    // Making sure transfer is approved
    require(_approved(newOwner, _tokenId));

    _transfer(oldOwner, newOwner, _tokenId);
  }

  /// @param _owner The owner whose celebrity tokens we are interested in.
  /// @dev This method MUST NEVER be called by smart contract code. First, it's fairly
  ///  expensive (it walks the entire Gems array looking for gems belonging to owner),
  ///  but it also returns a dynamic array, which is only supported for web3 calls, and
  ///  not contract-to-contract calls.
  function tokensOfOwner(address _owner) public view returns(uint256[] ownerTokens) {
    uint256 tokenCount = balanceOf(_owner);
    if (tokenCount == 0) {
        // Return an empty array
      return new uint256[](0);
    } else {
      uint256[] memory result = new uint256[](tokenCount);
      uint256 totalGems = totalSupply();
      uint256 resultIndex = 0;

      uint256 gemId;
      for (gemId = 0; gemId <= totalGems; gemId++) {
        if (gemIndexToOwner[gemId] == _owner) {
          result[resultIndex] = gemId;
          resultIndex++;
        }
      }
      return result;
    }
  }

  /// For querying totalSupply of token
  /// @dev Required for ERC-721 compliance.
  function totalSupply() public view returns (uint256 total) {
    return gems.length;
  }

  /// Owner initates the transfer of the token to another account
  /// @param _to The address for the token to be transferred to.
  /// @param _tokenId The ID of the Token that can be transferred if this call succeeds.
  /// @dev Required for ERC-721 compliance.
  function transfer(
    address _to,
    uint256 _tokenId
  ) public {
    require(_owns(msg.sender, _tokenId));
    require(_addressNotNull(_to));

    _transfer(msg.sender, _to, _tokenId);
  }

  /// Third-party initiates transfer of token from address _from to address _to
  /// @param _from The address for the token to be transferred from.
  /// @param _to The address for the token to be transferred to.
  /// @param _tokenId The ID of the Token that can be transferred if this call succeeds.
  /// @dev Required for ERC-721 compliance.
  function transferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  ) public {
    require(_owns(_from, _tokenId));
    require(_approved(_to, _tokenId));
    require(_addressNotNull(_to));

    _transfer(_from, _to, _tokenId);
  }

  /*** PRIVATE FUNCTIONS ***/
  /// Safety check on _to address to prevent against an unexpected 0x0 default.
  function _addressNotNull(address _to) private pure returns (bool) {
    return _to != address(0);
  }

  /// For checking approval of transfer for address _to
  function _approved(address _to, uint256 _tokenId) private view returns (bool) {
    return gemIndexToApproved[_tokenId] == _to;
  }

  /// For creating Gem
  function _createGem(string _name, address _owner, uint256 _price) private {
    Gem memory _gem = Gem({
      name: _name
    });
    uint256 newGemId = gems.push(_gem) - 1;

    // It's probably never going to happen, 4 billion tokens are A LOT, but
    // let's just be 100% sure we never let this happen.
    require(newGemId == uint256(uint32(newGemId)));

    Birth(newGemId, _name, _owner);

    gemIndexToPrice[newGemId] = _price;

    // This will assign ownership, and also emit the Transfer event as
    // per ERC721 draft
    _transfer(address(0), _owner, newGemId);
  }

  /// Check for token ownership
  function _owns(address claimant, uint256 _tokenId) private view returns (bool) {
    return claimant == gemIndexToOwner[_tokenId];
  }

  /// For paying out balance on contract
  function _payout(address _to) private {
    if (_to == address(0)) {
      ceoAddress.transfer(this.balance);
    } else {
      _to.transfer(this.balance);
    }
  }

  /// @dev Assigns ownership of a specific Gem to an address.
  function _transfer(address _from, address _to, uint256 _tokenId) private {
    // Since the number of gems is capped to 2^32 we can't overflow this
    ownershipTokenCount[_to]++;
    //transfer ownership
    gemIndexToOwner[_tokenId] = _to;

    // When creating new gems _from is 0x0, but we can't account that address.
    if (_from != address(0)) {
      ownershipTokenCount[_from]--;
      // clear any previously approved ownership exchange
      delete gemIndexToApproved[_tokenId];
    }

    // Emit the transfer event.
    Transfer(_from, _to, _tokenId);
  }
}
library SafeMath {

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

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

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

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

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"promoCreatedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"gemIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNumberTwo","outputs":[{"name":"dailyNumber","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"payout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_name","type":"string"},{"name":"_price","type":"uint256"}],"name":"createPromoNumber","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"total","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"}],"name":"setNumberTwo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"}],"name":"setNumberOne","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNumberThree","outputs":[{"name":"dailyNumber","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"ownerTokens","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNumberOne","outputs":[{"name":"dailyNumber","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"changePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getGem","outputs":[{"name":"gemName","type":"string"},{"name":"sellingPrice","type":"uint256"},{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"priceOf","outputs":[{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"gemIndexToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"}],"name":"setNumberThree","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"createContractGem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"purchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"owner","type":"address"}],"name":"Birth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"oldPrice","type":"uint256"},{"indexed":false,"name":"newPrice","type":"uint256"},{"indexed":false,"name":"prevOwner","type":"address"},{"indexed":false,"name":"winner","type":"address"},{"indexed":false,"name":"name","type":"string"}],"name":"TokenSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"}]

606060405266038d7ea4c6800060005566be78bd4c57d0006001556707d72165f25ed000600255341561003157600080fd5b60078054600160a060020a033316600160a060020a031991821681179092556008805490911690911790556122fd8061006b6000396000f3006060604052600436106101a05763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166305e4554681146101a557806306fdde03146101ca57806306fde29d1461025457806308949a7614610286578063095ea7b3146102995780630a0f8168146102bd5780630b7e9c44146102d05780631051db34146102ef578063130c32d91461031657806318160ddd1461037757806320f6469c1461038a57806323b872dd146103a057806327d7874c146103c85780632adb11c2146103e75780632ba73c15146103fd5780636352211e1461041c57806370a08231146104325780637aa9a7f9146104515780638462151c1461046457806390949f11146104d657806395d89b41146104e9578063a2b40d19146104fc578063a3f4df7e14610512578063a9059cbb14610525578063aa723bb714610547578063b047fb50146105ec578063b2e6ceeb146105ff578063b9186d7d14610615578063c0c8d66a1461062b578063ce5a1cdb14610641578063e5a9d39b14610657578063efef39a1146106a8578063f76f8d78146106b3575b600080fd5b34156101b057600080fd5b6101b86106c6565b60405190815260200160405180910390f35b34156101d557600080fd5b6101dd6106cc565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610219578082015183820152602001610201565b50505050905090810190601f1680156102465780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561025f57600080fd5b61026a60043561070e565b604051600160a060020a03909116815260200160405180910390f35b341561029157600080fd5b6101b8610729565b34156102a457600080fd5b6102bb600160a060020a036004351660243561072f565b005b34156102c857600080fd5b61026a6107bb565b34156102db57600080fd5b6102bb600160a060020a03600435166107ca565b34156102fa57600080fd5b61030261080c565b604051901515815260200160405180910390f35b341561032157600080fd5b6102bb60048035600160a060020a03169060446024803590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650509335935061081192505050565b341561038257600080fd5b6101b8610888565b341561039557600080fd5b6102bb60043561088e565b34156103ab57600080fd5b6102bb600160a060020a03600435811690602435166044356108ae565b34156103d357600080fd5b6102bb600160a060020a03600435166108fc565b34156103f257600080fd5b6102bb60043561095b565b341561040857600080fd5b6102bb600160a060020a036004351661097b565b341561042757600080fd5b61026a6004356109da565b341561043d57600080fd5b6101b8600160a060020a0360043516610a03565b341561045c57600080fd5b6101b8610a1e565b341561046f57600080fd5b610483600160a060020a0360043516610a24565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156104c25780820151838201526020016104aa565b505050509050019250505060405180910390f35b34156104e157600080fd5b6101b8610b05565b34156104f457600080fd5b6101dd610b0b565b341561050757600080fd5b6102bb600435610b4c565b341561051d57600080fd5b6101dd610ba7565b341561053057600080fd5b6102bb600160a060020a0360043516602435610bde565b341561055257600080fd5b61055d600435610c16565b60405160208101839052600160a060020a038216604082015260608082528190810185818151815260200191508051906020019080838360005b838110156105af578082015183820152602001610597565b50505050905090810190601f1680156105dc5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34156105f757600080fd5b61026a610d0c565b341561060a57600080fd5b6102bb600435610d1b565b341561062057600080fd5b6101b8600435610d69565b341561063657600080fd5b61026a600435610d7b565b341561064c57600080fd5b6102bb600435610d96565b341561066257600080fd5b6102bb60046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610db695505050505050565b6102bb600435610df9565b34156106be57600080fd5b6101dd611de7565b60095481565b6106d4612183565b60408051908101604052600c81527f45746865724e756d626572730000000000000000000000000000000000000000602082015290505b90565b600560205260009081526040902054600160a060020a031681565b600c5490565b6107393382611e1e565b151561074457600080fd5b60008181526005602052604090819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b600754600160a060020a031681565b60075433600160a060020a03908116911614806107f5575060085433600160a060020a039081169116145b151561080057600080fd5b61080981611e3e565b50565b600190565b60085460009033600160a060020a0390811691161461082f57600080fd5b600954612710901061084057600080fd5b5082600160a060020a03811615156108605750600854600160a060020a03165b6000821161086e5760005491505b600980546001019055610882838284611ec9565b50505050565b600a5490565b60075433600160a060020a039081169116146108a957600080fd5b600c55565b6108b88382611e1e565b15156108c357600080fd5b6108cd8282612005565b15156108d857600080fd5b6108e182612025565b15156108ec57600080fd5b6108f7838383612033565b505050565b60075433600160a060020a0390811691161461091757600080fd5b600160a060020a038116151561092c57600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60075433600160a060020a0390811691161461097657600080fd5b600b55565b60075433600160a060020a0390811691161461099657600080fd5b600160a060020a03811615156109ab57600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600081815260036020526040902054600160a060020a03168015156109fe57600080fd5b919050565b600160a060020a031660009081526004602052604090205490565b600d5490565b610a2c612183565b6000610a36612183565b6000806000610a4487610a03565b9450841515610a74576000604051805910610a5c5750595b90808252806020026020018201604052509550610afb565b84604051805910610a825750595b90808252806020026020018201604052509350610a9d610888565b925060009150600090505b828111610af757600081815260036020526040902054600160a060020a0388811691161415610aef5780848381518110610ade57fe5b602090810290910101526001909101905b600101610aa8565b8395505b5050505050919050565b600b5490565b610b13612183565b60408051908101604052600b81527f4e756d626572546f6b656e0000000000000000000000000000000000000000006020820152905090565b6000806000610b5b3385611e1e565b1515610b6657600080fd5b6000848152600660205260409020549250610b82836064612123565b9150610b8f82605f61213f565b60009485526006602052604090942093909355505050565b60408051908101604052600c81527f45746865724e756d626572730000000000000000000000000000000000000000602082015281565b610be83382611e1e565b1515610bf357600080fd5b610bfc82612025565b1515610c0757600080fd5b610c12338383612033565b5050565b610c1e612183565b6000806000600a85815481101515610c3257fe5b90600052602060002090019050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cd75780601f10610cac57610100808354040283529160200191610cd7565b820191906000526020600020905b815481529060010190602001808311610cba57829003601f168201915b50505060009788525050600660209081526040808820546003909252909620549096600160a060020a03909116945092505050565b600854600160a060020a031681565b6000818152600360205260409020543390600160a060020a0316610d3e82612025565b1515610d4957600080fd5b610d538284612005565b1515610d5e57600080fd5b6108f7818385612033565b60009081526006602052604090205490565b600360205260009081526040902054600160a060020a031681565b60075433600160a060020a03908116911614610db157600080fd5b600d55565b60075433600160a060020a0390811691161480610de1575060085433600160a060020a039081169116145b1515610dec57600080fd5b6108098130600054611ec9565b6000818152600360209081526040808320546006909252822054600160a060020a03918216923392819081908516861415610e3357600080fd5b610e3c85612025565b1515610e4757600080fd5b3484901015610e5557600080fd5b610e6a610e6385605261213f565b6064612123565b9250610e7a610e6385600a61213f565b9150610e863485612171565b9050600154841015610ebb57610ea7610ea08560c861213f565b605c612123565b600088815260066020526040902055610ef1565b600254841015610ed357610ea7610ea085608c61213f565b610ee1610ea085607d61213f565b6000888152600660205260409020555b6003610f05610f0060006109da565b610a03565b101580610f3b5750610f1d610f18610b05565b6109da565b600160a060020a0316610f3060006109da565b600160a060020a0316145b80610f6a5750610f4c610f18610729565b600160a060020a0316610f5f60006109da565b600160a060020a0316145b80610fb65750610f7b610f18610a1e565b600160a060020a0316610f8e60006109da565b600160a060020a0316148015610fb6575030600160a060020a031686600160a060020a031614155b1561101057610fc560006109da565b600160a060020a03166108fc610fe6610fdf856064612123565b600f61213f565b9081150290604051600060405180830381858888f19350505050151561100b57600080fd5b611050565b85600160a060020a03166108fc61102b610fdf856064612123565b9081150290604051600060405180830381858888f19350505050151561105057600080fd5b600361105f610f0060016109da565b1015806110905750611072610f18610b05565b600160a060020a031661108560016109da565b600160a060020a0316145b806110bf57506110a1610f18610729565b600160a060020a03166110b460016109da565b600160a060020a0316145b8061110b57506110d0610f18610a1e565b600160a060020a03166110e360016109da565b600160a060020a031614801561110b575030600160a060020a031686600160a060020a031614155b156111655761111a60016109da565b600160a060020a03166108fc61113b611134856064612123565b600e61213f565b9081150290604051600060405180830381858888f19350505050151561116057600080fd5b6111a5565b85600160a060020a03166108fc611180611134856064612123565b9081150290604051600060405180830381858888f1935050505015156111a557600080fd5b60036111b4610f0060026109da565b1015806111e557506111c7610f18610b05565b600160a060020a03166111da60026109da565b600160a060020a0316145b8061121457506111f6610f18610729565b600160a060020a031661120960026109da565b600160a060020a0316145b806112605750611225610f18610a1e565b600160a060020a031661123860026109da565b600160a060020a0316148015611260575030600160a060020a031686600160a060020a031614155b156112ba5761126f60026109da565b600160a060020a03166108fc611290611289856064612123565b600d61213f565b9081150290604051600060405180830381858888f1935050505015156112b557600080fd5b6112fa565b85600160a060020a03166108fc6112d5611289856064612123565b9081150290604051600060405180830381858888f1935050505015156112fa57600080fd5b6003611309610f0060036109da565b10158061133a575061131c610f18610b05565b600160a060020a031661132f60036109da565b600160a060020a0316145b80611369575061134b610f18610729565b600160a060020a031661135e60036109da565b600160a060020a0316145b806113b5575061137a610f18610a1e565b600160a060020a031661138d60036109da565b600160a060020a03161480156113b5575030600160a060020a031686600160a060020a031614155b1561140f576113c460036109da565b600160a060020a03166108fc6113e56113de856064612123565b600c61213f565b9081150290604051600060405180830381858888f19350505050151561140a57600080fd5b61144f565b85600160a060020a03166108fc61142a6113de856064612123565b9081150290604051600060405180830381858888f19350505050151561144f57600080fd5b600361145e610f0060046109da565b10158061148f5750611471610f18610b05565b600160a060020a031661148460046109da565b600160a060020a0316145b806114be57506114a0610f18610729565b600160a060020a03166114b360046109da565b600160a060020a0316145b8061150a57506114cf610f18610a1e565b600160a060020a03166114e260046109da565b600160a060020a031614801561150a575030600160a060020a031686600160a060020a031614155b156115645761151960046109da565b600160a060020a03166108fc61153a611533856064612123565b600b61213f565b9081150290604051600060405180830381858888f19350505050151561155f57600080fd5b6115a4565b85600160a060020a03166108fc61157f611533856064612123565b9081150290604051600060405180830381858888f1935050505015156115a457600080fd5b60036115b3610f0060056109da565b1015806115e457506115c6610f18610b05565b600160a060020a03166115d960056109da565b600160a060020a0316145b8061161357506115f5610f18610729565b600160a060020a031661160860056109da565b600160a060020a0316145b8061165f5750611624610f18610a1e565b600160a060020a031661163760056109da565b600160a060020a031614801561165f575030600160a060020a031686600160a060020a031614155b156116b95761166e60056109da565b600160a060020a03166108fc61168f611688856064612123565b600961213f565b9081150290604051600060405180830381858888f1935050505015156116b457600080fd5b6116f9565b85600160a060020a03166108fc6116d4611688856064612123565b9081150290604051600060405180830381858888f1935050505015156116f957600080fd5b6003611708610f0060066109da565b101580611739575061171b610f18610b05565b600160a060020a031661172e60066109da565b600160a060020a0316145b80611768575061174a610f18610729565b600160a060020a031661175d60066109da565b600160a060020a0316145b806117b45750611779610f18610a1e565b600160a060020a031661178c60066109da565b600160a060020a03161480156117b4575030600160a060020a031686600160a060020a031614155b1561180e576117c360066109da565b600160a060020a03166108fc6117e46117dd856064612123565b600861213f565b9081150290604051600060405180830381858888f19350505050151561180957600080fd5b61184e565b85600160a060020a03166108fc6118296117dd856064612123565b9081150290604051600060405180830381858888f19350505050151561184e57600080fd5b600361185d610f0060076109da565b10158061188e5750611870610f18610b05565b600160a060020a031661188360076109da565b600160a060020a0316145b806118bd575061189f610f18610729565b600160a060020a03166118b260076109da565b600160a060020a0316145b8061190957506118ce610f18610a1e565b600160a060020a03166118e160076109da565b600160a060020a0316148015611909575030600160a060020a031686600160a060020a031614155b156119635761191860076109da565b600160a060020a03166108fc611939611932856064612123565b600761213f565b9081150290604051600060405180830381858888f19350505050151561195e57600080fd5b6119a3565b85600160a060020a03166108fc61197e611932856064612123565b9081150290604051600060405180830381858888f1935050505015156119a357600080fd5b60036119b2610f0060086109da565b1015806119e357506119c5610f18610b05565b600160a060020a03166119d860086109da565b600160a060020a0316145b80611a1257506119f4610f18610729565b600160a060020a0316611a0760086109da565b600160a060020a0316145b80611a5e5750611a23610f18610a1e565b600160a060020a0316611a3660086109da565b600160a060020a0316148015611a5e575030600160a060020a031686600160a060020a031614155b15611ab857611a6d60086109da565b600160a060020a03166108fc611a8e611a87856064612123565b600661213f565b9081150290604051600060405180830381858888f193505050501515611ab357600080fd5b611af8565b85600160a060020a03166108fc611ad3611a87856064612123565b9081150290604051600060405180830381858888f193505050501515611af857600080fd5b6003611b07610f0060096109da565b101580611b385750611b1a610f18610b05565b600160a060020a0316611b2d60096109da565b600160a060020a0316145b80611b675750611b49610f18610729565b600160a060020a0316611b5c60096109da565b600160a060020a0316145b80611bb35750611b78610f18610a1e565b600160a060020a0316611b8b60096109da565b600160a060020a0316148015611bb3575030600160a060020a031686600160a060020a031614155b15611c0d57611bc260096109da565b600160a060020a03166108fc611be3611bdc856064612123565b600561213f565b9081150290604051600060405180830381858888f193505050501515611c0857600080fd5b611c4d565b85600160a060020a03166108fc611c28611bdc856064612123565b9081150290604051600060405180830381858888f193505050501515611c4d57600080fd5b611c58868689612033565b30600160a060020a031686600160a060020a0316141515611ca457600160a060020a03861683156108fc0284604051600060405180830381858888f193505050501515611ca457600080fd5b7e8201e7bcbf010c2c07de59d6e97cb7e3cf67a46125c49cbc89b9d2cde1f48f8785600660008b8152602001908152602001600020548989600a8d815481101515611ceb57fe5b60009182526020909120016040518681526020810186905260408101859052600160a060020a0380851660608301528316608082015260c060a082018181528354600260001961010060018416150201909116049183018290529060e083019084908015611d9a5780601f10611d6f57610100808354040283529160200191611d9a565b820191906000526020600020905b815481529060010190602001808311611d7d57829003601f168201915b505097505050505050505060405180910390a1600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515611dde57600080fd5b50505050505050565b60408051908101604052600b81527f4e756d626572546f6b656e000000000000000000000000000000000000000000602082015281565b600090815260036020526040902054600160a060020a0390811691161490565b600160a060020a0381161515611e8c57600754600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515611e8757600080fd5b610809565b80600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151561080957600080fd5b611ed1612195565b60006020604051908101604052858152600a8054919350600191808301611ef883826121ae565b60009283526020909220859101815181908051611f199291602001906121d2565b50505003905063ffffffff81168114611f3157600080fd5b7fb3b0cf861f168bcdb275c69da97b2543631552ba562628aa3c7317d4a6089ef2818686604051838152600160a060020a038216604082015260606020820181815290820184818151815260200191508051906020019080838360005b83811015611fa6578082015183820152602001611f8e565b50505050905090810190601f168015611fd35780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a16000818152600660205260408120849055611ffe908583612033565b5050505050565b600090815260056020526040902054600160a060020a0391821691161490565b600160a060020a0316151590565b600160a060020a0380831660008181526004602090815260408083208054600101905585835260039091529020805473ffffffffffffffffffffffffffffffffffffffff191690911790558316156120ce57600160a060020a0383166000908152600460209081526040808320805460001901905583835260059091529020805473ffffffffffffffffffffffffffffffffffffffff191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b600080828481151561213157fe5b0490508091505b5092915050565b6000808315156121525760009150612138565b5082820282848281151561216257fe5b041461216a57fe5b9392505050565b60008282111561217d57fe5b50900390565b60206040519081016040526000815290565b6020604051908101604052806121a9612183565b905290565b8154818355818115116108f7576000838152602090206108f7918101908301612250565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061221357805160ff1916838001178555612240565b82800160010185558215612240579182015b82811115612240578251825591602001919060010190612225565b5061224c929150612273565b5090565b61070b91905b8082111561224c57600061226a828261228d565b50600101612256565b61070b91905b8082111561224c5760008155600101612279565b50805460018160011615610100020316600290046000825580601f106122b35750610809565b601f01602090049060005260206000209081019061080991906122735600a165627a7a72305820e383ed00257cf9fd381d79fdc8ca1441e0fca454f90075b198f4ac527e24fdbc0029

Deployed Bytecode

0x6060604052600436106101a05763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166305e4554681146101a557806306fdde03146101ca57806306fde29d1461025457806308949a7614610286578063095ea7b3146102995780630a0f8168146102bd5780630b7e9c44146102d05780631051db34146102ef578063130c32d91461031657806318160ddd1461037757806320f6469c1461038a57806323b872dd146103a057806327d7874c146103c85780632adb11c2146103e75780632ba73c15146103fd5780636352211e1461041c57806370a08231146104325780637aa9a7f9146104515780638462151c1461046457806390949f11146104d657806395d89b41146104e9578063a2b40d19146104fc578063a3f4df7e14610512578063a9059cbb14610525578063aa723bb714610547578063b047fb50146105ec578063b2e6ceeb146105ff578063b9186d7d14610615578063c0c8d66a1461062b578063ce5a1cdb14610641578063e5a9d39b14610657578063efef39a1146106a8578063f76f8d78146106b3575b600080fd5b34156101b057600080fd5b6101b86106c6565b60405190815260200160405180910390f35b34156101d557600080fd5b6101dd6106cc565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610219578082015183820152602001610201565b50505050905090810190601f1680156102465780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561025f57600080fd5b61026a60043561070e565b604051600160a060020a03909116815260200160405180910390f35b341561029157600080fd5b6101b8610729565b34156102a457600080fd5b6102bb600160a060020a036004351660243561072f565b005b34156102c857600080fd5b61026a6107bb565b34156102db57600080fd5b6102bb600160a060020a03600435166107ca565b34156102fa57600080fd5b61030261080c565b604051901515815260200160405180910390f35b341561032157600080fd5b6102bb60048035600160a060020a03169060446024803590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650509335935061081192505050565b341561038257600080fd5b6101b8610888565b341561039557600080fd5b6102bb60043561088e565b34156103ab57600080fd5b6102bb600160a060020a03600435811690602435166044356108ae565b34156103d357600080fd5b6102bb600160a060020a03600435166108fc565b34156103f257600080fd5b6102bb60043561095b565b341561040857600080fd5b6102bb600160a060020a036004351661097b565b341561042757600080fd5b61026a6004356109da565b341561043d57600080fd5b6101b8600160a060020a0360043516610a03565b341561045c57600080fd5b6101b8610a1e565b341561046f57600080fd5b610483600160a060020a0360043516610a24565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156104c25780820151838201526020016104aa565b505050509050019250505060405180910390f35b34156104e157600080fd5b6101b8610b05565b34156104f457600080fd5b6101dd610b0b565b341561050757600080fd5b6102bb600435610b4c565b341561051d57600080fd5b6101dd610ba7565b341561053057600080fd5b6102bb600160a060020a0360043516602435610bde565b341561055257600080fd5b61055d600435610c16565b60405160208101839052600160a060020a038216604082015260608082528190810185818151815260200191508051906020019080838360005b838110156105af578082015183820152602001610597565b50505050905090810190601f1680156105dc5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34156105f757600080fd5b61026a610d0c565b341561060a57600080fd5b6102bb600435610d1b565b341561062057600080fd5b6101b8600435610d69565b341561063657600080fd5b61026a600435610d7b565b341561064c57600080fd5b6102bb600435610d96565b341561066257600080fd5b6102bb60046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610db695505050505050565b6102bb600435610df9565b34156106be57600080fd5b6101dd611de7565b60095481565b6106d4612183565b60408051908101604052600c81527f45746865724e756d626572730000000000000000000000000000000000000000602082015290505b90565b600560205260009081526040902054600160a060020a031681565b600c5490565b6107393382611e1e565b151561074457600080fd5b60008181526005602052604090819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b600754600160a060020a031681565b60075433600160a060020a03908116911614806107f5575060085433600160a060020a039081169116145b151561080057600080fd5b61080981611e3e565b50565b600190565b60085460009033600160a060020a0390811691161461082f57600080fd5b600954612710901061084057600080fd5b5082600160a060020a03811615156108605750600854600160a060020a03165b6000821161086e5760005491505b600980546001019055610882838284611ec9565b50505050565b600a5490565b60075433600160a060020a039081169116146108a957600080fd5b600c55565b6108b88382611e1e565b15156108c357600080fd5b6108cd8282612005565b15156108d857600080fd5b6108e182612025565b15156108ec57600080fd5b6108f7838383612033565b505050565b60075433600160a060020a0390811691161461091757600080fd5b600160a060020a038116151561092c57600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60075433600160a060020a0390811691161461097657600080fd5b600b55565b60075433600160a060020a0390811691161461099657600080fd5b600160a060020a03811615156109ab57600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600081815260036020526040902054600160a060020a03168015156109fe57600080fd5b919050565b600160a060020a031660009081526004602052604090205490565b600d5490565b610a2c612183565b6000610a36612183565b6000806000610a4487610a03565b9450841515610a74576000604051805910610a5c5750595b90808252806020026020018201604052509550610afb565b84604051805910610a825750595b90808252806020026020018201604052509350610a9d610888565b925060009150600090505b828111610af757600081815260036020526040902054600160a060020a0388811691161415610aef5780848381518110610ade57fe5b602090810290910101526001909101905b600101610aa8565b8395505b5050505050919050565b600b5490565b610b13612183565b60408051908101604052600b81527f4e756d626572546f6b656e0000000000000000000000000000000000000000006020820152905090565b6000806000610b5b3385611e1e565b1515610b6657600080fd5b6000848152600660205260409020549250610b82836064612123565b9150610b8f82605f61213f565b60009485526006602052604090942093909355505050565b60408051908101604052600c81527f45746865724e756d626572730000000000000000000000000000000000000000602082015281565b610be83382611e1e565b1515610bf357600080fd5b610bfc82612025565b1515610c0757600080fd5b610c12338383612033565b5050565b610c1e612183565b6000806000600a85815481101515610c3257fe5b90600052602060002090019050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cd75780601f10610cac57610100808354040283529160200191610cd7565b820191906000526020600020905b815481529060010190602001808311610cba57829003601f168201915b50505060009788525050600660209081526040808820546003909252909620549096600160a060020a03909116945092505050565b600854600160a060020a031681565b6000818152600360205260409020543390600160a060020a0316610d3e82612025565b1515610d4957600080fd5b610d538284612005565b1515610d5e57600080fd5b6108f7818385612033565b60009081526006602052604090205490565b600360205260009081526040902054600160a060020a031681565b60075433600160a060020a03908116911614610db157600080fd5b600d55565b60075433600160a060020a0390811691161480610de1575060085433600160a060020a039081169116145b1515610dec57600080fd5b6108098130600054611ec9565b6000818152600360209081526040808320546006909252822054600160a060020a03918216923392819081908516861415610e3357600080fd5b610e3c85612025565b1515610e4757600080fd5b3484901015610e5557600080fd5b610e6a610e6385605261213f565b6064612123565b9250610e7a610e6385600a61213f565b9150610e863485612171565b9050600154841015610ebb57610ea7610ea08560c861213f565b605c612123565b600088815260066020526040902055610ef1565b600254841015610ed357610ea7610ea085608c61213f565b610ee1610ea085607d61213f565b6000888152600660205260409020555b6003610f05610f0060006109da565b610a03565b101580610f3b5750610f1d610f18610b05565b6109da565b600160a060020a0316610f3060006109da565b600160a060020a0316145b80610f6a5750610f4c610f18610729565b600160a060020a0316610f5f60006109da565b600160a060020a0316145b80610fb65750610f7b610f18610a1e565b600160a060020a0316610f8e60006109da565b600160a060020a0316148015610fb6575030600160a060020a031686600160a060020a031614155b1561101057610fc560006109da565b600160a060020a03166108fc610fe6610fdf856064612123565b600f61213f565b9081150290604051600060405180830381858888f19350505050151561100b57600080fd5b611050565b85600160a060020a03166108fc61102b610fdf856064612123565b9081150290604051600060405180830381858888f19350505050151561105057600080fd5b600361105f610f0060016109da565b1015806110905750611072610f18610b05565b600160a060020a031661108560016109da565b600160a060020a0316145b806110bf57506110a1610f18610729565b600160a060020a03166110b460016109da565b600160a060020a0316145b8061110b57506110d0610f18610a1e565b600160a060020a03166110e360016109da565b600160a060020a031614801561110b575030600160a060020a031686600160a060020a031614155b156111655761111a60016109da565b600160a060020a03166108fc61113b611134856064612123565b600e61213f565b9081150290604051600060405180830381858888f19350505050151561116057600080fd5b6111a5565b85600160a060020a03166108fc611180611134856064612123565b9081150290604051600060405180830381858888f1935050505015156111a557600080fd5b60036111b4610f0060026109da565b1015806111e557506111c7610f18610b05565b600160a060020a03166111da60026109da565b600160a060020a0316145b8061121457506111f6610f18610729565b600160a060020a031661120960026109da565b600160a060020a0316145b806112605750611225610f18610a1e565b600160a060020a031661123860026109da565b600160a060020a0316148015611260575030600160a060020a031686600160a060020a031614155b156112ba5761126f60026109da565b600160a060020a03166108fc611290611289856064612123565b600d61213f565b9081150290604051600060405180830381858888f1935050505015156112b557600080fd5b6112fa565b85600160a060020a03166108fc6112d5611289856064612123565b9081150290604051600060405180830381858888f1935050505015156112fa57600080fd5b6003611309610f0060036109da565b10158061133a575061131c610f18610b05565b600160a060020a031661132f60036109da565b600160a060020a0316145b80611369575061134b610f18610729565b600160a060020a031661135e60036109da565b600160a060020a0316145b806113b5575061137a610f18610a1e565b600160a060020a031661138d60036109da565b600160a060020a03161480156113b5575030600160a060020a031686600160a060020a031614155b1561140f576113c460036109da565b600160a060020a03166108fc6113e56113de856064612123565b600c61213f565b9081150290604051600060405180830381858888f19350505050151561140a57600080fd5b61144f565b85600160a060020a03166108fc61142a6113de856064612123565b9081150290604051600060405180830381858888f19350505050151561144f57600080fd5b600361145e610f0060046109da565b10158061148f5750611471610f18610b05565b600160a060020a031661148460046109da565b600160a060020a0316145b806114be57506114a0610f18610729565b600160a060020a03166114b360046109da565b600160a060020a0316145b8061150a57506114cf610f18610a1e565b600160a060020a03166114e260046109da565b600160a060020a031614801561150a575030600160a060020a031686600160a060020a031614155b156115645761151960046109da565b600160a060020a03166108fc61153a611533856064612123565b600b61213f565b9081150290604051600060405180830381858888f19350505050151561155f57600080fd5b6115a4565b85600160a060020a03166108fc61157f611533856064612123565b9081150290604051600060405180830381858888f1935050505015156115a457600080fd5b60036115b3610f0060056109da565b1015806115e457506115c6610f18610b05565b600160a060020a03166115d960056109da565b600160a060020a0316145b8061161357506115f5610f18610729565b600160a060020a031661160860056109da565b600160a060020a0316145b8061165f5750611624610f18610a1e565b600160a060020a031661163760056109da565b600160a060020a031614801561165f575030600160a060020a031686600160a060020a031614155b156116b95761166e60056109da565b600160a060020a03166108fc61168f611688856064612123565b600961213f565b9081150290604051600060405180830381858888f1935050505015156116b457600080fd5b6116f9565b85600160a060020a03166108fc6116d4611688856064612123565b9081150290604051600060405180830381858888f1935050505015156116f957600080fd5b6003611708610f0060066109da565b101580611739575061171b610f18610b05565b600160a060020a031661172e60066109da565b600160a060020a0316145b80611768575061174a610f18610729565b600160a060020a031661175d60066109da565b600160a060020a0316145b806117b45750611779610f18610a1e565b600160a060020a031661178c60066109da565b600160a060020a03161480156117b4575030600160a060020a031686600160a060020a031614155b1561180e576117c360066109da565b600160a060020a03166108fc6117e46117dd856064612123565b600861213f565b9081150290604051600060405180830381858888f19350505050151561180957600080fd5b61184e565b85600160a060020a03166108fc6118296117dd856064612123565b9081150290604051600060405180830381858888f19350505050151561184e57600080fd5b600361185d610f0060076109da565b10158061188e5750611870610f18610b05565b600160a060020a031661188360076109da565b600160a060020a0316145b806118bd575061189f610f18610729565b600160a060020a03166118b260076109da565b600160a060020a0316145b8061190957506118ce610f18610a1e565b600160a060020a03166118e160076109da565b600160a060020a0316148015611909575030600160a060020a031686600160a060020a031614155b156119635761191860076109da565b600160a060020a03166108fc611939611932856064612123565b600761213f565b9081150290604051600060405180830381858888f19350505050151561195e57600080fd5b6119a3565b85600160a060020a03166108fc61197e611932856064612123565b9081150290604051600060405180830381858888f1935050505015156119a357600080fd5b60036119b2610f0060086109da565b1015806119e357506119c5610f18610b05565b600160a060020a03166119d860086109da565b600160a060020a0316145b80611a1257506119f4610f18610729565b600160a060020a0316611a0760086109da565b600160a060020a0316145b80611a5e5750611a23610f18610a1e565b600160a060020a0316611a3660086109da565b600160a060020a0316148015611a5e575030600160a060020a031686600160a060020a031614155b15611ab857611a6d60086109da565b600160a060020a03166108fc611a8e611a87856064612123565b600661213f565b9081150290604051600060405180830381858888f193505050501515611ab357600080fd5b611af8565b85600160a060020a03166108fc611ad3611a87856064612123565b9081150290604051600060405180830381858888f193505050501515611af857600080fd5b6003611b07610f0060096109da565b101580611b385750611b1a610f18610b05565b600160a060020a0316611b2d60096109da565b600160a060020a0316145b80611b675750611b49610f18610729565b600160a060020a0316611b5c60096109da565b600160a060020a0316145b80611bb35750611b78610f18610a1e565b600160a060020a0316611b8b60096109da565b600160a060020a0316148015611bb3575030600160a060020a031686600160a060020a031614155b15611c0d57611bc260096109da565b600160a060020a03166108fc611be3611bdc856064612123565b600561213f565b9081150290604051600060405180830381858888f193505050501515611c0857600080fd5b611c4d565b85600160a060020a03166108fc611c28611bdc856064612123565b9081150290604051600060405180830381858888f193505050501515611c4d57600080fd5b611c58868689612033565b30600160a060020a031686600160a060020a0316141515611ca457600160a060020a03861683156108fc0284604051600060405180830381858888f193505050501515611ca457600080fd5b7e8201e7bcbf010c2c07de59d6e97cb7e3cf67a46125c49cbc89b9d2cde1f48f8785600660008b8152602001908152602001600020548989600a8d815481101515611ceb57fe5b60009182526020909120016040518681526020810186905260408101859052600160a060020a0380851660608301528316608082015260c060a082018181528354600260001961010060018416150201909116049183018290529060e083019084908015611d9a5780601f10611d6f57610100808354040283529160200191611d9a565b820191906000526020600020905b815481529060010190602001808311611d7d57829003601f168201915b505097505050505050505060405180910390a1600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515611dde57600080fd5b50505050505050565b60408051908101604052600b81527f4e756d626572546f6b656e000000000000000000000000000000000000000000602082015281565b600090815260036020526040902054600160a060020a0390811691161490565b600160a060020a0381161515611e8c57600754600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515611e8757600080fd5b610809565b80600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151561080957600080fd5b611ed1612195565b60006020604051908101604052858152600a8054919350600191808301611ef883826121ae565b60009283526020909220859101815181908051611f199291602001906121d2565b50505003905063ffffffff81168114611f3157600080fd5b7fb3b0cf861f168bcdb275c69da97b2543631552ba562628aa3c7317d4a6089ef2818686604051838152600160a060020a038216604082015260606020820181815290820184818151815260200191508051906020019080838360005b83811015611fa6578082015183820152602001611f8e565b50505050905090810190601f168015611fd35780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a16000818152600660205260408120849055611ffe908583612033565b5050505050565b600090815260056020526040902054600160a060020a0391821691161490565b600160a060020a0316151590565b600160a060020a0380831660008181526004602090815260408083208054600101905585835260039091529020805473ffffffffffffffffffffffffffffffffffffffff191690911790558316156120ce57600160a060020a0383166000908152600460209081526040808320805460001901905583835260059091529020805473ffffffffffffffffffffffffffffffffffffffff191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b600080828481151561213157fe5b0490508091505b5092915050565b6000808315156121525760009150612138565b5082820282848281151561216257fe5b041461216a57fe5b9392505050565b60008282111561217d57fe5b50900390565b60206040519081016040526000815290565b6020604051908101604052806121a9612183565b905290565b8154818355818115116108f7576000838152602090206108f7918101908301612250565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061221357805160ff1916838001178555612240565b82800160010185558215612240579182015b82811115612240578251825591602001919060010190612225565b5061224c929150612273565b5090565b61070b91905b8082111561224c57600061226a828261228d565b50600101612256565b61070b91905b8082111561224c5760008155600101612279565b50805460018160011615610100020316600290046000825580601f106122b35750610809565b601f01602090049060005260206000209081019061080991906122735600a165627a7a72305820e383ed00257cf9fd381d79fdc8ca1441e0fca454f90075b198f4ac527e24fdbc0029

Swarm Source

bzzr://e383ed00257cf9fd381d79fdc8ca1441e0fca454f90075b198f4ac527e24fdbc

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.