Contract 0x53E3A7EC57132173Ce615dEBb9A303fD2cd86789

 
 
Txn Hash
Method
Block
From
To
Value
0x96408b1edcb0ab44154080915fa7c133d14f4aac2b4f83d28c3a5704385f8b68Approve63195792018-09-12 18:31:291546 days 14 hrs ago0x0c24c748ddab4afe06bc44988f5fe6e788c019f3 IN  CryptoCities0 Ether0.000228455
0x58fa8de9008a3f8243498754757ef4b35e35a231145499ac5088553a16690ef4Transfer57837862018-06-13 21:27:421637 days 11 hrs ago0x29a9c76ad091c015c12081a1b201c3ea56884579 IN  CryptoCities0 Ether0.000093952
0x27e268ca31388f48fb800fe39e88345b363a87de9fe3c9a89891bfdd7cc9555cTransfer57837812018-06-13 21:26:381637 days 11 hrs ago0x29a9c76ad091c015c12081a1b201c3ea56884579 IN  CryptoCities0 Ether0.000123952
0x4153148a4500cba65021da71531f914fa4a367dd2465943eeb4981265d3a589cTransfer57558172018-06-08 22:55:571642 days 10 hrs ago0x5c035bb4cb7dacbfee076a5e61aa39a10da2e956 IN  CryptoCities0 Ether0.000184576
0xc8153f4f4c7fbb7b1fe009477b03be0647b91f1e9ab327052dcfb1e50541f03eTransfer57558152018-06-08 22:55:141642 days 10 hrs ago0x5c035bb4cb7dacbfee076a5e61aa39a10da2e956 IN  CryptoCities0 Ether0.000364576
0xedc60c2fd6c47e73f399ef85f7fe1aa0021b4ad0ac5832fa85ba5b0f66fec1d7Approve55439432018-05-02 14:33:101679 days 18 hrs ago0x76fa5876ecef7cecfbe8f94566a1e7252c20bf39 IN  CryptoCities0 Ether0.000091382
0xc13a5d6a52cc0f465276ee2ee79eaab639826c0bd06daa61b1bca1f2d18717edApprove55341242018-04-30 20:52:131681 days 12 hrs ago0x80069a4d669a833db3509077343d8793fcbbda7f IN  CryptoCities0 Ether0.000137073
0xd4efde8c46a5b29a7e76ff3e8f5801f4cdec08181c7c5ae3f8f6e69b57f65c8fApprove54920342018-04-23 13:48:441688 days 19 hrs ago0x0c24c748ddab4afe06bc44988f5fe6e788c019f3 IN  CryptoCities0 Ether0.000061382
0xc6495e937ed9d76db9338581df082523839e8363c96117ab135e69c5cc4328c9Approve54582382018-04-17 18:37:431694 days 14 hrs ago0x0c24c748ddab4afe06bc44988f5fe6e788c019f3 IN  CryptoCities0 Ether0.00003591.17
0x7b0f0bf2406512041362726201baf94fd33d106868ebd7333fa674dc2065e9e1Approve54582172018-04-17 18:32:421694 days 14 hrs ago0x0c24c748ddab4afe06bc44988f5fe6e788c019f3 IN  CryptoCities0 Ether0.000091382
0xb7cbf231e0cf4211992d889cd9389abbdc23b95c5daf7a35ad4065eff15ae19cApprove53249962018-03-26 11:35:461716 days 21 hrs ago0x0c24c748ddab4afe06bc44988f5fe6e788c019f3 IN  CryptoCities0 Ether0.000122764
0xd91de2ae96f9976217e99dc97bbc2beaf2c2fb402928ddfb8a4fe47241ed6188Approve53249012018-03-26 11:16:391716 days 21 hrs ago0x0c24c748ddab4afe06bc44988f5fe6e788c019f3 IN  CryptoCities0 Ether0.000182764
0x50c4dcd17a8b1d8cb899e81e3efdd036dd6494224c8e8afa8958acd8e735f84aApprove53069242018-03-23 11:34:381719 days 21 hrs ago0x4844928357e83855b1b9fbacf65947fe1ff48e26 IN  CryptoCities0 Ether0.000045691
0x747b0d3eb2c2bcf2bd51bf55ac0e9a9732072173492498d745e00b96b90668b9Approve52978022018-03-21 23:07:361721 days 9 hrs ago0x4844928357e83855b1b9fbacf65947fe1ff48e26 IN  CryptoCities0 Ether0.000045691
0xf77d490078ac20579ccf3ddde2deb15c5b15256f30a8b40f9ee8efb914d13b9aApprove52718402018-03-17 14:33:581725 days 18 hrs ago0xffb132f267095069aea70e0799d2ec24f443a289 IN  CryptoCities0 Ether0.000095942.1
0xbd8ba96758d05fc6011b578f21a65b63d719b1ee810fbcc25d5c63f0c5daa074Approve52683892018-03-17 0:07:271726 days 8 hrs ago0xffb132f267095069aea70e0799d2ec24f443a289 IN  CryptoCities0 Ether0.000122764
0x16e3d3c882d5a458178c918ae4bd69cfd51ca3aa12f2460b0e3dac58c858b1b4Approve52664472018-03-16 16:13:511726 days 16 hrs ago0xffb132f267095069aea70e0799d2ec24f443a289 IN  CryptoCities0 Ether0.000091382
0x580011e870ba8e123a5823a467f4dd82b280c8ccf660a71d701b77cb488dd9f9Approve52501352018-03-13 21:38:311729 days 11 hrs ago0xe6c58f8e459fe570afff5b4622990ea1744f0e28 IN  CryptoCities0 Ether0.000091382
0xac8cce5718d8d856aa04ffffd4c2982070269453a9170a8c520863d26301f345Approve52188032018-03-08 13:45:341734 days 19 hrs ago0xb58437d7155b5830aa2a7c6121dfdacbb7043c3f IN  CryptoCities0 Ether0.000182764
0x2feeb39fa94fab48f308f6e063ea0c428e838da6657910a704ae4d0f6b45196dPayout52095872018-03-07 0:19:001736 days 8 hrs ago0xbb44c3370ad09641c191d793997311dba945fffe IN  CryptoCities0 Ether0.0023043241
0xeb85722c222fd2d0546ea051097bc5680a427bcbf42bdff47b005dc5e5e90d06Approve52086572018-03-06 20:32:001736 days 12 hrs ago0xb58437d7155b5830aa2a7c6121dfdacbb7043c3f IN  CryptoCities0 Ether0.000091382
0xc421c66b30cadc156b467719e1c7cb3ac8c74619116bb0e8074361226d0c0bb0Approve51817812018-03-02 7:28:211741 days 1 hr ago0xb9aaf082eb83621ed7102ff5df4e311801c5e5d0 IN  CryptoCities0 Ether0.000182764
0x1a239bb5ff58bc04bb1bcf06dd10dd1adf53c9782247126d4262702b2c5848f1Approve51721072018-02-28 15:40:251742 days 17 hrs ago0xffb132f267095069aea70e0799d2ec24f443a289 IN  CryptoCities0 Ether0.000182764
0x61a16d8ef80b1dc61355be9638c6a0cd9fffcbe99523a7a752a28c7c3e0bc933Approve51671922018-02-27 19:41:101743 days 13 hrs ago0xab0446b092c46f7469d1c723d3d826898cb49d87 IN  CryptoCities0 Ether0.0005182111.342
0x05a5664905985082103ca25ac51a2597b537faf92d1e9c71e3eaa381ec16d6f4Transfer51599032018-02-26 13:58:271744 days 19 hrs ago0x4844928357e83855b1b9fbacf65947fe1ff48e26 IN  CryptoCities0 Ether0.0006197810
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2feeb39fa94fab48f308f6e063ea0c428e838da6657910a704ae4d0f6b45196d52095872018-03-07 0:19:001736 days 8 hrs ago CryptoCities0xb991e042c45f1a2a1671c3bbe8b5beba0f5ec54a24.13925708 Ether
0x91807944eb50f92ce6b1eb5de528b393e9bc0d10d2b5e3bb9f38b9b2df04e82851439992018-02-23 20:38:571747 days 12 hrs ago CryptoCities0xbafc3982d2cdb81a31d96383053f78abe81b6a110.00149723 Ether
0x91807944eb50f92ce6b1eb5de528b393e9bc0d10d2b5e3bb9f38b9b2df04e82851439992018-02-23 20:38:571747 days 12 hrs ago CryptoCities0xfde10342ebadf06413f56cb2f95256e4d8d478c60.67539259 Ether
0xc9cf202bf93b65059575220bf807a181be96bdf76aba49bc56bfe8a787540abf51438592018-02-23 20:11:101747 days 12 hrs ago CryptoCities0xbafc3982d2cdb81a31d96383053f78abe81b6a110.6225004 Ether
0xda0e0e48c94d963167d194c694e140481004c25d1220a3090bdd92eb812fb76851438592018-02-23 20:11:101747 days 12 hrs ago CryptoCities0xeca46592d25c07f72bbf6ed5ee10c31b24fa9d1d0.61270782 Ether
0x3a0cd2138ee9fcd570811609c34b730556f9b2876c4a97486c157457fb77810f51438592018-02-23 20:11:101747 days 12 hrs ago CryptoCities0xff1daa71eca58dcaf175131edc6f9f5c15cc4ba40.61070386 Ether
0xfd6c8080cc6f90c1aa7778cce347401546328f8588da40a30b0c21be69ac448b51438572018-02-23 20:10:501747 days 12 hrs ago CryptoCities0x576edaa88129ba71825225bb1a9f88805acb34c30.59917359 Ether
0xa44bab5772d99d65a877566efc2b3d39860066f8944a7557cdcf9d732ba42a0d51438572018-02-23 20:10:501747 days 12 hrs ago CryptoCities0x2faba4fd2bd22ef92cb0fd27604cf4e1f36ab7490.59440672 Ether
0x89e8eb51c7ebec0aaf8964caf5f99a190f986e899ec7582d505913ccc61fac0051438562018-02-23 20:10:161747 days 12 hrs ago CryptoCities0xbafc3982d2cdb81a31d96383053f78abe81b6a110.59143734 Ether
0x6b6b096e3eb13f758c85cbe6382460cf51c7a07a844d3c0c200bd8bbd8aea71051438562018-02-23 20:10:161747 days 12 hrs ago CryptoCities0xf0333b94f895eb5aab3822da376f9cbcfce8a19c0.5896451 Ether
0x0c0e0e039813069c6dfddff2c2b8e18964e1c4219ed2052766298ec0c19124d351438562018-02-23 20:10:161747 days 12 hrs ago CryptoCities0x5aac42dddfd2b92c59fee69e6900a32423592ea30.57367684 Ether
0xf375d4957bdcc9db077cc5d841716cc5bddd8931874e7ef38028828463dbb3c051438562018-02-23 20:10:161747 days 12 hrs ago CryptoCities0x64cdc23fadd389170b30f3f4b75b47ea12f652210.54029603 Ether
0x425de694ab20ebddbdf0a2de294b6878abac2ed686ee923546284a740692641851438152018-02-23 20:01:041747 days 13 hrs ago CryptoCities0xeca46592d25c07f72bbf6ed5ee10c31b24fa9d1d0.00021698 Ether
0x425de694ab20ebddbdf0a2de294b6878abac2ed686ee923546284a740692641851438152018-02-23 20:01:041747 days 13 hrs ago CryptoCities0x457dea5f9c185419ea47ff80f896d98aadf1c7270.54029603 Ether
0xfe5c34abf16d3afee24c6a7c3965acb0b30bee24d560bc5d38d43d3f2f77279851437182018-02-23 19:37:321747 days 13 hrs ago CryptoCities0xf0333b94f895eb5aab3822da376f9cbcfce8a19c0.82366515 Ether
0x0ad5627208252624e77bfa89982c62b0fc20e018abd15f809f2963526f0d40ba51437072018-02-23 19:34:281747 days 13 hrs ago CryptoCities0xbafc3982d2cdb81a31d96383053f78abe81b6a110.00221185 Ether
0x0ad5627208252624e77bfa89982c62b0fc20e018abd15f809f2963526f0d40ba51437072018-02-23 19:34:281747 days 13 hrs ago CryptoCities0xfde10342ebadf06413f56cb2f95256e4d8d478c60.61832085 Ether
0x79fb16cd7349aa7cf7b28272016e9d3cfd3ab40851e0aa2ecbd155928e06f96651436552018-02-23 19:23:011747 days 13 hrs ago CryptoCities0x52311cc5b73ad0391bd381df48e69ec49ad8fec80.92972526 Ether
0x1c18a4f366cfcb199c017491a1e7559a0e34cdb1fb433ac7f175d489cd99bc6e51436512018-02-23 19:21:581747 days 13 hrs ago CryptoCitiesENS Name pliny.eth1.03375082 Ether
0x236d9a713b0a65aaa1d01fde14ca38027268d5bcefae0d17b36822e201fed01351435952018-02-23 19:08:461747 days 13 hrs ago CryptoCities0x4bfa52dfdca9813605563411ff5daec5c983aec41.31435929 Ether
0x053e1906ccf020373332ba059dc67be085213b572143e8ca069d74b1f61360d051435892018-02-23 19:07:361747 days 13 hrs ago CryptoCities0x6132e824e08b78eef93a58108b134971046371220.95481115 Ether
0xb20617bea7f2de1a6028d5ba0b5c09542fe1fc1ac738237d09493aff9da40c9b51435472018-02-23 18:58:371747 days 14 hrs ago CryptoCitiesENS Name pliny.eth1.9278063 Ether
0xaff1f7368912d004bcdfea91718e036423548a818d28937efb165f5d79032e8f51435332018-02-23 18:56:151747 days 14 hrs ago CryptoCities0x25cfaa868033d02cc26edec57d2b3a65ef1a803e1.23549773 Ether
0x4d3a0ddf3fd6e92023c50e48f2bf9e08f1299b1aba48879eb82c2c5e5bd384c551435312018-02-23 18:55:571747 days 14 hrs ago CryptoCities0x5c035bb4cb7dacbfee076a5e61aa39a10da2e9561.83188726 Ether
0xddc73cada3b4793c1e45d9f381bf45d7aab7cc3a1b85cd5fcc3d465196e5ba4351435252018-02-23 18:55:091747 days 14 hrs ago CryptoCities0xbafc3982d2cdb81a31d96383053f78abe81b6a110.52905753 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CityToken

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-02-09
*/

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 CityToken is ERC721 {

  /*** EVENTS ***/

  /// @dev The CityCreated event is fired whenever a new city comes into existence.
  event CityCreated(uint256 tokenId, string name, string country, 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, string country);

  /// @dev Transfer event as defined in current draft of ERC721. 
  ///  ownership is assigned, including create event.
  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 = "CryptoCities"; // solhint-disable-line
  string public constant SYMBOL = "CityToken"; // solhint-disable-line

  uint256 private startingPrice = 0.05 ether;

  uint256 private constant PROMO_CREATION_LIMIT = 5000;

  /*** STORAGE ***/

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

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

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

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

  City[] private cities;

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

    cityIndexToApproved[_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 City with the given name, country and price and assignes it to an address.
  function createPromoCity(address _owner, string _name, string _country, uint256 _price) public onlyCOO {
    require(promoCreatedCount < PROMO_CREATION_LIMIT);

    address cityOwner = _owner;
    if (cityOwner == address(0)) {
      cityOwner = cooAddress;
    }
    
    if (_price <= 0) {
      _price = startingPrice;
    }

    promoCreatedCount++;
    _createCity(_name, _country, cityOwner, _price);
  }

  /// @dev Creates a new City with the given name and country.
  function createContractCity(string _name, string _country) public onlyCOO {
    _createCity(_name, _country, address(this), startingPrice);
  }

  /// @notice Returns all the relevant information about a specific city.
  /// @param _tokenId The tokenId of the city of interest.
  function getCity(uint256 _tokenId) public view returns (
    string cityName,
    string country,
    uint256 sellingPrice,
    address owner
  ) {
    City storage city = cities[_tokenId];
    cityName = city.name;
    country = city.country;
    sellingPrice = cityIndexToPrice[_tokenId];
    owner = cityIndexToOwner[_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 = cityIndexToOwner[_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 = cityIndexToOwner[_tokenId];
    address newOwner = msg.sender;

    uint256 sellingPrice = cityIndexToPrice[_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 price (20% increase)
    cityIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 120), 94);
    
    _transfer(oldOwner, newOwner, _tokenId);

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

    TokenSold(_tokenId, sellingPrice, cityIndexToPrice[_tokenId], oldOwner, newOwner, cities[_tokenId].name, cities[_tokenId].country);

    msg.sender.transfer(purchaseExcess);
  }

  function priceOf(uint256 _tokenId) public view returns (uint256 price) {
    return cityIndexToPrice[_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 = cityIndexToOwner[_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 city 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 Cities array looking for cities 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 totalCities = totalSupply();
      uint256 resultIndex = 0;

      uint256 cityId;
      for (cityId = 0; cityId <= totalCities; cityId++) {
        if (cityIndexToOwner[cityId] == _owner) {
          result[resultIndex] = cityId;
          resultIndex++;
        }
      }
      return result;
    }
  }

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

  /// For creating City
  function _createCity(string _name, string _country, address _owner, uint256 _price) private {
    City memory _city = City({
      name: _name,
      country: _country
    });
    uint256 newCityId = cities.push(_city) - 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(newCityId == uint256(uint32(newCityId)));

    CityCreated(newCityId, _name, _country, _owner);

    cityIndexToPrice[newCityId] = _price;

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

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

    // When creating new cities _from is 0x0, but we can't account that address.
    if (_from != address(0)) {
      ownershipTokenCount[_from]--;
      // clear any previously approved ownership exchange
      delete cityIndexToApproved[_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

[{"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":true,"inputs":[{"name":"","type":"uint256"}],"name":"cityIndexToOwner","outputs":[{"name":"","type":"address"}],"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":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":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":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_name","type":"string"},{"name":"_country","type":"string"},{"name":"_price","type":"uint256"}],"name":"createPromoCity","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":"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":"_name","type":"string"},{"name":"_country","type":"string"}],"name":"createContractCity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getCity","outputs":[{"name":"cityName","type":"string"},{"name":"country","type":"string"},{"name":"sellingPrice","type":"uint256"},{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cityIndexToApproved","outputs":[{"name":"","type":"address"}],"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":"country","type":"string"},{"indexed":false,"name":"owner","type":"address"}],"name":"CityCreated","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"},{"indexed":false,"name":"country","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"}]

606060405266b1a2bc2ec50000600055341561001a57600080fd5b33600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061232e806100ab6000396000f300606060405260043610610154576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305e455461461015957806306fdde0314610182578063095ea7b3146102105780630a0f8168146102525780630b7e9c44146102a75780631051db34146102e057806318160ddd1461030d57806321ac5aba1461033657806323b872dd1461039957806327d7874c146103fa5780632ba73c15146104335780636352211e1461046c57806370a08231146104cf5780638462151c1461051c57806395d89b41146105aa5780639b6234b514610638578063a3f4df7e14610700578063a9059cbb1461078e578063b047fb50146107d0578063b2e6ceeb14610825578063b9186d7d14610848578063cc4691251461087f578063d71306511461091f578063e561f28a14610a61578063efef39a114610ac4578063f76f8d7814610adc575b600080fd5b341561016457600080fd5b61016c610b6a565b6040518082815260200191505060405180910390f35b341561018d57600080fd5b610195610b70565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101d55780820151818401526020810190506101ba565b50505050905090810190601f1680156102025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561021b57600080fd5b610250600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bb3565b005b341561025d57600080fd5b610265610c83565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102b257600080fd5b6102de600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610ca9565b005b34156102eb57600080fd5b6102f3610d69565b604051808215151515815260200191505060405180910390f35b341561031857600080fd5b610320610d72565b6040518082815260200191505060405180910390f35b341561034157600080fd5b6103576004808035906020019091905050610d7f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103a457600080fd5b6103f8600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610db2565b005b341561040557600080fd5b610431600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e00565b005b341561043e57600080fd5b61046a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610edc565b005b341561047757600080fd5b61048d6004808035906020019091905050610fb8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104da57600080fd5b610506600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611031565b6040518082815260200191505060405180910390f35b341561052757600080fd5b610553600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061107a565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561059657808201518184015260208101905061057b565b505050509050019250505060405180910390f35b34156105b557600080fd5b6105bd6111b1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105fd5780820151818401526020810190506105e2565b50505050905090810190601f16801561062a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561064357600080fd5b6106fe600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919080359060200190919050506111f4565b005b341561070b57600080fd5b6107136112f7565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610753578082015181840152602081019050610738565b50505050905090810190601f1680156107805780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561079957600080fd5b6107ce600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611330565b005b34156107db57600080fd5b6107e3611368565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561083057600080fd5b610846600480803590602001909190505061138e565b005b341561085357600080fd5b6108696004808035906020019091905050611403565b6040518082815260200191505060405180910390f35b341561088a57600080fd5b61091d600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611420565b005b341561092a57600080fd5b610940600480803590602001909190505061148e565b6040518080602001806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835287818151815260200191508051906020019080838360005b838110156109bc5780820151818401526020810190506109a1565b50505050905090810190601f1680156109e95780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015610a22578082015181840152602081019050610a07565b50505050905090810190601f168015610a4f5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3415610a6c57600080fd5b610a826004808035906020019091905050611654565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ada6004808035906020019091905050611687565b005b3415610ae757600080fd5b610aef611a68565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b2f578082015181840152602081019050610b14565b50505050905090810190601f168015610b5c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60075481565b610b78612142565b6040805190810160405280600c81526020017f43727970746f4369746965730000000000000000000000000000000000000000815250905090565b610bbd3382611aa1565b1515610bc857600080fd5b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d525750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610d5d57600080fd5b610d6681611b0d565b50565b60006001905090565b6000600880549050905090565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610dbc8382611aa1565b1515610dc757600080fd5b610dd18282611c1b565b1515610ddc57600080fd5b610de582611c87565b1515610df057600080fd5b610dfb838383611cc0565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e5c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610e9857600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f3857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610f7457600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561102c57600080fd5b919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611082612156565b600061108c612156565b600080600061109a87611031565b945060008514156110cc5760006040518059106110b45750595b908082528060200260200182016040525095506111a7565b846040518059106110da5750595b908082528060200260200182016040525093506110f5610d72565b925060009150600090505b82811115156111a3578673ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111965780848381518110151561117f57fe5b906020019060200201818152505081806001019250505b8080600101915050611100565b8395505b5050505050919050565b6111b9612142565b6040805190810160405280600981526020017f43697479546f6b656e0000000000000000000000000000000000000000000000815250905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561125257600080fd5b61138860075410151561126457600080fd5b849050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112c257600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b6000821115156112d25760005491505b6007600081548092919060010191905055506112f084848385611ec2565b5050505050565b6040805190810160405280600c81526020017f43727970746f436974696573000000000000000000000000000000000000000081525081565b61133a3382611aa1565b151561134557600080fd5b61134e82611c87565b151561135957600080fd5b611364338383611cc0565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000803391506001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506113d382611c87565b15156113de57600080fd5b6113e88284611c1b565b15156113f357600080fd5b6113fe818385611cc0565b505050565b600060046000838152602001908152602001600020549050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561147c57600080fd5b61148a828230600054611ec2565b5050565b611496612142565b61149e612142565b60008060006008868154811015156114b257fe5b90600052602060002090600202019050806000018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561155a5780601f1061152f5761010080835404028352916020019161155a565b820191906000526020600020905b81548152906001019060200180831161153d57829003601f168201915b50505050509450806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115f95780601f106115ce576101008083540402835291602001916115f9565b820191906000526020600020905b8154815290600101906020018083116115dc57829003601f168201915b50505050509350600460008781526020019081526020016000205492506001600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150509193509193565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060006001600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169450339350600460008781526020019081526020016000205492508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415151561171957600080fd5b61172284611c87565b151561172d57600080fd5b82341015151561173c57600080fd5b61175161174a84605e6120d3565b606461210e565b915061175d3484612129565b905061177461176d8460786120d3565b605e61210e565b6004600088815260200190815260200160002081905550611796858588611cc0565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614151561180c578473ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561180b57600080fd5b5b7fe04cb5380b60ce357c7194674509996c1f8cda0f586c12ca17ea299513d332e18684600460008a815260200190815260200160002054888860088c81548110151561185457fe5b906000526020600020906002020160000160088d81548110151561187457fe5b9060005260206000209060020201600101604051808881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001806020018381038352858181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156119885780601f1061195d57610100808354040283529160200191611988565b820191906000526020600020905b81548152906001019060200180831161196b57829003601f168201915b5050838103825284818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015611a0b5780601f106119e057610100808354040283529160200191611a0b565b820191906000526020600020905b8154815290600101906020018083116119ee57829003601f168201915b5050995050505050505050505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515611a6057600080fd5b505050505050565b6040805190810160405280600981526020017f43697479546f6b656e000000000000000000000000000000000000000000000081525081565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bc057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501515611bbb57600080fd5b611c18565b8073ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501515611c1757600080fd5b5b50565b60008273ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515611e1e57600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001900391905055506003600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b611eca61216a565b60006040805190810160405280878152602001868152509150600160088054806001018281611ef99190612190565b916000526020600020906002020160008590919091506000820151816000019080519060200190611f2b9291906121c2565b506020820151816001019080519060200190611f489291906121c2565b5050500390508063ffffffff1681141515611f6257600080fd5b7f439973f11dc99eb930c837e8af0ecebb740324ac8eecd86b5a9c357381ba4b89818787876040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b83811015612003578082015181840152602081019050611fe8565b50505050905090810190601f1680156120305780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561206957808201518184015260208101905061204e565b50505050905090810190601f1680156120965780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a18260046000838152602001908152602001600020819055506120cb60008583611cc0565b505050505050565b60008060008414156120e85760009150612107565b82840290508284828115156120f957fe5b0414151561210357fe5b8091505b5092915050565b600080828481151561211c57fe5b0490508091505092915050565b600082821115151561213757fe5b818303905092915050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b604080519081016040528061217d612242565b815260200161218a612242565b81525090565b8154818355818115116121bd576002028160020283600052602060002091820191016121bc9190612256565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061220357805160ff1916838001178555612231565b82800160010185558215612231579182015b82811115612230578251825591602001919060010190612215565b5b50905061223e9190612295565b5090565b602060405190810160405280600081525090565b61229291905b8082111561228e576000808201600061227591906122ba565b60018201600061228591906122ba565b5060020161225c565b5090565b90565b6122b791905b808211156122b357600081600090555060010161229b565b5090565b90565b50805460018160011615610100020316600290046000825580601f106122e057506122ff565b601f0160209004906000526020600020908101906122fe9190612295565b5b505600a165627a7a7230582071eba0c0c6147d6a6837175f255084ae2f51a9ac97bca6c2caefdfd944bf6de10029

Swarm Source

bzzr://71eba0c0c6147d6a6837175f255084ae2f51a9ac97bca6c2caefdfd944bf6de1
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.