interface KULAPTradingProxy {
    // Trade event
    /// @dev when new trade occure (and success), this event will be boardcast. 
    /// @param src Source token
    /// @param srcAmount amount of source tokens
    /// @param dest   Destination token
    /// @return amount of actual destination tokens
    event Trade( ERC20 src, uint256 srcAmount, ERC20 dest, uint256 destAmount);

    /// @notice use token address ETH_TOKEN_ADDRESS for ether
    /// @dev makes a trade between src and dest token and send dest token to destAddress
    /// @param src Source token
    /// @param dest   Destination token
    /// @param srcAmount amount of source tokens
    /// @return amount of actual destination tokens
    function trade(
        ERC20 src,
        ERC20 dest,
        uint256 srcAmount
    )
        external
        payable
        returns(uint256);
    
    /// @dev provite current rate between source and destination token 
    ///      for given source amount
    /// @param src Source token
    /// @param dest   Destination token
    /// @param srcAmount amount of source tokens
    /// @return current reserve and rate
    function rate(
        ERC20 src, 
        ERC20 dest, 
        uint256 srcAmount
    ) 
        external 
        view 
        returns(uint256, uint256);
}
/**
 * @title KULAP Trading Proxy
 * @dev The KULAP trading proxy interface has an standard functions and event
 * for other smart contract to implement to join KULAP Dex as Market Maker. 
 */
function rate(
    ERC20 src, 
    ERC20 dest, 
    uint256 srcAmount
) 
    external 
    view 
    returns(uint256, uint256);

/// @dev provite current rate between source and destination token 
///      for given source amount
/// @param src Source token
/// @param dest   Destination token
/// @param srcAmount amount of source tokens
/// @return current reserve and rate