Contract 0xf5b0a3efb8e8e4c201e2a935f110eaaf3ffecb8d

 

Contract Overview

Axie Token
Balance:
0 Ether

EtherValue:
$0

Token:
TxHash Block Age From To Value [TxFee]
0xe11ee0a0c0e977c4380ecaccf125d72e4287ffa35654f55cf8371daa28d75fc074245681 hr 21 mins ago0x9fd0078c676aeafaa41f55de4c12fa9e080c8b22 IN  Axie Token0 Ether0.000154509
0x8ab94a61fba4dee0c9926649c3d6fd95b4751d95e07f709039c198e329487b1274240803 hrs 8 mins ago0x1e3934ea7e416f4e2bc5f7d55ae9783da0061475 IN  Axie Token0 Ether0.0002163126
0xc28bea2285308fb8f238e1cfd8d02f2b4517c7989315a85f934e2369127d1ffd74240793 hrs 8 mins ago0x1e3934ea7e416f4e2bc5f7d55ae9783da0061475 IN  Axie Token0 Ether0.0002163126
0xcee4c1869de05008d76c3385de3239fb705be06e11ac06dff9a5cec9a7526bfa74240173 hrs 23 mins ago0xf8454a749418e5e8c6a116900b10c4b7c2573349 IN  Axie Token0 Ether0.0002161782
0xc73bf3c93aca5d87f41ee6cd0270c99175fb8328df4dc6711afc8c59c25dcd5774240123 hrs 24 mins ago0xf8454a749418e5e8c6a116900b10c4b7c2573349 IN  Axie Token0 Ether0.0002161782
0xbad305185d9f7a150cb34a2ff218122184ff18a657e71c19fd6e6e4f138ed8e474238004 hrs 13 mins ago0xa484e10e95302eb89e45f0bc8d83e2a3a8c84e4a IN  Axie Token0 Ether0.0003193186
0xd2c4656a84912824bc1134e0f777c2fd3b976503b70bad29e6760b6d33cdb4a174234505 hrs 34 mins ago0xa484e10e95302eb89e45f0bc8d83e2a3a8c84e4a IN  Axie Token0 Ether0.0002161782
0x25eaf7bec8983c755075790de06e51e6f1bb304e1f034544892891089e113b0274234135 hrs 42 mins ago0xa484e10e95302eb89e45f0bc8d83e2a3a8c84e4a IN  Axie Token0 Ether0.0002161782
0x755cb68c322ea6160a7f63f7e4afe988ec755fd656f1865ca6474592b61d2e0774232456 hrs 25 mins ago0x7405fe24003a50e4f4117d35e9b5a9f5e512fede IN  Axie Token0 Ether0.0002161782
0x1dae268dd8d050bb3af8e7a7707f4e2280dcf2fd0e696381f666534045c0c2bf74232376 hrs 27 mins ago0x7405fe24003a50e4f4117d35e9b5a9f5e512fede IN  Axie Token0 Ether0.0000573867
0x447dd9a9d5a19fab57152877b5caa1a16e8329adabda98b48f7d66e68b073f9374232356 hrs 27 mins ago0x7405fe24003a50e4f4117d35e9b5a9f5e512fede IN  Axie Token0 Ether0.0002161782
0x0df0d7c1cc47526b62001686ffa81883c39bfc9f5865a8ad9c9bfeb1f84f2e7974232326 hrs 28 mins ago0x7405fe24003a50e4f4117d35e9b5a9f5e512fede IN  Axie Token0 Ether0.0002161782
0x8cd7fa68cf9ed98983397ab860c78b3c42373c1a31cce2ded505b8c30cf0017a74229957 hrs 22 mins ago0xf1a2a7aca7075a52cc779fed30771e6a4a805b11 IN  Axie Token0 Ether0.0002163126
0x04c77ee83bde8c62ef6afb433d42f7208e452fd5a00d9144d486648e229b303674229857 hrs 25 mins ago0x51787a2c56d710c68140bdadefd3a98bff96feb4 IN  Axie Token0 Ether0.0002163126
0x76ce2f258259006a7af1b7e9f35468654a6b303fa99d5385351d38c7caac69d274229837 hrs 26 mins ago0x51787a2c56d710c68140bdadefd3a98bff96feb4 IN  Axie Token0 Ether0.0002163126
0xe39ad8483617acf00ea45ee605f72982bd496164a16ab4d0147d5af07391b4a374229107 hrs 42 mins ago0x6b357e2cbae33cfb53ae9c136829d98def4a9561 IN  Axie Token0 Ether0.0003193186
0x58c07eeb967431a4d4dd3c961b04fece9103b5425c720554ef19438e3819da4374229087 hrs 43 mins ago0x6b357e2cbae33cfb53ae9c136829d98def4a9561 IN  Axie Token0 Ether0.0003193186
0xaea11b4797e59121572c09a03abb6eb8b94a3b78ffe09b9a5371debb81e0ce3374229077 hrs 44 mins ago0x6b357e2cbae33cfb53ae9c136829d98def4a9561 IN  Axie Token0 Ether0.0005253306
0x7923796c36d5962cde992e4a8308bfe8f70137d9ee4bb4f07f43f65b10ab5b4674229057 hrs 44 mins ago0x6b357e2cbae33cfb53ae9c136829d98def4a9561 IN  Axie Token0 Ether0.0003193186
0x9f885cde3b16f1377f92c718f74b7dc863ec53cf03540ec4bb1c3542075f320f74229037 hrs 44 mins ago0x6b357e2cbae33cfb53ae9c136829d98def4a9561 IN  Axie Token0 Ether0.0003193186
0x8d9581106d445625d208bedf2b4bf72f511da5702d4a60a5a046ffbd5333432d74228927 hrs 48 mins ago0x6b357e2cbae33cfb53ae9c136829d98def4a9561 IN  Axie Token0 Ether0.0002163126
0x8b7214bd12c4240aebe152785cdac0d8965cd0ed970125fd28305963edf59e0774228777 hrs 49 mins ago0xf1a2a7aca7075a52cc779fed30771e6a4a805b11 IN  Axie Token0 Ether0.000282372
0x68d832c9ad7e657c59d03b34a12e3b89082905fe5697492cea978bd9fee1aaea74225459 hrs 9 mins ago0xa6518bee322af13ba71c471b3527416ed08ad2a4 IN  Axie Token0 Ether0.0002163126
0x8ac81ae4b35581e86e5475a35ae3d3fa98de8ac6a9fb2f7fed815d6a798b4e9a74224959 hrs 18 mins ago0x1c9cdf7e998266228a6e4929f5f721cf0f40a074 IN  Axie Token0 Ether0.0002163126
0xd494f8fac1658f93b9ea7cb2c7d98ea898ab89869244464645c3b000c416ff38742105214 hrs 30 mins ago0x9792431b26026cc67117ff610ae4eb34cacd0755 IN  Axie Token0 Ether0.0001133066
[ Download CSV Export 

Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value

Contract Source Code Verified (Exact Match)

Contract Name:
AxieCore

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

pragma solidity ^0.4.19;

// File: contracts/erc/erc165/IERC165.sol

/// @title ERC-165 Standard Interface Detection
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
interface IERC165 {
  /// @notice Query if a contract implements an interface
  /// @param interfaceID The interface identifier, as specified in ERC-165
  /// @dev Interface identification is specified in ERC-165. This function
  ///  uses less than 30,000 gas.
  /// @return `true` if the contract implements `interfaceID` and
  ///  `interfaceID` is not 0xffffffff, `false` otherwise
  function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

// File: contracts/erc/erc165/ERC165.sol

contract ERC165 is IERC165 {
  /// @dev You must not set element 0xffffffff to true
  mapping (bytes4 => bool) internal supportedInterfaces;

  function ERC165() internal {
    supportedInterfaces[0x01ffc9a7] = true; // ERC-165
  }

  function supportsInterface(bytes4 interfaceID) external view returns (bool) {
    return supportedInterfaces[interfaceID];
  }
}

// File: contracts/erc/erc721/IERC721Base.sol

/// @title ERC-721 Non-Fungible Token Standard
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
///  Note: the ERC-165 identifier for this interface is 0x6466353c
interface IERC721Base /* is IERC165  */ {
  /// @dev This emits when ownership of any NFT changes by any mechanism.
  ///  This event emits when NFTs are created (`from` == 0) and destroyed
  ///  (`to` == 0). Exception: during contract creation, any number of NFTs
  ///  may be created and assigned without emitting Transfer. At the time of
  ///  any transfer, the approved address for that NFT (if any) is reset to none.
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);

  /// @dev This emits when the approved address for an NFT is changed or
  ///  reaffirmed. The zero address indicates there is no approved address.
  ///  When a Transfer event emits, this also indicates that the approved
  ///  address for that NFT (if any) is reset to none.
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

  /// @dev This emits when an operator is enabled or disabled for an owner.
  ///  The operator can manage all NFTs of the owner.
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

  /// @notice Count all NFTs assigned to an owner
  /// @dev NFTs assigned to the zero address are considered invalid, and this
  ///  function throws for queries about the zero address.
  /// @param _owner An address for whom to query the balance
  /// @return The number of NFTs owned by `_owner`, possibly zero
  function balanceOf(address _owner) external view returns (uint256);

  /// @notice Find the owner of an NFT
  /// @param _tokenId The identifier for an NFT
  /// @dev NFTs assigned to zero address are considered invalid, and queries
  ///  about them do throw.
  /// @return The address of the owner of the NFT
  function ownerOf(uint256 _tokenId) external view returns (address);

  /// @notice Transfers the ownership of an NFT from one address to another address
  /// @dev Throws unless `msg.sender` is the current owner, an authorized
  ///  operator, or the approved address for this NFT. Throws if `_from` is
  ///  not the current owner. Throws if `_to` is the zero address. Throws if
  ///  `_tokenId` is not a valid NFT. When transfer is complete, this function
  ///  checks if `_to` is a smart contract (code size > 0). If so, it calls
  ///  `onERC721Received` on `_to` and throws if the return value is not
  ///  `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`.
  /// @param _from The current owner of the NFT
  /// @param _to The new owner
  /// @param _tokenId The NFT to transfer
  /// @param _data Additional data with no specified format, sent in call to `_to`
  // solium-disable-next-line arg-overflow
  function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) external payable;

  /// @notice Transfers the ownership of an NFT from one address to another address
  /// @dev This works identically to the other function with an extra data parameter,
  ///  except this function just sets data to []
  /// @param _from The current owner of the NFT
  /// @param _to The new owner
  /// @param _tokenId The NFT to transfer
  function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;

  /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
  ///  TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
  ///  THEY MAY BE PERMANENTLY LOST
  /// @dev Throws unless `msg.sender` is the current owner, an authorized
  ///  operator, or the approved address for this NFT. Throws if `_from` is
  ///  not the current owner. Throws if `_to` is the zero address. Throws if
  ///  `_tokenId` is not a valid NFT.
  /// @param _from The current owner of the NFT
  /// @param _to The new owner
  /// @param _tokenId The NFT to transfer
  function transferFrom(address _from, address _to, uint256 _tokenId) external payable;

  /// @notice Set or reaffirm the approved address for an NFT
  /// @dev The zero address indicates there is no approved address.
  /// @dev Throws unless `msg.sender` is the current NFT owner, or an authorized
  ///  operator of the current owner.
  /// @param _approved The new approved NFT controller
  /// @param _tokenId The NFT to approve
  function approve(address _approved, uint256 _tokenId) external payable;

  /// @notice Enable or disable approval for a third party ("operator") to manage
  ///  all your asset.
  /// @dev Emits the ApprovalForAll event
  /// @param _operator Address to add to the set of authorized operators.
  /// @param _approved True if the operators is approved, false to revoke approval
  function setApprovalForAll(address _operator, bool _approved) external;

  /// @notice Get the approved address for a single NFT
  /// @dev Throws if `_tokenId` is not a valid NFT
  /// @param _tokenId The NFT to find the approved address for
  /// @return The approved address for this NFT, or the zero address if there is none
  function getApproved(uint256 _tokenId) external view returns (address);

  /// @notice Query if an address is an authorized operator for another address
  /// @param _owner The address that owns the NFTs
  /// @param _operator The address that acts on behalf of the owner
  /// @return True if `_operator` is an approved operator for `_owner`, false otherwise
  function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

// File: contracts/erc/erc721/IERC721Enumerable.sol

/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
///  Note: the ERC-165 identifier for this interface is 0x780e9d63
interface IERC721Enumerable /* is IERC721Base */ {
  /// @notice Count NFTs tracked by this contract
  /// @return A count of valid NFTs tracked by this contract, where each one of
  ///  them has an assigned and queryable owner not equal to the zero address
  function totalSupply() external view returns (uint256);

  /// @notice Enumerate valid NFTs
  /// @dev Throws if `_index` >= `totalSupply()`.
  /// @param _index A counter less than `totalSupply()`
  /// @return The token identifier for the `_index`th NFT,
  ///  (sort order not specified)
  function tokenByIndex(uint256 _index) external view returns (uint256);

  /// @notice Enumerate NFTs assigned to an owner
  /// @dev Throws if `_index` >= `balanceOf(_owner)` or if
  ///  `_owner` is the zero address, representing invalid NFTs.
  /// @param _owner An address where we are interested in NFTs owned by them
  /// @param _index A counter less than `balanceOf(_owner)`
  /// @return The token identifier for the `_index`th NFT assigned to `_owner`,
  ///   (sort order not specified)
  function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 _tokenId);
}

