ETH Price: $3,020.09 (+0.99%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Upgrade Contract51978532018-03-05 0:32:552880 days ago1520209975IN
0x9808e39c...AD62c5Bd5
0 ETH0.000253968
Withdraw Treasur...51977992018-03-05 0:16:452880 days ago1520209005IN
0x9808e39c...AD62c5Bd5
0 ETH0.0002636512
Withdraw Treasur...51977192018-03-04 23:56:162880 days ago1520207776IN
0x9808e39c...AD62c5Bd5
0 ETH0.0002416811
On Maintenance51977172018-03-04 23:55:592880 days ago1520207759IN
0x9808e39c...AD62c5Bd5
0 ETH0.0002198
Purchase51976672018-03-04 23:42:232880 days ago1520206943IN
0x9808e39c...AD62c5Bd5
0.002 ETH0.000185448
Withdraw Treasur...51974412018-03-04 22:50:542880 days ago1520203854IN
0x9808e39c...AD62c5Bd5
0 ETH0.000519288
Attack Island51974282018-03-04 22:48:042880 days ago1520203684IN
0x9808e39c...AD62c5Bd5
0 ETH0.0017988115
Withdraw Treasur...51974202018-03-04 22:45:532880 days ago1520203553IN
0x9808e39c...AD62c5Bd5
0 ETH0.0006491110
Attack Island51974072018-03-04 22:42:502880 days ago1520203370IN
0x9808e39c...AD62c5Bd5
0 ETH0.000959758
Attack Island51972962018-03-04 22:18:172880 days ago1520201897IN
0x9808e39c...AD62c5Bd5
0 ETH0.000479494
Withdraw Treasur...51972912018-03-04 22:17:152880 days ago1520201835IN
0x9808e39c...AD62c5Bd5
0 ETH0.0006491110
Buy Ships51971782018-03-04 21:52:352880 days ago1520200355IN
0x9808e39c...AD62c5Bd5
0.03 ETH0.0009380813
Buy Ships51971762018-03-04 21:51:252880 days ago1520200285IN
0x9808e39c...AD62c5Bd5
0.05 ETH0.0008650312
Withdraw Treasur...51971742018-03-04 21:50:592880 days ago1520200259IN
0x9808e39c...AD62c5Bd5
0 ETH0.0008438413
Attack Island51971532018-03-04 21:46:122880 days ago1520199972IN
0x9808e39c...AD62c5Bd5
0 ETH0.0003374214
Attack Island51971472018-03-04 21:44:492880 days ago1520199889IN
0x9808e39c...AD62c5Bd5
0 ETH0.0014390512
Withdraw Treasur...51970952018-03-04 21:32:192880 days ago1520199139IN
0x9808e39c...AD62c5Bd5
0 ETH0.0006491110
Withdraw Treasur...51970942018-03-04 21:32:042880 days ago1520199124IN
0x9808e39c...AD62c5Bd5
0 ETH0.0004584620
Attack Island51970902018-03-04 21:31:012880 days ago1520199061IN
0x9808e39c...AD62c5Bd5
0 ETH0.0011992110
Withdraw Treasur...51970672018-03-04 21:25:522880 days ago1520198752IN
0x9808e39c...AD62c5Bd5
0 ETH0.0009087514
Attack Island51970642018-03-04 21:24:392880 days ago1520198679IN
0x9808e39c...AD62c5Bd5
0 ETH0.0023984220
Withdraw Treasur...51969762018-03-04 21:03:072880 days ago1520197387IN
0x9808e39c...AD62c5Bd5
0 ETH0.0006491110
Attack Island51969712018-03-04 20:59:532880 days ago1520197193IN
0x9808e39c...AD62c5Bd5
0 ETH0.0017995315
Buy Ships51969672018-03-04 20:59:032880 days ago1520197143IN
0x9808e39c...AD62c5Bd5
0.03 ETH0.001082415
Buy Ships51969262018-03-04 20:46:162880 days ago1520196376IN
0x9808e39c...AD62c5Bd5
0.05 ETH0.0014417220
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer51978532018-03-05 0:32:552880 days ago1520209975
0x9808e39c...AD62c5Bd5
0.29298072 ETH
Transfer51974412018-03-04 22:50:542880 days ago1520203854
0x9808e39c...AD62c5Bd5
0.00011916 ETH
Transfer51974412018-03-04 22:50:542880 days ago1520203854
0x9808e39c...AD62c5Bd5
0.00023832 ETH
Transfer51974412018-03-04 22:50:542880 days ago1520203854
0x9808e39c...AD62c5Bd5
0.01155856 ETH
Transfer51974282018-03-04 22:48:042880 days ago1520203684
0x9808e39c...AD62c5Bd5
0.00077623 ETH
Transfer51974282018-03-04 22:48:042880 days ago1520203684
0x9808e39c...AD62c5Bd5
0.00019405 ETH
Transfer51974282018-03-04 22:48:042880 days ago1520203684
0x9808e39c...AD62c5Bd5
0.00291088 ETH
Transfer51974282018-03-04 22:48:042880 days ago1520203684
0x9808e39c...AD62c5Bd5
0.00582177 ETH
Transfer51974282018-03-04 22:48:042880 days ago1520203684
0x9808e39c...AD62c5Bd5
0.01455442 ETH
Transfer51974202018-03-04 22:45:532880 days ago1520203553
0x9808e39c...AD62c5Bd5
0.00014374 ETH
Transfer51974202018-03-04 22:45:532880 days ago1520203553
0x9808e39c...AD62c5Bd5
0.00028749 ETH
Transfer51974202018-03-04 22:45:532880 days ago1520203553
0x9808e39c...AD62c5Bd5
0.0139435 ETH
Transfer51974072018-03-04 22:42:502880 days ago1520203370
0x9808e39c...AD62c5Bd5
0.00111331 ETH
Transfer51974072018-03-04 22:42:502880 days ago1520203370
0x9808e39c...AD62c5Bd5
0.00027832 ETH
Transfer51974072018-03-04 22:42:502880 days ago1520203370
0x9808e39c...AD62c5Bd5
0.00417494 ETH
Transfer51974072018-03-04 22:42:502880 days ago1520203370
0x9808e39c...AD62c5Bd5
0.00834989 ETH
Transfer51974072018-03-04 22:42:502880 days ago1520203370
0x9808e39c...AD62c5Bd5
0.02087474 ETH
Transfer51972962018-03-04 22:18:172880 days ago1520201897
0x9808e39c...AD62c5Bd5
0.00005185 ETH
Transfer51972962018-03-04 22:18:172880 days ago1520201897
0x9808e39c...AD62c5Bd5
0.00001296 ETH
Transfer51972962018-03-04 22:18:172880 days ago1520201897
0x9808e39c...AD62c5Bd5
0.00019445 ETH
Transfer51972962018-03-04 22:18:172880 days ago1520201897
0x9808e39c...AD62c5Bd5
0.0003889 ETH
Transfer51972962018-03-04 22:18:172880 days ago1520201897
0x9808e39c...AD62c5Bd5
0.00097225 ETH
Transfer51972912018-03-04 22:17:152880 days ago1520201835
0x9808e39c...AD62c5Bd5
0.00000478 ETH
Transfer51972912018-03-04 22:17:152880 days ago1520201835
0x9808e39c...AD62c5Bd5
0.00000956 ETH
Transfer51972912018-03-04 22:17:152880 days ago1520201835
0x9808e39c...AD62c5Bd5
0.00046405 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtherIslands

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

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

pragma solidity ^0.4.19;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
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;
  }
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

/**
 * @title ERC721 interface
 * @dev see https://github.com/ethereum/eips/issues/721
 */
contract ERC721 {
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

  function balanceOf(address _owner) public view returns (uint256 _balance);
  function ownerOf(uint256 _tokenId) public view returns (address _owner);
  function transfer(address _to, uint256 _tokenId) public;
  function approve(address _to, uint256 _tokenId) public;
  function takeOwnership(uint256 _tokenId) public;
}

