Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.ifalabs.com/llms.txt

Use this file to discover all available pages before exploring further.

This page is the authoritative reference for every price feed currently supported by IFÁ Labs. All feeds are USD-denominated, use consistent asset IDs across every supported network, and are updated using the hybrid deviation + heartbeat trigger model documented in Update Triggers.

Current Price Feeds

AssetSymbolCategoryDecimalAsset ID (bytes32)
TetherUSDT/USDGlobal-180x6ca0cef6107263f3b09a51448617b659278cff744f0e702c24a2f88c91e65a0d
USD CoinUSDC/USDGlobal-180xf989296bde68043d307a2bc0e59de3445defc5f292eb390b80d78162c8a6b13d
Nigerian Naira StablecoinCNGN/USDEmerging Market-180x83a18c73cf75a028a24b79cbedb3b8d8ba363b748a3210ddbcaa95eec3b87b3a
South African Rand StablecoinZARP/USDEmerging Market-180x12373a3b1c4827c84bf6d7b11df100442695d0abfdb7a20d30a41d67d58e75a8
Brazilian Real StablecoinBRZ/USDEmerging Market-180xbc60b55b031dce1ee5679098bf2f35d66a94a566124e2b233324d2bafcc6d5b5
EthereumETH/USDReference Asset-180x8c3fb07cab369fe230ca4e45d095f796c4c1a30131f1799766d4fec5ee1325c0
ETH/USD is included as a reference asset to enable derived pair calculations between stablecoins and ETH. IFÁ Labs is stablecoin-first — ETH is not a primary feed target.

Feed Configuration

Each asset is configured with independent update triggers calibrated to its market behaviour:
AssetDeviation ThresholdHeartbeatRecommended MAX_PRICE_AGE
USDT/USD0.1%1 hour5,400s (90 min)
USDC/USD0.1%1 hour5,400s (90 min)
CNGN/USD0.3%2 hours10,800s (3 hrs)
ZARP/USD0.3%2 hours10,800s (3 hrs)
BRZ/USD0.3%2 hours10,800s (3 hrs)
ETH/USD0.5%1 hour5,400s (90 min)
The Recommended MAX_PRICE_AGE is 1.5× the heartbeat interval — the minimum safe staleness threshold accounting for heartbeat jitter. See Update Triggers for a full explanation of the trigger model.

Network Availability

All feeds are available on every currently supported network. Asset IDs are identical across networks — only the contract address changes.
NetworkStatusContract Address
Base MainnetLive0xA9F17344689C2c2328F94464998db1d3e35B80dC
Base SepoliaTestnet0xbF2ae81D8Adf3AA22401C4cC4f0116E936e1025b
AssetChain TestnetTestnet0xBAc31e568883774A632275F9c8E7A5Bd117000F7

Asset ID Generation

Every asset ID is deterministically generated from its symbol string using keccak256:
bytes32 assetId = keccak256(abi.encodePacked("USDT/USD"));
Symbol string format: uppercase, forward slash separator, /USD suffix. Case-sensitive — "usdt/usd" produces a different hash and returns exists = false. Verify any asset ID independently:
const { ethers } = require("ethers");

const assets = [
  "USDT/USD",
  "USDC/USD",
  "CNGN/USD",
  "ZARP/USD",
  "BRZ/USD",
  "ETH/USD",
];

assets.forEach(symbol => {
  const id = ethers.keccak256(ethers.toUtf8Bytes(symbol));
  console.log(`${symbol}: ${id}`);
});

Solidity Constants

Copy-paste ready constants for every supported asset:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @notice IFÁ Labs asset ID constants
/// @dev Generated via keccak256(abi.encodePacked("SYMBOL/USD"))
///      Identical across all supported networks

// Global stablecoins
bytes32 public constant USDT_ASSET_ID =
    0x6ca0cef6107263f3b09a51448617b659278cff744f0e702c24a2f88c91e65a0d;

bytes32 public constant USDC_ASSET_ID =
    0xf989296bde68043d307a2bc0e59de3445defc5f292eb390b80d78162c8a6b13d;

// Emerging market stablecoins
bytes32 public constant CNGN_ASSET_ID =
    0x83a18c73cf75a028a24b79cbedb3b8d8ba363b748a3210ddbcaa95eec3b87b3a;

bytes32 public constant ZARP_ASSET_ID =
    0x12373a3b1c4827c84bf6d7b11df100442695d0abfdb7a20d30a41d67d58e75a8;

bytes32 public constant BRZ_ASSET_ID =
    0xbc60b55b031dce1ee5679098bf2f35d66a94a566124e2b233324d2bafcc6d5b5;