// File: contracts/erc/erc721/IERC721TokenReceiver.sol

/// @dev Note: the ERC-165 identifier for this interface is 0xf0b9e5ba
interface IERC721TokenReceiver {
  /// @notice Handle the receipt of an NFT
  /// @dev The ERC721 smart contract calls this function on the recipient
  ///  after a `transfer`. This function MAY throw to revert and reject the
  ///  transfer. This function MUST use 50,000 gas or less. Return of other
  ///  than the magic value MUST result in the transaction being reverted.
  ///  Note: the contract address is always the message sender.
  /// @param _from The sending address
  /// @param _tokenId The NFT identifier which is being transfered
  /// @param _data Additional data with no specified format
  /// @return `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`
  ///  unless throwing
	function onERC721Received(address _from, uint256 _tokenId, bytes _data) external returns (bytes4);
}

// File: contracts/core/dependency/AxieManager.sol

interface AxieSpawningManager {
	function isSpawningAllowed(uint256 _genes, address _owner) external returns (bool);
  function isRebirthAllowed(uint256 _axieId, uint256 _genes) external returns (bool);
}

interface AxieRetirementManager {
  function isRetirementAllowed(uint256 _axieId, bool _rip) external returns (bool);
}

interface AxieMarketplaceManager {
  function isTransferAllowed(address _from, address _to, uint256 _axieId) external returns (bool);
}

