Gloop
WebsiteTwitterDiscord
  • gLoop Litepaper v2
    • Introduction
    • The Two Tokens
    • Roadmap
  • PRODUCTS
    • GM Index
      • Providing/Removing Liquidity
      • Fees and Reflection
      • Deposit/Withdrawal Examples
    • GM Lending/Looping (Coming Soon)
    • GLOOP Staking (Coming Soon)
  • GM Points (COMING SOON)
  • FREQUENTLY ASKED QUESTIONS (FAQs)
    • GM Index (GMI)
  • Technical
    • Gloop Protocol Parameters
    • Contracts
      • GMI
        • GM Index
        • GMI USDC Zap
        • Token Banks
        • Token Oracles
        • Fees
    • Audits
  • GLoop Ecosystem
    • Tokenomics
  • Security and Risk
    • Risks
  • Social
    • Socials
Powered by GitBook
On this page
  • getUnderlyingPrice
  • getPriceFromChainlink
  1. Technical
  2. Contracts
  3. GM Lending and Looping

GM Price Oracle

Last updated 11 months ago

GM Lending/Looping asset prices are obtained via a combination of the USDC Chainlink Oracle and previously deployed GMI Price Oracle contracts. As such, this current Oracle version behaves more like a Price Router in practice, but for simplicity's and posterity's sakes, it is labeled as a Price Oracle here.

At deployment, the Oracle contract stores addresses (the GMX GM token addresses and the USDC token address) for use in getUnderlyingPrice(). The contract has no constructor.

getUnderlyingPrice

function getUnderlyingPrice(ERC20 asset) external view returns (uint256)

Retrieves the current price of the token provided. If the asset is USDC, then the function calls the internal function and relays the USDC price returned by that function call (see the section below for details). If the asset is a valid GM token (gmBTC, gmETH, or gmSOL), then the respective GMI price oracle contract is stored in the oracle variable. getPrice() is then called on the oracle instance, and the final price is returned. If the asset is not a valid GM token, then the function returns zero.

To see how getPrice() interacts with GMX architecture to retrieve current asset prices, please head to the section.

Parameters:

Name
Type
Description

asset

ERC20

Retrieves the price for this asset

Returns:

Name
Type
Description

x

uint256

The price of the GM token, determined by the GMX reader contract. The price will have 18 decimals. If USDC, the price is returned by the Chainlink Arbitrum Mainnet USDC Price Feed.

getPriceFromChainlink

function getPriceFromChainlink() internal view returns (uint256)

Retrieves the current price of USDC. Chainlink's USDC price feed address is typecast to the AggregatorV3Interface type. The function then calls latestRoundData() on the price feed instance to retrieve the latest round's price. After a type conversion, the answer is fed back into getUnderlyingPrice() where it is upscaled to 18 decimals to play nice with collateral asset decimals, and the final price is returned by the function.

Parameters:

Name
Type
Description

feedId

address

The Chainlink Price Feed contract address of the token

Returns:

Name
Type
Description

answer

uint256

The Oracle-returned price (with 8 decimals) of the token.

GMI Token Oracles
getPriceFromChainlink()