contract EtherIslands is Ownable, ERC721 {
    using SafeMath for uint256;

    /*** EVENTS ***/
    event NewIsland(uint256 tokenId, bytes32 name, address owner);
    event IslandSold(uint256 tokenId, uint256 oldPrice, uint256 newPrice, address prevOwner, address winner, bytes32 name);
    event Transfer(address from, address to, uint256 tokenId);
    event DividendsPaid(address to, uint256 amount, bytes32 divType);
    event ShipsBought(uint256 tokenId, address owner);
    event IslandAttacked(uint256 attackerId, uint256 targetId);
    event TreasuryWithdrawn(uint256 tokenId);

    /*** STRUCTS ***/
    struct Island {
        bytes32 name;
        address owner;
        uint256 price;
        uint256 treasury;
        uint256 treasury_next_withdrawal_block;
        uint256 previous_price;
        uint256 attack_ships_count;
        uint256 defense_ships_count;
        uint256 transactions_count;
        address approve_transfer_to;
        address[2] previous_owners;
    }

    struct IslandBattleStats {
        uint256 attacks_won;
        uint256 attacks_lost;
        uint256 defenses_won;
        uint256 defenses_lost;
        uint256 treasury_stolen;
        uint256 treasury_lost;
        uint256 attack_cooldown;
        uint256 defense_cooldown;
    }

    /*** CONSTANTS ***/
    string public constant NAME = "EtherIslands";
    string public constant SYMBOL = "EIS";

    bool public maintenance = true;
    uint256 islands_count;

    uint256 shipPrice = 0.01 ether;
    uint256 withdrawalBlocksCooldown = 100;
    address m_address = 0xd17e2bFE196470A9fefb567e8f5992214EB42F24;

    mapping(address => uint256) private ownerCount;
    mapping(uint256 => Island) private islands;
    mapping(uint256 => IslandBattleStats) private islandBattleStats;

    /*** DEFAULT METHODS ***/
    function symbol() public pure returns (string) {return SYMBOL;}

    function name() public pure returns (string) {return NAME;}

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

    function EtherIslands() public {
        _create_island("Santorini", msg.sender, 0.001 ether, 0, 0, 0);
        _create_island("Seychelles", msg.sender, 0.001 ether, 0, 0, 0);
        _create_island("Palawan", msg.sender, 0.001 ether, 0, 0, 0);
        _create_island("The Cook Islands", msg.sender, 0.001 ether, 0, 0, 0);
        _create_island("Bora Bora", msg.sender, 0.001 ether, 0, 0, 0);
        _create_island("Maldives", msg.sender, 0.001 ether, 0, 0, 0);
    }

    /** PUBLIC METHODS **/
    function createIsland(bytes32 _name, uint256 _price, address _owner, uint256 _attack_ships_count, uint256 _defense_ships_count) public onlyOwner {
        require(msg.sender != address(0));
        _create_island(_name, _owner, _price, 0, _attack_ships_count, _defense_ships_count);
    }

    function attackIsland(uint256 _attacker_id, uint256 _target_id) public payable {
        require(maintenance == false);
        Island storage attackerIsland = islands[_attacker_id];
        IslandBattleStats storage attackerIslandBattleStats = islandBattleStats[_attacker_id];

        Island storage defenderIsland = islands[_target_id];
        IslandBattleStats storage defenderIslandBattleStats = islandBattleStats[_target_id];

        require(attackerIsland.owner == msg.sender);
        require(attackerIsland.owner != defenderIsland.owner);
        require(msg.sender != address(0));
        require(msg.value == 0);
        require(block.number >= attackerIslandBattleStats.attack_cooldown);
        require(block.number >= defenderIslandBattleStats.defense_cooldown);
        require(attackerIsland.attack_ships_count > 0); // attacker must have at least 1 attack ship
        require(attackerIsland.attack_ships_count > defenderIsland.defense_ships_count);

        uint256 goods_stolen = SafeMath.mul(SafeMath.div(defenderIsland.treasury, 100), 75);

        defenderIsland.treasury = SafeMath.sub(defenderIsland.treasury, goods_stolen);

        attackerIslandBattleStats.attacks_won++;
        attackerIslandBattleStats.treasury_stolen = SafeMath.add(attackerIslandBattleStats.treasury_stolen, goods_stolen);

        defenderIslandBattleStats.defenses_lost++;
        defenderIslandBattleStats.treasury_lost = SafeMath.add(defenderIslandBattleStats.treasury_lost, goods_stolen);

        uint256 cooldown_block = block.number + 20;
        attackerIslandBattleStats.attack_cooldown = cooldown_block;
        defenderIslandBattleStats.defense_cooldown = cooldown_block;

        uint256 goods_to_treasury = SafeMath.mul(SafeMath.div(goods_stolen, 100), 75);

        attackerIsland.treasury = SafeMath.add(attackerIsland.treasury, goods_to_treasury);

        // 2% of attacker army and 10% of defender army is destroyed
        attackerIsland.attack_ships_count = SafeMath.sub(attackerIsland.attack_ships_count, SafeMath.mul(SafeMath.div(attackerIsland.attack_ships_count, 100), 2));
        defenderIsland.defense_ships_count = SafeMath.sub(defenderIsland.defense_ships_count, SafeMath.mul(SafeMath.div(defenderIsland.defense_ships_count, 100), 10));

        // Dividends
        uint256 goods_for_current_owner = SafeMath.mul(SafeMath.div(goods_stolen, 100), 15);
        uint256 goods_for_previous_owner_1 = SafeMath.mul(SafeMath.div(goods_stolen, 100), 6);
        uint256 goods_for_previous_owner_2 = SafeMath.mul(SafeMath.div(goods_stolen, 100), 3);
        uint256 goods_for_dev = SafeMath.mul(SafeMath.div(goods_stolen, 100), 1);

        attackerIsland.owner.transfer(goods_for_current_owner);
        attackerIsland.previous_owners[0].transfer(goods_for_previous_owner_1);
        attackerIsland.previous_owners[1].transfer(goods_for_previous_owner_2);

        //Split dev fee
        m_address.transfer(SafeMath.mul(SafeMath.div(goods_for_dev, 100), 20));
        owner.transfer(SafeMath.mul(SafeMath.div(goods_for_dev, 100), 80));

        IslandAttacked(_attacker_id, _target_id);
    }

    function buyShips(uint256 _island_id, uint256 _ships_to_buy, bool _is_attack_ships) public payable {
        require(maintenance == false);
        Island storage island = islands[_island_id];

        uint256 totalPrice = SafeMath.mul(_ships_to_buy, shipPrice);
        require(island.owner == msg.sender);
        require(msg.sender != address(0));
        require(msg.value >= totalPrice);

        if (_is_attack_ships) {
            island.attack_ships_count = SafeMath.add(island.attack_ships_count, _ships_to_buy);
        } else {
            island.defense_ships_count = SafeMath.add(island.defense_ships_count, _ships_to_buy);
        }

        // Dividends
        uint256 treasury_div = SafeMath.mul(SafeMath.div(totalPrice, 100), 80);
        uint256 dev_div = SafeMath.mul(SafeMath.div(totalPrice, 100), 17);
        uint256 previous_owner_div = SafeMath.mul(SafeMath.div(totalPrice, 100), 2);
        uint256 previous_owner2_div = SafeMath.mul(SafeMath.div(totalPrice, 100), 1);

        island.previous_owners[0].transfer(previous_owner_div);
        //divs for 1st previous owner
        island.previous_owners[1].transfer(previous_owner2_div);
        //divs for 2nd previous owner
        island.treasury = SafeMath.add(treasury_div, island.treasury);
        // divs for treasury

        //Split dev fee
        uint256 m_fee = SafeMath.mul(SafeMath.div(dev_div, 100), 20);
        uint256 d_fee = SafeMath.mul(SafeMath.div(dev_div, 100), 80);
        m_address.transfer(m_fee);
        owner.transfer(d_fee);

        DividendsPaid(island.previous_owners[0], previous_owner_div, "buyShipPreviousOwner");
        DividendsPaid(island.previous_owners[1], previous_owner2_div, "buyShipPreviousOwner2");

        ShipsBought(_island_id, island.owner);
    }

    function withdrawTreasury(uint256 _island_id) public payable {
        require(maintenance == false);
        Island storage island = islands[_island_id];

        require(island.owner == msg.sender);
        require(msg.sender != address(0));
        require(island.treasury > 0);
        require(block.number >= island.treasury_next_withdrawal_block);

        uint256 treasury_to_withdraw = SafeMath.mul(SafeMath.div(island.treasury, 100), 10);
        uint256 treasury_for_previous_owner_1 = SafeMath.mul(SafeMath.div(treasury_to_withdraw, 100), 2);
        uint256 treasury_for_previous_owner_2 = SafeMath.mul(SafeMath.div(treasury_to_withdraw, 100), 1);
        uint256 treasury_for_previous_owners = SafeMath.add(treasury_for_previous_owner_2, treasury_for_previous_owner_1);
        uint256 treasury_for_current_owner = SafeMath.sub(treasury_to_withdraw, treasury_for_previous_owners);

        island.owner.transfer(treasury_for_current_owner);
        island.previous_owners[0].transfer(treasury_for_previous_owner_1);
        island.previous_owners[1].transfer(treasury_for_previous_owner_2);

        island.treasury = SafeMath.sub(island.treasury, treasury_to_withdraw);
        island.treasury_next_withdrawal_block = block.number + withdrawalBlocksCooldown;
        //setting cooldown for next withdrawal

        DividendsPaid(island.previous_owners[0], treasury_for_previous_owner_1, "withdrawalPreviousOwner");
        DividendsPaid(island.previous_owners[1], treasury_for_previous_owner_2, "withdrawalPreviousOwner2");
        DividendsPaid(island.owner, treasury_for_current_owner, "withdrawalOwner");

        TreasuryWithdrawn(_island_id);
    }

    function purchase(uint256 _island_id) public payable {
        require(maintenance == false);
        Island storage island = islands[_island_id];

        require(island.owner != msg.sender);
        require(msg.sender != address(0));
        require(msg.value >= island.price);

        uint256 excess = SafeMath.sub(msg.value, island.price);
        if (island.previous_price > 0) {
            uint256 owners_cut = SafeMath.mul(SafeMath.div(island.price, 160), 130);
            uint256 treasury_cut = SafeMath.mul(SafeMath.div(island.price, 160), 18);
            uint256 dev_fee = SafeMath.mul(SafeMath.div(island.price, 160), 7);
            uint256 previous_owner_fee = SafeMath.mul(SafeMath.div(island.price, 160), 3);
            uint256 previous_owner_fee2 = SafeMath.mul(SafeMath.div(island.price, 160), 2);

            if (island.owner != address(this)) {
                island.owner.transfer(owners_cut);
                //divs for current island owner
            }

            island.previous_owners[0].transfer(previous_owner_fee);
            //divs for 1st previous owner
            island.previous_owners[1].transfer(previous_owner_fee2);
            //divs for 2nd previous owner
            island.treasury = SafeMath.add(treasury_cut, island.treasury);
            // divs for treasury

            //Split dev fee
            uint256 m_fee = SafeMath.mul(SafeMath.div(dev_fee, 100), 20);
            uint256 d_fee = SafeMath.mul(SafeMath.div(dev_fee, 100), 80);
            m_address.transfer(m_fee);
            owner.transfer(d_fee);

            DividendsPaid(island.previous_owners[0], previous_owner_fee, "previousOwner");
            DividendsPaid(island.previous_owners[1], previous_owner_fee2, "previousOwner2");
            DividendsPaid(island.owner, owners_cut, "owner");
            DividendsPaid(owner, dev_fee, "dev");
        } else {
            island.owner.transfer(msg.value);
        }

        island.previous_price = island.price;
        island.treasury_next_withdrawal_block = block.number + withdrawalBlocksCooldown;
        address _old_owner = island.owner;

        island.price = SafeMath.mul(SafeMath.div(island.price, 100), 160);

        //Change owners
        island.previous_owners[1] = island.previous_owners[0];
        island.previous_owners[0] = island.owner;
        island.owner = msg.sender;
        island.transactions_count++;

        ownerCount[_old_owner] -= 1;
        ownerCount[island.owner] += 1;

        Transfer(_old_owner, island.owner, _island_id);
        IslandSold(_island_id, island.previous_price, island.price, _old_owner, island.owner, island.name);

        msg.sender.transfer(excess);
        //returning excess
    }

    function onMaintenance() public onlyOwner {
        require(msg.sender != address(0));
        maintenance = true;
    }

    function offMaintenance() public onlyOwner {
        require(msg.sender != address(0));
        maintenance = false;
    }

    function totalSupply() public view returns (uint256 total) {
        return islands_count;
    }

    function balanceOf(address _owner) public view returns (uint256 balance) {
        return ownerCount[_owner];
    }

    function priceOf(uint256 _island_id) public view returns (uint256 price) {
        return islands[_island_id].price;
    }

    function getIslandBattleStats(uint256 _island_id) public view returns (
        uint256 id,
        uint256 attacks_won,
        uint256 attacks_lost,
        uint256 defenses_won,
        uint256 defenses_lost,
        uint256 treasury_stolen,
        uint256 treasury_lost,
        uint256 attack_cooldown,
        uint256 defense_cooldown
    ) {
        id = _island_id;
        attacks_won = islandBattleStats[_island_id].attacks_won;
        attacks_lost = islandBattleStats[_island_id].attacks_lost;
        defenses_won = islandBattleStats[_island_id].defenses_won;
        defenses_lost = islandBattleStats[_island_id].defenses_lost;
        treasury_stolen = islandBattleStats[_island_id].treasury_stolen;
        treasury_lost = islandBattleStats[_island_id].treasury_lost;
        attack_cooldown = islandBattleStats[_island_id].attack_cooldown;
        defense_cooldown = islandBattleStats[_island_id].defense_cooldown;
    }

    function getIsland(uint256 _island_id) public view returns (
        uint256 id,
        bytes32 island_name,
        address owner,
        uint256 price,
        uint256 treasury,
        uint256 treasury_next_withdrawal_block,
        uint256 previous_price,
        uint256 attack_ships_count,
        uint256 defense_ships_count,
        uint256 transactions_count
    ) {
        id = _island_id;
        island_name = islands[_island_id].name;
        owner = islands[_island_id].owner;
        price = islands[_island_id].price;
        treasury = islands[_island_id].treasury;
        treasury_next_withdrawal_block = islands[_island_id].treasury_next_withdrawal_block;
        previous_price = islands[_island_id].previous_price;
        attack_ships_count = islands[_island_id].attack_ships_count;
        defense_ships_count = islands[_island_id].defense_ships_count;
        transactions_count = islands[_island_id].transactions_count;
    }

    function getIslands() public view returns (uint256[], address[], uint256[], uint256[], uint256[], uint256[], uint256[]) {
        uint256[] memory ids = new uint256[](islands_count);
        address[] memory owners = new address[](islands_count);
        uint256[] memory prices = new uint256[](islands_count);
        uint256[] memory treasuries = new uint256[](islands_count);
        uint256[] memory attack_ships_counts = new uint256[](islands_count);
        uint256[] memory defense_ships_counts = new uint256[](islands_count);
        uint256[] memory transactions_count = new uint256[](islands_count);
        for (uint256 _id = 0; _id < islands_count; _id++) {
            ids[_id] = _id;
            owners[_id] = islands[_id].owner;
            prices[_id] = islands[_id].price;
            treasuries[_id] = islands[_id].treasury;
            attack_ships_counts[_id] = islands[_id].attack_ships_count;
            defense_ships_counts[_id] = islands[_id].defense_ships_count;
            transactions_count[_id] = islands[_id].transactions_count;
        }
        return (ids, owners, prices, treasuries, attack_ships_counts, defense_ships_counts, transactions_count);
    }

    /** PRIVATE METHODS **/
    function _create_island(bytes32 _name, address _owner, uint256 _price, uint256 _previous_price, uint256 _attack_ships_count, uint256 _defense_ships_count) private {
        islands[islands_count] = Island({
            name : _name,
            owner : _owner,
            price : _price,
            treasury : 0,
            treasury_next_withdrawal_block : 0,
            previous_price : _previous_price,
            attack_ships_count : _attack_ships_count,
            defense_ships_count : _defense_ships_count,
            transactions_count : 0,
            approve_transfer_to : address(0),
            previous_owners : [_owner, _owner]
            });

        islandBattleStats[islands_count] = IslandBattleStats({
            attacks_won : 0,
            attacks_lost : 0,
            defenses_won : 0,
            defenses_lost : 0,
            treasury_stolen : 0,
            treasury_lost : 0,
            attack_cooldown : 0,
            defense_cooldown : 0
            });

        NewIsland(islands_count, _name, _owner);
        Transfer(address(this), _owner, islands_count);
        islands_count++;
    }

    function _transfer(address _from, address _to, uint256 _island_id) private {
        islands[_island_id].owner = _to;
        islands[_island_id].approve_transfer_to = address(0);
        ownerCount[_from] -= 1;
        ownerCount[_to] += 1;
        Transfer(_from, _to, _island_id);
    }

    /*** ERC-721 compliance. ***/
    function approve(address _to, uint256 _island_id) public {
        require(msg.sender == islands[_island_id].owner);
        islands[_island_id].approve_transfer_to = _to;
        Approval(msg.sender, _to, _island_id);
    }

    function ownerOf(uint256 _island_id) public view returns (address owner){
        owner = islands[_island_id].owner;
        require(owner != address(0));
    }

    function takeOwnership(uint256 _island_id) public {
        address oldOwner = islands[_island_id].owner;
        require(msg.sender != address(0));
        require(islands[_island_id].approve_transfer_to == msg.sender);
        _transfer(oldOwner, msg.sender, _island_id);
    }

    function transfer(address _to, uint256 _island_id) public {
        require(msg.sender != address(0));
        require(msg.sender == islands[_island_id].owner);
        _transfer(msg.sender, _to, _island_id);
    }

    function transferFrom(address _from, address _to, uint256 _island_id) public {
        require(_from == islands[_island_id].owner);
        require(islands[_island_id].approve_transfer_to == _to);
        require(_to != address(0));
        _transfer(_from, _to, _island_id);
    }

    function upgradeContract(address _newContract) public onlyOwner {
        _newContract.transfer(this.balance);
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_island_id","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"withdrawTreasury","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"total","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_island_id","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_island_id","type":"uint256"},{"name":"_ships_to_buy","type":"uint256"},{"name":"_is_attack_ships","type":"bool"}],"name":"buyShips","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maintenance","outputs":[{"name":"","type":"bool"}],"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","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"getIsland","outputs":[{"name":"id","type":"uint256"},{"name":"island_name","type":"bytes32"},{"name":"owner","type":"address"},{"name":"price","type":"uint256"},{"name":"treasury","type":"uint256"},{"name":"treasury_next_withdrawal_block","type":"uint256"},{"name":"previous_price","type":"uint256"},{"name":"attack_ships_count","type":"uint256"},{"name":"defense_ships_count","type":"uint256"},{"name":"transactions_count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_attacker_id","type":"uint256"},{"name":"_target_id","type":"uint256"}],"name":"attackIsland","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"onMaintenance","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":"NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_island_id","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_price","type":"uint256"},{"name":"_owner","type":"address"},{"name":"_attack_ships_count","type":"uint256"},{"name":"_defense_ships_count","type":"uint256"}],"name":"createIsland","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"priceOf","outputs":[{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"offMaintenance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"getIslandBattleStats","outputs":[{"name":"id","type":"uint256"},{"name":"attacks_won","type":"uint256"},{"name":"attacks_lost","type":"uint256"},{"name":"defenses_won","type":"uint256"},{"name":"defenses_lost","type":"uint256"},{"name":"treasury_stolen","type":"uint256"},{"name":"treasury_lost","type":"uint256"},{"name":"attack_cooldown","type":"uint256"},{"name":"defense_cooldown","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getIslands","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"address[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newContract","type":"address"}],"name":"upgradeContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_island_id","type":"uint256"}],"name":"purchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"NewIsland","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":"bytes32"}],"name":"IslandSold","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":false,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"divType","type":"bytes32"}],"name":"DividendsPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"owner","type":"address"}],"name":"ShipsBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"attackerId","type":"uint256"},{"indexed":false,"name":"targetId","type":"uint256"}],"name":"IslandAttacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"TreasuryWithdrawn","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":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60606040526000805460a060020a60ff02191674010000000000000000000000000000000000000000179055662386f26fc10000600255606460035560048054600160a060020a03191673d17e2bfe196470a9fefb567e8f5992214eb42f2417905534156200006d57600080fd5b60008054600160a060020a03191633600160a060020a038116919091178255620000d3917f53616e746f72696e690000000000000000000000000000000000000000000000919066038d7ea4c68000908080640100000000620002378102620021231704565b620001197f5365796368656c6c6573000000000000000000000000000000000000000000003366038d7ea4c6800060008080640100000000620021236200023782021704565b6200015f7f50616c6177616e000000000000000000000000000000000000000000000000003366038d7ea4c6800060008080640100000000620021236200023782021704565b620001a57f54686520436f6f6b2049736c616e6473000000000000000000000000000000003366038d7ea4c6800060008080640100000000620021236200023782021704565b620001eb7f426f726120426f726100000000000000000000000000000000000000000000003366038d7ea4c6800060008080640100000000620021236200023782021704565b620002317f4d616c64697665730000000000000000000000000000000000000000000000003366038d7ea4c6800060008080640100000000620021236200023782021704565b62000569565b610160604051908101604052808760001916815260200186600160a060020a031681526020018581526020016000815260200160008152602001848152602001838152602001828152602001600081526020016000600160a060020a03168152602001604080519081016040908152600160a060020a038916808352602080840191909152919092526001546000908152600690915220815181556020820151600182018054600160a060020a031916600160a060020a039290921691909117905560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151600982018054600160a060020a031916600160a060020a03929092169190911790556101408201516200038090600a8301906002620004e0565b5090505061010060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600760006001548152602001908152602001600020600082015181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050507f6dbe83e0361d1759b05d67925ee5ed7d3c73361da16f0abb8aaebf121c7fd34560015487876040519283526020830191909152600160a060020a03166040808301919091526060909101905180910390a17fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef3086600154604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050600180548101905550505050565b82600281019282156200052d579160200282015b828111156200052d5782518254600160a060020a031916600160a060020a039190911617825560209290920191600190910190620004f4565b506200053b9291506200053f565b5090565b6200056691905b808211156200053b578054600160a060020a031916815560010162000546565b90565b6124a680620005796000396000f30060606040526004361061015e5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610163578063095ea7b3146101ed5780631051db341461021157806311f1fc991461023857806318160ddd1461024357806323b872dd1461026857806361b98cb3146102905780636352211e146102a35780636c376cc5146102d557806370a08231146102e85780638da5cb5b14610307578063913158f71461031a57806394b6638614610394578063952868b5146103a257806395d89b41146103b5578063a3f4df7e146103c8578063a9059cbb146103db578063b2e6ceeb146103fd578063b5dd20e914610413578063b9186d7d1461043e578063d5ea36f914610454578063dc3134ae14610467578063deb081df146104ca578063eb2c0223146106cf578063efef39a1146106ee578063f2fde38b146106f9578063f76f8d7814610718575b600080fd5b341561016e57600080fd5b61017661072b565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101b257808201518382015260200161019a565b50505050905090810190601f1680156101df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101f857600080fd5b61020f600160a060020a036004351660243561076d565b005b341561021c57600080fd5b610224610804565b604051901515815260200160405180910390f35b61020f600435610809565b341561024e57600080fd5b610256610b2b565b60405190815260200160405180910390f35b341561027357600080fd5b61020f600160a060020a0360043581169060243516604435610b31565b61020f6004356024356044351515610ba8565b34156102ae57600080fd5b6102b9600435610eef565b604051600160a060020a03909116815260200160405180910390f35b34156102e057600080fd5b610224610f1b565b34156102f357600080fd5b610256600160a060020a0360043516610f2b565b341561031257600080fd5b6102b9610f46565b341561032557600080fd5b610330600435610f55565b604051998a5260208a0198909852600160a060020a039096166040808a01919091526060890195909552608088019390935260a087019190915260c086015260e0850152610100840191909152610120830191909152610140909101905180910390f35b61020f600435602435610fab565b34156103ad57600080fd5b61020f611390565b34156103c057600080fd5b6101766113e6565b34156103d357600080fd5b610176611427565b34156103e657600080fd5b61020f600160a060020a036004351660243561145e565b341561040857600080fd5b61020f6004356114ac565b341561041e57600080fd5b61020f600435602435600160a060020a036044351660643560843561150c565b341561044957600080fd5b610256600435611552565b341561045f57600080fd5b61020f611567565b341561047257600080fd5b61047d6004356115b7565b60405198895260208901979097526040808901969096526060880194909452608087019290925260a086015260c085015260e0840152610100830191909152610120909101905180910390f35b34156104d557600080fd5b6104dd6115fc565b604051808060200180602001806020018060200180602001806020018060200188810388528f818151815260200191508051906020019060200280838360005b8381101561053557808201518382015260200161051d565b5050505090500188810387528e818151815260200191508051906020019060200280838360005b8381101561057457808201518382015260200161055c565b5050505090500188810386528d818151815260200191508051906020019060200280838360005b838110156105b357808201518382015260200161059b565b5050505090500188810385528c818151815260200191508051906020019060200280838360005b838110156105f25780820151838201526020016105da565b5050505090500188810384528b818151815260200191508051906020019060200280838360005b83811015610631578082015183820152602001610619565b5050505090500188810383528a818151815260200191508051906020019060200280838360005b83811015610670578082015183820152602001610658565b50505050905001888103825289818151815260200191508051906020019060200280838360005b838110156106af578082015183820152602001610697565b505050509050019e50505050505050505050505050505060405180910390f35b34156106da57600080fd5b61020f600160a060020a03600435166118c0565b61020f60043561191b565b341561070457600080fd5b61020f600160a060020a0360043516611f36565b341561072357600080fd5b610176611fc4565b6107336123ca565b60408051908101604052600c81527f457468657249736c616e64730000000000000000000000000000000000000000602082015290505b90565b60008181526006602052604090206001015433600160a060020a0390811691161461079757600080fd5b600081815260066020526040908190206009018054600160a060020a031916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b600190565b600080548190819081908190819060a060020a900460ff161561082b57600080fd5b6000878152600660205260409020600181015490965033600160a060020a0390811691161461085957600080fd5b33600160a060020a0316151561086e57600080fd5b60038601546000901161088057600080fd5b600486015443101561089157600080fd5b6108aa6108a387600301546064611ffb565b600a612017565b94506108c16108ba866064611ffb565b6002612017565b93506108d86108d1866064611ffb565b6001612017565b92506108e48385612049565b91506108f08583612058565b6001870154909150600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151561092857600080fd5b600a860154600160a060020a03166108fc85150285604051600060405180830381858888f19350505050151561095d57600080fd5b600b860154600160a060020a03166108fc84150284604051600060405180830381858888f19350505050151561099257600080fd5b6109a0866003015486612058565b6003878101919091555443016004870155600a86015460008051602061245b83398151915290600160a060020a031685604051600160a060020a03909216825260208201527f7769746864726177616c50726576696f75734f776e65720000000000000000006040808301919091526060909101905180910390a1600b86015460008051602061245b83398151915290600160a060020a031684604051600160a060020a03909216825260208201527f7769746864726177616c50726576696f75734f776e65723200000000000000006040808301919091526060909101905180910390a1600186015460008051602061245b83398151915290600160a060020a031682604051600160a060020a03909216825260208201527f7769746864726177616c4f776e657200000000000000000000000000000000006040808301919091526060909101905180910390a17fdcfb70a6f0f5eab41644ac0cde62fe5f51ce0bb0a53b88ea72c4b2b78ad887bc8760405190815260200160405180910390a150505050505050565b60015490565b600081815260066020526040902060010154600160a060020a03848116911614610b5a57600080fd5b600081815260066020526040902060090154600160a060020a03838116911614610b8357600080fd5b600160a060020a0382161515610b9857600080fd5b610ba383838361206a565b505050565b60008054819081908190819081908190819060a060020a900460ff1615610bce57600080fd5b60008b8152600660205260409020600254909850610bed908b90612017565b600189015490975033600160a060020a03908116911614610c0d57600080fd5b33600160a060020a03161515610c2257600080fd5b3487901015610c3057600080fd5b8815610c4e57610c4488600601548b612049565b6006890155610c62565b610c5c88600701548b612049565b60078901555b610c77610c70886064611ffb565b6050612017565b9550610c8e610c87886064611ffb565b6011612017565b9450610c9e6108ba886064611ffb565b9350610cae6108d1886064611ffb565b600a890154909350600160a060020a03166108fc85150285604051600060405180830381858888f193505050501515610ce657600080fd5b600b880154600160a060020a03166108fc84150284604051600060405180830381858888f193505050501515610d1b57600080fd5b610d29868960030154612049565b6003890155610d43610d3c866064611ffb565b6014612017565b9150610d53610c70866064611ffb565b600454909150600160a060020a031682156108fc0283604051600060405180830381858888f193505050501515610d8957600080fd5b600054600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610dbc57600080fd5b600a88015460008051602061245b83398151915290600160a060020a031685604051600160a060020a03909216825260208201527f6275795368697050726576696f75734f776e65720000000000000000000000006040808301919091526060909101905180910390a1600b88015460008051602061245b83398151915290600160a060020a031684604051600160a060020a03909216825260208201527f6275795368697050726576696f75734f776e65723200000000000000000000006040808301919091526060909101905180910390a160018801547ff93b010291992b1f39b774e39ebd25679d89423a837516acc89864839e693579908c90600160a060020a0316604051918252600160a060020a031660208201526040908101905180910390a15050505050505050505050565b600081815260066020526040902060010154600160a060020a0316801515610f1657600080fd5b919050565b60005460a060020a900460ff1681565b600160a060020a031660009081526005602052604090205490565b600054600160a060020a031681565b600081815260066020819052604090912080546001820154600283015460038401546004850154600586015496860154600787015460089097015498999598600160a060020a0390951697939692959194909291565b60008060008060008060008060008060008060149054906101000a900460ff16151560001515141515610fdd57600080fd5b600660008e81526020019081526020016000209a50600760008e81526020019081526020016000209950600660008d81526020019081526020016000209850600760008d8152602001908152602001600020975033600160a060020a03168b60010160009054906101000a9004600160a060020a0316600160a060020a031614151561106857600080fd5b6001808a0154908c0154600160a060020a039081169116141561108a57600080fd5b33600160a060020a0316151561109f57600080fd5b34156110aa57600080fd5b60068a01544310156110bb57600080fd5b60078801544310156110cc57600080fd5b60068b0154600090116110de57600080fd5b600789015460068c0154116110f257600080fd5b61110b6111048a600301546064611ffb565b604b612017565b965061111b896003015488612058565b60038a015589546001018a5560048a01546111369088612049565b60048b0155600388018054600101905560058801546111559088612049565b60058901556014430160068b0181905560078901819055955061117c611104886064611ffb565b945061118c8b6003015486612049565b60038c015560068b01546111ad906111a86108ba826064611ffb565b612058565b60068c015560078901546111c9906111a86108a3826064611ffb565b60078a01556111e36111dc886064611ffb565b600f612017565b93506111fa6111f3886064611ffb565b6006612017565b925061121161120a886064611ffb565b6003612017565b91506112216108d1886064611ffb565b60018c0154909150600160a060020a031684156108fc0285604051600060405180830381858888f19350505050151561125957600080fd5b600a8b0154600160a060020a03166108fc84150284604051600060405180830381858888f19350505050151561128e57600080fd5b600b8b0154600160a060020a03166108fc83150283604051600060405180830381858888f1935050505015156112c357600080fd5b600454600160a060020a03166108fc6112e0610d3c846064611ffb565b9081150290604051600060405180830381858888f19350505050151561130557600080fd5b600054600160a060020a03166108fc611322610c70846064611ffb565b9081150290604051600060405180830381858888f19350505050151561134757600080fd5b7fcb506c37cfbb0a3ca5ece5771a78558cb9099b1dc7bf09e7f3e17845fb6f40268d8d60405191825260208201526040908101905180910390a150505050505050505050505050565b60005433600160a060020a039081169116146113ab57600080fd5b33600160a060020a031615156113c057600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a179055565b6113ee6123ca565b60408051908101604052600381527f45495300000000000000000000000000000000000000000000000000000000006020820152905090565b60408051908101604052600c81527f457468657249736c616e64730000000000000000000000000000000000000000602082015281565b33600160a060020a0316151561147357600080fd5b60008181526006602052604090206001015433600160a060020a0390811691161461149d57600080fd5b6114a833838361206a565b5050565b600081815260066020526040902060010154600160a060020a0390811690331615156114d757600080fd5b60008281526006602052604090206009015433600160a060020a0390811691161461150157600080fd5b6114a881338461206a565b60005433600160a060020a0390811691161461152757600080fd5b33600160a060020a0316151561153c57600080fd5b61154b85848660008686612123565b5050505050565b60009081526006602052604090206002015490565b60005433600160a060020a0390811691161461158257600080fd5b33600160a060020a0316151561159757600080fd5b6000805474ff000000000000000000000000000000000000000019169055565b60008181526007602081905260409091208054600182015460028301546003840154600485015460058601546006870154969097015497989497939692959194909390565b6116046123ca565b61160c6123ca565b6116146123ca565b61161c6123ca565b6116246123ca565b61162c6123ca565b6116346123ca565b61163c6123ca565b6116446123ca565b61164c6123ca565b6116546123ca565b61165c6123ca565b6116646123ca565b61166c6123ca565b600060015460405180591061167e5750595b908082528060200260200182016040525097506001546040518059106116a15750595b908082528060200260200182016040525096506001546040518059106116c45750595b908082528060200260200182016040525095506001546040518059106116e75750595b9080825280602002602001820160405250945060015460405180591061170a5750595b9080825280602002602001820160405250935060015460405180591061172d5750595b908082528060200260200182016040525092506001546040518059106117505750595b90808252806020026020018201604052509150600090505b6001548110156118a9578088828151811061177f57fe5b6020908102909101810191909152600082815260069091526040902060010154600160a060020a03168782815181106117b457fe5b600160a060020a0390921660209283029091018201526000828152600690915260409020600201548682815181106117e857fe5b602090810290910181019190915260008281526006909152604090206003015485828151811061181457fe5b6020908102909101810191909152600082815260069182905260409020015484828151811061183f57fe5b602090810290910181019190915260008281526006909152604090206007015483828151811061186b57fe5b602090810290910181019190915260008281526006909152604090206008015482828151811061189757fe5b60209081029091010152600101611768565b50959d949c50929a50909850965094509092509050565b60005433600160a060020a039081169116146118db57600080fd5b80600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151561191857600080fd5b50565b6000805481908190819081908190819081908190819060a060020a900460ff161561194557600080fd5b60008b81526006602052604090206001810154909a5033600160a060020a039081169116141561197457600080fd5b33600160a060020a0316151561198957600080fd5b60028a015434101561199a57600080fd5b6119a8348b60020154612058565b985060008a600501541115611d2d576119d06119c98b6002015460a0611ffb565b6082612017565b97506119eb6119e48b6002015460a0611ffb565b6012612017565b9650611a066119ff8b6002015460a0611ffb565b6007612017565b9550611a1a61120a8b6002015460a0611ffb565b9450611a2e6108ba8b6002015460a0611ffb565b60018b015490945030600160a060020a03908116911614611a7e5760018a0154600160a060020a031688156108fc0289604051600060405180830381858888f193505050501515611a7e57600080fd5b600a8a0154600160a060020a03166108fc86150286604051600060405180830381858888f193505050501515611ab357600080fd5b600b8a0154600160a060020a03166108fc85150285604051600060405180830381858888f193505050501515611ae857600080fd5b611af6878b60030154612049565b60038b0155611b09610d3c876064611ffb565b9250611b19610c70876064611ffb565b600454909250600160a060020a031683156108fc0284604051600060405180830381858888f193505050501515611b4f57600080fd5b600054600160a060020a031682156108fc0283604051600060405180830381858888f193505050501515611b8257600080fd5b600a8a015460008051602061245b83398151915290600160a060020a031686604051600160a060020a03909216825260208201527f70726576696f75734f776e6572000000000000000000000000000000000000006040808301919091526060909101905180910390a1600b8a015460008051602061245b83398151915290600160a060020a031685604051600160a060020a03909216825260208201527f70726576696f75734f776e6572320000000000000000000000000000000000006040808301919091526060909101905180910390a160018a015460008051602061245b83398151915290600160a060020a031689604051600160a060020a03909216825260208201527f6f776e65720000000000000000000000000000000000000000000000000000006040808301919091526060909101905180910390a160005460008051602061245b83398151915290600160a060020a031687604051600160a060020a03909216825260208201527f64657600000000000000000000000000000000000000000000000000000000006040808301919091526060909101905180910390a1611d63565b60018a0154600160a060020a03163480156108fc0290604051600060405180830381858888f193505050501515611d6357600080fd5b50600289015460058a01819055600354430160048b015560018a0154600160a060020a031690611d9f90611d98906064611ffb565b60a0612017565b60028b0155600a8a018054600b8c018054600160a060020a03808416600160a060020a0319928316179092556001808f01805480851695841695909517909555921633821617835560088d01805483019055838116600090815260056020526040808220805460001901905584548316825290819020805490930190925591547fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9284929116908e9051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a160058a015460028b015460018c01548c547fdcab0704e5b2c212cba558657bf325bc1b823c2a4e89c77e93926533ec56b5f9938f93909290918691600160a060020a0316906040519586526020860194909452604080860193909352600160a060020a03918216606086015216608084015260a083019190915260c0909101905180910390a1600160a060020a03331689156108fc028a604051600060405180830381858888f193505050501515611f2957600080fd5b5050505050505050505050565b60005433600160a060020a03908116911614611f5157600080fd5b600160a060020a0381161515611f6657600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a0392909216919091179055565b60408051908101604052600381527f4549530000000000000000000000000000000000000000000000000000000000602082015281565b600080828481151561200957fe5b0490508091505b5092915050565b60008083151561202a5760009150612010565b5082820282848281151561203a57fe5b041461204257fe5b9392505050565b60008282018381101561204257fe5b60008282111561206457fe5b50900390565b600081815260066020908152604080832060018082018054600160a060020a03808a16600160a060020a03199283168117909355600990940180549091169055918816855260059093528184208054600019019055835291829020805490910190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9084908490849051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b610160604051908101604052808760001916815260200186600160a060020a031681526020018581526020016000815260200160008152602001848152602001838152602001828152602001600081526020016000600160a060020a03168152602001604080519081016040908152600160a060020a038916808352602080840191909152919092526001546000908152600690915220815181556020820151600182018054600160a060020a031916600160a060020a039290921691909117905560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151600982018054600160a060020a031916600160a060020a039290921691909117905561014082015161226a90600a83019060026123dc565b5090505061010060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600760006001548152602001908152602001600020600082015181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050507f6dbe83e0361d1759b05d67925ee5ed7d3c73361da16f0abb8aaebf121c7fd34560015487876040519283526020830191909152600160a060020a03166040808301919091526060909101905180910390a17fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef3086600154604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050600180548101905550505050565b60206040519081016040526000815290565b8260028101928215612426579160200282015b828111156124265782518254600160a060020a031916600160a060020a0391909116178255602092909201916001909101906123ef565b50612432929150612436565b5090565b61076a91905b80821115612432578054600160a060020a031916815560010161243c5600643236658eb2709c16f0857e1a7a4fffee3c798264461cc3462be70c4fa9d8cda165627a7a7230582043d2474d71b265c422cea6b7fdf8ef08730f9426bf200f400e3fbb18a9a784840029