interface AxieGeneManager {
  function isEvolvementAllowed(uint256 _axieId, uint256 _newGenes) external returns (bool);
}

// File: contracts/core/dependency/AxieDependency.sol

contract AxieDependency {

  address public whitelistSetterAddress;

  AxieSpawningManager public spawningManager;
  AxieRetirementManager public retirementManager;
  AxieMarketplaceManager public marketplaceManager;
  AxieGeneManager public geneManager;

  mapping (address => bool) public whitelistedSpawner;
  mapping (address => bool) public whitelistedByeSayer;
  mapping (address => bool) public whitelistedMarketplace;
  mapping (address => bool) public whitelistedGeneScientist;

  function AxieDependency() internal {
    whitelistSetterAddress = msg.sender;
  }

  modifier onlyWhitelistSetter() {
    require(msg.sender == whitelistSetterAddress);
    _;
  }

  modifier whenSpawningAllowed(uint256 _genes, address _owner) {
    require(
      spawningManager == address(0) ||
        spawningManager.isSpawningAllowed(_genes, _owner)
    );
    _;
  }

  modifier whenRebirthAllowed(uint256 _axieId, uint256 _genes) {
    require(
      spawningManager == address(0) ||
        spawningManager.isRebirthAllowed(_axieId, _genes)
    );
    _;
  }

  modifier whenRetirementAllowed(uint256 _axieId, bool _rip) {
    require(
      retirementManager == address(0) ||
        retirementManager.isRetirementAllowed(_axieId, _rip)
    );
    _;
  }

  modifier whenTransferAllowed(address _from, address _to, uint256 _axieId) {
    require(
      marketplaceManager == address(0) ||
        marketplaceManager.isTransferAllowed(_from, _to, _axieId)
    );
    _;
  }

  modifier whenEvolvementAllowed(uint256 _axieId, uint256 _newGenes) {
    require(
      geneManager == address(0) ||
        geneManager.isEvolvementAllowed(_axieId, _newGenes)
    );
    _;
  }

  modifier onlySpawner() {
    require(whitelistedSpawner[msg.sender]);
    _;
  }

  modifier onlyByeSayer() {
    require(whitelistedByeSayer[msg.sender]);
    _;
  }

  modifier onlyMarketplace() {
    require(whitelistedMarketplace[msg.sender]);
    _;
  }

  modifier onlyGeneScientist() {
    require(whitelistedGeneScientist[msg.sender]);
    _;
  }

  /*
   * @dev Setting the whitelist setter address to `address(0)` would be a irreversible process.
   *  This is to lock changes to Axie's contracts after their development is done.
   */
  function setWhitelistSetter(address _newSetter) external onlyWhitelistSetter {
    whitelistSetterAddress = _newSetter;
  }

  function setSpawningManager(address _manager) external onlyWhitelistSetter {
    spawningManager = AxieSpawningManager(_manager);
  }

  function setRetirementManager(address _manager) external onlyWhitelistSetter {
    retirementManager = AxieRetirementManager(_manager);
  }

  function setMarketplaceManager(address _manager) external onlyWhitelistSetter {
    marketplaceManager = AxieMarketplaceManager(_manager);
  }

  function setGeneManager(address _manager) external onlyWhitelistSetter {
    geneManager = AxieGeneManager(_manager);
  }

  function setSpawner(address _spawner, bool _whitelisted) external onlyWhitelistSetter {
    require(whitelistedSpawner[_spawner] != _whitelisted);
    whitelistedSpawner[_spawner] = _whitelisted;
  }

  function setByeSayer(address _byeSayer, bool _whitelisted) external onlyWhitelistSetter {
    require(whitelistedByeSayer[_byeSayer] != _whitelisted);
    whitelistedByeSayer[_byeSayer] = _whitelisted;
  }

  function setMarketplace(address _marketplace, bool _whitelisted) external onlyWhitelistSetter {
    require(whitelistedMarketplace[_marketplace] != _whitelisted);
    whitelistedMarketplace[_marketplace] = _whitelisted;
  }

  function setGeneScientist(address _geneScientist, bool _whitelisted) external onlyWhitelistSetter {
    require(whitelistedGeneScientist[_geneScientist] != _whitelisted);
    whitelistedGeneScientist[_geneScientist] = _whitelisted;
  }
}

// File: contracts/core/AxieAccessControl.sol

contract AxieAccessControl {

  address public ceoAddress;
  address public cfoAddress;
  address public cooAddress;

  function AxieAccessControl() internal {
    ceoAddress = msg.sender;
  }

  modifier onlyCEO() {
    require(msg.sender == ceoAddress);
    _;
  }

  modifier onlyCFO() {
    require(msg.sender == cfoAddress);
    _;
  }

  modifier onlyCOO() {
    require(msg.sender == cooAddress);
    _;
  }

  modifier onlyCLevel() {
    require(
      // solium-disable operator-whitespace
      msg.sender == ceoAddress ||
        msg.sender == cfoAddress ||
        msg.sender == cooAddress
      // solium-enable operator-whitespace
    );
    _;
  }

  function setCEO(address _newCEO) external onlyCEO {
    require(_newCEO != address(0));
    ceoAddress = _newCEO;
  }

  function setCFO(address _newCFO) external onlyCEO {
    cfoAddress = _newCFO;
  }

  function setCOO(address _newCOO) external onlyCEO {
    cooAddress = _newCOO;
  }

  function withdrawBalance() external onlyCFO {
    cfoAddress.transfer(this.balance);
  }
}

// File: contracts/core/lifecycle/AxiePausable.sol

contract AxiePausable is AxieAccessControl {

  bool public paused = false;

  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  modifier whenPaused {
    require(paused);
    _;
  }

  function pause() external onlyCLevel whenNotPaused {
    paused = true;
  }

  function unpause() public onlyCEO whenPaused {
    paused = false;
  }
}

// File: zeppelin/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

// File: contracts/core/erc721/AxieERC721BaseEnumerable.sol

