contract IPriceOracle {

    // ============ Constants ============

    uint256 public constant ONE_DOLLAR = 10 ** 36;

    // ============ Public Functions ============

    /**
     * Get the price of a token
     *
     * @param  token  The ERC20 token address of the market
     * @return        The USD price of a base unit of the token, then multiplied by 10^36.
     *                So a USD-stable coin with 18 decimal places would return 10^18.
     *                This is the price of the base unit rather than the price of a "human-readable"
     *                token amount. Every ERC20 may have a different number of decimals.
     */
    function getPrice(
        address token
    )
        public
        view
        returns (Monetary.Price memory);
}
/**
 * @title IPriceOracle
 * @author dYdX
 *
 * Interface that Price Oracles for Solo must implement in order to report prices.
 */
function getPrice(
    address token
)
    public
    view
    returns (Monetary.Price memory);

/**
 * Get the price of a token
 *
 * @param  token  The ERC20 token address of the market
 * @return        The USD price of a base unit of the token, then multiplied by 10^36.
 *                So a USD-stable coin with 18 decimal places would return 10^18.
 *                This is the price of the base unit rather than the price of a "human-readable"
 *                token amount. Every ERC20 may have a different number of decimals.
 */