pragma solidity ^0.5.0;

contract SuperToken {
    
    event Transfer(address indexed from, address indexed to, uint tokens);

    mapping(address => uint256) private balances;
    
    uint256 private _totalSupply;
    uint256 private _rate= 0.006 ether;


    function name() public pure returns (string memory) { return "SuperToken"; }
    function symbol() public pure returns (string memory) { return "STK"; }
    function decimals() public pure returns (uint8) { return 18; }
    function totalSupply() public view returns (uint256) { return _totalSupply; }
    function balanceOf(address _owner) public view returns (uint256) { return balances[_owner];}
    
    
    function transfer(address _to, uint256 _value) public returns (bool success) {
        require (balances[msg.sender] >= _value) ;
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        emit Transfer(msg.sender, _to, _value);
        return true;
    }
   
    function mint(uint256 amount) payable public {
        require(msg.value >= _rate*amount ) ; 
        _totalSupply += amount;
        balances[msg.sender] += amount;
    }  
    
    function burn(uint256 amount) public returns (bool success) {
        require (balances[msg.sender] >= amount) ;
        balances[msg.sender] -=amount;
        _totalSupply -= amount;
        return true;
    }  


}