Contract 0x900e54fae7528ed84b26d8ff762b4db43b182570

TxHash Block Age From To Value [TxFee]
0xea709598a2b665326545b6ffe17709c246ebc14ee0d8f6d5db16412c09d5e7aa40595962 days 11 hrs ago0x2a906694d15df38f59e76ed3a5735f8aabcce9cb IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.000094534
0xcac2a3e80567564208ccd2e6125d11c5f1d0b3fc82f28d796e79f99ca0795c1840595922 days 11 hrs ago0x2a906694d15df38f59e76ed3a5735f8aabcce9cb IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0002174678
0x620fbe36032e14ff7663248dfcd762f2941ac7ef49b929c351586e6ceeae066640595902 days 11 hrs ago0x2a906694d15df38f59e76ed3a5735f8aabcce9cb IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0001086426
0xa957b26d18b2f6668e07461ae66c309526338fcba8f1973abe69f5f226b5861240595892 days 11 hrs ago0x2a906694d15df38f59e76ed3a5735f8aabcce9cb IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0000963666
0xf8c97a9b62a0a51734de8d67d5750e20ab40597375b7f3319f506760f48a5fc940488124 days 8 hrs ago0x246bb6dddbbd624901c552e6352d0d961e2ee4c1 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0000723384
0xc1e670f78414c16cb0e46364bda4197ec5f6d111d65623a91522ce09e011218740487694 days 8 hrs ago0x246bb6dddbbd624901c552e6352d0d961e2ee4c1 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0001416426
0x65b70cebde68cfb2bbbd19c604ee84a85ebcc949bc258db5c988de125d99803740487654 days 8 hrs ago0x246bb6dddbbd624901c552e6352d0d961e2ee4c1 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0000963666
0xcf78f6c8e8a8be9eb5aa199f089c543776512bf361a2c31bb87317b309a6f01140484344 days 10 hrs ago0x246bb6dddbbd624901c552e6352d0d961e2ee4c1 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.000094534
0x5e3869da15f9587d3b69b1ba018c242c51c722279304df22dd269b23daa0587040484294 days 10 hrs ago0x246bb6dddbbd624901c552e6352d0d961e2ee4c1 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0003085918
0xa452e65e7d074d9ddb30d04149425791f387b50bfa34c735098728a5457742ae388265933 days 5 hrs ago0xb37e6f512abafc23e073758c64ea26251741df60 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.000137504
0xfd16c573843686865e7f5ed422d3e2e45d159710a544af0d35d62737aebc11c6388265633 days 5 hrs ago0xb37e6f512abafc23e073758c64ea26251741df60 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0001720608
0xb11325edd6f8e9d302c59bc148c4c54e2935b69c95224a5996bcda39f76341f0388244233 days 6 hrs ago0xb37e6f512abafc23e073758c64ea26251741df60 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0003347916
0x0fe342b802253e66ebf968eb157e7c8c31276d836ad3ef6426987568ddb0b1fd388241833 days 6 hrs ago0xb37e6f512abafc23e073758c64ea26251741df60 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0007293988
0x013e1249d8fe72c3bb945787e17d308cb6a719342d710a6496f4ae7afafcaab8388211433 days 7 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.002077173
0xaa811c8ae8a4eb9327e709a421fcbd72ed6f06df33126e0884857eb7db0ff2b6388211233 days 7 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.001035699
0xdfcba94068299ad64ffc6082ab6f9024736796b4493cce357785fd2ace5200d0388211033 days 7 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.001762383
0x282380f0567fb632497e6c51a649afb8f7de6101acd95c7027beebdb3621695d388210433 days 7 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.001037043
0xdf716f2e5012b8794934f0dff0b905f5395c302c8fa1d69762b5819925b3b928388209533 days 7 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.00092001
0x60e279349970654492e33ea13ba7772e9ac780dd508c83ec328987e5b71c8d27388208633 days 7 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.000903714
0x751b01737dd91bf958a0f3ddb24efcf5566a6c42ae6383aabf58043d82c1e2d0388208433 days 7 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.001127805
0x7a6460c549b4e50765097dd696ddd6c7a56704621d0c89ba5cdbba80029c539f388208233 days 7 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.001037043
0x32c42e25c87bf6d4c6e4f2cd547a0b6fe2854dfed87e49ae0dbb2d0430e84589380216147 days 4 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0002077173
0x4722b0c88f9118c7ead5917ed16d4f58461e312177610e921b93383736b5605e380215947 days 4 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0001037043
0x5d6f776327c05efa95f7d87f52450c135e62074b19c2b6a1728ebb989066aaf2380215847 days 4 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.0000919863
0x4bb0c83c4a852d38f04da0c00f9025f858dd077049ed586a7955c68b1589a45c380214747 days 4 hrs ago0x34aa3f359a9d614239015126635ce7732c18fdf3 IN  0x900e54fae7528ed84b26d8ff762b4db43b1825700 Ether0.000060158
[ Download CSV Export 

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

Parent TxHash Block Age From To Value
0xea709598a2b665326545b6ffe17709c246ebc14ee0d8f6d5db16412c09d5e7aa40595962 days 11 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0xcac2a3e80567564208ccd2e6125d11c5f1d0b3fc82f28d796e79f99ca0795c1840595922 days 11 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700x30a677b857571fe2aae8dd6096c9f1cdecd76ccb0 Ether
0xcac2a3e80567564208ccd2e6125d11c5f1d0b3fc82f28d796e79f99ca0795c1840595922 days 11 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0xcac2a3e80567564208ccd2e6125d11c5f1d0b3fc82f28d796e79f99ca0795c1840595922 days 11 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xfa26fd77ddc99558afa01e23a48d5e33cf0a6c890 Ether
0xcac2a3e80567564208ccd2e6125d11c5f1d0b3fc82f28d796e79f99ca0795c1840595922 days 11 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xfa26fd77ddc99558afa01e23a48d5e33cf0a6c890 Ether
0xcac2a3e80567564208ccd2e6125d11c5f1d0b3fc82f28d796e79f99ca0795c1840595922 days 11 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0x620fbe36032e14ff7663248dfcd762f2941ac7ef49b929c351586e6ceeae066640595902 days 11 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0xa957b26d18b2f6668e07461ae66c309526338fcba8f1973abe69f5f226b5861240595892 days 11 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0xf8c97a9b62a0a51734de8d67d5750e20ab40597375b7f3319f506760f48a5fc940488124 days 8 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0xc1e670f78414c16cb0e46364bda4197ec5f6d111d65623a91522ce09e011218740487694 days 8 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0x65b70cebde68cfb2bbbd19c604ee84a85ebcc949bc258db5c988de125d99803740487654 days 8 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0xcf78f6c8e8a8be9eb5aa199f089c543776512bf361a2c31bb87317b309a6f01140484344 days 10 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0x5e3869da15f9587d3b69b1ba018c242c51c722279304df22dd269b23daa0587040484294 days 10 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700x81fb20a31c41aaa9554744a2a316955989cdbec50 Ether
0x5e3869da15f9587d3b69b1ba018c242c51c722279304df22dd269b23daa0587040484294 days 10 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0x5e3869da15f9587d3b69b1ba018c242c51c722279304df22dd269b23daa0587040484294 days 10 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0x5e3869da15f9587d3b69b1ba018c242c51c722279304df22dd269b23daa0587040484294 days 10 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700x27d17a5e69d20998330773d9849dd0eccb21822c0 Ether
0x5e3869da15f9587d3b69b1ba018c242c51c722279304df22dd269b23daa0587040484294 days 10 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700x27d17a5e69d20998330773d9849dd0eccb21822c0 Ether
0x5e3869da15f9587d3b69b1ba018c242c51c722279304df22dd269b23daa0587040484294 days 10 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700x27d17a5e69d20998330773d9849dd0eccb21822c0 Ether
0x5e3869da15f9587d3b69b1ba018c242c51c722279304df22dd269b23daa0587040484294 days 10 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0x5e3869da15f9587d3b69b1ba018c242c51c722279304df22dd269b23daa0587040484294 days 10 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0xa452e65e7d074d9ddb30d04149425791f387b50bfa34c735098728a5457742ae388265933 days 5 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0xfd16c573843686865e7f5ed422d3e2e45d159710a544af0d35d62737aebc11c6388265633 days 5 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0xb11325edd6f8e9d302c59bc148c4c54e2935b69c95224a5996bcda39f76341f0388244233 days 6 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
0x0fe342b802253e66ebf968eb157e7c8c31276d836ad3ef6426987568ddb0b1fd388241833 days 6 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700x81fb20a31c41aaa9554744a2a316955989cdbec50 Ether
0x0fe342b802253e66ebf968eb157e7c8c31276d836ad3ef6426987568ddb0b1fd388241833 days 6 hrs ago0x900e54fae7528ed84b26d8ff762b4db43b1825700xd5a48a1f9f6f6d558ac9c7ba97bb63b83f9191050 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)

