Contract 0x747616C4a19bD9bF1e2b6c8A77D206eA1f9C6018

 
 
Txn Hash
Method
Block
From
To
Value
0x5cc9fc6602f8ab9dd1876ea990d49ad9120e86339a31345c0322a53c4fb01d56Approve133799452021-10-08 19:03:13424 days 16 hrs ago0x25cfaa868033d02cc26edec57d2b3a65ef1a803e IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.01017042 210.88221614
0x9dd6f46f4c8f9d37edce31d240fd9c23d5787bf698933a09819cdaad38a5e7a5Approve133799202021-10-08 18:57:55424 days 16 hrs ago0x25cfaa868033d02cc26edec57d2b3a65ef1a803e IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.00410612 144.94947534
0x0b636af8f552b7714db96da4ebee70d9d40bf3d0ddf2d5a052317a929a25748eApprove133799072021-10-08 18:53:52424 days 16 hrs ago0x25cfaa868033d02cc26edec57d2b3a65ef1a803e IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.00595675 123.51244375
0x88be230a8372f280c4bbbf53d3e2861e8585d85f142a0357f3c04eedaa074ca8Approve118173532021-02-08 18:08:16666 days 17 hrs ago0xe6c58f8e459fe570afff5b4622990ea1744f0e28 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.00725485159
0xcf2adc5020222b57975b6a6ac76cbf2f487a9a12600fc1767fb857224da14539Approve93458852020-01-24 17:35:311047 days 17 hrs ago0x81064b275c2fb3d9fca6b7151c629b625579f1b0 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.000273766
0x2df728a721af59892bb42eb310ecb262b3b4f7cdcd9b0cc43c411d37c4e99283Approve60746722018-08-02 11:31:241587 days 23 hrs ago0x6132e824e08b78eef93a58108b13497104637122 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.000091452
0x40c028f321493a011655138c0bdcc63bf90d1ab52a707ad8a59374e451a449ccTransfer57559212018-06-08 23:24:311642 days 11 hrs ago0x5c035bb4cb7dacbfee076a5e61aa39a10da2e956 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.000185236
0xcf4833d8ff97080b8a7c0efad8a05e65c6f922773f35dae683cabf2eed4ce6bfTransfer57559172018-06-08 23:23:071642 days 11 hrs ago0x5c035bb4cb7dacbfee076a5e61aa39a10da2e956 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.000365236
0x4c2ada48a1032db4fa2b42ca49482770239d8e6a35340e4cb53ba5b93b0f010aApprove57093582018-05-31 17:11:011650 days 18 hrs ago0x5c035bb4cb7dacbfee076a5e61aa39a10da2e956 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.0012346527
0x331bf8b335815083b32be18cab35c3ac3e3a659f9e921a5168aae615cda48c8bApprove57093342018-05-31 17:05:291650 days 18 hrs ago0x5c035bb4cb7dacbfee076a5e61aa39a10da2e956 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.0013718430
0x8108e22495ca811d92919fec7b113a648cca8c8e6eac2cf555f40eca7dc7f9a9Approve56771152018-05-26 0:29:511656 days 10 hrs ago0xf0333b94f895eb5aab3822da376f9cbcfce8a19c IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.000233215.1
0x9588169d184aa2880ba0055a32ec873ddb353edd92073719de8cdb852eaf9759Approve56770152018-05-26 0:03:501656 days 11 hrs ago0xf0333b94f895eb5aab3822da376f9cbcfce8a19c IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.000278946.1
0x853a2b42f4e6c75aeb1a7b265f54cfc3d378f622af53bb54c6a9ddd057e96c45Approve56769862018-05-25 23:55:161656 days 11 hrs ago0xf0333b94f895eb5aab3822da376f9cbcfce8a19c IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.000233215.1
0x989a00360871709285a6edc31039e3fd0722dfa51f55eeb257101b0b4aa13a39Approve55519722018-05-04 0:24:491678 days 10 hrs ago0xf0333b94f895eb5aab3822da376f9cbcfce8a19c IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.000141753.1
0x3f4e8eb663234361ef5adf12119b834954f5a65f2a948345f5f4a420812aa4b3Approve55518052018-05-03 23:42:241678 days 11 hrs ago0xf0333b94f895eb5aab3822da376f9cbcfce8a19c IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.000141753.1
0x4fa1a01970f3da42748a892bc8aa3621aa073b488d6390758abbedeb548fa4aePayout53814402018-04-04 22:08:581707 days 13 hrs ago0xbb44c3370ad09641c191d793997311dba945fffe IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.0012896541
0x44afee06d0865fd61435ed63bf0be21f7ae7f8067b3f72f88cca1cc93188cee4Approve52729122018-03-17 18:49:181725 days 16 hrs ago0xffb132f267095069aea70e0799d2ec24f443a289 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.000045721
0xecf86d0b05c470b27ec8eff703811700ed1c1ffbb8aed763c424051239ae9b88Create Token52494982018-03-13 19:00:211729 days 16 hrs ago0x7ee911ca3bad2fb2b340145abc9dcc588e56f5f1 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.0021385220
0xd5fad21b2b595effae72214c85103dbd7a4a24b9dfa9857e2195d6db40f8ce76Create Token52494982018-03-13 19:00:211729 days 16 hrs ago0x7ee911ca3bad2fb2b340145abc9dcc588e56f5f1 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.0021410820
0x67f8f3ab9110fce394faf3cd838168d691a92a831c880d89833d5a50fa201327Create Token52436312018-03-12 19:02:181730 days 16 hrs ago0x7ee911ca3bad2fb2b340145abc9dcc588e56f5f1 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.002146220
0xc1000294da594cf9f7471b90849db865d550c3f91b6e21025300b36d8e751693Create Token52436282018-03-12 19:01:111730 days 16 hrs ago0x7ee911ca3bad2fb2b340145abc9dcc588e56f5f1 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.002146220
0x23d378ac2205e4ade4a61e41f38430ccca476dae9d09b0793b1a1776a6026c52Purchase52386952018-03-11 22:44:411731 days 12 hrs ago0xf0333b94f895eb5aab3822da376f9cbcfce8a19c IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180.72986767 Ether0.000262624
0x7a0ee96ada88830280d9c126f3cfe3b8ba3f5f117aacb05ad45dae0a4a4ee6ffCreate Token52320682018-03-10 19:59:221732 days 15 hrs ago0x7ee911ca3bad2fb2b340145abc9dcc588e56f5f1 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.002139820
0xa8b1625981d8cc8d42231bb3bf788156ece34eacc8d7fc9be66ba86d1ba42397Create Token52320682018-03-10 19:59:221732 days 15 hrs ago0x7ee911ca3bad2fb2b340145abc9dcc588e56f5f1 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.0021436420
0xe248bacf9d7b30045f45c94e8f5f865a670c69c8d1a954220cd1de0a6037c6aeApprove52284262018-03-10 4:59:401733 days 6 hrs ago0x5c035bb4cb7dacbfee076a5e61aa39a10da2e956 IN  0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180 Ether0.0012291240
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4fa1a01970f3da42748a892bc8aa3621aa073b488d6390758abbedeb548fa4ae53814402018-04-04 22:08:581707 days 13 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xbb44c3370ad09641c191d793997311dba945fffe1.1047553 Ether
0x23d378ac2205e4ade4a61e41f38430ccca476dae9d09b0793b1a1776a6026c5252386952018-03-11 22:44:411731 days 12 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xeca46592d25c07f72bbf6ed5ee10c31b24fa9d1d0.68607561 Ether
0x5cd6a3340bba768a67a91eb0dcd2543044e4baf0d5d5d1d004c38471da7ca89952277992018-03-10 2:28:021733 days 8 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x6132e824e08b78eef93a58108b134971046371220.53408347 Ether
0x57531b89b511cd64eb6efb7412b598f2a54deec40b02df8f92ef2667a9b93cc352262062018-03-09 20:07:341733 days 15 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xfde10342ebadf06413f56cb2f95256e4d8d478c60.00104166 Ether
0x57531b89b511cd64eb6efb7412b598f2a54deec40b02df8f92ef2667a9b93cc352262062018-03-09 20:07:341733 days 15 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x2faba4fd2bd22ef92cb0fd27604cf4e1f36ab7490.57499999 Ether
0xc2c39f80005efffa74483eeed1b145fa3e47832957ecf54dd82ccdfccabb88a252262022018-03-09 20:06:371733 days 15 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xe73001ce1f32b9006ce2452c2d30570cd15b06cb0.48 Ether
0xbd71734a43918417e1d74fdf9d0a13ed73d686b670486368fddd65bb8b01d02e52261952018-03-09 20:04:261733 days 15 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xe73001ce1f32b9006ce2452c2d30570cd15b06cb0.48 Ether
0x34228ec3610a1ba9b4c59bd6a76311844346a5e6bdfe20e90ff1b824611e167e52258012018-03-09 18:28:591733 days 16 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x7ec915b8d3ffee3deaae5aa90def8ad826d2e1101.62088811 Ether
0x3342b250bd77cb6cb6e2dceec1ac9a3db236ff920db0392611525393dec414d852257922018-03-09 18:27:281733 days 16 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xf0333b94f895eb5aab3822da376f9cbcfce8a19c1.62517813 Ether
0xa47269a2963def90e255a0a5bad59ef980991eb7bcf4afd2cf04e2f0cb6fa15252211102018-03-08 23:15:241734 days 11 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x457dea5f9c185419ea47ff80f896d98aadf1c7270.53408347 Ether
0x8a62de39789d2f0010ff6bdc91781b4b15a0a78cec9342426ec68e4e9dc6505e52210322018-03-08 22:57:031734 days 12 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xe6c58f8e459fe570afff5b4622990ea1744f0e280.54205304 Ether
0x129f4c3c3151468102391b10db7c455b9a1c6e637ab219f6626aa86d0030c7ee52203512018-03-08 20:11:131734 days 15 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xeca46592d25c07f72bbf6ed5ee10c31b24fa9d1d0.05104166 Ether
0x129f4c3c3151468102391b10db7c455b9a1c6e637ab219f6626aa86d0030c7ee52203512018-03-08 20:11:131734 days 15 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x1561b611aabe08bc6678df2bc10756d14daa4e8d0.57499999 Ether
0x8d4785c3ade616d53a9f00a57c9602b2ce8bdbd1abf406e79e4b69d16f878d7b52203512018-03-08 20:11:131734 days 15 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x1561b611aabe08bc6678df2bc10756d14daa4e8d0.16 Ether
0x8d4785c3ade616d53a9f00a57c9602b2ce8bdbd1abf406e79e4b69d16f878d7b52203512018-03-08 20:11:131734 days 15 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xe73001ce1f32b9006ce2452c2d30570cd15b06cb0.48 Ether
0xa5fcf6adb7f0540a6ba2622dd6e71273b5340a9da7d2b954937fefbf68f0c9c852203442018-03-08 20:09:481734 days 15 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xe73001ce1f32b9006ce2452c2d30570cd15b06cb0.48 Ether
0xf51629783864510ba102f4695fa47575eaee4ff66603e7c8b840c11d8ee6761452198862018-03-08 18:08:231734 days 17 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x246fc43d887af9aa7efd3226ad1f3bb20efc900d0.7070257 Ether
0x8f76aee8e09081fec529f1365af8f9e35bda4600f4586ed7c6c7df34f5a5014652198762018-03-08 18:06:411734 days 17 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x246fc43d887af9aa7efd3226ad1f3bb20efc900d0.02334782 Ether
0x8f76aee8e09081fec529f1365af8f9e35bda4600f4586ed7c6c7df34f5a5014652198762018-03-08 18:06:411734 days 17 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xb327d112a560f832765a12c72451de40af3c2be20.54205304 Ether
0x54a577fe8fc8397742d5792e29a664b49bfb07501a859dd229c8a58c3ef632c852198752018-03-08 18:06:301734 days 17 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180xfde10342ebadf06413f56cb2f95256e4d8d478c60.415574 Ether
0x067a6767ab184f0f8d887df493b14637985a522b5077256f341a5dfba358134152198732018-03-08 18:05:441734 days 17 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x9f48e5eeff7b952ba6d8bafa9a034fb01860877a0.409464 Ether
0xc3d4e47f3cc5e00b70feb9a09f24be6e0a4c8e7d71b208af46563b8418ba897852198702018-03-08 18:05:101734 days 17 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x9f48e5eeff7b952ba6d8bafa9a034fb01860877a0.40326 Ether
0xd038949d159094ac1ed9950dda562738f72bde647a44607257e957f1de4c84db52197722018-03-08 17:38:161734 days 17 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x457dea5f9c185419ea47ff80f896d98aadf1c7271.1485026 Ether
0xdd27ad39eaa62459ff4a5bad2c2d8d9733973564eba1e72fd3b0134d81700c2a52197652018-03-08 17:36:571734 days 17 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x29a9c76ad091c015c12081a1b201c3ea568845791.1770439 Ether
0x9eac41988a8320b9031f87cd7151a884f497453e2c8f146181555ae4049735fe52146352018-03-07 20:50:561735 days 14 hrs ago 0x747616c4a19bd9bf1e2b6c8a77d206ea1f9c60180x4bfa52dfdca9813605563411ff5daec5c983aec40.8094802 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CityToken

