Contract 0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f7

 

TxHash Block Age From To Value [TxFee]
0xc6457aec5b3add671eea9aef64dbf5f8a2b771783824d06a1cf7207dfb1e3fd0715037424 days 9 hrs ago0x6255e997cbc9be0a005fce9e75338350942dd625 IN  CryptoCelebrities0 Ether0.0001845
0x2a370a1256f8c2470346a62c0cad41d024b6ea2d91ce8b401dab7cb417a2909f715036124 days 9 hrs ago0x6255e997cbc9be0a005fce9e75338350942dd625 IN  CryptoCelebrities0 Ether0.0001845
0x4c42e8cc2c453ec147c04b4d7fc57fe2631913f949afdaa56307897e59ab3abf714265225 days 23 hrs ago0xa2381223639181689cd6c46d38a1a4884bb6d83c IN  CryptoCelebrities0 Ether0.000091628
0xfd5669e4151c7e5f160b4a019aee6dacb6ba4de0545de6fa3107101e84a39042714001026 days 12 hrs ago0xa2381223639181689cd6c46d38a1a4884bb6d83c IN  CryptoCelebrities0 Ether0.00022907
0xe0a60d2857cc60cd41df05d7da77751c5bac6c432db4246118393c219a45842c714000226 days 12 hrs ago0xa2381223639181689cd6c46d38a1a4884bb6d83c IN  CryptoCelebrities0 Ether0.00022875
0xd47f1e62dd6747f445bfa414fe7742a47762adb70fade974fad1bc3fa699d3db708478537 days 2 hrs ago0xa995115cfe65d0747788e9efa213a26b409b5cf3 IN  CryptoCelebrities0 Ether0.000183
0x017d0525d86c32997f5c6ba2dbfb348425ed78821e11955b3bb6e24a2bea3b7f702266448 days 5 hrs ago0xbc569e9b548e248c531fd7ad55818eeecbb0f264 IN  CryptoCelebrities0 Ether0.00015375
0x670706a78af24d4de27169c4f7fc332ce61db8979e23d4aef69f1b8d75863ee9701348649 days 21 hrs ago0xbc569e9b548e248c531fd7ad55818eeecbb0f264 IN  CryptoCelebrities0 Ether0.0001845
0x304cdb8b457a9433d9a5f6c306538784b8d8fe1b7fc3d0dc193efe022bb2052d689944769 days 8 hrs ago0xcb7e4c6df0ac6a4dc681299b1e56906de68e53a0 IN  CryptoCelebrities0 Ether0.00022907
0x2d16b0562d9aaa7a5e27f532a0cdc7f3622aeaf06c73dc81088ddd7bbc743848689919569 days 9 hrs ago0xcb7e4c6df0ac6a4dc681299b1e56906de68e53a0 IN  CryptoCelebrities0 Ether0.000061628
0x699bdd54630a4738ed3a2794e7fd6d0f6883edf6c6102a38065b7d2a0835528c689919569 days 9 hrs ago0xcb7e4c6df0ac6a4dc681299b1e56906de68e53a0 IN  CryptoCelebrities0 Ether0.000047198
0x58f1658d762560f7f8ce5360e7d7b2dcc8c0b7bd385f5285bd7358c3410ea748689919569 days 9 hrs ago0xcb7e4c6df0ac6a4dc681299b1e56906de68e53a0 IN  CryptoCelebrities0 Ether0.000091628
0xec26fb698f0b71790759589a94fb6d40a8524e20ff071dabf61de72f475c886e689919169 days 9 hrs ago0xcb7e4c6df0ac6a4dc681299b1e56906de68e53a0 IN  CryptoCelebrities0 Ether0.000061628
0x2034a37fbc4e2059e239ec05638ec1fc2e3e70355503012b7b1c7732a11abec9689894769 days 10 hrs ago0xcb7e4c6df0ac6a4dc681299b1e56906de68e53a0 IN  CryptoCelebrities0 Ether0.000061628
0x6cc7368af222dcd6b4face3a9d1dfdd8269364efdae51cf2c5974abfb19dab69689894769 days 10 hrs ago0xcb7e4c6df0ac6a4dc681299b1e56906de68e53a0 IN  CryptoCelebrities0 Ether0.000047198
0xf1dd908e94ecef2af6122a6e62a86057a93a3575860d1a20a3243c515903e5a8689894769 days 10 hrs ago0xcb7e4c6df0ac6a4dc681299b1e56906de68e53a0 IN  CryptoCelebrities0 Ether0.000091628
0x8e1303213529bca0e61b21a31aeb235f521211ac0ba56564ee90cdb98be887e0689894769 days 10 hrs ago0xcb7e4c6df0ac6a4dc681299b1e56906de68e53a0 IN  CryptoCelebrities0 Ether0.000091628
0x9d97132bcfac1804933d09004a5bd2a804c801c5cd6d6489f8a9851a0800fe60688226672 days 4 hrs ago0xbc569e9b548e248c531fd7ad55818eeecbb0f264 IN  CryptoCelebrities0 Ether0.00021525
0x0399433d69ee17c0835e209a1b774363f599a2194ef328af87c0adf7c4f95fee688222772 days 4 hrs ago0xbc569e9b548e248c531fd7ad55818eeecbb0f264 IN  CryptoCelebrities0 Ether0.000246
0x6f0c88a98dfdf33260ede4aef915114dc523a9427112853a963076f7369c272f688221772 days 4 hrs ago0xbc569e9b548e248c531fd7ad55818eeecbb0f264 IN  CryptoCelebrities0 Ether0.00032025
0xa13ae2ea1c056d85d9412b32c5a9e722c5f051fc3e579f9b04cd192b4430913e686007775 days 19 hrs ago0x441593f8f7f17925b841a3ceff86c6d91e488a6c IN  CryptoCelebrities0 Ether0.000183256
0x7673db25ab36ba381d364678f66ad10ad1d83f1a7a0d308306429f521d1c73e1685095777 days 7 hrs ago0x98f2319afb3e95d05d90fe5720f925dc17dec675 IN  CryptoCelebrities0.0097 Ether0.000068946
0xff61df7ee722d2261d4422df13867a4baccb642273e6ac9da9b8c397d5b512b9685046577 days 9 hrs ago0x70e19485dc71a021cc855acd4a346d09ee2201ee IN  CryptoCelebrities0.0205 Ether0.000206838
0x6d213b52a609e77d2da868404832e4326a1c09184dd52ea96c4a8ea8483e3b01685046577 days 9 hrs ago0x70e19485dc71a021cc855acd4a346d09ee2201ee IN  CryptoCelebrities0.0097 Ether0.000068946
0x344461c7023d0e1968b51caa480d0da36200b07b2e90284e2907c0d96b2d499d683900979 days 7 hrs ago0x80ced4498ee4af6e5deeb96e3ccf26fac8dced87 IN  CryptoCelebrities0.0097 Ether0.00011491
[ Download CSV Export 

Latest 25 Internal Transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x0b8c0f79f460e3c3d77c4ec896926be8db8a9ff7fbb761d0432ffd32161c66676380642154 days 8 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xbab344d1c245823b8a584968103977aa9cabff5b0.000057878177364553 Ether
0x0b8c0f79f460e3c3d77c4ec896926be8db8a9ff7fbb761d0432ffd32161c66676380642154 days 8 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xf21ebd3eb95f0f2f145744e57ea681d79866488d4.72758159451327732 Ether
0x2d5ea122c4d5c3c17e80a05a7bd4f8ded0e0dff4de105780afaa20d619cf93816330104162 days 17 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xf21ebd3eb95f0f2f145744e57ea681d79866488d0.000000000000978755 Ether
0x2d5ea122c4d5c3c17e80a05a7bd4f8ded0e0dff4de105780afaa20d619cf93816330104162 days 17 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x9bc9f983bf9bc0042552478e7e63d8025c8abab82.58183850158442734 Ether
0xc31c065ef28992bcebfcbc076b1fda87f116db52d7181aa50ef5dc477a3be7e16329375162 days 20 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x8987697e9299763ba2ce7b4e0b2e85a553f7235f0.000000000002533988 Ether
0xc31c065ef28992bcebfcbc076b1fda87f116db52d7181aa50ef5dc477a3be7e16329375162 days 20 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xf21ebd3eb95f0f2f145744e57ea681d79866488d3.15863220938520366 Ether
0xc9c2b68ed18e43db8169204eadaa2c5f0b2a3fa26110f31c7ceb8cd228e8d5e96329029162 days 21 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xf21ebd3eb95f0f2f145744e57ea681d79866488d0.000000000002668133 Ether
0xc9c2b68ed18e43db8169204eadaa2c5f0b2a3fa26110f31c7ceb8cd228e8d5e96329029162 days 21 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x8987697e9299763ba2ce7b4e0b2e85a553f7235f3.15863220938520366 Ether
0xf0f8b10861efe9c7b7ed6de361e914971d91e0c1eb90ce297ee466d3ea0d682f6328191163 days 43 mins ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xbab344d1c245823b8a584968103977aa9cabff5b0.000059483031932765 Ether
0xf0f8b10861efe9c7b7ed6de361e914971d91e0c1eb90ce297ee466d3ea0d682f6328191163 days 43 mins ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xf21ebd3eb95f0f2f145744e57ea681d79866488d3.8642840859499832 Ether
0x4b30740da3d37a0a5df6edd29ab6340144edf7033b4d37a7362d4795e9ee5df76157663191 days 17 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x1f52b87c3503e537853e160adbf7e330ea0be7c42.58183850158442734 Ether
0x8f959e1e4809314852075f047c543838f89a60121fb416084fbdde57009700d56114007199 days 2 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x8987697e9299763ba2ce7b4e0b2e85a553f7235f0.000000000002442519 Ether
0x8f959e1e4809314852075f047c543838f89a60121fb416084fbdde57009700d56114007199 days 2 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x5ee0526daa4c2317703bb400e6f75175f7dd28e82.58183850158442734 Ether
0x5146f5ba7080a5d47e9ca0c49c937e870da35245145785e8bbf049f0ef088f636113999199 days 2 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xf21ebd3eb95f0f2f145744e57ea681d79866488d0.000000000009551045 Ether
0x5146f5ba7080a5d47e9ca0c49c937e870da35245145785e8bbf049f0ef088f636113999199 days 2 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x8987697e9299763ba2ce7b4e0b2e85a553f7235f3.15863220938520366 Ether
0xfd9975d3fe0671773591c49a49db123e48bd0851272d3dd7ff414f7ce6a39b866113081199 days 6 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xf21ebd3eb95f0f2f145744e57ea681d79866488d0.000000000005539762 Ether
0xfd9975d3fe0671773591c49a49db123e48bd0851272d3dd7ff414f7ce6a39b866113081199 days 6 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x5ee0526daa4c2317703bb400e6f75175f7dd28e82.58183850158442734 Ether
0x430a6883b2d33b22bb4abfc7e88397681f9564f7d6b5df737189abc225b6cc3c6112146199 days 10 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xf21ebd3eb95f0f2f145744e57ea681d79866488d0.000000000008965834 Ether
0x430a6883b2d33b22bb4abfc7e88397681f9564f7d6b5df737189abc225b6cc3c6112146199 days 10 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x5ee0526daa4c2317703bb400e6f75175f7dd28e83.15863220938520366 Ether
0x8be1a1861f2da0cd17a4c83efac23fa5c02bf6acb94381265ff5688578fc91f56111587199 days 12 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x8987697e9299763ba2ce7b4e0b2e85a553f7235f0.000000000002417735 Ether
0x8be1a1861f2da0cd17a4c83efac23fa5c02bf6acb94381265ff5688578fc91f56111587199 days 12 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xf21ebd3eb95f0f2f145744e57ea681d79866488d3.15863220938520366 Ether
0x40546dffac47d1c7c2b56870a439c85c01ef82a4c87ff4f01504756226e8bae46111547199 days 12 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xf21ebd3eb95f0f2f145744e57ea681d79866488d0.000000000006764854 Ether
0x40546dffac47d1c7c2b56870a439c85c01ef82a4c87ff4f01504756226e8bae46111547199 days 12 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x8987697e9299763ba2ce7b4e0b2e85a553f7235f3.15863220938520366 Ether
0x43d4bfcc6af8a10c250abf5b42f3d75b3690506e77817c236001a0917d91d3a06111071199 days 14 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70x8987697e9299763ba2ce7b4e0b2e85a553f7235f0.000000000008772771 Ether
0x43d4bfcc6af8a10c250abf5b42f3d75b3690506e77817c236001a0917d91d3a06111071199 days 14 hrs ago0xbb5ed1edeb5149af3ab43ea9c7a6963b3c1374f70xf21ebd3eb95f0f2f145744e57ea681d79866488d2.58183850158442734 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: CelebrityToken
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: Yes
Runs (Optimizer):  200


Contract Source Code
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 CelebrityToken is ERC721 {

  /*** EVENTS ***/

  /// @dev The Birth event is fired whenever a new person 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 = "CryptoCelebrities"; // solhint-disable-line
  string public constant SYMBOL = "CelebrityToken"; // solhint-disable-line

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

  /*** STORAGE ***/

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

  // @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 PersonIDs to an address that has been approved to call
  ///  transferFrom(). Each Person can only have one approved address for transfer
  ///  at any time. A zero value means no approval is outstanding.
  mapping (uint256 => address) public personIndexToApproved;

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

  // 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 Person {
    string name;
  }

  Person[] private persons;

  /*** 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 CelebrityToken() 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));

    personIndexToApproved[_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 createPromoPerson(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++;
    _createPerson(_name, personOwner, _price);
  }

  /// @dev Creates a new Person with the given name.
  function createContractPerson(string _name) public onlyCOO {
    _createPerson(_name, address(this), startingPrice);
  }

  /// @notice Returns all the relevant information about a specific person.
  /// @param _tokenId The tokenId of the person of interest.
  function getPerson(uint256 _tokenId) public view returns (
    string personName,
    uint256 sellingPrice,
    address owner
  ) {
    Person storage person = persons[_tokenId];
    personName = person.name;
    sellingPrice = personIndexToPrice[_tokenId];
    owner = personIndexToOwner[_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 = personIndexToOwner[_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 = personIndexToOwner[_tokenId];
    address newOwner = msg.sender;

    uint256 sellingPrice = personIndexToPrice[_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, 94), 100));
    uint256 purchaseExcess = SafeMath.sub(msg.value, sellingPrice);

    // Update prices
    if (sellingPrice < firstStepLimit) {
      // first stage
      personIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 200), 94);
    } else if (sellingPrice < secondStepLimit) {
      // second stage
      personIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 120), 94);
    } else {
      // third stage
      personIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 115), 94);
    }

    _transfer(oldOwner, newOwner, _tokenId);

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

    TokenSold(_tokenId, sellingPrice, personIndexToPrice[_tokenId], oldOwner, newOwner, persons[_tokenId].name);

    msg.sender.transfer(purchaseExcess);
  }

  function priceOf(uint256 _tokenId) public view returns (uint256 price) {
    return personIndexToPrice[_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 = personIndexToOwner[_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 Persons array looking for persons 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 totalPersons = totalSupply();
      uint256 resultIndex = 0;

      uint256 personId;
      for (personId = 0; personId <= totalPersons; personId++) {
        if (personIndexToOwner[personId] == _owner) {
          result[resultIndex] = personId;
          resultIndex++;
        }
      }
      return result;
    }
  }

  /// For querying totalSupply of token
  /// @dev Required for ERC-721 compliance.
  function totalSupply() public view returns (uint256 total) {
    return persons.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 personIndexToApproved[_tokenId] == _to;
  }

  /// For creating Person
  function _createPerson(string _name, address _owner, uint256 _price) private {
    Person memory _person = Person({
      name: _name
    });
    uint256 newPersonId = persons.push(_person) - 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(newPersonId == uint256(uint32(newPersonId)));

    Birth(newPersonId, _name, _owner);

    personIndexToPrice[newPersonId] = _price;

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

  /// Check for token ownership
  function _owns(address claimant, uint256 _tokenId) private view returns (bool) {
    return claimant == personIndexToOwner[_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 Person to an address.
  function _transfer(address _from, address _to, uint256 _tokenId) private {
    // Since the number of persons is capped to 2^32 we can't overflow this
    ownershipTokenCount[_to]++;
    //transfer ownership
    personIndexToOwner[_tokenId] = _to;

    // When creating new persons _from is 0x0, but we can't account that address.
    if (_from != address(0)) {
      ownershipTokenCount[_from]--;
      // clear any previously approved ownership exchange
      delete personIndexToApproved[_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 ABI
[{"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":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":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"total","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getPerson","outputs":[{"name":"personName","type":"string"},{"name":"sellingPrice","type":"uint256"},{"name":"owner","type":"address"}],"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":"_owner","type":"address"},{"name":"_name","type":"string"},{"name":"_price","type":"uint256"}],"name":"createPromoPerson","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"createContractPerson","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":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"ownerTokens","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"personIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","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":"","type":"uint256"}],"name":"personIndexToOwner","outputs":[{"name":"","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":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"}]

Contract Creation Code
606060405266038d7ea4c6800060005566be78bd4c57d0006001556707d72165f25ed000600255341561003157600080fd5b60078054600160a060020a033316600160a060020a031991821681179092556008805490911690911790556113c78061006b6000396000f3006060604052600436106101535763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166305e45546811461015857806306fdde031461017d578063095ea7b3146102075780630a0f81681461022b5780630b7e9c441461025a5780631051db341461027957806318160ddd146102a057806323b872dd146102b3578063246982c4146102db57806327d7874c146103805780632ba73c151461039f57806342287b66146103be5780634955f2801461041f5780636352211e1461047057806370a08231146104865780638462151c146104a55780639433a81e1461051757806395d89b411461052d578063a3f4df7e14610540578063a9059cbb14610553578063aa1d98af14610575578063b047fb501461058b578063b2e6ceeb1461059e578063b9186d7d146105b4578063efef39a1146105ca578063f76f8d78146105d5575b600080fd5b341561016357600080fd5b61016b6105e8565b60405190815260200160405180910390f35b341561018857600080fd5b6101906105ee565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101cc5780820151838201526020016101b4565b50505050905090810190601f1680156101f95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561021257600080fd5b610229600160a060020a0360043516602435610630565b005b341561023657600080fd5b61023e6106bc565b604051600160a060020a03909116815260200160405180910390f35b341561026557600080fd5b610229600160a060020a03600435166106cb565b341561028457600080fd5b61028c61070d565b604051901515815260200160405180910390f35b34156102ab57600080fd5b61016b610712565b34156102be57600080fd5b610229600160a060020a0360043581169060243516604435610718565b34156102e657600080fd5b6102f1600435610766565b60405160208101839052600160a060020a038216604082015260608082528190810185818151815260200191508051906020019080838360005b8381101561034357808201518382015260200161032b565b50505050905090810190601f1680156103705780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b341561038b57600080fd5b610229600160a060020a036004351661085c565b34156103aa57600080fd5b610229600160a060020a03600435166108bb565b34156103c957600080fd5b61022960048035600160a060020a03169060446024803590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650509335935061091a92505050565b341561042a57600080fd5b61022960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061099195505050505050565b341561047b57600080fd5b61023e6004356109b9565b341561049157600080fd5b61016b600160a060020a03600435166109e2565b34156104b057600080fd5b6104c4600160a060020a03600435166109fd565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156105035780820151838201526020016104eb565b505050509050019250505060405180910390f35b341561052257600080fd5b61023e600435610ade565b341561053857600080fd5b610190610af9565b341561054b57600080fd5b610190610b3a565b341561055e57600080fd5b610229600160a060020a0360043516602435610b71565b341561058057600080fd5b61023e600435610ba9565b341561059657600080fd5b61023e610bc4565b34156105a957600080fd5b610229600435610bd3565b34156105bf57600080fd5b61016b600435610c21565b610229600435610c33565b34156105e057600080fd5b610190610eb2565b60095481565b6105f661124d565b60408051908101604052601181527f43727970746f43656c6562726974696573000000000000000000000000000000602082015290505b90565b61063a3382610ee9565b151561064557600080fd5b60008181526005602052604090819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b600754600160a060020a031681565b60075433600160a060020a03908116911614806106f6575060085433600160a060020a039081169116145b151561070157600080fd5b61070a81610f09565b50565b600190565b600a5490565b6107228382610ee9565b151561072d57600080fd5b6107378282610f94565b151561074257600080fd5b61074b82610fb4565b151561075657600080fd5b610761838383610fc2565b505050565b61076e61124d565b6000806000600a8581548110151561078257fe5b90600052602060002090019050806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b50505060009788525050600660209081526040808820546003909252909620549096600160a060020a03909116945092505050565b60075433600160a060020a0390811691161461087757600080fd5b600160a060020a038116151561088c57600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60075433600160a060020a039081169116146108d657600080fd5b600160a060020a03811615156108eb57600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60085460009033600160a060020a0390811691161461093857600080fd5b600954611388901061094957600080fd5b5082600160a060020a03811615156109695750600854600160a060020a03165b600082116109775760005491505b60098054600101905561098b8382846110b2565b50505050565b60085433600160a060020a039081169116146109ac57600080fd5b61070a81306000546110b2565b600081815260036020526040902054600160a060020a03168015156109dd57600080fd5b919050565b600160a060020a031660009081526004602052604090205490565b610a0561124d565b6000610a0f61124d565b6000806000610a1d876109e2565b9450841515610a4d576000604051805910610a355750595b90808252806020026020018201604052509550610ad4565b84604051805910610a5b5750595b90808252806020026020018201604052509350610a76610712565b925060009150600090505b828111610ad057600081815260036020526040902054600160a060020a0388811691161415610ac85780848381518110610ab757fe5b602090810290910101526001909101905b600101610a81565b8395505b5050505050919050565b600560205260009081526040902054600160a060020a031681565b610b0161124d565b60408051908101604052600e81527f43656c656272697479546f6b656e0000000000000000000000000000000000006020820152905090565b60408051908101604052601181527f43727970746f43656c6562726974696573000000000000000000000000000000602082015281565b610b7b3382610ee9565b1515610b8657600080fd5b610b8f82610fb4565b1515610b9a57600080fd5b610ba5338383610fc2565b5050565b600360205260009081526040902054600160a060020a031681565b600854600160a060020a031681565b6000818152600360205260409020543390600160a060020a0316610bf682610fb4565b1515610c0157600080fd5b610c0b8284610f94565b1515610c1657600080fd5b610761818385610fc2565b60009081526006602052604090205490565b6000818152600360209081526040808320546006909252822054600160a060020a0391821692339281908416851415610c6b57600080fd5b610c7484610fb4565b1515610c7f57600080fd5b3483901015610c8d57600080fd5b610ca2610c9b84605e6111ee565b6064611224565b9150610cae348461123b565b9050600154831015610ce357610ccf610cc88460c86111ee565b605e611224565b600087815260066020526040902055610d19565b600254831015610cfb57610ccf610cc88460786111ee565b610d09610cc88460736111ee565b6000878152600660205260409020555b610d24858588610fc2565b30600160a060020a031685600160a060020a0316141515610d7057600160a060020a03851682156108fc0283604051600060405180830381858888f193505050501515610d7057600080fd5b7e8201e7bcbf010c2c07de59d6e97cb7e3cf67a46125c49cbc89b9d2cde1f48f8684600660008a8152602001908152602001600020548888600a8c815481101515610db757fe5b60009182526020909120016040518681526020810186905260408101859052600160a060020a0380851660608301528316608082015260c060a082018181528354600260001961010060018416150201909116049183018290529060e083019084908015610e665780601f10610e3b57610100808354040283529160200191610e66565b820191906000526020600020905b815481529060010190602001808311610e4957829003601f168201915b505097505050505050505060405180910390a1600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610eaa57600080fd5b505050505050565b60408051908101604052600e81527f43656c656272697479546f6b656e000000000000000000000000000000000000602082015281565b600090815260036020526040902054600160a060020a0390811691161490565b600160a060020a0381161515610f5757600754600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515610f5257600080fd5b61070a565b80600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151561070a57600080fd5b600090815260056020526040902054600160a060020a0391821691161490565b600160a060020a0316151590565b600160a060020a0380831660008181526004602090815260408083208054600101905585835260039091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905583161561105d57600160a060020a0383166000908152600460209081526040808320805460001901905583835260059091529020805473ffffffffffffffffffffffffffffffffffffffff191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b6110ba61125f565b60006020604051908101604052858152600a80549193506001918083016110e18382611278565b6000928352602090922085910181518190805161110292916020019061129c565b50505003905063ffffffff8116811461111a57600080fd5b7fb3b0cf861f168bcdb275c69da97b2543631552ba562628aa3c7317d4a6089ef2818686604051838152600160a060020a038216604082015260606020820181815290820184818151815260200191508051906020019080838360005b8381101561118f578082015183820152602001611177565b50505050905090810190601f1680156111bc5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160008181526006602052604081208490556111e7908583610fc2565b5050505050565b600080831515611201576000915061121d565b5082820282848281151561121157fe5b041461121957fe5b8091505b5092915050565b600080828481151561123257fe5b04949350505050565b60008282111561124757fe5b50900390565b60206040519081016040526000815290565b60206040519081016040528061127361124d565b905290565b8154818355818115116107615760008381526020902061076191810190830161131a565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106112dd57805160ff191683800117855561130a565b8280016001018555821561130a579182015b8281111561130a5782518255916020019190600101906112ef565b5061131692915061133d565b5090565b61062d91905b808211156113165760006113348282611357565b50600101611320565b61062d91905b808211156113165760008155600101611343565b50805460018160011615610100020316600290046000825580601f1061137d575061070a565b601f01602090049060005260206000209081019061070a919061133d5600a165627a7a7230582003141a717b1c55f1a6ce63c63b68b6538ac511d369403d6db7419471a38cdf460029


   Swarm Source:
bzzr://03141a717b1c55f1a6ce63c63b68b6538ac511d369403d6db7419471a38cdf46
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.