contract ILoopring is Claimable, ReentrancyGuard
{
    string  constant public version = ""; // must override this

    uint    public exchangeCreationCostLRC;
    address public universalRegistry;
    address public lrcAddress;

    event ExchangeInitialized(
        uint    indexed exchangeId,
        address indexed exchangeAddress,
        address indexed owner,
        address         operator,
        bool            onchainDataAvailability
    );

    /// @dev Initializes and registers an exchange.
    ///      This function should only be callable by the UniversalRegistry contract.
    ///      Also note that this function can only be called once per exchange instance.
    /// @param  exchangeAddress The address of the exchange to initialize and register.
    /// @param  exchangeId The unique exchange id.
    /// @param  owner The owner of the exchange.
    /// @param  operator The operator of the exchange.
    /// @param  onchainDataAvailability True if "Data Availability" is turned on for this
    ///         exchange. Note that this value can not be changed once the exchange is initialized.
    /// @return exchangeId The id of the exchange.
    function initializeExchange(
        address exchangeAddress,
        uint    exchangeId,
        address owner,
        address payable operator,
        bool    onchainDataAvailability
        )
        external;
}
/// @title ILoopring
/// @author Daniel Wang  - <daniel@loopring.org>
function initializeExchange(
    address exchangeAddress,
    uint    exchangeId,
    address owner,
    address payable operator,
    bool    onchainDataAvailability
    )
    external;

/// @dev Initializes and registers an exchange.
///      This function should only be callable by the UniversalRegistry contract.
///      Also note that this function can only be called once per exchange instance.
/// @param  exchangeAddress The address of the exchange to initialize and register.
/// @param  exchangeId The unique exchange id.
/// @param  owner The owner of the exchange.
/// @param  operator The operator of the exchange.
/// @param  onchainDataAvailability True if "Data Availability" is turned on for this
///         exchange. Note that this value can not be changed once the exchange is initialized.
/// @return exchangeId The id of the exchange.