contract AxieERC721BaseEnumerable is ERC165, IERC721Base, IERC721Enumerable, AxieDependency, AxiePausable {
  using SafeMath for uint256;

  // @dev Total amount of tokens.
  uint256 private _totalTokens;

  // @dev Mapping from token index to ID.
  mapping (uint256 => uint256) private _overallTokenId;

  // @dev Mapping from token ID to index.
  mapping (uint256 => uint256) private _overallTokenIndex;

  // @dev Mapping from token ID to owner.
  mapping (uint256 => address) private _tokenOwner;

  // @dev For a given owner and a given operator, store whether
  //  the operator is allowed to manage tokens on behalf of the owner.
  mapping (address => mapping (address => bool)) private _tokenOperator;

  // @dev Mapping from token ID to approved address.
  mapping (uint256 => address) private _tokenApproval;

  // @dev Mapping from owner to list of owned token IDs.
  mapping (address => uint256[]) private _ownedTokens;

  // @dev Mapping from token ID to index in the owned token list.
  mapping (uint256 => uint256) private _ownedTokenIndex;

  function AxieERC721BaseEnumerable() internal {
    supportedInterfaces[0x6466353c] = true; // ERC-721 Base
    supportedInterfaces[0x780e9d63] = true; // ERC-721 Enumerable
  }

  // solium-disable function-order

  modifier mustBeValidToken(uint256 _tokenId) {
    require(_tokenOwner[_tokenId] != address(0));
    _;
  }

  function _isTokenOwner(address _ownerToCheck, uint256 _tokenId) private view returns (bool) {
    return _tokenOwner[_tokenId] == _ownerToCheck;
  }

  function _isTokenOperator(address _operatorToCheck, uint256 _tokenId) private view returns (bool) {
    return whitelistedMarketplace[_operatorToCheck] ||
      _tokenOperator[_tokenOwner[_tokenId]][_operatorToCheck];
  }

  function _isApproved(address _approvedToCheck, uint256 _tokenId) private view returns (bool) {
    return _tokenApproval[_tokenId] == _approvedToCheck;
  }

  modifier onlyTokenOwner(uint256 _tokenId) {
    require(_isTokenOwner(msg.sender, _tokenId));
    _;
  }

  modifier onlyTokenOwnerOrOperator(uint256 _tokenId) {
    require(_isTokenOwner(msg.sender, _tokenId) || _isTokenOperator(msg.sender, _tokenId));
    _;
  }

  modifier onlyTokenAuthorized(uint256 _tokenId) {
    require(
      // solium-disable operator-whitespace
      _isTokenOwner(msg.sender, _tokenId) ||
        _isTokenOperator(msg.sender, _tokenId) ||
        _isApproved(msg.sender, _tokenId)
      // solium-enable operator-whitespace
    );
    _;
  }

  // ERC-721 Base

  function balanceOf(address _owner) external view returns (uint256) {
    require(_owner != address(0));
    return _ownedTokens[_owner].length;
  }

  function ownerOf(uint256 _tokenId) external view mustBeValidToken(_tokenId) returns (address) {
    return _tokenOwner[_tokenId];
  }

  function _addTokenTo(address _to, uint256 _tokenId) private {
    require(_to != address(0));

    _tokenOwner[_tokenId] = _to;

    uint256 length = _ownedTokens[_to].length;
    _ownedTokens[_to].push(_tokenId);
    _ownedTokenIndex[_tokenId] = length;
  }

  function _mint(address _to, uint256 _tokenId) internal {
    require(_tokenOwner[_tokenId] == address(0));

    _addTokenTo(_to, _tokenId);

    _overallTokenId[_totalTokens] = _tokenId;
    _overallTokenIndex[_tokenId] = _totalTokens;
    _totalTokens = _totalTokens.add(1);

    Transfer(address(0), _to, _tokenId);
  }

  function _removeTokenFrom(address _from, uint256 _tokenId) private {
    require(_from != address(0));

    uint256 _tokenIndex = _ownedTokenIndex[_tokenId];
    uint256 _lastTokenIndex = _ownedTokens[_from].length.sub(1);
    uint256 _lastTokenId = _ownedTokens[_from][_lastTokenIndex];

    _tokenOwner[_tokenId] = address(0);

    // Insert the last token into the position previously occupied by the removed token.
    _ownedTokens[_from][_tokenIndex] = _lastTokenId;
    _ownedTokenIndex[_lastTokenId] = _tokenIndex;

    // Resize the array.
    delete _ownedTokens[_from][_lastTokenIndex];
    _ownedTokens[_from].length--;

    // Remove the array if no more tokens are owned to prevent pollution.
    if (_ownedTokens[_from].length == 0) {
      delete _ownedTokens[_from];
    }

    // Update the index of the removed token.
    delete _ownedTokenIndex[_tokenId];
  }

  function _burn(uint256 _tokenId) internal {
    address _from = _tokenOwner[_tokenId];

    require(_from != address(0));

    _removeTokenFrom(_from, _tokenId);
    _totalTokens = _totalTokens.sub(1);

    uint256 _tokenIndex = _overallTokenIndex[_tokenId];
    uint256 _lastTokenId = _overallTokenId[_totalTokens];

    delete _overallTokenIndex[_tokenId];
    delete _overallTokenId[_totalTokens];
    _overallTokenId[_tokenIndex] = _lastTokenId;
    _overallTokenIndex[_lastTokenId] = _tokenIndex;

    Transfer(_from, address(0), _tokenId);
  }

  function _isContract(address _address) private view returns (bool) {
    uint _size;
    // solium-disable-next-line security/no-inline-assembly
    assembly { _size := extcodesize(_address) }
    return _size > 0;
  }

  function _transferFrom(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes _data,
    bool _check
  )
    internal
    mustBeValidToken(_tokenId)
    onlyTokenAuthorized(_tokenId)
    whenTransferAllowed(_from, _to, _tokenId)
  {
    require(_isTokenOwner(_from, _tokenId));
    require(_to != address(0));
    require(_to != _from);

    _removeTokenFrom(_from, _tokenId);

    delete _tokenApproval[_tokenId];
    Approval(_from, address(0), _tokenId);

    _addTokenTo(_to, _tokenId);

    if (_check && _isContract(_to)) {
      IERC721TokenReceiver(_to).onERC721Received.gas(50000)(_from, _tokenId, _data);
    }

    Transfer(_from, _to, _tokenId);
  }

  // solium-disable arg-overflow

  function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) external payable {
    _transferFrom(_from, _to, _tokenId, _data, true);
  }

  function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable {
    _transferFrom(_from, _to, _tokenId, "", true);
  }

  function transferFrom(address _from, address _to, uint256 _tokenId) external payable {
    _transferFrom(_from, _to, _tokenId, "", false);
  }

  // solium-enable arg-overflow

  function approve(
    address _approved,
    uint256 _tokenId
  )
    external
    payable
    mustBeValidToken(_tokenId)
    onlyTokenOwnerOrOperator(_tokenId)
    whenNotPaused
  {
    address _owner = _tokenOwner[_tokenId];

    require(_owner != _approved);
    require(_tokenApproval[_tokenId] != _approved);

    _tokenApproval[_tokenId] = _approved;

    Approval(_owner, _approved, _tokenId);
  }

  function setApprovalForAll(address _operator, bool _approved) external whenNotPaused {
    require(_tokenOperator[msg.sender][_operator] != _approved);
    _tokenOperator[msg.sender][_operator] = _approved;
    ApprovalForAll(msg.sender, _operator, _approved);
  }

  function getApproved(uint256 _tokenId) external view mustBeValidToken(_tokenId) returns (address) {
    return _tokenApproval[_tokenId];
  }

  function isApprovedForAll(address _owner, address _operator) external view returns (bool) {
    return _tokenOperator[_owner][_operator];
  }

  // ERC-721 Enumerable

  function totalSupply() external view returns (uint256) {
    return _totalTokens;
  }

  function tokenByIndex(uint256 _index) external view returns (uint256) {
    require(_index < _totalTokens);
    return _overallTokenId[_index];
  }

  function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 _tokenId) {
    require(_owner != address(0));
    require(_index < _ownedTokens[_owner].length);
    return _ownedTokens[_owner][_index];
  }
}