Compiler Version
v0.4.20+commit.3155dd80

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

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 TokenCreated event is fired whenever a new token comes into existence.
  event TokenCreated(uint256 tokenId, string name, uint256 parentId, 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, uint256 parentId);

  /// @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;

  /*** STORAGE ***/

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

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

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

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

  uint256 private tokenCreatedCount;

  /*** DATATYPES ***/

  struct Token {
    string name;
    uint256 parentId;
  }

  Token[] private tokens;

  mapping(uint256 => Token) private tokenIndexToToken;

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

    tokenIndexToApproved[_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 Token with the given name, parentId and price and assigns it to an address.
  function createToken(uint256 _tokenId, address _owner, string _name, uint256 _parentId, uint256 _price) public onlyCOO {

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

    tokenCreatedCount++;
    _createToken(_tokenId, _name, _parentId, tokenOwner, _price);
  }


  /// @notice Returns all the relevant information about a specific token.
  /// @param _tokenId The tokenId of the token of interest.
  function getToken(uint256 _tokenId) public view returns (
    string tokenName,
    uint256 parentId,
    uint256 sellingPrice,
    address owner
  ) {
    Token storage token = tokenIndexToToken[_tokenId];

    tokenName = token.name;
    parentId = token.parentId;
    sellingPrice = tokenIndexToPrice[_tokenId];
    owner = tokenIndexToOwner[_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 = tokenIndexToOwner[_tokenId];
    require(owner != address(0));
  }

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

  // Alternate function to withdraw less than total balance
  function withdrawFunds(address _to, uint256 amount) public onlyCLevel {
    _withdrawFunds(_to, amount);
  }
  
  // Allows someone to send ether and obtain the token
  function purchase(uint256 _tokenId) public payable {
    
    // Token IDs above 999 are for countries
    if (_tokenId > 999) {
      _purchaseCountry(_tokenId);
    }else {
      _purchaseCity(_tokenId);
    }

  }

  function priceOf(uint256 _tokenId) public view returns (uint256 price) {
    return tokenIndexToPrice[_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 = tokenIndexToOwner[_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 totalTokens = totalSupply();
      uint256 resultIndex = 0;

      uint256 tokenId;
      for (tokenId = 0; tokenId <= totalTokens; tokenId++) {
        if (tokenIndexToOwner[tokenId] == _owner) {
          result[resultIndex] = tokenId;
          resultIndex++;
        }
      }
      return result;
    }
  }

  /// For querying totalSupply of token
  /// @dev Required for ERC-721 compliance.
  function totalSupply() public view returns (uint256 total) {
    //return tokens.length;
    // NOTE: Looks like we can't get the length of mapping data structure
    //return tokenIndexToToken.length;
    return tokenCreatedCount;
  }

  /// 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 ***/

  function _purchaseCity(uint256 _tokenId) private {

     address oldOwner = tokenIndexToOwner[_tokenId];

    // Using msg.sender instead of creating a new var because we have too many vars
    //address newOwner = msg.sender;

    uint256 sellingPrice = tokenIndexToPrice[_tokenId];

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

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

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

    // Payment to previous owner should be 92% of sellingPrice
    // The other 8% is the 6% dev fee (stays in contract) and 2% Country dividend (goes to Country owner)
    // If Country does not exist yet then we add that 2% to what the previous owner gets
    // Formula: sellingPrice * 92 / 100
    // Same as: sellingPrice * .92 / 1
    uint256 payment = uint256(SafeMath.div(SafeMath.mul(sellingPrice, 92), 100));

    // Get parentId of token
    uint256 parentId = tokenIndexToToken[_tokenId].parentId;

    // Get owner address of parent
    address ownerOfParent = tokenIndexToOwner[parentId];

    // Calculate 2% of selling price
    uint256 paymentToOwnerOfParent = uint256(SafeMath.div(SafeMath.mul(sellingPrice, 2), 100));

    // If we have an address for parentId
    // If not that means parent hasn't been created yet
    // For example the city may exist but we haven't created its country yet
    // Parent ID must also be bigger than the 0-999 range of city ids ...
    // ... since a city can't be a parent of another city
    if (_addressNotNull(ownerOfParent)) {

      // Send 2% dividends to owner of parent
      ownerOfParent.transfer(paymentToOwnerOfParent);
      
    } else {

      // If no parent owner then update payment to previous owner to include paymentToOwnerOfParent
      payment = SafeMath.add(payment, paymentToOwnerOfParent);
     
    }

    // Get amount over purchase price they paid so that we can send it back to them
    uint256 purchaseExcess = SafeMath.sub(msg.value, sellingPrice);

    // Update price so that when 8% is taken out (dev fee + Country dividend) ...
    // ... the owner gets 20% over their investment
    tokenIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 120), 92);
    
    _transfer(oldOwner, msg.sender, _tokenId);

    // Pay previous tokenOwner if owner is not contract
    if (oldOwner != address(this)) {
      oldOwner.transfer(payment);
    }
    
    TokenSold(_tokenId, sellingPrice, tokenIndexToPrice[_tokenId], oldOwner, msg.sender, tokenIndexToToken[_tokenId].name, parentId);

    msg.sender.transfer(purchaseExcess);
  }

  function _purchaseCountry(uint256 _tokenId) private {

    address oldOwner = tokenIndexToOwner[_tokenId];

    uint256 sellingPrice = tokenIndexToPrice[_tokenId];

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

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

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

    // Payment to previous owner should be 96% of sellingPrice
    // The other 4% is the dev fee (stays in contract) 
    // Formula: sellingPrice * 96 / 10
    // Same as: sellingPrice * .96 / 1
    uint256 payment = uint256(SafeMath.div(SafeMath.mul(sellingPrice, 96), 100));

    // Get amount over purchase price they paid so that we can send it back to them
    uint256 purchaseExcess = SafeMath.sub(msg.value, sellingPrice);

    // Update price so that when 4% is taken out (dev fee) ...
    // ... the owner gets 15% over their investment
    tokenIndexToPrice[_tokenId] = SafeMath.div(SafeMath.mul(sellingPrice, 115), 96);
    
    _transfer(oldOwner, msg.sender, _tokenId);

    // Pay previous tokenOwner if owner is not contract
    if (oldOwner != address(this)) {
      oldOwner.transfer(payment);
    }
    
    TokenSold(_tokenId, sellingPrice, tokenIndexToPrice[_tokenId], oldOwner, msg.sender, tokenIndexToToken[_tokenId].name, 0);

    msg.sender.transfer(purchaseExcess);
  }


  /// 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 tokenIndexToApproved[_tokenId] == _to;
  }


  /// For creating City
  function _createToken(uint256 _tokenId, string _name, uint256 _parentId, address _owner, uint256 _price) private {
    
    Token memory _token = Token({
      name: _name,
      parentId: _parentId
    });

    // Rather than increment we need to be able to pass in any tokenId
    // Necessary if we are going to decide on parentIds ahead of time when creating cities ...
    // ... and then creating the parent tokens (countries) later
    //uint256 newTokenId = tokens.push(_token) - 1;
    uint256 newTokenId = _tokenId;
    tokenIndexToToken[newTokenId] = _token;

    // NOTE: Now that we don't autoincrement tokenId should we ...
    // ... check to make sure passed _tokenId arg doesn't already exist?
    
    // 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(newTokenId == uint256(uint32(newTokenId)));

    TokenCreated(newTokenId, _name, _parentId, _owner);

    tokenIndexToPrice[newTokenId] = _price;

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

  /// Check for token ownership
  function _owns(address claimant, uint256 _tokenId) private view returns (bool) {
    return claimant == tokenIndexToOwner[_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);
    }
  }

  // Alternate function to withdraw less than total balance
  function _withdrawFunds(address _to, uint256 amount) private {
    require(this.balance >= amount);
    if (_to == address(0)) {
      ceoAddress.transfer(amount);
    } else {
      _to.transfer(amount);
    }
  }

  /// @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
    tokenIndexToOwner[_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 tokenIndexToApproved[_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":"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":"tokenIndexToOwner","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":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_owner","type":"address"},{"name":"_name","type":"string"},{"name":"_parentId","type":"uint256"},{"name":"_price","type":"uint256"}],"name":"createToken","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":true,"inputs":[],"name":"NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIndexToApproved","outputs":[{"name":"","type":"address"}],"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":"_to","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getToken","outputs":[{"name":"tokenName","type":"string"},{"name":"parentId","type":"uint256"},{"name":"sellingPrice","type":"uint256"},{"name":"owner","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":"parentId","type":"uint256"},{"indexed":false,"name":"owner","type":"address"}],"name":"TokenCreated","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":"parentId","type":"uint256"}],"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"}]