Contract Name:
Bay

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

pragma solidity ^0.4.15;

/*

  https://galleass.io
  by Austin Thomas Griffith

  The Bay contains fish and doggers. Doggers move east and west and cast their bait
  in an attempt to catch a fish. The Bay requires a harbor for embarking and
  disembarking.

*/



/**
 * @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 private _owner;

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

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

  /**
   * @return the address of the owner.
   */
  function owner() public view returns(address) {
    return _owner;
  }

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

  /**
   * @return true if `msg.sender` is the owner of the contract.
   */
  function isOwner() public view returns(bool) {
    return msg.sender == _owner;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(_owner);
    _owner = address(0);
  }

  /**
   * @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 {
    _transferOwnership(newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0));
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}


contract Galleasset is Ownable {

  address public galleass;

  constructor(address _galleass) public {
    galleass=_galleass;
  }

  function upgradeGalleass(address _galleass) public returns (bool) {
    require(msg.sender == galleass);
    galleass=_galleass;
    return true;
  }

  function getContract(bytes32 _name) public view returns (address){
    Galleass galleassContract = Galleass(galleass);
    return galleassContract.getContract(_name);
  }

  function hasPermission(address _contract,bytes32 _permission) public view returns (bool){
    Galleass galleassContract = Galleass(galleass);
    return galleassContract.hasPermission(_contract,_permission);
  }

  function getGalleassTokens(address _from,bytes32 _name,uint256 _amount) internal returns (bool) {
    return StandardTokenInterface(getContract(_name)).galleassTransferFrom(_from,address(this),_amount);
  }

  function getTokens(address _from,bytes32 _name,uint256 _amount) internal returns (bool) {
    return StandardTokenInterface(getContract(_name)).transferFrom(_from,address(this),_amount);
  }

  function approveTokens(bytes32 _name,address _to,uint256 _amount) internal returns (bool) {
    return StandardTokenInterface(getContract(_name)).approve(_to,_amount);
  }
/*
  function withdraw(uint256 _amount) public onlyOwner isBuilding returns (bool) {
    require(address(this).balance >= _amount);
    assert(owner.send(_amount));
    return true;
  }
  function withdrawToken(address _token,uint256 _amount) public onlyOwner isBuilding returns (bool) {
    StandardTokenInterface token = StandardTokenInterface(_token);
    token.transfer(msg.sender,_amount);
    return true;
  }*/

  //this prevents old contracts from remaining active
  //if you want to disable functions after the contract is retired,
  //add this as a modifier
  modifier isGalleasset(bytes32 _name) {
    Galleass galleassContract = Galleass(galleass);
    require(address(this) == galleassContract.getContract(_name));
    _;
  }

  modifier isBuilding() {
    Galleass galleassContract = Galleass(galleass);
    require(galleassContract.stagedMode() == Galleass.StagedMode.BUILD);
    _;
  }

}


contract Galleass {
  function getContract(bytes32 _name) public constant returns (address) { }
  function hasPermission(address _contract, bytes32 _permission) public view returns (bool) { }
  enum StagedMode {PAUSED,BUILD,STAGE,PRODUCTION}
  StagedMode public stagedMode;
}

contract StandardTokenInterface {
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { }
  function galleassTransferFrom(address _from, address _to, uint256 _value) public returns (bool) { }
  function transfer(address _to, uint256 _value) public returns (bool) { }
  function approve(address _spender, uint256 _value) public returns (bool) { }
}