// File: contracts/erc/erc721/IERC721Metadata.sol

/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
///  Note: the ERC-165 identifier for this interface is 0x5b5e139f
interface IERC721Metadata /* is IERC721Base */ {
  /// @notice A descriptive name for a collection of NFTs in this contract
  function name() external pure returns (string _name);

  /// @notice An abbreviated name for NFTs in this contract
  function symbol() external pure returns (string _symbol);

  /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
  /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
  ///  3986. The URI may point to a JSON file that conforms to the "ERC721
  ///  Metadata JSON Schema".
  function tokenURI(uint256 _tokenId) external view returns (string);
}

// File: contracts/core/erc721/AxieERC721Metadata.sol

contract AxieERC721Metadata is AxieERC721BaseEnumerable, IERC721Metadata {
  string public tokenURIPrefix = "https://axieinfinity.com/erc/721/axies/";
  string public tokenURISuffix = ".json";

  function AxieERC721Metadata() internal {
    supportedInterfaces[0x5b5e139f] = true; // ERC-721 Metadata
  }

  function name() external pure returns (string) {
    return "Axie";
  }

  function symbol() external pure returns (string) {
    return "AXIE";
  }

  function setTokenURIAffixes(string _prefix, string _suffix) external onlyCEO {
    tokenURIPrefix = _prefix;
    tokenURISuffix = _suffix;
  }

  function tokenURI(
    uint256 _tokenId
  )
    external
    view
    mustBeValidToken(_tokenId)
    returns (string)
  {
    bytes memory _tokenURIPrefixBytes = bytes(tokenURIPrefix);
    bytes memory _tokenURISuffixBytes = bytes(tokenURISuffix);
    uint256 _tmpTokenId = _tokenId;
    uint256 _length;

    do {
      _length++;
      _tmpTokenId /= 10;
    } while (_tmpTokenId > 0);

    bytes memory _tokenURIBytes = new bytes(_tokenURIPrefixBytes.length + _length + 5);
    uint256 _i = _tokenURIBytes.length - 6;

    _tmpTokenId = _tokenId;

    do {
      _tokenURIBytes[_i--] = byte(48 + _tmpTokenId % 10);
      _tmpTokenId /= 10;
    } while (_tmpTokenId > 0);

    for (_i = 0; _i < _tokenURIPrefixBytes.length; _i++) {
      _tokenURIBytes[_i] = _tokenURIPrefixBytes[_i];
    }

    for (_i = 0; _i < _tokenURISuffixBytes.length; _i++) {
      _tokenURIBytes[_tokenURIBytes.length + _i - 5] = _tokenURISuffixBytes[_i];
    }

    return string(_tokenURIBytes);
  }
}

// File: contracts/core/erc721/AxieERC721.sol

// solium-disable-next-line no-empty-blocks
contract AxieERC721 is AxieERC721BaseEnumerable, AxieERC721Metadata {
}

// File: contracts/core/AxieCore.sol

// solium-disable-next-line no-empty-blocks
contract AxieCore is AxieERC721 {
  struct Axie {
    uint256 genes;
    uint256 bornAt;
  }

  Axie[] axies;

  event AxieSpawned(uint256 indexed _axieId, address indexed _owner, uint256 _genes);
  event AxieRebirthed(uint256 indexed _axieId, uint256 _genes);
  event AxieRetired(uint256 indexed _axieId);
  event AxieEvolved(uint256 indexed _axieId, uint256 _oldGenes, uint256 _newGenes);

  function AxieCore() public {
    axies.push(Axie(0, now)); // The void Axie
    _spawnAxie(0, msg.sender); // Will be Puff
    _spawnAxie(0, msg.sender); // Will be Kotaro
    _spawnAxie(0, msg.sender); // Will be Ginger
    _spawnAxie(0, msg.sender); // Will be Stella
  }

  function getAxie(
    uint256 _axieId
  )
    external
    view
    mustBeValidToken(_axieId)
    returns (uint256 /* _genes */, uint256 /* _bornAt */)
  {
    Axie storage _axie = axies[_axieId];
    return (_axie.genes, _axie.bornAt);
  }

  function spawnAxie(
    uint256 _genes,
    address _owner
  )
    external
    onlySpawner
    whenSpawningAllowed(_genes, _owner)
    returns (uint256)
  {
    return _spawnAxie(_genes, _owner);
  }

  function rebirthAxie(
    uint256 _axieId,
    uint256 _genes
  )
    external
    onlySpawner
    mustBeValidToken(_axieId)
    whenRebirthAllowed(_axieId, _genes)
  {
    Axie storage _axie = axies[_axieId];
    _axie.genes = _genes;
    _axie.bornAt = now;
    AxieRebirthed(_axieId, _genes);
  }

  function retireAxie(
    uint256 _axieId,
    bool _rip
  )
    external
    onlyByeSayer
    whenRetirementAllowed(_axieId, _rip)
  {
    _burn(_axieId);

    if (_rip) {
      delete axies[_axieId];
    }

    AxieRetired(_axieId);
  }

  function evolveAxie(
    uint256 _axieId,
    uint256 _newGenes
  )
    external
    onlyGeneScientist
    mustBeValidToken(_axieId)
    whenEvolvementAllowed(_axieId, _newGenes)
  {
    uint256 _oldGenes = axies[_axieId].genes;
    axies[_axieId].genes = _newGenes;
    AxieEvolved(_axieId, _oldGenes, _newGenes);
  }

  function _spawnAxie(uint256 _genes, address _owner) private returns (uint256 _axieId) {
    Axie memory _axie = Axie(_genes, now);
    _axieId = axies.push(_axie) - 1;
    _mint(_owner, _axieId);
    AxieSpawned(_axieId, _owner, _genes);
  }
}

Contract ABI

[{"constant":true,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_approved","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_axieId","type":"uint256"},{"name":"_genes","type":"uint256"}],"name":"rebirthAxie","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelistSetterAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"marketplaceManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"setRetirementManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_geneScientist","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setGeneScientist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":true,"stateMutability":"payable","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":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"setMarketplaceManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newCFO","type":"address"}],"name":"setCFO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"retirementManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newSetter","type":"address"}],"name":"setWhitelistSetter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_genes","type":"uint256"},{"name":"_owner","type":"address"}],"name":"spawnAxie","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_marketplace","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setMarketplace","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"geneManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_byeSayer","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setByeSayer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"setSpawningManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"setGeneManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistedByeSayer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"spawningManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistedGeneScientist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spawner","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setSpawner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"},{"name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistedMarketplace","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_axieId","type":"uint256"}],"name":"getAxie","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_axieId","type":"uint256"},{"name":"_newGenes","type":"uint256"}],"name":"evolveAxie","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":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"tokenURIPrefix","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistedSpawner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_axieId","type":"uint256"},{"name":"_rip","type":"bool"}],"name":"retireAxie","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenURISuffix","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_prefix","type":"string"},{"name":"_suffix","type":"string"}],"name":"setTokenURIAffixes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_axieId","type":"uint256"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_genes","type":"uint256"}],"name":"AxieSpawned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_axieId","type":"uint256"},{"indexed":false,"name":"_genes","type":"uint256"}],"name":"AxieRebirthed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_axieId","type":"uint256"}],"name":"AxieRetired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_axieId","type":"uint256"},{"indexed":false,"name":"_oldGenes","type":"uint256"},{"indexed":false,"name":"_newGenes","type":"uint256"}],"name":"AxieEvolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"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"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