Deployed Bytecode

0x60606040526004361061015e5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610163578063095ea7b3146101ed5780631051db341461021157806311f1fc991461023857806318160ddd1461024357806323b872dd1461026857806361b98cb3146102905780636352211e146102a35780636c376cc5146102d557806370a08231146102e85780638da5cb5b14610307578063913158f71461031a57806394b6638614610394578063952868b5146103a257806395d89b41146103b5578063a3f4df7e146103c8578063a9059cbb146103db578063b2e6ceeb146103fd578063b5dd20e914610413578063b9186d7d1461043e578063d5ea36f914610454578063dc3134ae14610467578063deb081df146104ca578063eb2c0223146106cf578063efef39a1146106ee578063f2fde38b146106f9578063f76f8d7814610718575b600080fd5b341561016e57600080fd5b61017661072b565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101b257808201518382015260200161019a565b50505050905090810190601f1680156101df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101f857600080fd5b61020f600160a060020a036004351660243561076d565b005b341561021c57600080fd5b610224610804565b604051901515815260200160405180910390f35b61020f600435610809565b341561024e57600080fd5b610256610b2b565b60405190815260200160405180910390f35b341561027357600080fd5b61020f600160a060020a0360043581169060243516604435610b31565b61020f6004356024356044351515610ba8565b34156102ae57600080fd5b6102b9600435610eef565b604051600160a060020a03909116815260200160405180910390f35b34156102e057600080fd5b610224610f1b565b34156102f357600080fd5b610256600160a060020a0360043516610f2b565b341561031257600080fd5b6102b9610f46565b341561032557600080fd5b610330600435610f55565b604051998a5260208a0198909852600160a060020a039096166040808a01919091526060890195909552608088019390935260a087019190915260c086015260e0850152610100840191909152610120830191909152610140909101905180910390f35b61020f600435602435610fab565b34156103ad57600080fd5b61020f611390565b34156103c057600080fd5b6101766113e6565b34156103d357600080fd5b610176611427565b34156103e657600080fd5b61020f600160a060020a036004351660243561145e565b341561040857600080fd5b61020f6004356114ac565b341561041e57600080fd5b61020f600435602435600160a060020a036044351660643560843561150c565b341561044957600080fd5b610256600435611552565b341561045f57600080fd5b61020f611567565b341561047257600080fd5b61047d6004356115b7565b60405198895260208901979097526040808901969096526060880194909452608087019290925260a086015260c085015260e0840152610100830191909152610120909101905180910390f35b34156104d557600080fd5b6104dd6115fc565b604051808060200180602001806020018060200180602001806020018060200188810388528f818151815260200191508051906020019060200280838360005b8381101561053557808201518382015260200161051d565b5050505090500188810387528e818151815260200191508051906020019060200280838360005b8381101561057457808201518382015260200161055c565b5050505090500188810386528d818151815260200191508051906020019060200280838360005b838110156105b357808201518382015260200161059b565b5050505090500188810385528c818151815260200191508051906020019060200280838360005b838110156105f25780820151838201526020016105da565b5050505090500188810384528b818151815260200191508051906020019060200280838360005b83811015610631578082015183820152602001610619565b5050505090500188810383528a818151815260200191508051906020019060200280838360005b83811015610670578082015183820152602001610658565b50505050905001888103825289818151815260200191508051906020019060200280838360005b838110156106af578082015183820152602001610697565b505050509050019e50505050505050505050505050505060405180910390f35b34156106da57600080fd5b61020f600160a060020a03600435166118c0565b61020f60043561191b565b341561070457600080fd5b61020f600160a060020a0360043516611f36565b341561072357600080fd5b610176611fc4565b6107336123ca565b60408051908101604052600c81527f457468657249736c616e64730000000000000000000000000000000000000000602082015290505b90565b60008181526006602052604090206001015433600160a060020a0390811691161461079757600080fd5b600081815260066020526040908190206009018054600160a060020a031916600160a060020a038581169182179092559133909116907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35050565b600190565b600080548190819081908190819060a060020a900460ff161561082b57600080fd5b6000878152600660205260409020600181015490965033600160a060020a0390811691161461085957600080fd5b33600160a060020a0316151561086e57600080fd5b60038601546000901161088057600080fd5b600486015443101561089157600080fd5b6108aa6108a387600301546064611ffb565b600a612017565b94506108c16108ba866064611ffb565b6002612017565b93506108d86108d1866064611ffb565b6001612017565b92506108e48385612049565b91506108f08583612058565b6001870154909150600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151561092857600080fd5b600a860154600160a060020a03166108fc85150285604051600060405180830381858888f19350505050151561095d57600080fd5b600b860154600160a060020a03166108fc84150284604051600060405180830381858888f19350505050151561099257600080fd5b6109a0866003015486612058565b6003878101919091555443016004870155600a86015460008051602061245b83398151915290600160a060020a031685604051600160a060020a03909216825260208201527f7769746864726177616c50726576696f75734f776e65720000000000000000006040808301919091526060909101905180910390a1600b86015460008051602061245b83398151915290600160a060020a031684604051600160a060020a03909216825260208201527f7769746864726177616c50726576696f75734f776e65723200000000000000006040808301919091526060909101905180910390a1600186015460008051602061245b83398151915290600160a060020a031682604051600160a060020a03909216825260208201527f7769746864726177616c4f776e657200000000000000000000000000000000006040808301919091526060909101905180910390a17fdcfb70a6f0f5eab41644ac0cde62fe5f51ce0bb0a53b88ea72c4b2b78ad887bc8760405190815260200160405180910390a150505050505050565b60015490565b600081815260066020526040902060010154600160a060020a03848116911614610b5a57600080fd5b600081815260066020526040902060090154600160a060020a03838116911614610b8357600080fd5b600160a060020a0382161515610b9857600080fd5b610ba383838361206a565b505050565b60008054819081908190819081908190819060a060020a900460ff1615610bce57600080fd5b60008b8152600660205260409020600254909850610bed908b90612017565b600189015490975033600160a060020a03908116911614610c0d57600080fd5b33600160a060020a03161515610c2257600080fd5b3487901015610c3057600080fd5b8815610c4e57610c4488600601548b612049565b6006890155610c62565b610c5c88600701548b612049565b60078901555b610c77610c70886064611ffb565b6050612017565b9550610c8e610c87886064611ffb565b6011612017565b9450610c9e6108ba886064611ffb565b9350610cae6108d1886064611ffb565b600a890154909350600160a060020a03166108fc85150285604051600060405180830381858888f193505050501515610ce657600080fd5b600b880154600160a060020a03166108fc84150284604051600060405180830381858888f193505050501515610d1b57600080fd5b610d29868960030154612049565b6003890155610d43610d3c866064611ffb565b6014612017565b9150610d53610c70866064611ffb565b600454909150600160a060020a031682156108fc0283604051600060405180830381858888f193505050501515610d8957600080fd5b600054600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610dbc57600080fd5b600a88015460008051602061245b83398151915290600160a060020a031685604051600160a060020a03909216825260208201527f6275795368697050726576696f75734f776e65720000000000000000000000006040808301919091526060909101905180910390a1600b88015460008051602061245b83398151915290600160a060020a031684604051600160a060020a03909216825260208201527f6275795368697050726576696f75734f776e65723200000000000000000000006040808301919091526060909101905180910390a160018801547ff93b010291992b1f39b774e39ebd25679d89423a837516acc89864839e693579908c90600160a060020a0316604051918252600160a060020a031660208201526040908101905180910390a15050505050505050505050565b600081815260066020526040902060010154600160a060020a0316801515610f1657600080fd5b919050565b60005460a060020a900460ff1681565b600160a060020a031660009081526005602052604090205490565b600054600160a060020a031681565b600081815260066020819052604090912080546001820154600283015460038401546004850154600586015496860154600787015460089097015498999598600160a060020a0390951697939692959194909291565b60008060008060008060008060008060008060149054906101000a900460ff16151560001515141515610fdd57600080fd5b600660008e81526020019081526020016000209a50600760008e81526020019081526020016000209950600660008d81526020019081526020016000209850600760008d8152602001908152602001600020975033600160a060020a03168b60010160009054906101000a9004600160a060020a0316600160a060020a031614151561106857600080fd5b6001808a0154908c0154600160a060020a039081169116141561108a57600080fd5b33600160a060020a0316151561109f57600080fd5b34156110aa57600080fd5b60068a01544310156110bb57600080fd5b60078801544310156110cc57600080fd5b60068b0154600090116110de57600080fd5b600789015460068c0154116110f257600080fd5b61110b6111048a600301546064611ffb565b604b612017565b965061111b896003015488612058565b60038a015589546001018a5560048a01546111369088612049565b60048b0155600388018054600101905560058801546111559088612049565b60058901556014430160068b0181905560078901819055955061117c611104886064611ffb565b945061118c8b6003015486612049565b60038c015560068b01546111ad906111a86108ba826064611ffb565b612058565b60068c015560078901546111c9906111a86108a3826064611ffb565b60078a01556111e36111dc886064611ffb565b600f612017565b93506111fa6111f3886064611ffb565b6006612017565b925061121161120a886064611ffb565b6003612017565b91506112216108d1886064611ffb565b60018c0154909150600160a060020a031684156108fc0285604051600060405180830381858888f19350505050151561125957600080fd5b600a8b0154600160a060020a03166108fc84150284604051600060405180830381858888f19350505050151561128e57600080fd5b600b8b0154600160a060020a03166108fc83150283604051600060405180830381858888f1935050505015156112c357600080fd5b600454600160a060020a03166108fc6112e0610d3c846064611ffb565b9081150290604051600060405180830381858888f19350505050151561130557600080fd5b600054600160a060020a03166108fc611322610c70846064611ffb565b9081150290604051600060405180830381858888f19350505050151561134757600080fd5b7fcb506c37cfbb0a3ca5ece5771a78558cb9099b1dc7bf09e7f3e17845fb6f40268d8d60405191825260208201526040908101905180910390a150505050505050505050505050565b60005433600160a060020a039081169116146113ab57600080fd5b33600160a060020a031615156113c057600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a179055565b6113ee6123ca565b60408051908101604052600381527f45495300000000000000000000000000000000000000000000000000000000006020820152905090565b60408051908101604052600c81527f457468657249736c616e64730000000000000000000000000000000000000000602082015281565b33600160a060020a0316151561147357600080fd5b60008181526006602052604090206001015433600160a060020a0390811691161461149d57600080fd5b6114a833838361206a565b5050565b600081815260066020526040902060010154600160a060020a0390811690331615156114d757600080fd5b60008281526006602052604090206009015433600160a060020a0390811691161461150157600080fd5b6114a881338461206a565b60005433600160a060020a0390811691161461152757600080fd5b33600160a060020a0316151561153c57600080fd5b61154b85848660008686612123565b5050505050565b60009081526006602052604090206002015490565b60005433600160a060020a0390811691161461158257600080fd5b33600160a060020a0316151561159757600080fd5b6000805474ff000000000000000000000000000000000000000019169055565b60008181526007602081905260409091208054600182015460028301546003840154600485015460058601546006870154969097015497989497939692959194909390565b6116046123ca565b61160c6123ca565b6116146123ca565b61161c6123ca565b6116246123ca565b61162c6123ca565b6116346123ca565b61163c6123ca565b6116446123ca565b61164c6123ca565b6116546123ca565b61165c6123ca565b6116646123ca565b61166c6123ca565b600060015460405180591061167e5750595b908082528060200260200182016040525097506001546040518059106116a15750595b908082528060200260200182016040525096506001546040518059106116c45750595b908082528060200260200182016040525095506001546040518059106116e75750595b9080825280602002602001820160405250945060015460405180591061170a5750595b9080825280602002602001820160405250935060015460405180591061172d5750595b908082528060200260200182016040525092506001546040518059106117505750595b90808252806020026020018201604052509150600090505b6001548110156118a9578088828151811061177f57fe5b6020908102909101810191909152600082815260069091526040902060010154600160a060020a03168782815181106117b457fe5b600160a060020a0390921660209283029091018201526000828152600690915260409020600201548682815181106117e857fe5b602090810290910181019190915260008281526006909152604090206003015485828151811061181457fe5b6020908102909101810191909152600082815260069182905260409020015484828151811061183f57fe5b602090810290910181019190915260008281526006909152604090206007015483828151811061186b57fe5b602090810290910181019190915260008281526006909152604090206008015482828151811061189757fe5b60209081029091010152600101611768565b50959d949c50929a50909850965094509092509050565b60005433600160a060020a039081169116146118db57600080fd5b80600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151561191857600080fd5b50565b6000805481908190819081908190819081908190819060a060020a900460ff161561194557600080fd5b60008b81526006602052604090206001810154909a5033600160a060020a039081169116141561197457600080fd5b33600160a060020a0316151561198957600080fd5b60028a015434101561199a57600080fd5b6119a8348b60020154612058565b985060008a600501541115611d2d576119d06119c98b6002015460a0611ffb565b6082612017565b97506119eb6119e48b6002015460a0611ffb565b6012612017565b9650611a066119ff8b6002015460a0611ffb565b6007612017565b9550611a1a61120a8b6002015460a0611ffb565b9450611a2e6108ba8b6002015460a0611ffb565b60018b015490945030600160a060020a03908116911614611a7e5760018a0154600160a060020a031688156108fc0289604051600060405180830381858888f193505050501515611a7e57600080fd5b600a8a0154600160a060020a03166108fc86150286604051600060405180830381858888f193505050501515611ab357600080fd5b600b8a0154600160a060020a03166108fc85150285604051600060405180830381858888f193505050501515611ae857600080fd5b611af6878b60030154612049565b60038b0155611b09610d3c876064611ffb565b9250611b19610c70876064611ffb565b600454909250600160a060020a031683156108fc0284604051600060405180830381858888f193505050501515611b4f57600080fd5b600054600160a060020a031682156108fc0283604051600060405180830381858888f193505050501515611b8257600080fd5b600a8a015460008051602061245b83398151915290600160a060020a031686604051600160a060020a03909216825260208201527f70726576696f75734f776e6572000000000000000000000000000000000000006040808301919091526060909101905180910390a1600b8a015460008051602061245b83398151915290600160a060020a031685604051600160a060020a03909216825260208201527f70726576696f75734f776e6572320000000000000000000000000000000000006040808301919091526060909101905180910390a160018a015460008051602061245b83398151915290600160a060020a031689604051600160a060020a03909216825260208201527f6f776e65720000000000000000000000000000000000000000000000000000006040808301919091526060909101905180910390a160005460008051602061245b83398151915290600160a060020a031687604051600160a060020a03909216825260208201527f64657600000000000000000000000000000000000000000000000000000000006040808301919091526060909101905180910390a1611d63565b60018a0154600160a060020a03163480156108fc0290604051600060405180830381858888f193505050501515611d6357600080fd5b50600289015460058a01819055600354430160048b015560018a0154600160a060020a031690611d9f90611d98906064611ffb565b60a0612017565b60028b0155600a8a018054600b8c018054600160a060020a03808416600160a060020a0319928316179092556001808f01805480851695841695909517909555921633821617835560088d01805483019055838116600090815260056020526040808220805460001901905584548316825290819020805490930190925591547fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9284929116908e9051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a160058a015460028b015460018c01548c547fdcab0704e5b2c212cba558657bf325bc1b823c2a4e89c77e93926533ec56b5f9938f93909290918691600160a060020a0316906040519586526020860194909452604080860193909352600160a060020a03918216606086015216608084015260a083019190915260c0909101905180910390a1600160a060020a03331689156108fc028a604051600060405180830381858888f193505050501515611f2957600080fd5b5050505050505050505050565b60005433600160a060020a03908116911614611f5157600080fd5b600160a060020a0381161515611f6657600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a0392909216919091179055565b60408051908101604052600381527f4549530000000000000000000000000000000000000000000000000000000000602082015281565b600080828481151561200957fe5b0490508091505b5092915050565b60008083151561202a5760009150612010565b5082820282848281151561203a57fe5b041461204257fe5b9392505050565b60008282018381101561204257fe5b60008282111561206457fe5b50900390565b600081815260066020908152604080832060018082018054600160a060020a03808a16600160a060020a03199283168117909355600990940180549091169055918816855260059093528184208054600019019055835291829020805490910190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9084908490849051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b610160604051908101604052808760001916815260200186600160a060020a031681526020018581526020016000815260200160008152602001848152602001838152602001828152602001600081526020016000600160a060020a03168152602001604080519081016040908152600160a060020a038916808352602080840191909152919092526001546000908152600690915220815181556020820151600182018054600160a060020a031916600160a060020a039290921691909117905560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151600982018054600160a060020a031916600160a060020a039290921691909117905561014082015161226a90600a83019060026123dc565b5090505061010060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600760006001548152602001908152602001600020600082015181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050507f6dbe83e0361d1759b05d67925ee5ed7d3c73361da16f0abb8aaebf121c7fd34560015487876040519283526020830191909152600160a060020a03166040808301919091526060909101905180910390a17fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef3086600154604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050600180548101905550505050565b60206040519081016040526000815290565b8260028101928215612426579160200282015b828111156124265782518254600160a060020a031916600160a060020a0391909116178255602092909201916001909101906123ef565b50612432929150612436565b5090565b61076a91905b80821115612432578054600160a060020a031916815560010161243c5600643236658eb2709c16f0857e1a7a4fffee3c798264461cc3462be70c4fa9d8cda165627a7a7230582043d2474d71b265c422cea6b7fdf8ef08730f9426bf200f400e3fbb18a9a784840029

Swarm Source

bzzr://43d2474d71b265c422cea6b7fdf8ef08730f9426bf200f400e3fbb18a9a78484

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.