Multiple-Variable Response (MVR) Feeds

Multiple-Variable Response (MVR) feeds bundle multiple data points into a single onchain update, offering more versatility compared to feeds that store only one numeric value.

Traditional Chainlink Data Feeds typically provide a single numeric value such as a price. By contrast, MVR feeds can return multiple values of different types in a single update, including both numeric and non-numeric data.

Key Benefits

  1. Multiple Data Points: Package related data together in one feed. For example, an investment fund feed might include:

    FieldType
    netAssetValueuint256
    assetsUnderManagementuint256
    outstandingSharesuint256
    netIncomeExpensesuint256
    openToNewInvestorsbool
  2. Extensibility: The feed structure can be extended or updated without deploying a new contract.

  3. Efficiency: Multiple data points update in a single transaction.

  4. Flexible Types: Support for various data types beyond just numbers.

Reading MVR Feed Data

MVR feeds use the BundleAggregatorProxy contract as their interface, which provides three key functions:

To use these feeds in your smart contracts, you'll need to:

  1. Obtain the BundleAggregatorProxy address for your desired feed from the SmartData addresses page (use the Show Multiple-Variable Response (MVR) feeds checkbox to filter the list)
  2. Retrieve the data using latestBundle()
  3. Decode the bytes array into the appropriate structure

Note: MVR feeds only store the most recent data onchain. If you need historical data, you must capture it within your own contract or through an offchain indexer.

Check our implementation guides for detailed instructions on integrating MVR feeds using Solidity, ethers.js, or Viem.

Resources

What's next

Get the latest Chainlink content straight to your inbox.