// Reference asset
bytes32 public constant ETH_ASSET_ID =
    0x8c3fb07cab369fe230ca4e45d095f796c4c1a30131f1799766d4fec5ee1325c0;

JavaScript / TypeScript Constants

export const IFA_ASSET_IDS = {
  "USDT/USD": "0x6ca0cef6107263f3b09a51448617b659278cff744f0e702c24a2f88c91e65a0d",
  "USDC/USD": "0xf989296bde68043d307a2bc0e59de3445defc5f292eb390b80d78162c8a6b13d",
  "CNGN/USD": "0x83a18c73cf75a028a24b79cbedb3b8d8ba363b748a3210ddbcaa95eec3b87b3a",
  "ZARP/USD": "0x12373a3b1c4827c84bf6d7b11df100442695d0abfdb7a20d30a41d67d58e75a8",
  "BRZ/USD":  "0xbc60b55b031dce1ee5679098bf2f35d66a94a566124e2b233324d2bafcc6d5b5",
  "ETH/USD":  "0x8c3fb07cab369fe230ca4e45d095f796c4c1a30131f1799766d4fec5ee1325c0",
} as const;

export const IFA_MAX_PRICE_AGE: Record<keyof typeof IFA_ASSET_IDS, number> = {
  "USDT/USD": 5400,
  "USDC/USD": 5400,
  "CNGN/USD": 10800,
  "ZARP/USD": 10800,
  "BRZ/USD":  10800,
  "ETH/USD":  5400,
};

Python Constants

IFA_ASSET_IDS = {
    "USDT/USD": "0x6ca0cef6107263f3b09a51448617b659278cff744f0e702c24a2f88c91e65a0d",
    "USDC/USD": "0xf989296bde68043d307a2bc0e59de3445defc5f292eb390b80d78162c8a6b13d",
    "CNGN/USD": "0x83a18c73cf75a028a24b79cbedb3b8d8ba363b748a3210ddbcaa95eec3b87b3a",
    "ZARP/USD": "0x12373a3b1c4827c84bf6d7b11df100442695d0abfdb7a20d30a41d67d58e75a8",
    "BRZ/USD":  "0xbc60b55b031dce1ee5679098bf2f35d66a94a566124e2b233324d2bafcc6d5b5",
    "ETH/USD":  "0x8c3fb07cab369fe230ca4e45d095f796c4c1a30131f1799766d4fec5ee1325c0",
}

IFA_MAX_PRICE_AGE = {
    "USDT/USD": 5400,
    "USDC/USD": 5400,
    "CNGN/USD": 10800,
    "ZARP/USD": 10800,
    "BRZ/USD":  10800,
    "ETH/USD":  5400,
}

# Convert hex strings to bytes for web3.py
IFA_ASSET_IDS_BYTES = {
    symbol: bytes.fromhex(asset_id[2:])
    for symbol, asset_id in IFA_ASSET_IDS.items()
}

Derived Pair Support

Any two supported assets can be priced against each other using the oracle’s derived pair functions — without requiring a dedicated feed for every possible combination. Examples of available derived pairs:
PairDescriptionFunction
CNGN/USDTNigerian naira stablecoin priced in USDTgetPairbyId(CNGN, USDT, Forward)
ZARP/USDCSouth African rand stablecoin priced in USDCgetPairbyId(ZARP, USDC, Forward)
BRZ/USDTBrazilian real stablecoin priced in USDTgetPairbyId(BRZ, USDT, Forward)
USDT/CNGNUSDT priced in CNGN termsgetPairbyId(CNGN, USDT, Backward)
ETH/USDCETH priced in USDC termsgetPairbyId(ETH, USDC, Forward)
Any combination of the six supported assets is computable as a derived pair. See Function Reference for the full derived pair API.

Requesting New Feeds

IFÁ Labs adds new assets on a rolling basis based on ecosystem demand. Priority is given to:
  • Stablecoins with verified, transparent backing
  • Assets with demonstrated on-chain or real-world adoption
  • Emerging market stablecoins in Africa, Latin America, and Southeast Asia
  • Assets requested by active protocol integrations
To request a new feed:

Email

support@ifalabs.com — include token contract, backing proof, and use case

Telegram

t.me/ifalabs — fastest response for quick questions

GitHub

Open a feed request issue with full details
When submitting a request, include:
  • Token contract address on all relevant chains
  • Backing mechanism and reserve proof
  • Current daily trading volume across all venues
  • The protocol or use case driving the request
  • Any existing oracle coverage on other networks

Next Steps

Network Information

RPC endpoints, chain IDs, and block explorer links for all supported networks.

Working with Asset IDs

How asset IDs are generated, verified, and used in contracts.