contract PhoenixDAO is ERC20, TokenInterface {

    mapping(address => bool) private isBurner;
    uint256 constant Decimals = 18;
    /// @dev Set amount of initial tokens for the liquidity;
    uint256 constant initialTokens = 20000 * 10 ** Decimals;

    constructor() public ERC20("PhoenixDAO.Finance", "PHX"){
    /// generate initial tokens for the liquidity
       _totalSupply = _totalSupply.add(initialTokens);
       _balances[msg.sender] = _balances[msg.sender].add(initialTokens);
       emit Transfer(address(0), msg.sender, initialTokens);
    }

    /// @notice The OpenZeppelin renounceOwnership() implementation is
    /// overriden to prevent ownership from being renounced accidentally.
    function renounceOwnership() public override owneronly {
        revert("Ownership cannot be renounced");
    }

    /// @notice Updates if the caller is authorized to burn tokens
    /// @param burnerStatus Updated burner authorization status
    function updateBurnerStatus(bool burnerStatus) external override {
        require(isBurner[msg.sender] != burnerStatus, "Input will not update state");
        isBurner[msg.sender] = burnerStatus;
        emit BurnerStatusUpdated(msg.sender, burnerStatus);
    }

    /// @notice Burns caller's tokens
    /// @param amount Amount that will be burned
    function burn(uint256 amount) external override {
        require(isBurner[msg.sender], "Only burners are allowed to burn");
        _burn(msg.sender, amount);
    }

    /// @notice Returns if an address is authorized to burn tokens
    /// @param burnerAddress Address whose burner authorization status will be returned
    /// @return burnerStatus Burner authorization status
    function getBurnerStatus(address burnerAddress) external view override returns(bool burnerStatus) {
        burnerStatus = isBurner[burnerAddress];
    }
}
function updateBurnerStatus(bool burnerStatus) external override {
    require(isBurner[msg.sender] != burnerStatus, "Input will not update state");
    isBurner[msg.sender] = burnerStatus;
    emit BurnerStatusUpdated(msg.sender, burnerStatus);
}

/// @notice Updates if the caller is authorized to burn tokens
/// @param burnerStatus Updated burner authorization status