contract Bay is Galleasset {

  constructor(address _galleass) public Galleasset(_galleass) { }

  uint16 public width = 65535; //pixels
  uint16 public depth = 65535; //pixels

  uint256 public shipSpeed = 512;///this will be replaced soon, each ship should have a different speed based on how it was crafted

  //      land x            land y          //owner    //Ship struct
  mapping(uint16 => mapping(uint16 => mapping(address => Ship))) public ships;
  //      land x            land y          //fish id    //species
  mapping(uint16 => mapping(uint16 => mapping(bytes32 => address))) public fish;
  //      land x            land y          //species  //allowed bool
  mapping(uint16 => mapping(uint16 => mapping(address => bool))) public species;

  uint8 updateNonce = 0;
  event ShipUpdate(uint16 indexed x,uint16 indexed y,uint256 id,address indexed owner,uint timestamp,bool floating,bool sailing,bool direction,bool fishing,uint64 blockNumber,uint16 location);
  function emitShipUpdate(uint16 _x, uint16 _y,Ship thisShip) internal {
    emit ShipUpdate(_x,_y,thisShip.id,msg.sender,now*1000+(updateNonce++),thisShip.floating,thisShip.sailing,thisShip.direction,thisShip.fishing,thisShip.blockNumber,thisShip.location);
  }
  /*
  mapping (address => Ship) public ships;
  mapping (bytes32 => address) public fish;
  mapping (address => bool) public species;

  event ShipUpdate(uint256 id,address owner,uint timestamp,bool floating,bool sailing,bool direction,bool fishing,uint64 blockNumber,uint16 location);
  */


  struct Ship{
    uint256 id;
    bool floating;
    bool sailing;
    bool direction; //true: east (+), false: west (-)
    bool fishing;
    uint64 blockNumber;
    uint16 location;
    //when you cast, it is after a specific fish with a certain bait hash
    bytes32 bait;
    bytes32 fish;
  }

  // --------------------------------------------------------------------------- BUILD

  //different species for different climates etc setup at build
  function allowSpecies(uint16 _x, uint16 _y, address _species) onlyOwner public returns (bool) {
    assert( _species != address(0) );
    species[_x][_y][_species]=true;
  }

  // --------------------------------------------------------------------------- SETTERS

  //
  // stock the bay with a specific species
  //
  uint256 nonce;
  function stock(uint16 _x, uint16 _y,address _species,uint256 _amount) public isGalleasset("Bay") returns (bool) {
    //not an empty address
    require( _species != address(0) );
    //_species allowed in this Bay
    require( species[_x][_y][_species] );
    //transfer the fish in
    StandardToken fishContract = StandardToken(_species);
    require( fishContract.transferFrom(msg.sender,address(this),_amount) );
    while(_amount-->0){
      bytes32 id = keccak256(nonce++,block.blockhash(block.number-1),msg.sender);
      //watch for collisions that should never happen
      require(fish[_x][_y][id]==address(0));
      //set fish _species
      fish[_x][_y][id] = _species;
      //emit event for ui
      emit Fish(_x,_y,id,now,fish[_x][_y][id],fishContract.image());
    }
    return true;
  }
  event Fish(uint16 indexed x,uint16 indexed y,bytes32 id, uint256 timestamp, address species, bytes32 image);



  //
  // transfer your ship to the bay to sail
  //
  function embark(uint16 _x, uint16 _y,uint256 shipId) public isGalleasset("Bay") returns (bool) {
    //any given address can only have one dogger in any given bay at a time
    require( !ships[_x][_y][msg.sender].floating );
    //make sure this address owns the shipId
    NFT shipsContract = NFT(getContract("Dogger"));
    require( shipsContract.ownerOf(shipId)==msg.sender );
    //transfer the ship to the bay
    shipsContract.galleassetTransferFrom(msg.sender,address(this),shipId);
    //make sure the bay now owns it
    require( shipsContract.ownerOf(shipId)==address(this) );

    //initialize the ship storage
    Ship thisShip = ships[_x][_y][msg.sender];
    thisShip.id = shipId;
    thisShip.floating=true;
    thisShip.sailing=false;
    thisShip.location=getHarborLocation(_x,_y);
    thisShip.blockNumber=uint64(block.number);
    thisShip.direction=false;

    emitShipUpdate(_x,_y,thisShip);
    return true;
  }



  //
  // transfer your ship back to you from the bay
  //
  function disembark(uint16 _x, uint16 _y,uint256 shipId) public isGalleasset("Bay") returns (bool) {
    //make sure the ship for this address is the same id they passed in
    require( ships[_x][_y][msg.sender].id==shipId );
    // make sure the ship is floating
    require( ships[_x][_y][msg.sender].floating );
    //make sure they are in range to disembark
    require( inRangeToDisembark(_x,_y,msg.sender) );
    //transfer the ship back to the address
    NFT shipsContract = NFT(getContract("Dogger"));
    require( shipsContract.ownerOf(shipId)==address(this) );
    shipsContract.galleassetTransferFrom(address(this),msg.sender,shipId);
    require( shipsContract.ownerOf(shipId)==msg.sender );

    //delete the ship from Bay memory
    uint256 deletedId = ships[_x][_y][msg.sender].id;
    Ship thisShip = ships[_x][_y][msg.sender];
    thisShip.floating=false;
    thisShip.sailing=false;
    emit ShipUpdate(_x,_y,deletedId,msg.sender,now*1000+(updateNonce++),thisShip.floating,thisShip.sailing,thisShip.direction,thisShip.fishing,thisShip.blockNumber,thisShip.location);

    delete ships[_x][_y][msg.sender];
    return true;
  }




  //
  // sail east (true) or west (false)
  //
  function setSail(uint16 _x, uint16 _y,bool direction) public isGalleasset("Bay") returns (bool) {

    Ship thisShip = ships[_x][_y][msg.sender];

    //ship must be floating but not fishing or sailing
    require( thisShip.floating );
    require( !thisShip.fishing );
    require( !thisShip.sailing );

    thisShip.sailing=true;
    thisShip.blockNumber=uint64(block.number);
    thisShip.direction=direction;

    emitShipUpdate(_x,_y,thisShip);
    return true;
  }


  //
  // drop anchor to stop the ship
  //
  function dropAnchor(uint16 _x, uint16 _y) public isGalleasset("Bay") returns (bool) {

    Ship thisShip = ships[_x][_y][msg.sender];

    require( thisShip.floating );
    require( thisShip.sailing );

    thisShip.location = shipLocation(_x,_y,msg.sender);
    thisShip.blockNumber = uint64(block.number);
    thisShip.sailing = false;

    emitShipUpdate(_x,_y,thisShip);
    return true;
  }

  //
  // bait the hook and cast the line
  //
  function castLine(uint16 _x, uint16 _y,bytes32 baitHash) public isGalleasset("Bay") returns (bool) {

    Ship thisShip = ships[_x][_y][msg.sender];

    require( thisShip.floating );
    require( !thisShip.sailing );
    require( !thisShip.fishing );

    thisShip.fishing = true;
    thisShip.blockNumber = uint64(block.number);
    thisShip.bait = baitHash;

    emitShipUpdate(_x,_y,thisShip);
    return true;
  }


  //
  //  try to catch a fish with your bait
  //
  function reelIn(uint16 _x, uint16 _y,bytes32 _fish, bytes32 _bait) public isGalleasset("Bay") returns (bool) {

    Ship thisShip = ships[_x][_y][msg.sender];

    require( thisShip.floating );
    require( thisShip.fishing );
    require( block.number > thisShip.blockNumber);//must be next block after so we have a new block hash
    if(_bait==0){
      //you can cut your line if you snag/lose your bait
      // (if you lose the original bait that was used to produce the baithash you send 0x0 to cut the line)
      thisShip.fishing = false;
      emitShipUpdate(_x,_y,thisShip);
      return false;
    }
    require( species[_x][_y][fish[_x][_y][_fish]] );//make sure fish exists and is valid species
    require( keccak256(_bait) == thisShip.bait);//make sure their off-chain bait == onchain hash

    thisShip.fishing = false;
    emitShipUpdate(_x,_y,thisShip);

    if(_catchFish(thisShip,_fish,_bait)){
      _doCatchFish(_x,_y,_fish);
      return true;
    }else{
      return false;
    }
  }
  event Catch(uint16 indexed _x, uint16 indexed _y,address account, bytes32 id, uint256 timestamp, address species);

  function _doCatchFish(uint16 _x, uint16 _y,bytes32 _fish) internal {
    assert( fish[_x][_y][_fish]!=address(0) );

    StandardToken thisFishContract = StandardToken(fish[_x][_y][_fish]);
    require( thisFishContract.transfer(msg.sender,1) );
    Catch(_x,_y,msg.sender,_fish,now,fish[_x][_y][_fish]);
    Fish(_x,_y,_fish, now, fish[_x][_y][_fish],thisFishContract.image());

    fish[_x][_y][_fish] = address(0);

    address experienceContractAddress = getContract("Experience");
    require( experienceContractAddress!=address(0) );
    Experience experienceContract = Experience(experienceContractAddress);
    experienceContract.update(msg.sender,2,true);//milestone 2: Catch a fish
  }



  // --------------------------------------------------------------------------- GETTERS

  function getShip(uint16 _x, uint16 _y,address _address) public constant returns (
    uint256 id,
    bool floating,
    bool sailing,
    bool direction,
    bool fishing,
    uint64 blockNumber,
    uint16 location
  ) {
    uint16 loc = shipLocation(_x,_y,_address);
    Ship thisShip = ships[_x][_y][_address];
    return(
      thisShip.id,
      thisShip.floating,
      thisShip.sailing,
      thisShip.direction,
      thisShip.fishing,
      thisShip.blockNumber,
      loc
    );
  }



  //
  // location of fish is based on their id
  //
  function fishLocation(bytes32 id) public constant returns(uint16,uint16) {
    bytes16[2] memory parts = [bytes16(0), 0];
        assembly {
            mstore(parts, id)
            mstore(add(parts, 16), id)
        }
    return (uint16(uint(parts[0]) % width),uint16(uint(parts[1]) % depth));
  }

  //
  // location of a moving ship is calculated based on blocks since it set sail
  //
  function shipLocation(uint16 _x, uint16 _y,address _owner) public constant returns (uint16) {

    Ship thisShip = ships[_x][_y][_owner];

    if(!thisShip.sailing){
      return thisShip.location;
    }else{
      uint256 blocksTraveled = block.number - thisShip.blockNumber;
      uint256 pixelsTraveled = blocksTraveled * shipSpeed;
      uint16 location;
      if( thisShip.direction ){
        location = thisShip.location + uint16(pixelsTraveled);
      } else {
        location = thisShip.location - uint16(pixelsTraveled);
      }
      return location;
    }
  }

  function inRangeToDisembark(uint16 _x, uint16 _y,address _account) public constant returns (bool) {
    //if it's not floating, no need to check
    if(ships[_x][_y][_account].location==0 || !ships[_x][_y][_account].floating) return false;
    //get the location of the harbor
    uint16 harborLocation = getHarborLocation(_x,_y);
    //check distance to harbor
    if(ships[_x][_y][_account].location >= harborLocation){
      return ((ships[_x][_y][_account].location-harborLocation) < 3000);
    }else{
      return ((harborLocation-ships[_x][_y][_account].location) < 3000);
    }
  }

  function getHarborLocation(uint16 _x, uint16 _y) public constant returns (uint16) {
    Land landContract = Land(getContract("Land"));
    //uint16 harborLocation = landContract.getTileLocation(landContract.mainX(),landContract.mainY(),getContract("Harbor"));
    uint16 harborLocation = landContract.getTileLocation(_x,_y,getContract("Harbor"));
    return uint16((65535 * uint256(harborLocation)) / 4000);
  }

  ///////////---------------------------------------------------------------------------------------


  //
  // get some psuedo random numbers to decided if they catch the fish
  // they need to be close and it's hard if the fish is deeper
  //
  function _catchFish(Ship thisShip,bytes32 _fish, bytes32 bait) internal returns (bool) {

    bytes32 catchHash = keccak256(bait,block.blockhash(thisShip.blockNumber));
    bytes32 depthHash = keccak256(bait,catchHash,block.blockhash(thisShip.blockNumber));
    uint randomishWidthNumber = uint16( uint(catchHash) % width/5 );
    uint depthPlus = depth;
    depthPlus+=depth/3;
    uint randomishDepthNumber =  uint(depthHash) % (depthPlus) ;

    uint16 fishx;
    uint16 fishy;
    (fishx,fishy) = fishLocation(_fish);

    uint16 distanceToFish = 0;
    if(thisShip.location > fishx){
      distanceToFish+=thisShip.location-fishx;
    }else{
      distanceToFish+=fishx-thisShip.location;
    }
    bool result = ( distanceToFish < randomishWidthNumber && fishy < randomishDepthNumber);
    Attempt(msg.sender,randomishWidthNumber, randomishDepthNumber, fishx, fishy, distanceToFish, result);
    return result;
  }
  event Attempt(address account,uint randomishWidthNumber,uint randomishDepthNumber,uint16 fishx,uint16 fishy,uint16 distanceToFish,bool result);
}

