contract IExchangeWithManualApproval {
    /**
    @notice fire when an approver's state is changed
     */
    event ApproverStateChanged(bool newState);

    /**
    @notice fired when an approval is requested
     */
    event ManualApprovalRequired(
        uint256 exchangeOperationId,
        uint256 tokensAmountToExchange
    );

    /**
    @notice fired when an exchange operation is approved
     */
    event ExchangeOperationApproved(uint256 exchangeOperationid, bool approved);

    /**
    @notice function is called to change the state of an approver
    @param approver the address of approver to which the state is changed
    @param newState the state of the approver
     */
    function changeApproverState(address approver, bool newState) external;

    function confirmExchangeOperation(
        uint256 exchangeOperationId,
        bool status,
        uint256 purchasedTokens,
        uint256 bountyTokens
    ) external;

    /**
    @notice get an exchange operation by its ID
    @param  exchangeOperationId the ID of exchange operation
    @return the address of receiver
    @return the amount of chelle tokens
    @return the amoount of AT tokens
    @return the state of this particular operation
     */
    function getExchangeOperationByID(uint256 exchangeOperationId)
        public
        view
        returns (address, uint256, uint256, uint8);
}
/**
 @title IExchangeWithManualApproval
 @dev This contract represents an Interface to ExchangeWithManualApproval contract
 */
function changeApproverState(address approver, bool newState) external;

/**
 @notice function is called to change the state of an approver
 @param approver the address of approver to which the state is changed
 @param newState the state of the approver
 */