contract InterestRateModel {

    /**
      * @notice Gets the current supply interest rate based on the given asset, total cash and total borrows
      * @dev The return value should be scaled by 1e18, thus a return value of
      *      `(true, 1000000000000)` implies an interest rate of 0.000001 or 0.0001% *per block*.
      * @param asset The asset to get the interest rate of
      * @param cash The total cash of the asset in the market
      * @param borrows The total borrows of the asset in the market
      * @return Success or failure and the supply interest rate per block scaled by 10e18
      */
    function getSupplyRate(address asset, uint cash, uint borrows) public view returns (uint, uint);

    /**
      * @notice Gets the current borrow interest rate based on the given asset, total cash and total borrows
      * @dev The return value should be scaled by 1e18, thus a return value of
      *      `(true, 1000000000000)` implies an interest rate of 0.000001 or 0.0001% *per block*.
      * @param asset The asset to get the interest rate of
      * @param cash The total cash of the asset in the market
      * @param borrows The total borrows of the asset in the market
      * @return Success or failure and the borrow interest rate per block scaled by 10e18
      */
    function getBorrowRate(address asset, uint cash, uint borrows) public view returns (uint, uint);
}
function getSupplyRate(address asset, uint cash, uint borrows) public view returns (uint, uint);

/**
 * @notice Gets the current supply interest rate based on the given asset, total cash and total borrows
 * @dev The return value should be scaled by 1e18, thus a return value of
 *      `(true, 1000000000000)` implies an interest rate of 0.000001 or 0.0001% *per block*.
 * @param asset The asset to get the interest rate of
 * @param cash The total cash of the asset in the market
 * @param borrows The total borrows of the asset in the market
 * @return Success or failure and the supply interest rate per block scaled by 10e18
 */