contract Land {
  uint16 public mainX;
  uint16 public mainY;
  function getTileLocation(uint16 _x,uint16 _y,address _address) public constant returns (uint16) { }
  function findTileByAddress(uint16 _x,uint16 _y,address _address) public constant returns (uint8) { }
}

contract NFT {
  function transferFrom(address _from,address _to,uint256 _tokenId) external { }
  function galleassetTransferFrom(address _from,address _to,uint256 _tokenId) external { }
  function ownerOf(uint256 _tokenId) external view returns (address owner) { }
}

contract StandardToken {
  bytes32 public image;
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { }
  function transfer(address _to, uint256 _value) public returns (bool) { }
}

contract Experience{
  function update(address _player,uint16 _milestone,bool _value) public returns (bool) { }
}

Contract ABI

[{"constant":false,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"},{"name":"_fish","type":"bytes32"},{"name":"_bait","type":"bytes32"}],"name":"reelIn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"},{"name":"_account","type":"address"}],"name":"inRangeToDisembark","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"galleass","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_galleass","type":"address"}],"name":"upgradeGalleass","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"},{"name":"baitHash","type":"bytes32"}],"name":"castLine","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"},{"name":"_address","type":"address"}],"name":"getShip","outputs":[{"name":"id","type":"uint256"},{"name":"floating","type":"bool"},{"name":"sailing","type":"bool"},{"name":"direction","type":"bool"},{"name":"fishing","type":"bool"},{"name":"blockNumber","type":"uint64"},{"name":"location","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"},{"name":"shipId","type":"uint256"}],"name":"embark","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"},{"name":"shipId","type":"uint256"}],"name":"disembark","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"},{"name":"_species","type":"address"},{"name":"_amount","type":"uint256"}],"name":"stock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"depth","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint16"},{"name":"","type":"uint16"},{"name":"","type":"address"}],"name":"species","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"}],"name":"dropAnchor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint16"},{"name":"","type":"uint16"},{"name":"","type":"address"}],"name":"ships","outputs":[{"name":"id","type":"uint256"},{"name":"floating","type":"bool"},{"name":"sailing","type":"bool"},{"name":"direction","type":"bool"},{"name":"fishing","type":"bool"},{"name":"blockNumber","type":"uint64"},{"name":"location","type":"uint16"},{"name":"bait","type":"bytes32"},{"name":"fish","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint16"},{"name":"","type":"uint16"},{"name":"","type":"bytes32"}],"name":"fish","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"width","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"},{"name":"_owner","type":"address"}],"name":"shipLocation","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"},{"name":"_species","type":"address"}],"name":"allowSpecies","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_contract","type":"address"},{"name":"_permission","type":"bytes32"}],"name":"hasPermission","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"shipSpeed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"bytes32"}],"name":"fishLocation","outputs":[{"name":"","type":"uint16"},{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"},{"name":"direction","type":"bool"}],"name":"setSail","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_name","type":"bytes32"}],"name":"getContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_x","type":"uint16"},{"name":"_y","type":"uint16"}],"name":"getHarborLocation","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_galleass","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"x","type":"uint16"},{"indexed":true,"name":"y","type":"uint16"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"floating","type":"bool"},{"indexed":false,"name":"sailing","type":"bool"},{"indexed":false,"name":"direction","type":"bool"},{"indexed":false,"name":"fishing","type":"bool"},{"indexed":false,"name":"blockNumber","type":"uint64"},{"indexed":false,"name":"location","type":"uint16"}],"name":"ShipUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"x","type":"uint16"},{"indexed":true,"name":"y","type":"uint16"},{"indexed":false,"name":"id","type":"bytes32"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"species","type":"address"},{"indexed":false,"name":"image","type":"bytes32"}],"name":"Fish","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_x","type":"uint16"},{"indexed":true,"name":"_y","type":"uint16"},{"indexed":false,"name":"account","type":"address"},{"indexed":false,"name":"id","type":"bytes32"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"species","type":"address"}],"name":"Catch","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"},{"indexed":false,"name":"randomishWidthNumber","type":"uint256"},{"indexed":false,"name":"randomishDepthNumber","type":"uint256"},{"indexed":false,"name":"fishx","type":"uint16"},{"indexed":false,"name":"fishy","type":"uint16"},{"indexed":false,"name":"distanceToFish","type":"uint16"},{"indexed":false,"name":"result","type":"bool"}],"name":"Attempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

