interface IControlledToken is IERC20 {

    /** 
        @notice Interface to the contract responsible for controlling mint/burn
    */
    function controller() external view returns (address);

    /** 
      * @notice Allows the controller to mint tokens for a user account
      * @dev May be overridden to provide more granular control over minting
      * @param user Address of the receiver of the minted tokens
      * @param amount Amount of tokens to mint
    */
    function controllerMint(address user, uint256 amount) external;

    /** 
      * @notice Allows the controller to burn tokens from a user account
      * @dev May be overridden to provide more granular control over burning
      * @param user Address of the holder account to burn tokens from
      * @param amount Amount of tokens to burn
    */
    function controllerBurn(address user, uint256 amount) external;

    /** 
      * @notice Allows an operator via the controller to burn tokens on behalf of a user account
      * @dev May be overridden to provide more granular control over operator-burning
      * @param operator Address of the operator performing the burn action via the controller contract
      * @param user Address of the holder account to burn tokens from
      * @param amount Amount of tokens to burn
    */
    function controllerBurnFrom(
        address operator,
        address user,
        uint256 amount
    ) external;
}
/** @title IControlledToken
 * @author PoolTogether Inc Team
 * @notice ERC20 Tokens with a controller for minting & burning.
 */
function controllerBurnFrom(
    address operator,
    address user,
    uint256 amount
) external;

/**
 * @notice Allows an operator via the controller to burn tokens on behalf of a user account
 * @dev May be overridden to provide more granular control over operator-burning
 * @param operator Address of the operator performing the burn action via the controller contract
 * @param user Address of the holder account to burn tokens from
 * @param amount Amount of tokens to burn
 */