Build / Oracles

DIA Price Feeds

Overview

DIA Oracles provide secure, customizable, and decentralized price feeds that can be integrated into smart contracts on the Somnia Testnet. This guide will walk you through how to access on-chain price data, understand the oracle’s functionality, and integrate it into your Solidity Smart Contracts.

https://www.youtube.com/watch?v=Fumsv0y4rNU

Oracle Details

Contracts on Somnia

NetworkContract Address
Mainnet0xbA0E0750A56e995506CA458b2BdD752754CF39C4
Testnet0x9206296Ea3aEE3E6bdC07F7AaeF14DfCf33d865D

Gas Wallets

The gas wallet is used for pushing data to your contracts. To ensure uninterrupted Oracle operation, please maintain sufficient funds in the gas wallet. You can monitor the wallets below to ensure they remain adequately funded at all times.

NetworkContract Address
Mainnet0x3073d2E61ecb6E4BF4273Af83d53eDAE099ea04a
Testnet0x24384e1c60547b0d5403b21ed9b6fb9457fb573f

Oracle Configuration

  • Pricing Methodology: MAIR
  • Deviation Threshold: 0.5% (Triggers price update if exceeded)
  • Refresh Frequency: Every 120 seconds
  • Heartbeat: Forced price update every 24 hours

Supported Asset Feeds

Mainnet

Asset TickerAdapter AddressAsset Markets Overview
USDT0x936C4F07fD4d01485849ee0EE2Cdcea2373ba267USDT markets
USDC0x5D4266f4DD721c1cD8367FEb23E4940d17C83C93USDC markets
BTC0xb12e1d47b0022fA577c455E7df2Ca9943D0152bEBTC markets
ARB0x6a96a0232402c2BC027a12C73f763b604c9F77a6ARB markets
SOL0xa4a3a8B729939E2a79dCd9079cee7d84b0d96234SOL markets
WETH0x4E5A9Ebc4D48d7dB65bCde4Ab9CBBE89Da2Add52WETH markets
SOMI0x1f5f46B0DABEf8806a1f33772522ED683Ba64E27SOMI markets

Testnet

Asset TickerAdapter AddressAsset Markets Overview
USDT0x67d2C2a87A17b7267a6DBb1A59575C0E9A1D1c3eUSDT markets
USDC0x235266D5ca6f19F134421C49834C108b32C2124eUSDC markets
BTC0x4803db1ca3A1DA49c3DB991e1c390321c20e1f21BTC markets
ARB0x74952812B6a9e4f826b2969C6D189c4425CBc19BARB markets
SOL0xD5Ea6C434582F827303423dA21729bEa4F87D519SOL markets
WETH0x786c7893F8c26b80d42088749562eDb50Ba9601EWETH markets
SOMI0xaEAa92c38939775d3be39fFA832A92611f7D6aDeSOMI markets

How the Oracle Works

DIA oracles continuously fetch and push asset prices on-chain using an oracleUpdater, which operates within the DIAOracleV2 contract. The oracle uses predefined update intervals and deviation thresholds to determine when price updates are necessary.

Each asset price feed has an adapter contract, allowing access through the AggregatorV3Interface. You can use the methods getRoundData and latestRoundData to fetch pricing information. Learn more here.

Using the Solidity Library

DIA has a dedicated Solidity library to facilitate the integration of DIA oracles in your own contracts. The library consists of two functions, getPrice and getPriceIfNotOlderThan.

Access the library

import { DIAOracleLib } from "./libraries/DIAOracleLib.sol";

getPrice

function getPrice(
        address oracle,
        string memory key
        )
        public
        view
        returns (uint128 latestPrice, uint128 timestampOflatestPrice);

Returns the price of a specified asset along with the update timestamp.

getPriceIfNotOlderThan

function getPriceIfNotOlderThan(
        address oracle,
        string memory key,
        uint128 maxTimePassed
        )
        public
        view
        returns (uint128 price, bool inTime)
    {

Checks if the Oracle price is older than maxTimePassed

Using DIAOracleV2 Interface

The following contract provides an integration example of retrieving prices and verifying price age.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

interface IDIAOracleV2 {
    function getValue(string memory) external view returns (uint128, 
             uint128);
}

contract DIAOracleSample {

    address diaOracle;

    constructor(address _oracle) {
        diaOracle = _oracle;
    }

    function getPrice(string memory key) 
    external 
    view
    returns (
        uint128 latestPrice, 
        uint128 timestampOflatestPrice
    ) {
        (latestPrice, timestampOflatestPrice) =   
                 IDIAOracleV2(diaOracle).getValue(key); 
    }
}

Full Example on DIA Docs

Adapter contracts

To consume price data from DIA Oracle, you can use the adapter Smart Contract located at the adapter address for each asset. This will allow you to access the same methods on the AggregatorV3Interface such as getRoundData & latestRoundData. You can learn more here.

Glossary

Term Definition
Deviation Percentage threshold that triggers a price update when exceeded.
Refresh Frequency Time interval for checking and updating prices if conditions are met.
Trade Window Time interval used to aggregate trades for price calculation.
Heartbeat Forced price update at a fixed interval.

Support

If you need further assistance integrating DIA Oracles, reach out through DIA’s official documentation and ask your questions in the #dev-support channel on Discord.

Developers can build secure, real-time, and on-chain financial applications with reliable pricing data by integrating DIA Oracles on Somnia.

Copied from docs.somnia.network (somnia-main-docs) by scripts/import-gitbook.mts, until it finds a home in a product's docs.Edit this page