contract JOP is StandardToken, Ownable {
    string public constant name = "JopCoin";
    string public constant symbol = "JOP";
    uint public constant decimals = 18;
    
    uint public price ;
    uint public mintTimes;
    address public receiver;
    
    mapping(address=>bool) public freezeList;
    
    //代币增发
    event DoMint(uint n,uint number);
    event Burn(address indexed from, uint256 value);
    
    function JOP(uint _price){
        receiver = msg.sender;
        price =_price; //代币的兑换比例 数值为正整数
        totalSupply=500*(10**4)*10**decimals; //5000000
        //代币数量转入指定以太地址
        balances[msg.sender] = totalSupply; 
        Transfer(address(0x0), msg.sender, totalSupply);
    }
    
    modifier validUser(address addr){
        if(freezeList[addr] || addr ==address(0x0)) throw;
        _;
    }
    
    function addFreezeList(address addr) onlyOwner returns(bool)  {
        if(!freezeList[addr]){
            freezeList[addr] =true;
            return true;
        }else{
            return false;
        }
    }
    
    //解除冻结账户
    function deleteFreezeList(address addr) onlyOwner returns(bool){
        if(freezeList[addr]){
            delete freezeList[addr];
            return true;
        }else{
            return false;
        }
    }
    
    function setPrice(uint _price) onlyOwner{
        require( _price > 0);
        price= _price;
    }
    
    function destroy() onlyOwner{
        suicide(owner);
    }
    
    function transfer(address _to, uint _value) validUser(msg.sender) returns (bool){
        if(_value <= 10**decimals/10) throw; //转账金额需要大于0.1
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value - 10**decimals/10);
        balances[receiver] = balances[receiver].add(10**decimals/10);
        Transfer(msg.sender, _to, _value - 10**decimals/10);
        return true;
    }
    
    function mint(uint num) onlyOwner{
        balances[owner] = balances[owner].add(num*(10**decimals));
        totalSupply = totalSupply.add(num*(10**decimals));
        DoMint(mintTimes++,num*(10**decimals));
    }
    
    function burn(uint256 _value) public returns (bool success) {
        require(balances[msg.sender] >= _value); 
        balances[msg.sender] -= _value; 
        totalSupply -= _value;   
        Transfer(msg.sender, address(0x0), _value);
        Burn(msg.sender, _value);
        return true;
    }
    
    function changeReceiver(address _receiver) onlyOwner{
        if(_receiver == address(0x0)) throw;
        receiver = _receiver;
    }
    
    function () payable{
        uint tokens = price.mul(msg.value);
        if(tokens <= balances[owner]){
            balances[owner] = balances[owner].sub(tokens);
            balances[msg.sender] = balances[msg.sender].add(tokens);
            receiver.transfer(msg.value);
            Transfer(owner, msg.sender, tokens);
        }else{
            throw;
        }
    }
}
function deleteFreezeList(address addr) onlyOwner returns(bool){
    if(freezeList[addr]){
        delete freezeList[addr];
        return true;
    }else{
        return false;
    }
}

//解除冻结账户