diff --git a/src/features/markets/components/oracle/MarketOracle/API3FeedTooltip.tsx b/src/features/markets/components/oracle/MarketOracle/API3FeedTooltip.tsx
new file mode 100644
index 00000000..2c65d1b1
--- /dev/null
+++ b/src/features/markets/components/oracle/MarketOracle/API3FeedTooltip.tsx
@@ -0,0 +1,79 @@
+import Image from 'next/image';
+import Link from 'next/link';
+import type { Address } from 'viem';
+import etherscanLogo from '@/imgs/etherscan.png';
+import { getExplorerURL } from '@/utils/external';
+import { OracleVendorIcons, PriceFeedVendors, type FeedData, type FeedFreshnessStatus } from '@/utils/oracle';
+import type { OracleFeed } from '@/utils/types';
+import { FeedFreshnessSection } from './FeedFreshnessSection';
+
+type API3FeedTooltipProps = {
+ feed: OracleFeed;
+ feedData?: FeedData | null;
+ chainId: number;
+ feedFreshness?: FeedFreshnessStatus;
+};
+
+export function API3FeedTooltip({ feed, feedData, chainId, feedFreshness }: API3FeedTooltipProps) {
+ const baseAsset = feed.pair?.[0] ?? feedData?.pair[0] ?? 'Unknown';
+ const quoteAsset = feed.pair?.[1] ?? feedData?.pair[1] ?? 'Unknown';
+
+ const vendorIcon = OracleVendorIcons[PriceFeedVendors.API3];
+
+ return (
+
+ {/* Header with icon and title */}
+
+ {vendorIcon && (
+
+
+
+ )}
+
API3 Data Feed
+
+
+ {/* Feed pair name */}
+
+
+ {baseAsset} / {quoteAsset}
+
+
+
+ {/* Description */}
+ {feedData?.description && (
+
+
{feedData.description}
+
+ )}
+
+
+
+ {/* External Links */}
+
+
View on:
+
+
+
+ Explorer
+
+
+
+
+ );
+}
diff --git a/src/features/markets/components/oracle/MarketOracle/FeedEntry.tsx b/src/features/markets/components/oracle/MarketOracle/FeedEntry.tsx
index f06549ca..27f0d6c1 100644
--- a/src/features/markets/components/oracle/MarketOracle/FeedEntry.tsx
+++ b/src/features/markets/components/oracle/MarketOracle/FeedEntry.tsx
@@ -26,6 +26,7 @@ import { CompoundFeedTooltip } from './CompoundFeedTooltip';
import { GeneralFeedTooltip } from './GeneralFeedTooltip';
import { PendleFeedTooltip } from './PendleFeedTooltip';
import { RedstoneFeedTooltip } from './RedstoneFeedTooltip';
+import { API3FeedTooltip } from './API3FeedTooltip';
import { UnknownFeedTooltip } from './UnknownFeedTooltip';
type FeedEntryProps = {
@@ -132,6 +133,16 @@ export function FeedEntry({
/>
);
+ case PriceFeedVendors.API3:
+ return (
+
+ );
+
case PriceFeedVendors.PythNetwork:
case PriceFeedVendors.Oval:
case PriceFeedVendors.Lido:
diff --git a/src/imgs/oracles/api3.svg b/src/imgs/oracles/api3.svg
new file mode 100644
index 00000000..bfdfe99f
--- /dev/null
+++ b/src/imgs/oracles/api3.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/utils/oracle.ts b/src/utils/oracle.ts
index 7079a4be..c9e8a86f 100644
--- a/src/utils/oracle.ts
+++ b/src/utils/oracle.ts
@@ -52,6 +52,7 @@ export enum PriceFeedVendors {
Compound = 'Compound',
Lido = 'Lido',
Pendle = 'Pendle',
+ API3 = 'API3',
Unknown = 'Unknown',
}
@@ -63,6 +64,7 @@ export const OracleVendorIcons: Record = {
[PriceFeedVendors.Compound]: require('../imgs/oracles/compound.webp') as string,
[PriceFeedVendors.Lido]: require('../imgs/oracles/lido.png') as string,
[PriceFeedVendors.Pendle]: require('../imgs/oracles/pendle.png') as string,
+ [PriceFeedVendors.API3]: require('../imgs/oracles/api3.svg') as string,
[PriceFeedVendors.Unknown]: '',
};
@@ -83,6 +85,7 @@ export function mapProviderToVendor(provider: OracleFeedProvider): PriceFeedVend
lido: PriceFeedVendors.Lido,
oval: PriceFeedVendors.Oval,
pyth: PriceFeedVendors.PythNetwork,
+ api3: PriceFeedVendors.API3,
};
return mapping[normalizedProvider] ?? PriceFeedVendors.Unknown;