Contract 0xA6Ff73743B2FD8deDFACEa4067a51ef86d249491

 
Txn Hash Method
Block
From
To
Value
0x51760ab74e78402c064845abeec656373f5060bbb95d658c555e353f6212b0f3Buy Egg65171922018-10-15 2:49:53982 days 9 hrs ago0xd0ceec6046fc1ed1479853ed0d0b5b24292fbe9f IN  Etheremon: Transform 20.09 Ether0.0000222091
0xb11ac5e1f56912d6b9041eeecb3b37f33b0e8ebc894ac7b62759d9245d443628Buy Egg65171922018-10-15 2:49:53982 days 9 hrs ago0xd0ceec6046fc1ed1479853ed0d0b5b24292fbe9f IN  Etheremon: Transform 20.09 Ether0.0000222091
0x4df0425e0da001ed23ed5e64b0a3365c6cb5265ae9a600f21a1c54820b82362cUpdate Maintaini...64682192018-10-07 4:24:08990 days 8 hrs agoEtheremonToken: Deployer 1 IN  Etheremon: Transform 20 Ether0.00035747413
0xa884f5ea073a05c5baaf24d9c37031df0cb5fdc2cf79ed9832d7d2eb7e5de4aaWithdraw Ether64682142018-10-07 4:22:46990 days 8 hrs agoEtheremonToken: Deployer 1 IN  Etheremon: Transform 20 Ether0.00041882113
0x05896c500fd73ec638052c4c6019a6cede93bb4614b2dbdd0aa2663624f6e1ceHatch Egg64608592018-10-05 23:57:27991 days 12 hrs ago0xfc12d884e4ab95dcbb50fb984aa180eacd74a303 IN  Etheremon: Transform 20 Ether0.00000466690.1
0xb80e73a104dc9f6eec8fa34df84040224f5e95906f732861d23890aa95bcae0dBuy Egg64603752018-10-05 22:06:27991 days 14 hrs ago0xac407cea82c3cde4073ab66c73521d5427c1c133 IN  Etheremon: Transform 20.09 Ether0.0002750522
0x270d01d8fd03ec556b0ef6dfc0caa1d9b9a8399d803833b7ea9b5ea63391d397Hatch Egg62407862018-08-30 13:19:511027 days 23 hrs ago0x773cd61af29fc0ec27141bdb9c077b125a421885 IN  Etheremon: Transform 20 Ether0.0001350513
0x2dd661a9b29c22a7082bdf2f70f91cf5470aaac05ee5648c60008f44269c9bd7Hatch Egg62407672018-08-30 13:15:421027 days 23 hrs ago0x0aa6920041e5111c464d9aa5cd736d1867342813 IN  Etheremon: Transform 20 Ether0.00014855613.3
0xb841c4b68ad53f49ba191776c130a3f4f6c791f179e08441771f28139ebebfa9Hatch Egg62407672018-08-30 13:15:421027 days 23 hrs ago0x69aae7a2969d5ef1a6521ed2f2cc68b9d16360b3 IN  Etheremon: Transform 20 Ether0.00014855613.3
0xdb37f720cb5dfa46ec5713a218b546afffdd4b8e1682de41d17d735a9b124257Hatch Egg62390512018-08-30 5:57:541028 days 6 hrs ago0x7ca3b2c45e56dad79c8ba5eaf4216bf666f0b820 IN  Etheremon: Transform 20 Ether0.0000900342
0x8482f80ed411f2d93981d7e997a712b79fcf1700fe315f55695e1d4dfcbdf56aLay Egg62380812018-08-30 2:06:191028 days 10 hrs ago0x30b572a3850b9835f4deec7ba31a46c489f42cc4 IN  Etheremon: Transform 20 Ether0.00055178883.2
0x6bb503682183b52dd279327dbf9bed9f1a643f2d6f7f7eb47c5dcc5f2fc63b5cLay Egg62379832018-08-30 1:42:521028 days 10 hrs ago0x1e98ecec748c09ad41e92cae60c46bc1923117fb IN  Etheremon: Transform 20 Ether0.00055178883.2
0xca1e5136d4ef80e5c58c11a5c70327c4a14a793f166d828d1efe88abb0d8826cLay Egg62379562018-08-30 1:34:301028 days 10 hrs ago0x7ea3fe92a0eef03d366a9c95a15325e43bd496e8 IN  Etheremon: Transform 20 Ether0.00055178883.2
0x2c26e67eb3be5c230a086329dbf510757a8ad09ba12ec1665489e4b4d87048f0Lay Egg62379532018-08-30 1:33:481028 days 10 hrs ago0x1e4ba1c437d4ea8125c1b1eb020de752d2229a39 IN  Etheremon: Transform 20 Ether0.00055178883.2
0x6953342dca28c9c745088852f93891cd56487acfd3859f949512b911a5365fa6Lay Egg62378992018-08-30 1:23:551028 days 11 hrs ago0x995216b67a0edcaa03dcdf1dff5b5a48e7fab476 IN  Etheremon: Transform 20 Ether0.00056903223.3
0xacc7359bdb9caf22b0e46d22f474761dc62697350a4948f04a05252dc67624deLay Egg62378662018-08-30 1:15:461028 days 11 hrs ago0x8bfab81f1c8242203ef905a9e224e59e0e5e9f9a IN  Etheremon: Transform 20 Ether0.00059962883.2
0xf2f2556529f303dc0fa3a092cc599d57b42b048dd550df1dc76c5ece15546339Lay Egg62378352018-08-30 1:08:431028 days 11 hrs ago0x773cd61af29fc0ec27141bdb9c077b125a421885 IN  Etheremon: Transform 20 Ether0.0005517763.2
0x6226dc11f6a5ff37aa2fcfd6ea8fd00e972eeb37b0188d1de549f321c4df38a3Lay Egg62377682018-08-30 0:52:321028 days 11 hrs ago0x0aa6920041e5111c464d9aa5cd736d1867342813 IN  Etheremon: Transform 20 Ether0.00055180163.2
0x69612282719edf102468135855435fba4d48d02ad9056bb8015f3df1709ee3b2Lay Egg62377112018-08-30 0:40:311028 days 11 hrs ago0x366d6a62acee51f70c9b6b6d8574d7e21ee43a23 IN  Etheremon: Transform 20 Ether0.00059962883.2
0xcd048bb22081b7b8959f6b2599af55238ef3e534dc0ea7a58d982da23018124aLay Egg62376582018-08-30 0:28:571028 days 11 hrs ago0x11b67a27127a22546bfcaf69966a4c8d1d18b51c IN  Etheremon: Transform 20 Ether0.00055178883.2
0xcde67bc6a1f4a66d76b18d6b4467ec3a86e1c056a69aaf65e2c1b2a96ce25e49Hatch Egg62375742018-08-30 0:11:391028 days 12 hrs ago0x835ea455d21625b87353e74066dbd1dd7f3a869b IN  Etheremon: Transform 20 Ether0.00092232.5
0x8e88121ea1faf328aabffbdeb0544cc389cc82c8260a402a2f4f0fc12a5c2f3aHatch Egg62375042018-08-29 23:51:521028 days 12 hrs ago0xf8856124ea157d6f26472e38224ee6744ad13af3 IN  Etheremon: Transform 20 Ether0.0008242
0xb9840a49525999a96541956d74c00f93f7efe231aa53079b6bf496c95661ff32Lay Egg62373652018-08-29 23:17:591028 days 13 hrs ago0x69aae7a2969d5ef1a6521ed2f2cc68b9d16360b3 IN  Etheremon: Transform 20 Ether0.0005173023
0x5a372bff6732c42150905a538e1258ece72d43f0aba8ba31b58467920fd9e7d2Hatch Egg62373622018-08-29 23:16:361028 days 13 hrs ago0x9a81d4da7d0147f0163e4ecf95f67678c40a26a5 IN  Etheremon: Transform 20 Ether0.00075804262.03
0x1cc439b3a36192b6e40839e0331ca003840169d4d6addd1bb40978c35427d35eHatch Egg62373402018-08-29 23:12:301028 days 13 hrs ago0xe0f8896f7704d86b8c5257e212c5957953907212 IN  Etheremon: Transform 20 Ether0.00111483
[ Download CSV Export 
Latest 6 internal transactions
Parent Txn Hash Block From To Value
0xa884f5ea073a05c5baaf24d9c37031df0cb5fdc2cf79ed9832d7d2eb7e5de4aa64682142018-10-07 4:22:46990 days 8 hrs ago Etheremon: Transform 20xf35728a27318156ae04ba8a6dff8074fe98b19b81.63 Ether
0xe8860894b715a938f30ac65663f2f9f75cc919b0417accdc938e84c7d0f5093b60726972018-08-02 3:23:191056 days 9 hrs ago Etheremon: Transform 20xf35728a27318156ae04ba8a6dff8074fe98b19b819.63 Ether
0xa2e872814f549d392f78ca3768404f829edbdbfc0bd80ddd2def717640df141d53866282018-04-05 18:59:331174 days 17 hrs ago 0xdd38296a1592f06312d3ca3599057a403cb76b0b Etheremon: Transform 20.09 Ether
0x6e9bc70f3e972c387a85d437214f16c67156e0cb67a43ff906d81d3ca080fc9e53866252018-04-05 18:58:491174 days 17 hrs ago 0xdd38296a1592f06312d3ca3599057a403cb76b0b Etheremon: Transform 20.09 Ether
0xdcf6453e55c23042ae6c24b09f9211cd21e091fa076813f3cdd7e510671cf47353556412018-03-31 15:29:501179 days 20 hrs ago 0xdd38296a1592f06312d3ca3599057a403cb76b0b Etheremon: Transform 20.05 Ether
0x4497fe1f42aebdc124d5aa20490ff635774e1343dc04ad5c24d5746caa3a93c253543222018-03-31 10:31:151180 days 1 hr ago Etheremon: Transform 20xd3b6d520906bb14c0eab0faf7a8b13fe31f8cbda0.65 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtheremonTransform

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-03-25
*/

pragma solidity ^0.4.16;

// copyright [email protected]

contract SafeMath {

    /* function assert(bool assertion) internal { */
    /*   if (!assertion) { */
    /*     throw; */
    /*   } */
    /* }      // assert no longer needed once solidity is on 0.4.10 */

    function safeAdd(uint256 x, uint256 y) pure internal returns(uint256) {
      uint256 z = x + y;
      assert((z >= x) && (z >= y));
      return z;
    }

    function safeSubtract(uint256 x, uint256 y) pure internal returns(uint256) {
      assert(x >= y);
      uint256 z = x - y;
      return z;
    }

    function safeMult(uint256 x, uint256 y) pure internal returns(uint256) {
      uint256 z = x * y;
      assert((x == 0)||(z/x == y));
      return z;
    }

}

contract BasicAccessControl {
    address public owner;
    // address[] public moderators;
    uint16 public totalModerators = 0;
    mapping (address => bool) public moderators;
    bool public isMaintaining = false;

    function BasicAccessControl() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    modifier onlyModerators() {
        require(msg.sender == owner || moderators[msg.sender] == true);
        _;
    }

    modifier isActive {
        require(!isMaintaining);
        _;
    }

    function ChangeOwner(address _newOwner) onlyOwner public {
        if (_newOwner != address(0)) {
            owner = _newOwner;
        }
    }


    function AddModerator(address _newModerator) onlyOwner public {
        if (moderators[_newModerator] == false) {
            moderators[_newModerator] = true;
            totalModerators += 1;
        }
    }
    
    function RemoveModerator(address _oldModerator) onlyOwner public {
        if (moderators[_oldModerator] == true) {
            moderators[_oldModerator] = false;
            totalModerators -= 1;
        }
    }

    function UpdateMaintaining(bool _isMaintaining) onlyOwner public {
        isMaintaining = _isMaintaining;
    }
}

contract EtheremonEnum {

    enum ResultCode {
        SUCCESS,
        ERROR_CLASS_NOT_FOUND,
        ERROR_LOW_BALANCE,
        ERROR_SEND_FAIL,
        ERROR_NOT_TRAINER,
        ERROR_NOT_ENOUGH_MONEY,
        ERROR_INVALID_AMOUNT,
        ERROR_OBJ_NOT_FOUND,
        ERROR_OBJ_INVALID_OWNERSHIP
    }
    
    enum ArrayType {
        CLASS_TYPE,
        STAT_STEP,
        STAT_START,
        STAT_BASE,
        OBJ_SKILL
    }
    
    enum PropertyType {
        ANCESTOR,
        XFACTOR
    }
}

contract EtheremonDataBase is EtheremonEnum, BasicAccessControl, SafeMath {
    
    uint64 public totalMonster;
    uint32 public totalClass;
    
    // write
    function addElementToArrayType(ArrayType _type, uint64 _id, uint8 _value) onlyModerators public returns(uint);
    function removeElementOfArrayType(ArrayType _type, uint64 _id, uint8 _value) onlyModerators public returns(uint);
    function setMonsterClass(uint32 _classId, uint256 _price, uint256 _returnPrice, bool _catchable) onlyModerators public returns(uint32);
    function addMonsterObj(uint32 _classId, address _trainer, string _name) onlyModerators public returns(uint64);
    function setMonsterObj(uint64 _objId, string _name, uint32 _exp, uint32 _createIndex, uint32 _lastClaimIndex) onlyModerators public;
    function increaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public;
    function decreaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public;
    function removeMonsterIdMapping(address _trainer, uint64 _monsterId) onlyModerators public;
    function addMonsterIdMapping(address _trainer, uint64 _monsterId) onlyModerators public;
    function clearMonsterReturnBalance(uint64 _monsterId) onlyModerators public returns(uint256 amount);
    function collectAllReturnBalance(address _trainer) onlyModerators public returns(uint256 amount);
    function transferMonster(address _from, address _to, uint64 _monsterId) onlyModerators public returns(ResultCode);
    function addExtraBalance(address _trainer, uint256 _amount) onlyModerators public returns(uint256);
    function deductExtraBalance(address _trainer, uint256 _amount) onlyModerators public returns(uint256);
    function setExtraBalance(address _trainer, uint256 _amount) onlyModerators public;
    
    // read
    function getSizeArrayType(ArrayType _type, uint64 _id) constant public returns(uint);
    function getElementInArrayType(ArrayType _type, uint64 _id, uint _index) constant public returns(uint8);
    function getMonsterClass(uint32 _classId) constant public returns(uint32 classId, uint256 price, uint256 returnPrice, uint32 total, bool catchable);
    function getMonsterObj(uint64 _objId) constant public returns(uint64 objId, uint32 classId, address trainer, uint32 exp, uint32 createIndex, uint32 lastClaimIndex, uint createTime);
    function getMonsterName(uint64 _objId) constant public returns(string name);
    function getExtraBalance(address _trainer) constant public returns(uint256);
    function getMonsterDexSize(address _trainer) constant public returns(uint);
    function getMonsterObjId(address _trainer, uint index) constant public returns(uint64);
    function getExpectedBalance(address _trainer) constant public returns(uint256);
    function getMonsterReturn(uint64 _objId) constant public returns(uint256 current, uint256 total);
}

contract EtheremonTransformData {
    uint64 public totalEgg = 0;
    function getHatchingEggId(address _trainer) constant external returns(uint64);
    function getHatchingEggData(address _trainer) constant external returns(uint64, uint64, uint32, address, uint, uint64);
    function getTranformedId(uint64 _objId) constant external returns(uint64);
    function countEgg(uint64 _objId) constant external returns(uint);
    
    function setHatchTime(uint64 _eggId, uint _hatchTime) external;
    function setHatchedEgg(uint64 _eggId, uint64 _newObjId) external;
    function addEgg(uint64 _objId, uint32 _classId, address _trainer, uint _hatchTime) external returns(uint64);
    function setTranformed(uint64 _objId, uint64 _newObjId) external;
}

contract EtheremonWorld is EtheremonEnum {
    
    function getGen0COnfig(uint32 _classId) constant public returns(uint32, uint256, uint32);
    function getTrainerEarn(address _trainer) constant public returns(uint256);
    function getReturnFromMonster(uint64 _objId) constant public returns(uint256 current, uint256 total);
    function getClassPropertyValue(uint32 _classId, PropertyType _type, uint index) constant external returns(uint32);
    function getClassPropertySize(uint32 _classId, PropertyType _type) constant external returns(uint);
}

interface EtheremonBattle {
    function isOnBattle(uint64 _objId) constant external returns(bool);
    function getMonsterLevel(uint64 _objId) constant public returns(uint8);
}

interface EtheremonTradeInterface {
    function isOnTrading(uint64 _objId) constant external returns(bool);
}

contract EtheremonTransform is EtheremonEnum, BasicAccessControl, SafeMath {
    uint8 constant public STAT_COUNT = 6;
    uint8 constant public STAT_MAX = 32;
    uint8 constant public GEN0_NO = 24;
    
    struct MonsterClassAcc {
        uint32 classId;
        uint256 price;
        uint256 returnPrice;
        uint32 total;
        bool catchable;
    }

    struct MonsterObjAcc {
        uint64 monsterId;
        uint32 classId;
        address trainer;
        string name;
        uint32 exp;
        uint32 createIndex;
        uint32 lastClaimIndex;
        uint createTime;
    }
    
    struct MonsterEgg {
        uint64 eggId;
        uint64 objId;
        uint32 classId;
        address trainer;
        uint hatchTime;
        uint64 newObjId;
    }
    
    struct BasicObjInfo {
        uint32 classId;
        address owner;
        uint8 level;
    }
    
    // Gen0 has return price & no longer can be caught when this contract is deployed
    struct Gen0Config {
        uint32 classId;
        uint256 originalPrice;
        uint256 returnPrice;
        uint32 total; // total caught (not count those from eggs)
    }
    
    // hatching range
    uint16 public hatchStartTime = 2; // hour
    uint16 public hatchMaxTime = 46; // hour
    uint public removeHatchingTimeFee = 0.05 ether; // ETH
    uint public buyEggFee = 0.06 ether; // ETH
    
    uint32[] public randomClassIds;
    mapping(uint32 => uint8) public layingEggLevels;
    mapping(uint32 => uint8) public layingEggDeductions;
    mapping(uint32 => uint8) public transformLevels;
    mapping(uint32 => uint32) public transformClasses;

    mapping(uint8 => uint32) public levelExps;
    address private lastHatchingAddress;
    
    mapping(uint32 => Gen0Config) public gen0Config;
    
    // linked smart contract
    address public dataContract;
    address public worldContract;
    address public transformDataContract;
    address public battleContract;
    address public tradeContract;
    
    // events
    event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
    event EventLayEgg(address indexed trainer, uint64 objId, uint64 eggId);
    
    // modifier
    
    modifier requireDataContract {
        require(dataContract != address(0));
        _;
    }
    
    modifier requireTransformDataContract {
        require(transformDataContract != address(0));
        _;
    }
    
    modifier requireBattleContract {
        require(battleContract != address(0));
        _;
    }
    
    modifier requireTradeContract {
        require(tradeContract != address(0));
        _;        
    }
    
    
    // constructor
    function EtheremonTransform(address _dataContract, address _worldContract, address _transformDataContract, address _battleContract, address _tradeContract) public {
        dataContract = _dataContract;
        worldContract = _worldContract;
        transformDataContract = _transformDataContract;
        battleContract = _battleContract;
        tradeContract = _tradeContract;
    }
    
    // helper
    function getRandom(uint16 maxRan, uint8 index, address priAddress) constant public returns(uint8) {
        uint256 genNum = uint256(block.blockhash(block.number-1)) + uint256(priAddress);
        for (uint8 i = 0; i < index && i < 6; i ++) {
            genNum /= 256;
        }
        return uint8(genNum % maxRan);
    }
    
    function addNewObj(address _trainer, uint32 _classId) private returns(uint64) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        uint64 objId = data.addMonsterObj(_classId, _trainer, "..name me...");
        for (uint i=0; i < STAT_COUNT; i+= 1) {
            uint8 value = getRandom(STAT_MAX, uint8(i), lastHatchingAddress) + data.getElementInArrayType(ArrayType.STAT_START, uint64(_classId), i);
            data.addElementToArrayType(ArrayType.STAT_BASE, objId, value);
        }
        return objId;
    }
    
    // admin & moderators
    function setContract(address _dataContract, address _worldContract, address _transformDataContract, address _battleContract, address _tradeContract) onlyModerators external {
        dataContract = _dataContract;
        worldContract = _worldContract;
        transformDataContract = _transformDataContract;
        battleContract = _battleContract;
        tradeContract = _tradeContract;
    }

    function setOriginalPriceGen0() onlyModerators external {
        gen0Config[1] = Gen0Config(1, 0.3 ether, 0.003 ether, 374);
        gen0Config[2] = Gen0Config(2, 0.3 ether, 0.003 ether, 408);
        gen0Config[3] = Gen0Config(3, 0.3 ether, 0.003 ether, 373);
        gen0Config[4] = Gen0Config(4, 0.2 ether, 0.002 ether, 437);
        gen0Config[5] = Gen0Config(5, 0.1 ether, 0.001 ether, 497);
        gen0Config[6] = Gen0Config(6, 0.3 ether, 0.003 ether, 380); 
        gen0Config[7] = Gen0Config(7, 0.2 ether, 0.002 ether, 345);
        gen0Config[8] = Gen0Config(8, 0.1 ether, 0.001 ether, 518); 
        gen0Config[9] = Gen0Config(9, 0.1 ether, 0.001 ether, 447);
        gen0Config[10] = Gen0Config(10, 0.2 ether, 0.002 ether, 380); 
        gen0Config[11] = Gen0Config(11, 0.2 ether, 0.002 ether, 354);
        gen0Config[12] = Gen0Config(12, 0.2 ether, 0.002 ether, 346);
        gen0Config[13] = Gen0Config(13, 0.2 ether, 0.002 ether, 351); 
        gen0Config[14] = Gen0Config(14, 0.2 ether, 0.002 ether, 338);
        gen0Config[15] = Gen0Config(15, 0.2 ether, 0.002 ether, 341);
        gen0Config[16] = Gen0Config(16, 0.35 ether, 0.0035 ether, 384);
        gen0Config[17] = Gen0Config(17, 1 ether, 0.01 ether, 305); 
        gen0Config[18] = Gen0Config(18, 0.1 ether, 0.001 ether, 427);
        gen0Config[19] = Gen0Config(19, 1 ether, 0.01 ether, 304);
        gen0Config[20] = Gen0Config(20, 0.4 ether, 0.05 ether, 82);
        gen0Config[21] = Gen0Config(21, 1, 1, 123);
        gen0Config[22] = Gen0Config(22, 0.2 ether, 0.001 ether, 468);
        gen0Config[23] = Gen0Config(23, 0.5 ether, 0.0025 ether, 302);
        gen0Config[24] = Gen0Config(24, 1 ether, 0.005 ether, 195);
    }    

    function updateHatchingRange(uint16 _start, uint16 _max) onlyModerators external {
        hatchStartTime = _start;
        hatchMaxTime = _max;
    }

    function withdrawEther(address _sendTo, uint _amount) onlyModerators external {
        // no user money is kept in this contract, only trasaction fee
        if (_amount > this.balance) {
            revert();
        }
        _sendTo.transfer(_amount);
    }

    function setConfigClass(uint32 _classId, uint8 _layingLevel, uint8 _layingCost, uint8 _transformLevel, uint32 _tranformClass) onlyModerators external {
        layingEggLevels[_classId] = _layingLevel;
        layingEggDeductions[_classId] = _layingCost;
        transformLevels[_classId] = _transformLevel;
        transformClasses[_classId] = _tranformClass;
    }
    
    function setConfig(uint _removeHatchingTimeFee, uint _buyEggFee) onlyModerators external {
        removeHatchingTimeFee = _removeHatchingTimeFee;
        buyEggFee = _buyEggFee;
    }

    function genLevelExp() onlyModerators external {
        uint8 level = 1;
        uint32 requirement = 100;
        uint32 sum = requirement;
        while(level <= 100) {
            levelExps[level] = sum;
            level += 1;
            requirement = (requirement * 11) / 10 + 5;
            sum += requirement;
        }
    }
    
    function addRandomClass(uint32 _newClassId) onlyModerators public {
        if (_newClassId > 0) {
            for (uint index = 0; index < randomClassIds.length; index++) {
                if (randomClassIds[index] == _newClassId) {
                    return;
                }
            }
            randomClassIds.push(_newClassId);
        }
    }
    
    function removeRandomClass(uint32 _oldClassId) onlyModerators public {
        uint foundIndex = 0;
        for (; foundIndex < randomClassIds.length; foundIndex++) {
            if (randomClassIds[foundIndex] == _oldClassId) {
                break;
            }
        }
        if (foundIndex < randomClassIds.length) {
            randomClassIds[foundIndex] = randomClassIds[randomClassIds.length-1];
            delete randomClassIds[randomClassIds.length-1];
            randomClassIds.length--;
        }
    }
    
    function removeHatchingTimeWithToken(address _trainer) isActive onlyModerators requireDataContract requireTransformDataContract external {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        MonsterEgg memory egg;
        (egg.eggId, egg.objId, egg.classId, egg.trainer, egg.hatchTime, egg.newObjId) = transformData.getHatchingEggData(_trainer);
        // not hatching any egg
        if (egg.eggId == 0 || egg.trainer != _trainer || egg.newObjId > 0)
            revert();
        
        transformData.setHatchTime(egg.eggId, 0);
    }    
    
    function buyEggWithToken(address _trainer) isActive onlyModerators requireDataContract requireTransformDataContract external {
        if (randomClassIds.length == 0) {
            revert();
        }
        
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        // make sure no hatching egg at the same time
        if (transformData.getHatchingEggId(_trainer) > 0) {
            revert();
        }

        // add random egg
        uint8 classIndex = getRandom(uint16(randomClassIds.length), 1, lastHatchingAddress);
        uint64 eggId = transformData.addEgg(0, randomClassIds[classIndex], _trainer, block.timestamp + (hatchStartTime + getRandom(hatchMaxTime, 0, lastHatchingAddress)) * 3600);
        // deduct exp
        EventLayEgg(msg.sender, 0, eggId);
    }
    
    // public

    function ceil(uint a, uint m) pure public returns (uint) {
        return ((a + m - 1) / m) * m;
    }

    function getLevel(uint32 exp) view public returns (uint8) {
        uint8 minIndex = 1;
        uint8 maxIndex = 100;
        uint8 currentIndex;
     
        while (minIndex < maxIndex) {
            currentIndex = (minIndex + maxIndex) / 2;
            if (exp < levelExps[currentIndex])
                maxIndex = currentIndex;
            else
                minIndex = currentIndex + 1;
        }

        return minIndex;
    }

    function getGen0ObjInfo(uint64 _objId) constant public returns(uint32, uint32, uint256) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
        
        Gen0Config memory gen0 = gen0Config[obj.classId];
        if (gen0.classId != obj.classId) {
            return (gen0.classId, obj.createIndex, 0);
        }
        
        uint32 totalGap = 0;
        if (obj.createIndex < gen0.total)
            totalGap = gen0.total - obj.createIndex;
        
        return (obj.classId, obj.createIndex, safeMult(totalGap, gen0.returnPrice));
    }
    
    function getObjClassId(uint64 _objId) requireDataContract constant public returns(uint32, address, uint8) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        return (obj.classId, obj.trainer, getLevel(obj.exp));
    }
    
    function getClassCheckOwner(uint64 _objId, address _trainer) requireDataContract constant public returns(uint32) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        if (_trainer != obj.trainer)
            return 0;
        return obj.classId;
    }

    function calculateMaxEggG0(uint64 _objId) constant public returns(uint) {
        uint32 classId;
        uint32 createIndex; 
        uint256 totalEarn;
        (classId, createIndex, totalEarn) = getGen0ObjInfo(_objId);
        if (classId > GEN0_NO || classId == 20 || classId == 21)
            return 0;
        
        Gen0Config memory config = gen0Config[classId];
        // the one from egg can not lay
        if (createIndex > config.total)
            return 0;

        // calculate agv price
        uint256 avgPrice = config.originalPrice;
        uint rate = config.originalPrice/config.returnPrice;
        if (config.total > rate) {
            uint k = config.total - rate;
            avgPrice = (config.total * config.originalPrice + config.returnPrice * k * (k+1) / 2) / config.total;
        }
        uint256 catchPrice = config.originalPrice;            
        if (createIndex > rate) {
            catchPrice += config.returnPrice * safeSubtract(createIndex, rate);
        }
        if (totalEarn >= catchPrice) {
            return 0;
        }
        return ceil((catchPrice - totalEarn)*15*1000/avgPrice, 10000)/10000;
    }
    
    function canLayEgg(uint64 _objId, uint32 _classId, uint32 _level) constant public returns(bool) {
        if (_classId <= GEN0_NO) {
            EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
            // legends
            if (transformData.countEgg(_objId) >= calculateMaxEggG0(_objId))
                return false;
            return true;
        } else {
            if (layingEggLevels[_classId] == 0 || _level < layingEggLevels[_classId])
                return false;
            return true;
        }
    }
    
    function layEgg(uint64 _objId) isActive requireDataContract requireTransformDataContract external {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        // make sure no hatching egg at the same time
        if (transformData.getHatchingEggId(msg.sender) > 0) {
            revert();
        }
        
        // can not lay egg when trading
        EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
        if (trade.isOnTrading(_objId))
            revert();
        
        // check obj 
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        if (obj.monsterId != _objId || obj.trainer != msg.sender) {
            revert();
        }
        
        // check lay egg condition
        uint8 currentLevel = getLevel(obj.exp);
        uint8 afterLevel = 0;
        if (!canLayEgg(_objId, obj.classId, currentLevel))
            revert();
        if (layingEggDeductions[obj.classId] >= currentLevel)
            revert();
        afterLevel = currentLevel - layingEggDeductions[obj.classId];

        // add egg 
        uint64 eggId = transformData.addEgg(obj.monsterId, obj.classId, msg.sender, block.timestamp + (hatchStartTime + getRandom(hatchMaxTime, 0, lastHatchingAddress)) * 3600);
        
        // deduct exp 
        if (afterLevel < currentLevel)
            data.decreaseMonsterExp(_objId, obj.exp - levelExps[afterLevel-1]);
        EventLayEgg(msg.sender, _objId, eggId);
    }
    
    function hatchEgg() isActive requireDataContract requireTransformDataContract external {
        // use as a seed for random
        lastHatchingAddress = msg.sender;
        
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        MonsterEgg memory egg;
        (egg.eggId, egg.objId, egg.classId, egg.trainer, egg.hatchTime, egg.newObjId) = transformData.getHatchingEggData(msg.sender);
        // not hatching any egg
        if (egg.eggId == 0 || egg.trainer != msg.sender)
            revert();
        // need more time
        if (egg.newObjId > 0 || egg.hatchTime > block.timestamp) {
            revert();
        }
        
        uint64 objId = addNewObj(msg.sender, egg.classId);
        transformData.setHatchedEgg(egg.eggId, objId);
        
        Transfer(address(0), msg.sender, objId);
    }
    
    function removeHatchingTime() isActive requireDataContract requireTransformDataContract external payable  {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        MonsterEgg memory egg;
        (egg.eggId, egg.objId, egg.classId, egg.trainer, egg.hatchTime, egg.newObjId) = transformData.getHatchingEggData(msg.sender);
        // not hatching any egg
        if (egg.eggId == 0 || egg.trainer != msg.sender || egg.newObjId > 0)
            revert();
        
        if (msg.value != removeHatchingTimeFee) {
            revert();
        }
        transformData.setHatchTime(egg.eggId, 0);
    }

    
    function checkAncestors(uint32 _classId, address _trainer, uint64 _a1, uint64 _a2, uint64 _a3) constant public returns(bool) {
        EtheremonWorld world = EtheremonWorld(worldContract);
        uint index = 0;
        uint32 temp = 0;
        // check ancestor
        uint32[3] memory ancestors;
        uint32[3] memory requestAncestors;
        index = world.getClassPropertySize(_classId, PropertyType.ANCESTOR);
        while (index > 0) {
            index -= 1;
            ancestors[index] = world.getClassPropertyValue(_classId, PropertyType.ANCESTOR, index);
        }
            
        if (_a1 > 0) {
            temp = getClassCheckOwner(_a1, _trainer);
            if (temp == 0)
                return false;
            requestAncestors[0] = temp;
        }
        if (_a2 > 0) {
            temp = getClassCheckOwner(_a2, _trainer);
            if (temp == 0)
                return false;
            requestAncestors[1] = temp;
        }
        if (_a3 > 0) {
            temp = getClassCheckOwner(_a3, _trainer);
            if (temp == 0)
                return false;
            requestAncestors[2] = temp;
        }
            
        if (requestAncestors[0] > 0 && (requestAncestors[0] == requestAncestors[1] || requestAncestors[0] == requestAncestors[2]))
            return false;
        if (requestAncestors[1] > 0 && (requestAncestors[1] == requestAncestors[2]))
            return false;
                
        for (index = 0; index < ancestors.length; index++) {
            temp = ancestors[index];
            if (temp > 0 && temp != requestAncestors[0]  && temp != requestAncestors[1] && temp != requestAncestors[2])
                return false;
        }
        
        return true;
    }
    
    function transform(uint64 _objId, uint64 _a1, uint64 _a2, uint64 _a3) isActive requireDataContract requireTransformDataContract external payable {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        if (transformData.getTranformedId(_objId) > 0)
            revert();
        
        EtheremonBattle battle = EtheremonBattle(battleContract);
        EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
        if (battle.isOnBattle(_objId) || trade.isOnTrading(_objId))
            revert();
        
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        
        BasicObjInfo memory objInfo;
        (objInfo.classId, objInfo.owner, objInfo.level) = getObjClassId(_objId);
        uint32 transformClass = transformClasses[objInfo.classId];
        if (objInfo.classId == 0 || objInfo.owner != msg.sender)
            revert();
        if (transformLevels[objInfo.classId] == 0 || objInfo.level < transformLevels[objInfo.classId])
            revert();
        if (transformClass == 0)
            revert();
        
        
        // gen0 - can not transform if it has bonus egg 
        if (objInfo.classId <= GEN0_NO) {
            // legends
            if (getBonusEgg(_objId) > 0)
                revert();
        } else {
            if (!checkAncestors(objInfo.classId, msg.sender, _a1, _a2, _a3))
                revert();
        }
        
        uint64 newObjId = addNewObj(msg.sender, transformClass);
        // remove old one
        data.removeMonsterIdMapping(msg.sender, _objId);
        transformData.setTranformed(_objId, newObjId);
        
        Transfer(msg.sender, address(0), _objId);
        Transfer(address(0), msg.sender, newObjId);
    }
    
    function buyEgg() isActive requireDataContract requireTransformDataContract external payable {
        if (msg.value != buyEggFee) {
            revert();
        }
        
        if (randomClassIds.length == 0) {
            revert();
        }
        
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        // make sure no hatching egg at the same time
        if (transformData.getHatchingEggId(msg.sender) > 0) {
            revert();
        }

        // add random egg
        uint8 classIndex = getRandom(uint16(randomClassIds.length), 1, lastHatchingAddress);
        uint64 eggId = transformData.addEgg(0, randomClassIds[classIndex], msg.sender, block.timestamp + (hatchStartTime + getRandom(hatchMaxTime, 0, lastHatchingAddress)) * 3600);
        // deduct exp
        EventLayEgg(msg.sender, 0, eggId);
    }
    
    // read
    function getBonusEgg(uint64 _objId) constant public returns(uint) {
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        uint totalBonusEgg = calculateMaxEggG0(_objId);
        if (totalBonusEgg > 0) {
            return (totalBonusEgg - transformData.countEgg(_objId));
        }
        return 0;
    }
    
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"}],"name":"transform","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"dataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"gen0Config","outputs":[{"name":"classId","type":"uint32"},{"name":"originalPrice","type":"uint256"},{"name":"returnPrice","type":"uint256"},{"name":"total","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"moderators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"worldContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyEggFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_removeHatchingTimeFee","type":"uint256"},{"name":"_buyEggFee","type":"uint256"}],"name":"setConfig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_transformDataContract","type":"address"},{"name":"_battleContract","type":"address"},{"name":"_tradeContract","type":"address"}],"name":"setContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hatchMaxTime","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"calculateMaxEggG0","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"genLevelExp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_start","type":"uint16"},{"name":"_max","type":"uint16"}],"name":"updateHatchingRange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"battleContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_isMaintaining","type":"bool"}],"name":"UpdateMaintaining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"STAT_MAX","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalModerators","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sendTo","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"transformLevels","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_trainer","type":"address"}],"name":"buyEggWithToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setOriginalPriceGen0","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_classId","type":"uint32"},{"name":"_layingLevel","type":"uint8"},{"name":"_layingCost","type":"uint8"},{"name":"_transformLevel","type":"uint8"},{"name":"_tranformClass","type":"uint32"}],"name":"setConfigClass","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newModerator","type":"address"}],"name":"AddModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_NO","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"levelExps","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buyEgg","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"m","type":"uint256"}],"name":"ceil","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getObjClassId","outputs":[{"name":"","type":"uint32"},{"name":"","type":"address"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hatchStartTime","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transformDataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"layingEggDeductions","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"layingEggLevels","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_classId","type":"uint32"},{"name":"_trainer","type":"address"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"}],"name":"checkAncestors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newClassId","type":"uint32"}],"name":"addRandomClass","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"removeHatchingTime","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_trainer","type":"address"}],"name":"removeHatchingTimeWithToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"removeHatchingTimeFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getBonusEgg","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"exp","type":"uint32"}],"name":"getLevel","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_classId","type":"uint32"},{"name":"_level","type":"uint32"}],"name":"canLayEgg","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_oldModerator","type":"address"}],"name":"RemoveModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_oldClassId","type":"uint32"}],"name":"removeRandomClass","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"maxRan","type":"uint16"},{"name":"index","type":"uint8"},{"name":"priAddress","type":"address"}],"name":"getRandom","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"randomClassIds","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"hatchEgg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"transformClasses","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getGen0ObjInfo","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STAT_COUNT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_trainer","type":"address"}],"name":"getClassCheckOwner","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"}],"name":"layEgg","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isMaintaining","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"ChangeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tradeContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_transformDataContract","type":"address"},{"name":"_battleContract","type":"address"},{"name":"_tradeContract","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"trainer","type":"address"},{"indexed":false,"name":"objId","type":"uint64"},{"indexed":false,"name":"eggId","type":"uint64"}],"name":"EventLayEgg","type":"event"}]

60606040526000805460a060020a61ffff02191690556002805462ffffff19166102001764ffff0000001916632e00000017905566b1a2bc2ec5000060035566d529ae9e860000600455341561005457600080fd5b60405160a0806149d4833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a03338116600160a060020a031992831617909255600d805499831699821699909917909855600e805497821697891697909717909655600f8054958716958816959095179094555050601080549184169185169190911790556011805492909116919092161790556148cf806101056000396000f3006060604052600436106102635763ffffffff60e060020a600035041663085f8ebb81146102685780630d668818146102915780630daf4151146102c057806314d0f1ba1461030d57806318758480146103405780631dbb9867146103535780631e34c5851461037857806320eb2a8714610391578063217b97e4146103c85780632f6a6e20146103f257806333ced32114610412578063418bc2ee14610425578063423b1ca31461044557806348ef5aa8146104585780634e3dc2f1146104705780634efb023e14610499578063522f6815146104ac57806352bb525c146104ce5780635b86ce97146104ea57806366ba2670146105095780636a81af171461051c5780636c81fd6d1461055157806373d65c001461057057806378b475a8146105835780637d635502146105b55780638587be6e146105bd5780638da5cb5b146105d657806390f2dc88146105e957806392c537e91461063f57806393cc6d85146106525780639983ce511461066557806399bf954c146106815780639bd7d6881461069d578063a15b9769146106de578063a3c07c6a146106fa578063a3cb3e9714610702578063a4d5e30e14610721578063afd61d2c14610734578063b2cad9b714610754578063b62d4ce114610770578063b85d62751461079f578063bc602ab7146107be578063c5442f7d146107da578063c993548714610806578063ca9c4b331461081c578063cf790bbb1461082f578063d2fb32c21461084b578063d98e14bd14610895578063e98f402c146108a8578063eb14367d146108d4578063ee4e4416146108f4578063f285329214610907578063ffa640d814610926575b600080fd5b61028f67ffffffffffffffff60043581169060243581169060443581169060643516610939565b005b341561029c57600080fd5b6102a4610de3565b604051600160a060020a03909116815260200160405180910390f35b34156102cb57600080fd5b6102dc63ffffffff60043516610df2565b60405163ffffffff948516815260208101939093526040808401929092529092166060820152608001905180910390f35b341561031857600080fd5b61032c600160a060020a0360043516610e21565b604051901515815260200160405180910390f35b341561034b57600080fd5b6102a4610e36565b341561035e57600080fd5b610366610e45565b60405190815260200160405180910390f35b341561038357600080fd5b61028f600435602435610e4b565b341561039c57600080fd5b61028f600160a060020a0360043581169060243581169060443581169060643581169060843516610e9c565b34156103d357600080fd5b6103db610f4e565b60405161ffff909116815260200160405180910390f35b34156103fd57600080fd5b61036667ffffffffffffffff60043516610f5f565b341561041d57600080fd5b61028f61112a565b341561043057600080fd5b61028f61ffff600435811690602435166111d8565b341561045057600080fd5b6102a461124f565b341561046357600080fd5b61028f600435151561125e565b341561047b57600080fd5b61048361128c565b60405160ff909116815260200160405180910390f35b34156104a457600080fd5b6103db611291565b34156104b757600080fd5b61028f600160a060020a03600435166024356112b3565b34156104d957600080fd5b61048363ffffffff60043516611345565b34156104f557600080fd5b61028f600160a060020a036004351661135a565b341561051457600080fd5b61028f611615565b341561052757600080fd5b61028f63ffffffff60043581169060ff6024358116916044358216916064351690608435166126df565b341561055c57600080fd5b61028f600160a060020a0360043516612795565b341561057b57600080fd5b61048361283f565b341561058e57600080fd5b61059c60ff60043516612844565b60405163ffffffff909116815260200160405180910390f35b61028f61285c565b34156105c857600080fd5b610366600435602435612ade565b34156105e157600080fd5b6102a4612afa565b34156105f457600080fd5b61060967ffffffffffffffff60043516612b09565b60405163ffffffff9093168352600160a060020a03909116602083015260ff166040808301919091526060909101905180910390f35b341561064a57600080fd5b6103db612c2f565b341561065d57600080fd5b6102a4612c3e565b341561067057600080fd5b61048363ffffffff60043516612c4d565b341561068c57600080fd5b61048363ffffffff60043516612c62565b34156106a857600080fd5b61032c63ffffffff60043516600160a060020a036024351667ffffffffffffffff60443581169060643581169060843516612c77565b34156106e957600080fd5b61028f63ffffffff60043516612fe4565b61028f6130ec565b341561070d57600080fd5b61028f600160a060020a03600435166132d7565b341561072c57600080fd5b6103666134fb565b341561073f57600080fd5b61036667ffffffffffffffff60043516613501565b341561075f57600080fd5b61048363ffffffff600435166135ad565b341561077b57600080fd5b61032c67ffffffffffffffff6004351663ffffffff60243581169060443516613610565b34156107aa57600080fd5b61028f600160a060020a0360043516613714565b34156107c957600080fd5b61028f63ffffffff600435166137be565b34156107e557600080fd5b61048361ffff6004351660ff60243516600160a060020a0360443516613940565b341561081157600080fd5b61059c60043561399b565b341561082757600080fd5b61028f6139d3565b341561083a57600080fd5b61059c63ffffffff60043516613c48565b341561085657600080fd5b61086b67ffffffffffffffff60043516613c60565b60405163ffffffff9384168152919092166020820152604080820192909252606001905180910390f35b34156108a057600080fd5b610483613e46565b34156108b357600080fd5b61059c67ffffffffffffffff60043516600160a060020a0360243516613e4b565b34156108df57600080fd5b61028f67ffffffffffffffff60043516613f77565b34156108ff57600080fd5b61032c614459565b341561091257600080fd5b61028f600160a060020a0360043516614462565b341561093157600080fd5b6102a46144b9565b60008060008061094761474c565b600254600090819060ff161561095c57600080fd5b600d54600160a060020a0316151561097357600080fd5b600f54600160a060020a0316151561098a57600080fd5b600f54600160a060020a0316965060008763fd7d79488d836040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b15156109e857600080fd5b6102c65a03f115156109f957600080fd5b5050506040518051905067ffffffffffffffff161115610a1857600080fd5b601054601154600160a060020a039182169750169450856335f097f38c60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b1515610a7d57600080fd5b6102c65a03f11515610a8e57600080fd5b5050506040518051905080610b12575084600160a060020a031663a847a71c8c60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b1515610af657600080fd5b6102c65a03f11515610b0757600080fd5b505050604051805190505b15610b1c57600080fd5b600d54600160a060020a03169350610b338b612b09565b60ff166040860152600160a060020a0316602085015263ffffffff16835260096000845163ffffffff9081168252602082019290925260400160002054169150825163ffffffff161580610b9d575033600160a060020a03168360200151600160a060020a031614155b15610ba757600080fd5b60086000845163ffffffff16815260208101919091526040016000205460ff161580610bf9575060086000845163ffffffff168152602081019190915260409081016000205460ff169084015160ff16105b15610c0357600080fd5b63ffffffff82161515610c1557600080fd5b6018835163ffffffff1611610c3f576000610c2f8c613501565b1115610c3a57600080fd5b610c58565b610c4d8351338c8c8c612c77565b1515610c5857600080fd5b610c6233836144c8565b905083600160a060020a03166360c6ccb2338d60405160e060020a63ffffffff8516028152600160a060020a03909216600483015267ffffffffffffffff166024820152604401600060405180830381600087803b1515610cc257600080fd5b6102c65a03f11515610cd357600080fd5b50505086600160a060020a03166354b670578c8360405160e060020a63ffffffff851602815267ffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1515610d2d57600080fd5b6102c65a03f11515610d3e57600080fd5b50600091505033600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8d60405167ffffffffffffffff909116815260200160405180910390a3600160a060020a03331660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405167ffffffffffffffff909116815260200160405180910390a35050505050505050505050565b600d54600160a060020a031681565b600c60205260009081526040902080546001820154600283015460039093015463ffffffff9283169391921684565b60016020526000908152604090205460ff1681565b600e54600160a060020a031681565b60045481565b60005433600160a060020a0390811691161480610e865750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610e9157600080fd5b600391909155600455565b60005433600160a060020a0390811691161480610ed75750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610ee257600080fd5b600d805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a0397881617909155600e8054821695871695909517909455600f8054851693861693909317909255601080548416918516919091179055601180549092169216919091179055565b6002546301000000900461ffff1681565b600080600080610f6d61476c565b600080600080610f7c8a613c60565b91995097509550601863ffffffff89161180610f9e57508763ffffffff166014145b80610faf57508763ffffffff166015145b15610fbd576000985061111d565b63ffffffff88166000908152600c60205260409081902090608090519081016040908152825463ffffffff908116835260018401546020840152600284015491830191909152600390920154909116606082019081529095505163ffffffff168763ffffffff161115611033576000985061111d565b846020015193508460400151856020015181151561104d57fe5b04925082856060015163ffffffff1611156110b35782856060015163ffffffff16039150846060015163ffffffff16600283600101848860400151020281151561109357fe5b048660200151876060015163ffffffff1602018115156110af57fe5b0493505b84602001519050828763ffffffff1611156110e0576110d88763ffffffff168461470d565b856040015102015b8086106110f0576000985061111d565b61271061111085613a988985030281151561110757fe5b04612710612ade565b81151561111957fe5b0498505b5050505050505050919050565b600080548190819033600160a060020a039081169116148061116a5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561117557600080fd5b506001915060649050805b606460ff8416116111d35760ff83166000908152600a60208190526040909120805463ffffffff191663ffffffff84811691909117909155600190940193600b8402160460050191508181019050611180565b505050565b60005433600160a060020a03908116911614806112135750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561121e57600080fd5b6002805461ffff92831663010000000264ffff00000019949093166101000262ffff00199091161792909216179055565b601054600160a060020a031681565b60005433600160a060020a0390811691161461127957600080fd5b6002805460ff1916911515919091179055565b602081565b60005474010000000000000000000000000000000000000000900461ffff1681565b60005433600160a060020a03908116911614806112ee5750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156112f957600080fd5b30600160a060020a03163181111561131057600080fd5b600160a060020a03821681156108fc0282604051600060405180830381858888f19350505050151561134157600080fd5b5050565b60086020526000908152604090205460ff1681565b6002546000908190819060ff161561137157600080fd5b60005433600160a060020a03908116911614806113ac5750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156113b757600080fd5b600d54600160a060020a031615156113ce57600080fd5b600f54600160a060020a031615156113e557600080fd5b60055415156113f357600080fd5b600f54600160a060020a0316925060008363aeb669eb86836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561145057600080fd5b6102c65a03f1151561146157600080fd5b5050506040518051905067ffffffffffffffff16111561148057600080fd5b600554600b5461149c9190600190600160a060020a0316613940565b915082600160a060020a0316630bc954dc600060058560ff168154811015156114c157fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1687611519600260039054906101000a900461ffff166000600b60009054906101000a9004600160a060020a0316613940565b60ff16600260019054906101000a900461ffff1601610e100261ffff16420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b15156115a157600080fd5b6102c65a03f115156115b257600080fd5b5050506040518051915050600160a060020a0333167fe5f0ab5952896b20909b1e66e906f383fee56364008709ae6c9a8ac25f43ef7560008360405167ffffffffffffffff9283168152911660208201526040908101905180910390a250505050565b60005433600160a060020a03908116911614806116505750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561165b57600080fd5b608060405190810160409081526001808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101766060840152600052600c90527fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5c8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526002808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101986060840152600052600c90527f5d6016397a73f5e079297ac5a36fef17b4d9c3831618e63ab105738020ddd7208151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526003808352670429d069189e0000602080850191909152660aa87bee538000928401929092526101756060840152600052600c90527fc0da782485e77ae272268ae0a3ff44c1552ecb60b3743924de17a815e0a3cfd78151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260048083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101b56060840152600052600c90527f5b84bb9e0f5aa9cc45a8bb66468db5d4816d1e75ff86b5e1f1dd8d144dab80978151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600580835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101f16060840152600052600c90527f2cd9ebf6ff19cdd7ffcc447d7c7d47b5991f5c7392a04512134e765802361fa68151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526006808352670429d069189e0000602080850191909152660aa87bee5380009284019290925261017c6060840152600052600c90527f980f427e00e74f6d338adfccc7468518c8c8ea00836d0dce98c5fe154e17bf2b8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260078083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101596060840152600052600c90527fdae089abd7155aa13ce498edb0d7a7156b783d015031f10c9a3d4f5fcb5189718151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600880835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526102066060840152600052600c90527f5ff1be3842b54290a9d10674244dae5848d2371b5314790c54805c086586e1df8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600980835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101bf6060840152600052600c90527f2fb3c9afecd3f0d43923381d3e9f60168c039b98f0b7120382e81b682b7bc3168151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600a8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261017c6060840152600052600c90527f9e6c92d7be355807bd948171438a5e65aaf9e4c36f1405c1b9ca25d27c4ea3a08151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600b8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101626060840152600052600c90527f6a9911425952520efa6de3784a0ac63c35d3c5bb392028ea0beb0dc41a1919578151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600c8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015a6060840152600081905290527f37877ab6ac9e279d19a4db3294b259b5a4163c0ed597627ae79e33d80cde4db88151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600d8083526702c68af0bb14000060208085019190915266071afd498d00009284019290925261015f6060840152600052600c90527f551134c3788a756a109c6e227f794518fef985fa2ba3fac727bcd6dac5e98e8f8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600e8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101526060840152600052600c90527f4c711c77a2730b2744c96ef60e2967c2b4247d6a372f8b2e95c748d1459b23808151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152600f8083526702c68af0bb14000060208085019190915266071afd498d0000928401929092526101556060840152600052600c90527f977a47af6886c81cccba9ceb5316ec9b4027c59ac276de3e2cb39ec8af72ee7b8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260108083526704db732547630000602080850191909152660c6f3b40b6c000928401929092526101806060840152600052600c90527ffba2bf5b1dd468baf16221045792a70d5cdd656b9f3da14b127c3e81dc5d6de28151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526011808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101316060840152600052600c90527f270e7751614d4e91a095cd3ace3f4d517c1b37aa711dfeaf72be0b76abd048398151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601280835267016345785d8a000060208085019190915266038d7ea4c68000928401929092526101ab6060840152600052600c90527f63ad5e8597ed00826582ffe8302b2704b28344c60ae5645ec296a6326e0ed3458151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526013808352670de0b6b3a7640000602080850191909152662386f26fc10000928401929092526101306060840152600052600c90527fe02ca69cf2f93f7a389d26d1c6b52e01a88a074c056dfe4bf6a3c69d4a8041e28151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff9092169190911790555060806040519081016040908152601480835267058d15e17628000060208085019190915266b1a2bc2ec500009284019290925260526060840152600052600c90527f55664edbebd57273ba1f6d1c017cd920bbceea562d5502a6837280a660edef958151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260158083526001602080850182905292840152607b6060840152600052600c90527ff77830ee6ca813461e84e66f2fead14ff7f40269cd63d8faab5b6ce1c3d8c07e8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260168083526702c68af0bb14000060208085019190915266038d7ea4c68000928401929092526101d46060840152600052600c90527f9fe279e833bcb8beab045538c3e47062dba2173d3cb9299210a3ae3478eac49d8151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff909216919091179055506080604051908101604090815260178083526706f05b59d3b200006020808501919091526608e1bc9bf040009284019290925261012e6060840152600052600c90527f6422c4859a0e1cfb624515c5474fb4780841aa90bef78e8ffd8411f6df3c00a78151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550608060405190810160409081526018808352670de0b6b3a76400006020808501919091526611c37937e080009284019290925260c36060840152600052600c90527f591a7551fcdfca13c6240947c6945b1b81f85a820d3ef46ea582217b1dd807198151815463ffffffff191663ffffffff9190911617815560208201518160010155604082015181600201556060820151600391909101805463ffffffff191663ffffffff90921691909117905550565b60005433600160a060020a039081169116148061271a5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561272557600080fd5b63ffffffff9485166000908152600660209081526040808320805460ff1990811660ff998a161790915560078352818420805482169789169790971790965560088252808320805490961694909616939093179093556009909152919020805463ffffffff191691909216179055565b60005433600160a060020a039081169116146127b057600080fd5b600160a060020a03811660009081526001602052604090205460ff16151561283c57600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b601881565b600a6020526000908152604090205463ffffffff1681565b6002546000908190819060ff161561287357600080fd5b600d54600160a060020a0316151561288a57600080fd5b600f54600160a060020a031615156128a157600080fd5b60045434146128af57600080fd5b60055415156128bd57600080fd5b600f54600160a060020a0316925060008363aeb669eb33836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561291a57600080fd5b6102c65a03f1151561292b57600080fd5b5050506040518051905067ffffffffffffffff16111561294a57600080fd5b600554600b546129669190600190600160a060020a0316613940565b915082600160a060020a0316630bc954dc600060058560ff1681548110151561298b57fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16336129e3600260039054906101000a900461ffff166000600b60009054906101000a9004600160a060020a0316613940565b60ff16600260019054906101000a900461ffff1601610e100261ffff16420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b1515612a6b57600080fd5b6102c65a03f11515612a7c57600080fd5b5050506040518051915050600160a060020a0333167fe5f0ab5952896b20909b1e66e906f383fee56364008709ae6c9a8ac25f43ef7560008360405167ffffffffffffffff9283168152911660208201526040908101905180910390a2505050565b60008182600184860103811515612af157fe5b04029392505050565b600054600160a060020a031681565b600080600080612b17614793565b600d54600090600160a060020a03161515612b3157600080fd5b50600d54600160a060020a031691506000826307202460888360405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b1515612b9057600080fd5b6102c65a03f11515612ba157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a039092166040870152919091166020850190815267ffffffffffffffff90921684529150518260400151612c1f84608001516135ad565b9550955095505050509193909250565b600254610100900461ffff1681565b600f54600160a060020a031681565b60076020526000908152604090205460ff1681565b60066020526000908152604090205460ff1681565b600080600080612c856147df565b612c8d6147df565b600e54600160a060020a0316945060009350839250846388e9abb68c8580604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff168152602001826001811115612ce657fe5b60ff16815260200192505050602060405180830381600087803b1515612d0b57600080fd5b6102c65a03f11515612d1c57600080fd5b50505060405180519450505b6000841115612def5760018403935084600160a060020a0316635b6263398c6000876000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff168152602001836001811115612d8757fe5b60ff1681526020018281526020019350505050602060405180830381600087803b1515612db357600080fd5b6102c65a03f11515612dc457600080fd5b50505060405180519050828560038110612dda57fe5b63ffffffff9092166020929092020152612d28565b60008967ffffffffffffffff161115612e2e57612e0c898b613e4b565b925063ffffffff83161515612e245760009550612fd6565b63ffffffff831681525b60008867ffffffffffffffff161115612e7057612e4b888b613e4b565b925063ffffffff83161515612e635760009550612fd6565b63ffffffff831660208201525b60008767ffffffffffffffff161115612eb257612e8d878b613e4b565b925063ffffffff83161515612ea55760009550612fd6565b63ffffffff831660408201525b6000815163ffffffff16118015612ef35750602081015163ffffffff16815163ffffffff161480612ef35750604081015163ffffffff16815163ffffffff16145b15612f015760009550612fd6565b6000602082015163ffffffff16118015612f2e5750604081015163ffffffff16602082015163ffffffff16145b15612f3c5760009550612fd6565b600093505b6003841015612fd157818460038110612f5657fe5b6020020151925060008363ffffffff16118015612f805750805163ffffffff168363ffffffff1614155b8015612f9c5750602081015163ffffffff168363ffffffff1614155b8015612fb85750604081015163ffffffff168363ffffffff1614155b15612fc65760009550612fd6565b600190930192612f41565b600195505b505050505095945050505050565b6000805433600160a060020a03908116911614806130205750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561302b57600080fd5b60008263ffffffff161115611341575060005b60055481101561309d578163ffffffff1660058281548110151561305e57fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16141561309557611341565b60010161303e565b60058054600181016130af8382614807565b916000526020600020906008918282040191900660040284909190916101000a81548163ffffffff021916908363ffffffff160217905550505050565b60006130f661483b565b60025460ff161561310657600080fd5b600d54600160a060020a0316151561311d57600080fd5b600f54600160a060020a0316151561313457600080fd5b600f54600160a060020a031691508163710ad12833600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b151561319057600080fd5b6102c65a03f115156131a157600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a0890152608088019290925250600160a060020a03909116606086015263ffffffff90911660408501529081166020840152168152805167ffffffffffffffff161580613237575033600160a060020a03168160600151600160a060020a031614155b80613250575060008160a0015167ffffffffffffffff16115b1561325a57600080fd5b600354341461326857600080fd5b600160a060020a03821663e177573c8251600060405160e060020a63ffffffff851602815267ffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15156132bf57600080fd5b6102c65a03f115156132d057600080fd5b5050505050565b60006132e161483b565b60025460ff16156132f157600080fd5b60005433600160a060020a039081169116148061332c5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561333757600080fd5b600d54600160a060020a0316151561334e57600080fd5b600f54600160a060020a0316151561336557600080fd5b600f54600160a060020a031691508163710ad12884600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b15156133c157600080fd5b6102c65a03f115156133d257600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a0890152608088019290925250600160a060020a03909116606086015263ffffffff90911660408501529081166020840152168152805167ffffffffffffffff161580613468575082600160a060020a03168160600151600160a060020a031614155b80613481575060008160a0015167ffffffffffffffff16115b1561348b57600080fd5b600160a060020a03821663e177573c8251600060405160e060020a63ffffffff851602815267ffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15156134e257600080fd5b6102c65a03f115156134f357600080fd5b505050505050565b60035481565b600f54600090600160a060020a03168161351a84610f5f565b905060008111156135a15781600160a060020a031663ec0ba0068560006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b151561357d57600080fd5b6102c65a03f1151561358e57600080fd5b50505060405180519050810392506135a6565b600092505b5050919050565b600060016064825b8160ff168360ff16101561360757600260ff848401160460ff81166000908152600a602052604090205490915063ffffffff90811690861610156135fb57809150613602565b8060010192505b6135b5565b50909392505050565b600080601863ffffffff8516116136c35750600f54600160a060020a031661363785610f5f565b81600160a060020a031663ec0ba0068760006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b151561368f57600080fd5b6102c65a03f115156136a057600080fd5b505050604051805190501015156136ba576000915061370c565b6001915061370c565b63ffffffff841660009081526006602052604090205460ff161580613702575063ffffffff80851660009081526006602052604090205460ff16908416105b156136ba57600091505b509392505050565b60005433600160a060020a0390811691161461372f57600080fd5b600160a060020a03811660009081526001602081905260409091205460ff161515141561283c57600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b6000805433600160a060020a03908116911614806137fa5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561380557600080fd5b5060005b600554811015613868578163ffffffff1660058281548110151561382957fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16141561386057613868565b600101613809565b6005548110156113415760058054600019810190811061388457fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff166005828154811015156138b957fe5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550600560016005805490500381548110151561390357fe5b90600052602060002090600891828204019190066004026101000a81549063ffffffff021916905560058054809190600190036111d39190614807565b6000600019430140600160a060020a03831601815b8460ff168160ff1610801561396d575060068160ff16105b156139815761010082049150600101613955565b8561ffff168281151561399057fe5b069695505050505050565b60058054829081106139a957fe5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b60006139dd61483b565b60025460009060ff16156139f057600080fd5b600d54600160a060020a03161515613a0757600080fd5b600f54600160a060020a03161515613a1e57600080fd5b600b805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a0381811692909217909255600f54169350839063710ad12890600060405160c0015260405160e060020a63ffffffff8416028152600160a060020a03909116600482015260240160c060405180830381600087803b1515613aa157600080fd5b6102c65a03f11515613ab257600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805167ffffffffffffffff90811660a08a0152608089019290925250600160a060020a03909116606087015263ffffffff90911660408601529081166020850152168252815167ffffffffffffffff161580613b48575033600160a060020a03168260600151600160a060020a031614155b15613b5257600080fd5b60008260a0015167ffffffffffffffff161180613b725750428260800151115b15613b7c57600080fd5b613b8a3383604001516144c8565b9050600160a060020a0383166337bd186883518360405160e060020a63ffffffff851602815267ffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1515613be457600080fd5b6102c65a03f11515613bf557600080fd5b5050600160a060020a033316905060007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405167ffffffffffffffff909116815260200160405180910390a3505050565b60096020526000908152604090205463ffffffff1681565b600080600080613c6e614793565b613c7661476c565b600d54600160a060020a031692506000836307202460898360405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b1515613cd457600080fd5b6102c65a03f11515613ce557600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08b01525063ffffffff90811660c08a015290811660a08901529081166080880152600160a060020a039091166040870152166020850190815267ffffffffffffffff9091168452600c906000905163ffffffff1663ffffffff16815260200190815260200160002060806040519081016040908152825463ffffffff908116835260018401546020808501919091526002850154928401929092526003909301549092166060820152925083015163ffffffff16825163ffffffff1614613de95781518360a00151909750955060009450613e3b565b506000606082015163ffffffff168360a0015163ffffffff161015613e16578260a0015182606001510390505b82602001518360a00151613e348363ffffffff168560400151614721565b9650965096505b505050509193909250565b600681565b600080613e56614793565b600d54600090600160a060020a03161515613e7057600080fd5b50600d54600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b1515613ecf57600080fd5b6102c65a03f11515613ee057600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a03909216604087019081529216602086015267ffffffffffffffff909216845290915051600160a060020a03868116911614613f665760009350613f6e565b816020015193505b50505092915050565b6000806000613f84614793565b60025460009081908190819060ff1615613f9d57600080fd5b600d54600160a060020a03161515613fb457600080fd5b600f54600160a060020a03161515613fcb57600080fd5b600f54600160a060020a0316975060008863aeb669eb33836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561402857600080fd5b6102c65a03f1151561403957600080fd5b5050506040518051905067ffffffffffffffff16111561405857600080fd5b601154600160a060020a031696508663a847a71c8a60006040516020015260405160e060020a63ffffffff841602815267ffffffffffffffff9091166004820152602401602060405180830381600087803b15156140b557600080fd5b6102c65a03f115156140c657600080fd5b50505060405180519050156140da57600080fd5b600d54600160a060020a03169550600093508563072024608a8660405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b151561413a57600080fd5b6102c65a03f1151561414b57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08d0152505063ffffffff91821660808b0152600160a060020a0390921660408a015291909116602088015267ffffffffffffffff918216875294508916855167ffffffffffffffff161415806141e5575033600160a060020a03168560400151600160a060020a031614155b156141ef57600080fd5b6141fc85608001516135ad565b9250600091506142148986602001518560ff16613610565b151561421f57600080fd5b8260ff1660076000876020015163ffffffff16815260208101919091526040016000205460ff161061425057600080fd5b60076000866020015163ffffffff16815260208101919091526040016000205460ff1683039150600160a060020a038816630bc954dc86518760200151600254600b5433916142b791630100000090910461ffff1690600090600160a060020a0316613940565b60ff16600260019054906101000a900461ffff1601610e100261ffff16420160006040516020015260405163ffffffff86811660e060020a02825267ffffffffffffffff959095166004820152929093166024830152600160a060020a031660448201526064810191909152608401602060405180830381600087803b151561433f57600080fd5b6102c65a03f1151561435057600080fd5b5050506040518051905090508260ff168260ff1610156143fd5760ff6000198301166000908152600a6020526040902054600160a060020a038716906331afa55f908b9063ffffffff1660808901510360405163ffffffff84811660e060020a02825267ffffffffffffffff93909316600482015291166024820152604401600060405180830381600087803b15156143e857600080fd5b6102c65a03f115156143f957600080fd5b5050505b33600160a060020a03167fe5f0ab5952896b20909b1e66e906f383fee56364008709ae6c9a8ac25f43ef758a8360405167ffffffffffffffff9283168152911660208201526040908101905180910390a2505050505050505050565b60025460ff1681565b60005433600160a060020a0390811691161461447d57600080fd5b600160a060020a0381161561283c5760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b601154600160a060020a031681565b600d54600090600160a060020a03168180808363fc4d20f58789846040516020015260405163ffffffff84811660e060020a028252929092166004830152600160a060020a0316602482015260606044820152600c60648201527f2e2e6e616d65206d652e2e2e0000000000000000000000000000000000000000608482015260a401602060405180830381600087803b151561456457600080fd5b6102c65a03f1151561457557600080fd5b5050506040518051935060009250505b60068210156147025783600160a060020a03166362b21ad760028863ffffffff16856000604051602001526040518463ffffffff1660e060020a028152600401808460048111156145d257fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561461857600080fd5b6102c65a03f1151561462957600080fd5b5050506040518051600b5490915061464e906020908590600160a060020a0316613940565b01905083600160a060020a03166326bda739600385846000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561468f57fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018260ff1660ff1681526020019350505050602060405180830381600087803b15156146db57600080fd5b6102c65a03f115156146ec57600080fd5b5050506040518051905050600182019150614585565b509095945050505050565b6000808284101561471a57fe5b5050900390565b600082820283158061473d575082848281151561473a57fe5b04145b151561474557fe5b9392505050565b606060405190810160409081526000808352602083018190529082015290565b60806040519081016040908152600080835260208301819052908201819052606082015290565b610100604051908101604090815260008083526020830181905290820152606081016147bd614870565b8152600060208201819052604082018190526060820181905260809091015290565b60606040519081016040526003815b6000815260001990910190602001816147ee5790505090565b8154818355818115116111d35760070160089004816007016008900483600052602060002091820191016111d39190614882565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b60206040519081016040526000815290565b6148a091905b8082111561489c5760008155600101614888565b5090565b905600a165627a7a72305820a5bd0e91965e71deb67672c5c0250521648f17074576a29588ea0b91577a767e0029000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6000000000000000000000000fdf4411669fc6e8951a6ae987307d7582fda7a05000000000000000000000000df6164efd12678bf6a7d5a1ddf73c831493f65740000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe47030

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

000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6000000000000000000000000fdf4411669fc6e8951a6ae987307d7582fda7a05000000000000000000000000df6164efd12678bf6a7d5a1ddf73c831493f65740000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe47030

-----Decoded View---------------
Arg [0] : _dataContract (address): 0xabc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : _worldContract (address): 0x1fc7bd85293f3982f40d52698df8d26be89360d6
Arg [2] : _transformDataContract (address): 0xfdf4411669fc6e8951a6ae987307d7582fda7a05
Arg [3] : _battleContract (address): 0xdf6164efd12678bf6a7d5a1ddf73c831493f6574
Arg [4] : _tradeContract (address): 0x4ba72f0f8dad13709ee28a992869e79d0fe47030

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : 0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6
Arg [2] : 000000000000000000000000fdf4411669fc6e8951a6ae987307d7582fda7a05
Arg [3] : 000000000000000000000000df6164efd12678bf6a7d5a1ddf73c831493f6574
Arg [4] : 0000000000000000000000004ba72f0f8dad13709ee28a992869e79d0fe47030


Swarm Source

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