Contract Creation Code

60606040818152600c805460a060020a60ff02191690555190810160405280602781526020017f68747470733a2f2f61786965696e66696e6974792e636f6d2f6572632f37323181526020017f2f61786965732f00000000000000000000000000000000000000000000000000815250601590805162000084929160200190620004bf565b5060408051908101604052600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208201526016908051620000ce929160200190620004bf565b503415620000db57600080fd5b600060208190527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c5805460ff1990811660019081179092558154600160a060020a033316600160a060020a031991821681178455600a80549092161790557f77218e6e0a7dc0a9ee09daeaab3dc6c60094df0c2747e685a4b5f67f6cd5ebd880548216831790557f77b7bbe0e49b76487c9476b5db3354cf5270619d0037ccb899c2a4c4a75b431880548216831790557f5b5e139f000000000000000000000000000000000000000000000000000000009092527f9562381dfbc2d8b8b66e765249f330164b73e329e5f01670660643571d1974df805490921681179091556017805490918101620001ee838262000544565b916000526020600020906002020160006040805190810160405260008152426020820152919050815181556020820151816001015550505062000247600033620002a26401000000000262001fdf176401000000009004565b506200026360003364010000000062001fdf620002a282021704565b506200027f60003364010000000062001fdf620002a282021704565b506200029b60003364010000000062001fdf620002a282021704565b50620005f4565b6000620002ae62000578565b6040805190810160405284815242602082015260178054919250600191808301620002da838262000544565b6000928352602090922084916002020181518155602082015160019091015550039150620003178383640100000000620023966200035c82021704565b82600160a060020a0316827f0aa75ef3ef0b2c4f092828edf4e4ded5a223d08350535710b957679883ff3a3c8660405190815260200160405180910390a35092915050565b600081815260106020526040902054600160a060020a0316156200037f57600080fd5b6200039982826401000000006200230b6200042282021704565b600d80546000908152600e602090815260408083208590559254848352600f909152919020819055620003dc90600164010000000062002453620004a882021704565b600d55600160a060020a03821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35050565b6000600160a060020a03831615156200043a57600080fd5b5060008181526010602090815260408083208054600160a060020a031916600160a060020a03871690811790915583526013909152902080549081600181016200048583826200058f565b506000918252602080832091909101849055928152601490925260409091205550565b600082820183811015620004b857fe5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200050257805160ff191683800117855562000532565b8280016001018555821562000532579182015b828111156200053257825182559160200191906001019062000515565b5062000540929150620005b1565b5090565b8154818355818115116200057357600202816002028360005260206000209182019101620005739190620005d1565b505050565b604080519081016040526000808252602082015290565b8154818355818115116200057357600083815260209020620005739181019083015b620005ce91905b80821115620005405760008155600101620005b8565b90565b620005ce91905b80821115620005405760008082556001820155600201620005d8565b6125e080620006046000396000f3006060604052600436106102585763ffffffff60e060020a60003504166301ffc9a7811461025d5780630519ce79146102a657806306fdde03146102d5578063081812fc1461035f578063095ea7b3146103755780630a0f81681461038e5780630d2cc54a146103a15780631412409a146103ba57806318160ddd146103cd5780631889500c146103f25780631a68b1a1146104055780631f8df2cd1461042457806323b872dd1461044857806327d7874c146104655780632ba73c15146104845780632f745c59146104a35780632ffb054e146104c55780633f4ba83a146104e457806342842e0e146104f75780634e0a3379146105145780634f6ccce71461053357806352ac882c14610549578063547a5eee1461055c5780635c975abb1461057b5780635dcc6dbc1461058e5780635fd8c710146105b05780636352211e146105c357806370a08231146105d95780637419e77a146105f857806380173a191461061c57806381b2dad91461062f5780638456cb59146106535780638c37e31e14610666578063927aaa7c1461068557806395d89b41146106a45780639848146a146106b757806398f5ee5d146106d657806399165bf4146106e95780639f186edb14610708578063a22cb4651461072c578063a306dfbe14610750578063a64729061461076f578063ae67b4c31461079d578063b047fb50146107b6578063b88d4fde146107c9578063c0ac9983146107f5578063c84c9e4514610808578063c87b56dd14610827578063c9644b771461083d578063dbbc853b14610858578063e985e9c51461086b578063faf4212514610890575b600080fd5b341561026857600080fd5b6102927bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19600435166108ba565b604051901515815260200160405180910390f35b34156102b157600080fd5b6102b96108ee565b604051600160a060020a03909116815260200160405180910390f35b34156102e057600080fd5b6102e86108fd565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561032457808201518382015260200161030c565b50505050905090810190601f1680156103515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561036a57600080fd5b6102b960043561093f565b61038c600160a060020a0360043516602435610981565b005b341561039957600080fd5b6102b9610aa0565b34156103ac57600080fd5b61038c600435602435610aaf565b34156103c557600080fd5b6102b9610bf5565b34156103d857600080fd5b6103e0610c04565b60405190815260200160405180910390f35b34156103fd57600080fd5b6102b9610c0a565b341561041057600080fd5b61038c600160a060020a0360043516610c19565b341561042f57600080fd5b61038c600160a060020a03600435166024351515610c56565b61038c600160a060020a0360043581169060243516604435610cc8565b341561047057600080fd5b61038c600160a060020a0360043516610ce8565b341561048f57600080fd5b61038c600160a060020a0360043516610d3a565b34156104ae57600080fd5b6103e0600160a060020a0360043516602435610d77565b34156104d057600080fd5b61038c600160a060020a0360043516610dea565b34156104ef57600080fd5b61038c610e27565b61038c600160a060020a0360043581169060243516604435610e7a565b341561051f57600080fd5b61038c600160a060020a0360043516610e96565b341561053e57600080fd5b6103e0600435610ed3565b341561055457600080fd5b6102b9610ef7565b341561056757600080fd5b61038c600160a060020a0360043516610f06565b341561058657600080fd5b610292610f43565b341561059957600080fd5b6103e0600435600160a060020a0360243516610f53565b34156105bb57600080fd5b61038c61102b565b34156105ce57600080fd5b6102b9600435611081565b34156105e457600080fd5b6103e0600160a060020a03600435166110c3565b341561060357600080fd5b61038c600160a060020a036004351660243515156110f6565b341561062757600080fd5b6102b9611168565b341561063a57600080fd5b61038c600160a060020a03600435166024351515611177565b341561065e57600080fd5b61038c6111e9565b341561067157600080fd5b61038c600160a060020a0360043516611275565b341561069057600080fd5b61038c600160a060020a03600435166112b2565b34156106af57600080fd5b6102e86112ef565b34156106c257600080fd5b610292600160a060020a0360043516611330565b34156106e157600080fd5b6102b9611345565b34156106f457600080fd5b610292600160a060020a0360043516611354565b341561071357600080fd5b61038c600160a060020a03600435166024351515611369565b341561073757600080fd5b61038c600160a060020a036004351660243515156113db565b341561075b57600080fd5b610292600160a060020a036004351661149b565b341561077a57600080fd5b6107856004356114b0565b60405191825260208201526040908101905180910390f35b34156107a857600080fd5b61038c60043560243561150c565b34156107c157600080fd5b6102b9611673565b61038c600160a060020a0360048035821691602480359091169160443591606435908101910135611682565b341561080057600080fd5b6102e86116c7565b341561081357600080fd5b610292600160a060020a0360043516611765565b341561083257600080fd5b6102e860043561177a565b341561084857600080fd5b61038c6004356024351515611a65565b341561086357600080fd5b6102e8611b8a565b341561087657600080fd5b610292600160a060020a0360043581169060243516611bf5565b341561089b57600080fd5b61038c6024600480358281019290820135918135918201910135611c23565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b600b54600160a060020a031681565b610905612462565b60408051908101604052600481527f4178696500000000000000000000000000000000000000000000000000000000602082015290505b90565b6000818152601060205260408120548290600160a060020a0316151561096457600080fd5b5050600090815260126020526040902054600160a060020a031690565b6000818152601060205260408120548290600160a060020a031615156109a657600080fd5b826109b13382611c57565b806109c157506109c13382611c77565b15156109cc57600080fd5b600c5460a060020a900460ff16156109e357600080fd5b600084815260106020526040902054600160a060020a0390811693508516831415610a0d57600080fd5b600084815260126020526040902054600160a060020a0386811691161415610a3457600080fd5b600084815260126020526040908190208054600160a060020a031916600160a060020a0388811691821790925591908516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259087905190815260200160405180910390a35050505050565b600a54600160a060020a031681565b600160a060020a03331660009081526006602052604081205460ff161515610ad657600080fd5b6000838152601060205260409020548390600160a060020a03161515610afb57600080fd5b60025484908490600160a060020a03161580610b855750600254600160a060020a031663d4d33ece838360006040516020015260405160e060020a63ffffffff851602815260048101929092526024820152604401602060405180830381600087803b1515610b6957600080fd5b6102c65a03f11515610b7a57600080fd5b505050604051805190505b1515610b9057600080fd5b6017805487908110610b9e57fe5b600091825260209091206002909102018581554260018201559350857f90f712fe1864fe3fbc2bd97b660fbfec7c30d013d3961ac72ea12cffc09e06638660405190815260200160405180910390a2505050505050565b600154600160a060020a031681565b600d5490565b600454600160a060020a031681565b60015433600160a060020a03908116911614610c3457600080fd5b60038054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a03908116911614610c7157600080fd5b600160a060020a03821660009081526009602052604090205460ff1615158115151415610c9d57600080fd5b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b610ce383838360206040519081016040526000808252611cd5565b505050565b600a5433600160a060020a03908116911614610d0357600080fd5b600160a060020a0381161515610d1857600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b600a5433600160a060020a03908116911614610d5557600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b6000600160a060020a0383161515610d8e57600080fd5b600160a060020a0383166000908152601360205260409020548210610db257600080fd5b600160a060020a0383166000908152601360205260409020805483908110610dd657fe5b906000526020600020900154905092915050565b60015433600160a060020a03908116911614610e0557600080fd5b60048054600160a060020a031916600160a060020a0392909216919091179055565b600a5433600160a060020a03908116911614610e4257600080fd5b600c5460a060020a900460ff161515610e5a57600080fd5b600c805474ff000000000000000000000000000000000000000019169055565b610ce38383836020604051908101604052600081526001611cd5565b600a5433600160a060020a03908116911614610eb157600080fd5b600b8054600160a060020a031916600160a060020a0392909216919091179055565b600d546000908210610ee457600080fd5b506000908152600e602052604090205490565b600354600160a060020a031681565b60015433600160a060020a03908116911614610f2157600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b600c5460a060020a900460ff1681565b600160a060020a03331660009081526006602052604081205460ff161515610f7a57600080fd5b60025483908390600160a060020a0316158061100d5750600254600160a060020a0316630e972421838360006040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b1515610ff157600080fd5b6102c65a03f1151561100257600080fd5b505050604051805190505b151561101857600080fd5b6110228585611fdf565b95945050505050565b600b5433600160a060020a0390811691161461104657600080fd5b600b54600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561107f57600080fd5b565b6000818152601060205260408120548290600160a060020a031615156110a657600080fd5b5050600090815260106020526040902054600160a060020a031690565b6000600160a060020a03821615156110da57600080fd5b50600160a060020a031660009081526013602052604090205490565b60015433600160a060020a0390811691161461111157600080fd5b600160a060020a03821660009081526008602052604090205460ff161515811515141561113d57600080fd5b600160a060020a03919091166000908152600860205260409020805460ff1916911515919091179055565b600554600160a060020a031681565b60015433600160a060020a0390811691161461119257600080fd5b600160a060020a03821660009081526007602052604090205460ff16151581151514156111be57600080fd5b600160a060020a03919091166000908152600760205260409020805460ff1916911515919091179055565b600a5433600160a060020a03908116911614806112145750600b5433600160a060020a039081169116145b8061122d5750600c5433600160a060020a039081169116145b151561123857600080fd5b600c5460a060020a900460ff161561124f57600080fd5b600c805474ff0000000000000000000000000000000000000000191660a060020a179055565b60015433600160a060020a0390811691161461129057600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146112cd57600080fd5b60058054600160a060020a031916600160a060020a0392909216919091179055565b6112f7612462565b60408051908101604052600481527f41584945000000000000000000000000000000000000000000000000000000006020820152905090565b60076020526000908152604090205460ff1681565b600254600160a060020a031681565b60096020526000908152604090205460ff1681565b60015433600160a060020a0390811691161461138457600080fd5b600160a060020a03821660009081526006602052604090205460ff16151581151514156113b057600080fd5b600160a060020a03919091166000908152600660205260409020805460ff1916911515919091179055565b600c5460a060020a900460ff16156113f257600080fd5b600160a060020a0333811660009081526011602090815260408083209386168352929052205460ff161515811515141561142b57600080fd5b33600160a060020a0390811660008181526011602090815260408083209487168084529490915290819020805460ff19168515151790557f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190849051901515815260200160405180910390a35050565b60086020526000908152604090205460ff1681565b600081815260106020526040812054819081908490600160a060020a031615156114d957600080fd5b60178054869081106114e757fe5b9060005260206000209060020201915081600001548260010154935093505050915091565b600160a060020a03331660009081526009602052604081205460ff16151561153357600080fd5b6000838152601060205260409020548390600160a060020a0316151561155857600080fd5b60055484908490600160a060020a031615806115e25750600554600160a060020a0316639613bc90838360006040516020015260405160e060020a63ffffffff851602815260048101929092526024820152604401602060405180830381600087803b15156115c657600080fd5b6102c65a03f115156115d757600080fd5b505050604051805190505b15156115ed57600080fd5b60178054879081106115fb57fe5b90600052602060002090600202016000015493508460178781548110151561161f57fe5b6000918252602090912060029091020155857f6715bb2e56d8b9cd079426816318abbb6ee679a7e8e64602b38bf5c074b58e55858760405191825260208201526040908101905180910390a2505050505050565b600c54600160a060020a031681565b6116c085858585858080601f01602080910402602001604051908101604052818152929190602084018383808284375060019450611cd59350505050565b5050505050565b60158054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561175d5780601f106117325761010080835404028352916020019161175d565b820191906000526020600020905b81548152906001019060200180831161174057829003601f168201915b505050505081565b60066020526000908152604090205460ff1681565b611782612462565b61178a612462565b611792612462565b60008061179d612462565b6000878152601060205260408120548890600160a060020a031615156117c257600080fd5b60158054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118585780601f1061182d57610100808354040283529160200191611858565b820191906000526020600020905b81548152906001019060200180831161183b57829003601f168201915b5050505050965060168054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118f55780601f106118ca576101008083540402835291602001916118f5565b820191906000526020600020905b8154815290600101906020018083116118d857829003601f168201915b505050505095508894505b600190930192600a85049450600085111561191a57611900565b8387510160050160405180591061192e5750595b818152601f19601f830116810160200160405290509250600683510391508894505b60001982019160f860020a6030600a880601029084908151811061197057fe5b906020010190600160f860020a031916908160001a905350600a85049450600085111561199c57611950565b600091505b86518210156119f7578682815181106119b657fe5b016020015160f860020a900460f860020a028383815181106119d457fe5b906020010190600160f860020a031916908160001a9053506001909101906119a1565b600091505b8551821015611a5857858281518110611a1157fe5b016020015160f860020a900460f860020a02836005848651010381518110611a3557fe5b906020010190600160f860020a031916908160001a9053506001909101906119fc565b5090979650505050505050565b600160a060020a03331660009081526007602052604090205460ff161515611a8c57600080fd5b60035482908290600160a060020a03161580611b185750600354600160a060020a03166318dcdfbe838360006040516020015260405160e060020a63ffffffff8516028152600481019290925215156024820152604401602060405180830381600087803b1515611afc57600080fd5b6102c65a03f11515611b0d57600080fd5b505050604051805190505b1515611b2357600080fd5b611b2c84612085565b8215611b57576017805485908110611b4057fe5b600091825260208220600290910201818155600101555b837fc7e9cc512eb27debd93c5ff5830060459d7e6777ebcb540f3c9e2e520eb2502b60405160405180910390a250505050565b60168054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561175d5780601f106117325761010080835404028352916020019161175d565b600160a060020a03918216600090815260116020908152604080832093909416825291909152205460ff1690565b600a5433600160a060020a03908116911614611c3e57600080fd5b611c4a60158585612474565b506116c060168383612474565b600090815260106020526040902054600160a060020a0391821691161490565b600160a060020a03821660009081526008602052604081205460ff1680611cce5750600082815260106020908152604080832054600160a060020a03908116845260118352818420908716845290915290205460ff165b9392505050565b6000838152601060205260409020548390600160a060020a03161515611cfa57600080fd5b83611d053382611c57565b80611d155750611d153382611c77565b80611d255750611d25338261215a565b1515611d3057600080fd5b600454879087908790600160a060020a03161580611dd15750600454600160a060020a031663f7ebc39a84848460006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515611db557600080fd5b6102c65a03f11515611dc657600080fd5b505050604051805190505b1515611ddc57600080fd5b611de68a89611c57565b1515611df157600080fd5b600160a060020a0389161515611e0657600080fd5b600160a060020a03898116908b161415611e1f57600080fd5b611e298a8961217a565b6000888152601260205260408082208054600160a060020a0319169055600160a060020a038c16907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908b905190815260200160405180910390a3611e8e898961230b565b858015611e9f5750611e9f8961238e565b15611f8c5788600160a060020a031663f0b9e5ba61c3508c8b8b6040518563ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611f26578082015183820152602001611f0e565b50505050905090810190601f168015611f535780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600088803b1515611f7357600080fd5b87f11515611f8057600080fd5b50505050604051805150505b88600160a060020a03168a600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a60405190815260200160405180910390a350505050505050505050565b6000611fe96124f2565b60408051908101604052848152426020820152601780549192506001918083016120138382612509565b60009283526020909220849160020201815181556020820151816001015550500391506120408383612396565b82600160a060020a0316827f0aa75ef3ef0b2c4f092828edf4e4ded5a223d08350535710b957679883ff3a3c8660405190815260200160405180910390a35092915050565b600081815260106020526040812054600160a060020a031690808215156120ab57600080fd5b6120b5838561217a565b600d546120c990600163ffffffff61244116565b600d8181556000868152600f602081815260408084208054968552600e835281852054908590559454845280842084905585845280842085905584845291905280822084905592945090925090600160a060020a038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9087905190815260200160405180910390a350505050565b600090815260126020526040902054600160a060020a0391821691161490565b60008080600160a060020a038516151561219357600080fd5b600084815260146020908152604080832054600160a060020a03891684526013909252909120549093506121ce90600163ffffffff61244116565b600160a060020a0386166000908152601360205260409020805491935090839081106121f657fe5b60009182526020808320909101548683526010825260408084208054600160a060020a0319169055600160a060020a038916845260139092529120805491925082918590811061224257fe5b6000918252602080832090910192909255828152601482526040808220869055600160a060020a038816825260139092522080548390811061228057fe5b60009182526020808320909101829055600160a060020a038716825260139052604090208054906122b5906000198301612535565b50600160a060020a03851660009081526013602052604090205415156122f657600160a060020a03851660009081526013602052604081206122f691612559565b50505060009081526014602052604081205550565b6000600160a060020a038316151561232257600080fd5b5060008181526010602090815260408083208054600160a060020a031916600160a060020a038716908117909155835260139091529020805490816001810161236b8382612535565b506000918252602080832091909101849055928152601490925260409091205550565b6000903b1190565b600081815260106020526040902054600160a060020a0316156123b857600080fd5b6123c2828261230b565b600d80546000908152600e602090815260408083208590559254848352600f9091529190208190556123fb90600163ffffffff61245316565b600d55600160a060020a03821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35050565b60008282111561244d57fe5b50900390565b600082820183811015611cce57fe5b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106124b55782800160ff198235161785556124e2565b828001600101855582156124e2579182015b828111156124e25782358255916020019190600101906124c7565b506124ee92915061257a565b5090565b604080519081016040526000808252602082015290565b815481835581811511610ce357600202816002028360005260206000209182019101610ce39190612594565b815481835581811511610ce357600083815260209020610ce391810190830161257a565b5080546000825590600052602060002090810190612577919061257a565b50565b61093c91905b808211156124ee5760008155600101612580565b61093c91905b808211156124ee576000808255600182015560020161259a5600a165627a7a723058205c581cfc083f257425f5769585ca2b5795a24934862554ed6f13b530d4fdb0510029

Swarm Source

bzzr://5c581cfc083f257425f5769585ca2b5795a24934862554ed6f13b530d4fdb051
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.