606060405266b1a2bc2ec50000600055341561001a57600080fd5b60058054600160a060020a033316600160a060020a0319918216811790925560068054909116909117905561164a806100546000396000f3006060604052600436106101485763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461014d578063095ea7b3146101d75780630a0f8168146101fb5780630b7e9c441461022a5780631051db341461024957806318160ddd146102705780631d36e06c1461029557806323b872dd146102ab57806327d7874c146102d35780632ba73c15146102f257806361322d6d146103115780636352211e1461037d57806370a08231146103935780638462151c146103b257806395d89b4114610424578063a3f4df7e14610437578063a8bd9c321461044a578063a9059cbb14610460578063b047fb5014610482578063b2e6ceeb14610495578063b9186d7d146104ab578063c1075329146104c1578063e4b50cb8146104e3578063efef39a114610590578063f76f8d781461059b575b600080fd5b341561015857600080fd5b6101606105ae565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561019c578082015183820152602001610184565b50505050905090810190601f1680156101c95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101e257600080fd5b6101f9600160a060020a03600435166024356105f0565b005b341561020657600080fd5b61020e61067c565b604051600160a060020a03909116815260200160405180910390f35b341561023557600080fd5b6101f9600160a060020a036004351661068b565b341561025457600080fd5b61025c6106cd565b604051901515815260200160405180910390f35b341561027b57600080fd5b6102836106d2565b60405190815260200160405180910390f35b34156102a057600080fd5b61020e6004356106d8565b34156102b657600080fd5b6101f9600160a060020a03600435811690602435166044356106f3565b34156102de57600080fd5b6101f9600160a060020a0360043516610741565b34156102fd57600080fd5b6101f9600160a060020a03600435166107a0565b341561031c57600080fd5b6101f9600480359060248035600160a060020a0316919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650508435946020013593506107ff92505050565b341561038857600080fd5b61020e600435610869565b341561039e57600080fd5b610283600160a060020a0360043516610892565b34156103bd57600080fd5b6103d1600160a060020a03600435166108ad565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156104105780820151838201526020016103f8565b505050509050019250505060405180910390f35b341561042f57600080fd5b61016061098e565b341561044257600080fd5b6101606109cf565b341561045557600080fd5b61020e600435610a06565b341561046b57600080fd5b6101f9600160a060020a0360043516602435610a21565b341561048d57600080fd5b61020e610a59565b34156104a057600080fd5b6101f9600435610a68565b34156104b657600080fd5b610283600435610ab6565b34156104cc57600080fd5b6101f9600160a060020a0360043516602435610ac8565b34156104ee57600080fd5b6104f9600435610b08565b6040516020810184905260408101839052600160a060020a038216606082015260808082528190810186818151815260200191508051906020019080838360005b8381101561055257808201518382015260200161053a565b50505050905090810190601f16801561057f5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b6101f9600435610bf4565b34156105a657600080fd5b610160610c15565b6105b6611554565b60408051908101604052600c81527f43727970746f4369746965730000000000000000000000000000000000000000602082015290505b90565b6105fa3382610c4c565b151561060557600080fd5b60008181526003602052604090819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b600554600160a060020a031681565b60055433600160a060020a03908116911614806106b6575060065433600160a060020a039081169116145b15156106c157600080fd5b6106ca81610c6c565b50565b600190565b60075490565b600160205260009081526040902054600160a060020a031681565b6106fd8382610c4c565b151561070857600080fd5b6107128282610cf2565b151561071d57600080fd5b61072682610d12565b151561073157600080fd5b61073c838383610d20565b505050565b60055433600160a060020a0390811691161461075c57600080fd5b600160a060020a038116151561077157600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60055433600160a060020a039081169116146107bb57600080fd5b600160a060020a03811615156107d057600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60065460009033600160a060020a0390811691161461081d57600080fd5b5083600160a060020a038116151561083d5750600654600160a060020a03165b6000821161084b5760005491505b6007805460010190556108618685858486610e11565b505050505050565b600081815260016020526040902054600160a060020a031680151561088d57600080fd5b919050565b600160a060020a031660009081526002602052604090205490565b6108b5611554565b60006108bf611554565b60008060006108cd87610892565b94508415156108fd5760006040518059106108e55750595b90808252806020026020018201604052509550610984565b8460405180591061090b5750595b908082528060200260200182016040525093506109266106d2565b925060009150600090505b82811161098057600081815260016020526040902054600160a060020a0388811691161415610978578084838151811061096757fe5b602090810290910101526001909101905b600101610931565b8395505b5050505050919050565b610996611554565b60408051908101604052600981527f43697479546f6b656e00000000000000000000000000000000000000000000006020820152905090565b60408051908101604052600c81527f43727970746f4369746965730000000000000000000000000000000000000000602082015281565b600360205260009081526040902054600160a060020a031681565b610a2b3382610c4c565b1515610a3657600080fd5b610a3f82610d12565b1515610a4a57600080fd5b610a55338383610d20565b5050565b600654600160a060020a031681565b6000818152600160205260409020543390600160a060020a0316610a8b82610d12565b1515610a9657600080fd5b610aa08284610cf2565b1515610aab57600080fd5b61073c818385610d20565b60009081526004602052604090205490565b60055433600160a060020a0390811691161480610af3575060065433600160a060020a039081169116145b1515610afe57600080fd5b610a558282610f57565b610b10611554565b600082815260096020908152604080832080548493849383926002600019610100600184161502019091160491601f830181900481020190519081016040528092919081815260200182805460018160011615610100020316600290048015610bba5780601f10610b8f57610100808354040283529160200191610bba565b820191906000526020600020905b815481529060010190602001808311610b9d57829003601f168201915b505050506001928301546000988952600460209081526040808b20549590915290982054919892965050600160a060020a03169350915050565b6103e7811115610c0c57610c0781610fe8565b6106ca565b6106ca8161121d565b60408051908101604052600981527f43697479546f6b656e0000000000000000000000000000000000000000000000602082015281565b600090815260016020526040902054600160a060020a0390811691161490565b600160a060020a0381161515610cb557600554600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515610c0757600080fd5b80600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f1935050505015156106ca57600080fd5b600090815260036020526040902054600160a060020a0391821691161490565b600160a060020a0316151590565b600160a060020a038083166000818152600260209081526040808320805460019081019091558684529091529020805473ffffffffffffffffffffffffffffffffffffffff19169091179055831615610dbc57600160a060020a0383166000908152600260209081526040808320805460001901905583835260039091529020805473ffffffffffffffffffffffffffffffffffffffff191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b610e19611566565b6000604080519081016040908152878252602080830188905260008a81526009909152209092508791508290815181908051610e59929160200190611586565b5060208201516001909101555063ffffffff81168114610e7857600080fd5b7fd306967beeb39489cb6724748118d29c59bd0f0e17a5dd711b4f4d3dea3a1c478187878760405184815260408101839052600160a060020a038216606082015260806020820181815290820185818151815260200191508051906020019080838360005b83811015610ef5578082015183820152602001610edd565b50505050905090810190601f168015610f225780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a16000818152600460205260408120849055610f4e908583610d20565b50505050505050565b600160a060020a0330163181901015610f6f57600080fd5b600160a060020a0382161515610fb757600554600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610fb257600080fd5b610a55565b600160a060020a03821681156108fc0282604051600060405180830381858888f193505050501515610a5557600080fd5b6000818152600160209081526040808320546004909252822054600160a060020a039182169290918190331684141561102057600080fd5b61102933610d12565b151561103457600080fd5b348390101561104257600080fd5b6110576110508460606114e6565b606461151c565b91506110633484611533565b905061107a6110738460736114e6565b606061151c565b600086815260046020526040902055611094843387610d20565b30600160a060020a031684600160a060020a03161415156110e057600160a060020a03841682156108fc0283604051600060405180830381858888f1935050505015156110e057600080fd5b60008581526004602090815260408083205460099092528083207fcc4d424edf68e653a0d37a09ddccfdb04ad2d170037e0ccbb3a2b73de3937183938993889390928a923392518781526020810187905260408101869052600160a060020a0385811660608301528416608082015260c0810182905260e060a082018181528454600260018216156101009081026000190190921604928401839052909190830190859080156111d15780601f106111a6576101008083540402835291602001916111d1565b820191906000526020600020905b8154815290600101906020018083116111b457829003601f168201915b50509850505050505050505060405180910390a1600160a060020a03331681156108fc0282604051600060405180830381858888f19350505050151561121657600080fd5b5050505050565b6000818152600160209081526040808320546004909252822054600160a060020a039182169290918190819081908190331687141561125b57600080fd5b61126433610d12565b151561126f57600080fd5b348690101561127d57600080fd5b61128b61105087605c6114e6565b60008981526009602090815260408083206001908101548085529252909120549196509450600160a060020a031692506112c96110508760026114e6565b91506112d483610d12565b1561130f57600160a060020a03831682156108fc0283604051600060405180830381858888f19350505050151561130a57600080fd5b61131c565b6113198583611545565b94505b6113263487611533565b905061133d6113368760786114e6565b605c61151c565b60008981526004602052604090205561135787338a610d20565b30600160a060020a031687600160a060020a03161415156113a357600160a060020a03871685156108fc0286604051600060405180830381858888f1935050505015156113a357600080fd5b6000888152600460209081526040808320546009909252918290207fcc4d424edf68e653a0d37a09ddccfdb04ad2d170037e0ccbb3a2b73de3937183928b928a9290918c9133918b90518781526020810187905260408101869052600160a060020a0385811660608301528416608082015260c0810182905260e060a082018181528454600260018216156101009081026000190190921604928401839052909190830190859080156114975780601f1061146c57610100808354040283529160200191611497565b820191906000526020600020905b81548152906001019060200180831161147a57829003601f168201915b50509850505050505050505060405180910390a1600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156114dc57600080fd5b5050505050505050565b6000808315156114f95760009150611515565b5082820282848281151561150957fe5b041461151157fe5b8091505b5092915050565b600080828481151561152a57fe5b04949350505050565b60008282111561153f57fe5b50900390565b60008282018381101561151157fe5b60206040519081016040526000815290565b6040805190810160405280611579611554565b8152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106115c757805160ff19168380011785556115f4565b828001600101855582156115f4579182015b828111156115f45782518255916020019190600101906115d9565b50611600929150611604565b5090565b6105ed91905b80821115611600576000815560010161160a5600a165627a7a7230582051fbe2c9f41477ac8ce8cdb0ac3ff3a017473c8e87944fd026b9d549a8faa50c0029

Swarm Source

bzzr://51fbe2c9f41477ac8ce8cdb0ac3ff3a017473c8e87944fd026b9d549a8faa50c
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.