Contract Creation Code

60806040526001805460b060020a61ffff021960a060020a61ffff021990911675ffff0000000000000000000000000000000000000000171677ffff000000000000000000000000000000000000000000001790556102006002556006805460ff1916905534801561007057600080fd5b50604051602080612b7e833981016040525160008054600160a060020a0319908116331790915560018054600160a060020a0390931692909116919091179055612abf806100bf6000396000f3006080604052600436106101455763ffffffff60e060020a6000350416631f9a08ca811461014a5780632aed256e146101865780632ce643f2146101b45780633319bf1a146101e557806337f4494b14610206578063437e17921461022b5780635c5dc9a0146102a1578063621c3275146102c6578063626c0a45146102eb578063631c56ef1461031c578063715018a61461034857806383ce6d481461035f5780638da5cb5b1461038d5780638de022b7146103a25780638f32d59b146103c457806395dd3a3a146103d95780639b846f1f1461045c5780639ededf77146104815780639f855bd514610496578063ae882cf1146104c4578063b0619e85146104f2578063b672494114610516578063bdab5fb01461053d578063d7e4e1f714610576578063e16c7d981461059d578063e16f374c146105b5578063f2fde38b146105d7575b600080fd5b34801561015657600080fd5b5061017261ffff600435811690602435166044356064356105f8565b604080519115158252519081900360200190f35b34801561019257600080fd5b5061017261ffff60043581169060243516600160a060020a03604435166109ab565b3480156101c057600080fd5b506101c9610b35565b60408051600160a060020a039092168252519081900360200190f35b3480156101f157600080fd5b50610172600160a060020a0360043516610b44565b34801561021257600080fd5b5061017261ffff60043581169060243516604435610b8e565b34801561023757600080fd5b5061025961ffff60043581169060243516600160a060020a0360443516610d77565b6040805197885295151560208801529315158686015291151560608601521515608085015267ffffffffffffffff1660a084015261ffff1660c0830152519081900360e00190f35b3480156102ad57600080fd5b5061017261ffff60043581169060243516604435610e17565b3480156102d257600080fd5b5061017261ffff60043581169060243516604435611205565b3480156102f757600080fd5b5061017261ffff60043581169060243516600160a060020a036044351660643561165f565b34801561032857600080fd5b50610331611a2d565b6040805161ffff9092168252519081900360200190f35b34801561035457600080fd5b5061035d611a51565b005b34801561036b57600080fd5b5061017261ffff60043581169060243516600160a060020a0360443516611ab9565b34801561039957600080fd5b506101c9611adf565b3480156103ae57600080fd5b5061017261ffff60043581169060243516611aee565b3480156103d057600080fd5b50610172611cdc565b3480156103e557600080fd5b5061040761ffff60043581169060243516600160a060020a0360443516611ced565b60408051998a5297151560208a0152951515888801529315156060880152911515608087015267ffffffffffffffff1660a086015261ffff1660c085015260e084015261010083015251908190036101200190f35b34801561046857600080fd5b506101c961ffff60043581169060243516604435611d65565b34801561048d57600080fd5b50610331611d91565b3480156104a257600080fd5b5061033161ffff60043581169060243516600160a060020a0360443516611db3565b3480156104d057600080fd5b5061017261ffff60043581169060243516600160a060020a0360443516611e7b565b3480156104fe57600080fd5b50610172600160a060020a0360043516602435611ee8565b34801561052257600080fd5b5061052b611f8f565b60408051918252519081900360200190f35b34801561054957600080fd5b50610555600435611f95565b6040805161ffff938416815291909216602082015281519081900390910190f35b34801561058257600080fd5b5061017261ffff600435811690602435166044351515612053565b3480156105a957600080fd5b506101c9600435612233565b3480156105c157600080fd5b5061033161ffff600435811690602435166122b9565b3480156105e357600080fd5b5061035d600160a060020a03600435166123bd565b6001546040805160e360020a631c2d8fb302815260e860020a6242617902600482018190529151600093849392600160a060020a0390911691829163e16c7d9891602480830192602092919082900301818987803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b5051600160a060020a0316301461069957600080fd5b61ffff8089166000908152600360209081526040808320938b168352928152828220338352905220600181015490935060ff1615156106d757600080fd5b60018301546301000000900460ff1615156106f157600080fd5b6001830154640100000000900467ffffffffffffffff16431161071357600080fd5b8415156107cc5760018301805463ff0000001981169182905560408051610120810182528654815260ff9283161515602082015261010080850484161515928201929092526201000084048316151560608201526301000000840490921615156080830152640100000000830467ffffffffffffffff1660a0830152606060020a90920461ffff1660c0820152600285015460e08201526003850154918101919091526107c390899089906123dc565b600093506109a0565b61ffff8089166000818152600560209081526040808320948c16808452948252808320938352600482528083209483529381528382208a8352815283822054600160a060020a0316825291909152205460ff16151561082a57600080fd5b60028301546040805187815290519081900360200190201461084b57600080fd5b60018301805463ff0000001981169182905560408051610120810182528654815260ff9283161515602082015261010080850484161515928201929092526201000084048316151560608201526301000000840490921615156080830152640100000000830467ffffffffffffffff1660a0830152606060020a90920461ffff1660c0820152600285015460e08201526003850154918101919091526108f490899089906123dc565b604080516101208101825284548152600185015460ff808216151560208401526101008083048216151594840194909452620100008204811615156060840152630100000082041615156080830152640100000000810467ffffffffffffffff1660a0830152606060020a900461ffff1660c0820152600285015460e082015260038501549181019190915261098b9087876124a7565b156107c35761099b88888861264a565b600193505b505050949350505050565b61ffff808416600090815260036020908152604080832086851684528252808320600160a060020a038616845290915281206001015490918291606060020a9004161580610a2e575061ffff80861660009081526003602090815260408083209388168352928152828220600160a060020a03871683529052206001015460ff16155b15610a3c5760009150610b2d565b610a4685856122b9565b61ffff868116600090815260036020908152604080832089851684528252808320600160a060020a0389168452909152902060010154919250808316606060020a9092041610610ae15761ffff808616600090815260036020908152604080832088851684528252808320600160a060020a0388168452909152902060010154610bb8606060020a9091048216839003909116109150610b2d565b61ffff808616600090815260036020908152604080832088851684528252808320600160a060020a0388168452909152902060010154610bb8606060020a909104821683039091161091505b509392505050565b600154600160a060020a031681565b600154600090600160a060020a03163314610b5e57600080fd5b5060018054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116178155919050565b6001546040805160e360020a631c2d8fb302815260e860020a6242617902600482018190529151600093849392600160a060020a0390911691829163e16c7d9891602480830192602092919082900301818987803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b505050506040513d6020811015610c1957600080fd5b5051600160a060020a03163014610c2f57600080fd5b61ffff8088166000908152600360209081526040808320938a168352928152828220338352905220600181015490935060ff161515610c6d57600080fd5b6001830154610100900460ff1615610c8457600080fd5b60018301546301000000900460ff1615610c9d57600080fd5b600183018054630100000063ff0000001990911681176bffffffffffffffff0000000019166401000000004367ffffffffffffffff908116820292909217938490556002870189905560408051610120810182528854815260ff8087161515602083015261010080880482161515938301939093526201000087048116151560608301529486049094161515608085015290840490911660a0830152606060020a90920461ffff1660c082015260e08101879052600385015491810191909152610d6a90889088906123dc565b5060019695505050505050565b6000806000806000806000806000610d908c8c8c611db3565b61ffff9c8d1660009081526003602090815260408083209e909f1682529c8d528d8120600160a060020a039c909c1681529a909b52505050979095208054600190910154909860ff808316995061010083048116986201000084048216985063010000008404909116965064010000000090920467ffffffffffffffff1694509092509050565b6001546040805160e360020a631c2d8fb302815260e860020a6242617902600482018190529151600093849384939092600160a060020a0390921691829163e16c7d9891602480830192602092919082900301818987803b158015610e7b57600080fd5b505af1158015610e8f573d6000803e3d6000fd5b505050506040513d6020811015610ea557600080fd5b5051600160a060020a03163014610ebb57600080fd5b61ffff8089166000908152600360209081526040808320938b1683529281528282203383529052206001015460ff1615610ef457600080fd5b610f1d7f446f676765720000000000000000000000000000000000000000000000000000612233565b935033600160a060020a031684600160a060020a0316636352211e886040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015610f7257600080fd5b505af1158015610f86573d6000803e3d6000fd5b505050506040513d6020811015610f9c57600080fd5b5051600160a060020a031614610fb157600080fd5b604080517f7a2a3931000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890529051600160a060020a03861691637a2a393191606480830192600092919082900301818387803b15801561101e57600080fd5b505af1158015611032573d6000803e3d6000fd5b5050505030600160a060020a031684600160a060020a0316636352211e886040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561108957600080fd5b505af115801561109d573d6000803e3d6000fd5b505050506040513d60208110156110b357600080fd5b5051600160a060020a0316146110c857600080fd5b61ffff8881166000908152600360209081526040808320938b1683529281528282203383529052208681556001808201805460ff191690911761ff0019169055925061111488886122b9565b6001840180546dffff0000000000000000000000001916606060020a61ffff9384168102919091176bffffffffffffffff0000000019166401000000004367ffffffffffffffff90811682029290921762ff00001981169485905560408051610120810182528a54815260ff928316151560208201526101008088048416151592820192909252620100008704831615156060820152630100000087049092161515608083015291850490921660a08301529190920490921660c0820152600285015460e08201526003850154918101919091526111f590899089906123dc565b600194505b505050509392505050565b6001546040805160e360020a631c2d8fb302815260e860020a62426179026004820181905291516000938493849384939192600160a060020a031691829163e16c7d9891602480830192602092919082900301818987803b15801561126957600080fd5b505af115801561127d573d6000803e3d6000fd5b505050506040513d602081101561129357600080fd5b5051600160a060020a031630146112a957600080fd5b61ffff808a166000908152600360209081526040808320938c1683529281528282203383529052205487146112dd57600080fd5b61ffff808a166000908152600360209081526040808320938c1683529281528282203383529052206001015460ff16151561131757600080fd5b6113228989336109ab565b151561132d57600080fd5b6113567f446f676765720000000000000000000000000000000000000000000000000000612233565b945030600160a060020a031685600160a060020a0316636352211e896040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1580156113ab57600080fd5b505af11580156113bf573d6000803e3d6000fd5b505050506040513d60208110156113d557600080fd5b5051600160a060020a0316146113ea57600080fd5b604080517f7a2a3931000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018990529051600160a060020a03871691637a2a393191606480830192600092919082900301818387803b15801561145757600080fd5b505af115801561146b573d6000803e3d6000fd5b5050505033600160a060020a031685600160a060020a0316636352211e896040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1580156114c257600080fd5b505af11580156114d6573d6000803e3d6000fd5b505050506040513d60208110156114ec57600080fd5b5051600160a060020a03161461150157600080fd5b61ffff89811660008181526003602090815260408083208d8616808552908352818420338086529084529382902080546001808301805461ffff191681556006805460ff19811660ff91821694850182161790915590548651848152426103e8029093019783019790975286811615158287015261010080880482161515606084015262010000880482161515608084015263010000008804909116151560a0830152640100000000870467ffffffffffffffff1660c0830152606060020a90960490981660e08901529251929a50985092949293927fe5a0a5907b99a3fd5ae3064a3fe4767982967bf77a1b30343609abbacae578de92908290030190a461ffff808a166000908152600360208181526040808420948d1684529381528383203384529052918120818155600180820180546dffffffffffffffffffffffffffff1916905560028201839055920155955050505050509392505050565b6001546040805160e360020a631c2d8fb302815260e860020a6242617902600482018190529151600093849384939092600160a060020a0390921691829163e16c7d9891602480830192602092919082900301818987803b1580156116c357600080fd5b505af11580156116d7573d6000803e3d6000fd5b505050506040513d60208110156116ed57600080fd5b5051600160a060020a0316301461170357600080fd5b600160a060020a038716151561171857600080fd5b61ffff808a166000908152600560209081526040808320938c168352928152828220600160a060020a038b1683529052205460ff16151561175857600080fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890529051889550600160a060020a038616916323b872dd9160648083019260209291908290030181600087803b1580156117c957600080fd5b505af11580156117dd573d6000803e3d6000fd5b505050506040513d60208110156117f357600080fd5b5051151561180057600080fd5b60001986019560001015611a1e57600780546001810190915560408051918252600019430140602080840191909152606060020a33028383015281519283900360540190922061ffff808d16600090815260048552838120918d168152908452828120828252909352912054909350600160a060020a03161561188257600080fd5b86600460008b61ffff1661ffff16815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000206000856000191660001916815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a031602179055508761ffff168961ffff167f0f0a339631c4dda1b25b03990e7c227db1efe48caf64efea6f1d04d8e67c133a8542600460008f61ffff1661ffff16815260200190815260200160002060008e61ffff1661ffff1681526020019081526020016000206000896000191660001916815260200190815260200160002060009054906101000a9004600160a060020a031689600160a060020a031663f3ccaac06040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156119c057600080fd5b505af11580156119d4573d6000803e3d6000fd5b505050506040513d60208110156119ea57600080fd5b5051604080519485526020850193909352600160a060020a03909116838301526060830152519081900360800190a3611800565b50600198975050505050505050565b600154760100000000000000000000000000000000000000000000900461ffff1681565b611a59611cdc565b1515611a6457600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600560209081526000938452604080852082529284528284209052825290205460ff1681565b600054600160a060020a031690565b6001546040805160e360020a631c2d8fb302815260e860020a6242617902600482018190529151600093849392600160a060020a0390911691829163e16c7d9891602480830192602092919082900301818987803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b505050506040513d6020811015611b7957600080fd5b5051600160a060020a03163014611b8f57600080fd5b61ffff80871660009081526003602090815260408083209389168352928152828220338352905220600181015490935060ff161515611bcd57600080fd5b6001830154610100900460ff161515611be557600080fd5b611bf0868633611db3565b6001840180546dffff0000000000000000000000001916606060020a61ffff9384168102919091176bffffffffffffffff0000000019166401000000004367ffffffffffffffff90811682029290921761ff001981169485905560408051610120810182528a54815260ff928316151560208201526101008088048416151592820192909252620100008704831615156060820152630100000087049092161515608083015291850490921660a08301529190920490921660c0820152600285015460e0820152600385015491810191909152611cd090879087906123dc565b50600195945050505050565b600054600160a060020a0316331490565b60036020818152600094855260408086208252938552838520905290835291208054600182015460028301549290930154909260ff8082169361010083048216936201000084048316936301000000810490931692640100000000810467ffffffffffffffff1692606060020a90910461ffff169189565b6004602090815260009384526040808520825292845282842090528252902054600160a060020a031681565b60015474010000000000000000000000000000000000000000900461ffff1681565b61ffff83811660009081526003602090815260408083209386168352928152828220600160a060020a038516835290529081206001810154829081908190610100900460ff161515611e16576001840154606060020a900461ffff1694506111fa565b6001840154600254640100000000820467ffffffffffffffff16430394508402925062010000900460ff1615611e5e57506001830154606060020a900461ffff168101611e73565b506001830154606060020a900461ffff168190035b8094506111fa565b6000611e85611cdc565b1515611e9057600080fd5b600160a060020a0382161515611ea257fe5b61ffff9384166000908152600560209081526040808320959096168252938452848120600160a060020a0390931681529190925291909120805460ff1916600117905590565b600154604080517fb0619e85000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301526024820185905291516000939290921691829163b0619e8591604480830192602092919082900301818887803b158015611f5b57600080fd5b505af1158015611f6f573d6000803e3d6000fd5b505050506040513d6020811015611f8557600080fd5b5051949350505050565b60025481565b600080611fa0612a78565b5060408051808201909152600060208201528381526010810184905260015481517401000000000000000000000000000000000000000090910461ffff16907001000000000000000000000000000000009004811515611ffc57fe5b600180549290910691760100000000000000000000000000000000000000000000900461ffff169083906020020151700100000000000000000000000000000000900481151561204857fe5b069250925050915091565b6001546040805160e360020a631c2d8fb302815260e860020a6242617902600482018190529151600093849392600160a060020a0390911691829163e16c7d9891602480830192602092919082900301818987803b1580156120b457600080fd5b505af11580156120c8573d6000803e3d6000fd5b505050506040513d60208110156120de57600080fd5b5051600160a060020a031630146120f457600080fd5b61ffff8088166000908152600360209081526040808320938a168352928152828220338352905220600181015490935060ff16151561213257600080fd5b60018301546301000000900460ff161561214b57600080fd5b6001830154610100900460ff161561216257600080fd5b60018301805461010061ff001990911681176bffffffffffffffff0000000019166401000000004367ffffffffffffffff90811682029290921762ff00001916620100008a15158102919091179485905560408051610120810182528954815260ff80881615156020830152868804811615159282019290925291860481161515606083015263010000008604161515608082015290840490911660a0820152606060020a90920461ffff1660c0830152600285015460e0830152600385015490820152610d6a90889088906123dc565b6001546040805160e360020a631c2d8fb3028152600481018490529051600092600160a060020a031691829163e16c7d989160248082019260209290919082900301818887803b15801561228657600080fd5b505af115801561229a573d6000803e3d6000fd5b505050506040513d60208110156122b057600080fd5b50519392505050565b60008060006122e77f4c616e6400000000000000000000000000000000000000000000000000000000612233565b915081600160a060020a0316639171526586866123237f486172626f720000000000000000000000000000000000000000000000000000612233565b6040805160e060020a63ffffffff871602815261ffff9485166004820152929093166024830152600160a060020a03166044820152905160648083019260209291908290030181600087803b15801561237b57600080fd5b505af115801561238f573d6000803e3d6000fd5b505050506040513d60208110156123a557600080fd5b50519050610fa061ffff808316020495945050505050565b6123c5611cdc565b15156123d057600080fd5b6123d9816129fb565b50565b80516006805460ff198116600160ff928316908101909216179091556020808401516040808601516060808801516080808a015160a0808c015160c0808e015189519d8e52426103e802909c019a8d019a909a529715158b880152941515938a01939093529015159088015215159086015267ffffffffffffffff9091169184019190915261ffff91821660e0840152513392858316928716917fe5a0a5907b99a3fd5ae3064a3fe4767982967bf77a1b30343609abbacae578de91610100908290030190a4505050565b60a0830180516040805184815267ffffffffffffffff928316406020808301919091528251918290038301822094518683529082018590529092164082820152519081900360600190206001546000929190839081908190819081908190819060059061ffff74010000000000000000000000000000000000000000909104168a81151561253157fe5b0681151561253b57fe5b60015491900461ffff90811698506003760100000000000000000000000000000000000000000000909204811691820416019550858881151561257a57fe5b0694506125868c611f95565b60c08f015191955093506000925061ffff808616911611156125b257838d60c0015103820191506125be565b8c60c001518403820191505b868261ffff161080156125d45750848361ffff16105b60408051338152602081018a905280820188905261ffff80881660608301528087166080830152851660a082015282151560c082015290519192507f349254c09cc1880065eb2d805e5567666043c8ac43a5ba67502b8fe52d17ce30919081900360e00190a19c9b505050505050505050505050565b61ffff8084166000908152600460209081526040808320938616835292815282822084835290529081205481908190600160a060020a0316151561268a57fe5b61ffff8087166000908152600460208181526040808420948a16845293815283832088845281528383205484517fa9059cbb0000000000000000000000000000000000000000000000000000000081523393810193909352600160248401529351600160a060020a039094169650869363a9059cbb936044808501948390030190829087803b15801561271c57600080fd5b505af1158015612730573d6000803e3d6000fd5b505050506040513d602081101561274657600080fd5b5051151561275357600080fd5b61ffff8681166000818152600460209081526040808320948a168084529482528083208984528252918290205482513381529182018990524282840152600160a060020a0316606082015290517f72695e86204ab0cf532a6ffb137573bb51ddc5351c77bfbf2eaabf945d22f5429181900360800190a361ffff8681166000818152600460208181526040808420958b168085529582528084208a855282528084205481517ff3ccaac000000000000000000000000000000000000000000000000000000000815291517f0f0a339631c4dda1b25b03990e7c227db1efe48caf64efea6f1d04d8e67c133a958c954295600160a060020a0394851695948e169463f3ccaac0948184019492939092918390030190829087803b15801561287857600080fd5b505af115801561288c573d6000803e3d6000fd5b505050506040513d60208110156128a257600080fd5b5051604080519485526020850193909352600160a060020a03909116838301526060830152519081900360800190a361ffff80871660009081526004602090815260408083209389168352928152828220878352905220805473ffffffffffffffffffffffffffffffffffffffff1916905561293d7f457870657269656e636500000000000000000000000000000000000000000000612233565b9150600160a060020a038216151561295457600080fd5b50604080517f2d578304000000000000000000000000000000000000000000000000000000008152336004820152600260248201526001604482015290518291600160a060020a03831691632d578304916064808201926020929091908290030181600087803b1580156129c757600080fd5b505af11580156129db573d6000803e3d6000fd5b505050506040513d60208110156129f157600080fd5b5050505050505050565b600160a060020a0381161515612a1057600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604080518082018252906002908290803883395091929150505600a165627a7a72305820539bdb72f05137cf84c7b8d102b74909b09cb773fce39c8d8da633090969bef80029000000000000000000000000d5a48a1f9f6f6d558ac9c7ba97bb63b83f919105

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d5a48a1f9f6f6d558ac9c7ba97bb63b83f919105

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d5a48a1f9f6f6d558ac9c7ba97bb63b83f919105

Swarm Source

bzzr://539bdb72f05137cf84c7b8d102b74909b09cb773fce39c8d8da633090969bef8
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward