function hatchEgg() isActive external {
        
        EtheremonTransformData transformData = EtheremonTransformData(transformDataContract);
        MonsterEgg memory egg;
        (egg.eggId, egg.objId, egg.classId, egg.trainer, egg.hatchTime, egg.newObjId) = transformData.getHatchingEggData(msg.sender);
        
        if (egg.eggId == 0 || egg.trainer != msg.sender)
            revert();
        
        if (egg.newObjId > 0 || egg.hatchTime > block.timestamp) {
            revert();
        }
        
        EtheremonMonsterNFTInterface monsterNFT = EtheremonMonsterNFTInterface(monsterNFTContract);
        uint objId = monsterNFT.mintMonster(egg.classId, egg.trainer, "..name me...");
        transformData.setHatchedEgg(egg.eggId, uint64(objId));
        EventHatchEgg(egg.trainer, egg.eggId, objId);
    }