{testnetFeeds.length ? (
testnetFeeds.map((network) => (
@@ -186,7 +196,7 @@ export const FeedList = ({
.filter((chain) => {
if (isStreams) return chain.tags?.includes("streams")
- if (isPor) return chain.tags?.includes("proofOfReserve")
+ if (isSmartData) return chain.tags?.includes("smartData")
if (isRates) return chain.tags?.includes("rates")
@@ -236,7 +246,7 @@ export const FeedList = ({
if (isStreams) return network.tags?.includes("streams")
- if (isPor) return network.tags?.includes("proofOfReserve")
+ if (isSmartData) return network.tags?.includes("smartData")
if (isRates) return network.tags?.includes("rates")
@@ -244,102 +254,181 @@ export const FeedList = ({
})
.map((network: ChainNetwork) => {
return (
-
- {network.networkType === "mainnet" ? (
- <>
- {!isStreams &&
- (selectedChain === "arbitrum" || selectedChain === "optimism" || selectedChain === "metis") && (
+ <>
+
+ {network.networkType === "mainnet" ? (
+ <>
+ {!isStreams && chain.l2SequencerFeed && (
{network.name} is an L2 network. As a best practice, use the L2 sequencer feed to verify the
status of the sequencer when running applications on L2 networks. See the{" "}
L2 Sequencer Uptime Feeds page for examples.
)}
-
- {!isStreams && (
-
- setShowCategoriesDropdown((prev) => !prev)}>
- Data Feed Categories
-
-
-
+ {network.name === "Aptos Mainnet" && (
+ <>
+
+ Chainlink Data Feeds on Aptos provides data through a single price feed contract that handles
+ multiple data feeds. You interact with this contract by passing the specific feed ID(s) for
+ the data you need. For more details, refer to the{" "}
+ Using Data Feeds on Aptos guide.
+
+
+ Price feed contract on Aptos Mainnet:{" "}
+
+ 0x3f985798ce4975f430ef5c75776ff98a77b9f9d0fb38184d225adc9c1cc6b79b
+
+
+
+ >
+ )}
+
+ {!isStreams && !isSmartData && (
+
+ setShowCategoriesDropdown((prev) => !prev)}>
+ Data Feed Categories
+
+
+
+ )}
+ {isSmartData && (
+
+ setShowCategoriesDropdown((prev) => !prev)}>
+ SmartData Type
+
+
+
+ )}
+
+ {!isStreams && (
+
+ )}
+
+
+ >
+ ) : (
+ <>
+ {network.name === "Aptos Testnet" && (
+ <>
+
+ Chainlink Data Feeds on Aptos provides data through a single price feed contract that handles
+ multiple data feeds. You interact with this contract by passing the specific feed ID(s) for
+ the data you need. For more details, refer to the{" "}
+ Using Data Feeds on Aptos guide.
+
+
+ Price feed contract on Aptos Testnet:{" "}
+
+ 0xf1099f135ddddad1c065203431be328a408b0ca452ada70374ce26bd2b32fdd3
+
+
+
+ >
)}
-
{!isStreams && (
-
-
- >
- ) : (
- <>
- {!isStreams && (
-
- setShowExtraDetails((old) => !old)}
- />{" "}
- Show more details
-
- )}
-
- >
- )}
-
+
+ >
+ )}
+
+ >
)
})}
{isDeprecating && netCount === 0 && (
diff --git a/src/features/feeds/components/FeedPage.astro b/src/features/feeds/components/FeedPage.astro
index f392df8d215..992f581cc38 100644
--- a/src/features/feeds/components/FeedPage.astro
+++ b/src/features/feeds/components/FeedPage.astro
@@ -19,7 +19,7 @@ const feedItems: FeedDataItem[] = monitoredFeeds.mainnet
---
{
- dataFeedType === "por"
+ dataFeedType === "smartdata"
? feedItems.map((feedItem: FeedDataItem) => {
const [feedAddress] = Object.keys(feedItem)
return (
@@ -65,7 +65,7 @@ const feedItems: FeedDataItem[] = monitoredFeeds.mainnet
>
) : (
<>
- {dataFeedType === "streams" ? (
+ {dataFeedType === "streamsCrypto" || dataFeedType === "streamsRwa" ? (
<>
To learn how to use Data Streams, see the{" "}
@@ -82,11 +82,10 @@ const feedItems: FeedDataItem[] = monitoredFeeds.mainnet
>
- ) : dataFeedType === "por" ? (
+ ) : dataFeedType === "smartdata" ? (
<>
- To learn how to use these feeds, see the{" "}
- Proof Of Reserve Feeds documentation.
+ To learn how to use these feeds, see the SmartData Feeds documentation.
For LINK token and Faucet details, see the{" "}
@@ -135,7 +134,7 @@ const feedItems: FeedDataItem[] = monitoredFeeds.mainnet
}
{
- dataFeedType === "por" ? (
+ dataFeedType === "smartdata" ? (
<>
>
- ) : dataFeedType === "streams" ? (
+ ) : dataFeedType === "streamsCrypto" || dataFeedType === "streamsRwa" ? (
<> >
) : (
<>
diff --git a/src/features/feeds/components/Tables.module.css b/src/features/feeds/components/Tables.module.css
index ee6a2cc3db5..b88cc445ffe 100644
--- a/src/features/feeds/components/Tables.module.css
+++ b/src/features/feeds/components/Tables.module.css
@@ -22,10 +22,12 @@
.table td:nth-child(2) {
width: 80px;
}
+
.table th:nth-child(3),
.table td:nth-child(3) {
width: 80px;
}
+
.table th:nth-child(4),
.table td:nth-child(4) {
width: 50px;
@@ -60,11 +62,21 @@
.addressLink {
background: var(--color-background-secondary);
- padding: 1px 5px;
+ padding: 1px 0px;
border-radius: var(--border-radius-10);
word-break: break-word;
}
+.streamAddress {
+ background: var(--blue-100);
+ padding: 4px 0px;
+ word-break: break-word;
+}
+
+.label {
+ text-align: left;
+}
+
.copyBtn {
background: none;
border: none;
@@ -77,10 +89,30 @@
color: var(--color-text-link);
}
-.porDl > div {
+.listContainer {
+ display: flex;
+ flex-direction: column;
+ margin-bottom: var(--space-1x);
+}
+
+.definitionGroup {
display: flex;
+ flex-direction: row;
align-items: center;
- gap: var(--space-1x);
+ gap: 0.25em;
+}
+
+.listContainer dt {
+ font-weight: var(--font-weight-medium);
+ margin: 0;
+}
+
+.listContainer dd {
+ margin: 0;
+}
+
+.label {
+ text-align: left;
}
.pagination {
@@ -91,6 +123,10 @@
padding: 4px;
}
+.contactUsMessage {
+ text-align: left;
+}
+
@media screen and (max-width: 500px) {
.pagination {
margin-top: 10px;
@@ -109,3 +145,95 @@
width: 100%;
}
}
+
+.networksContainer {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+ width: 100%;
+ max-width: 1200px;
+ margin: 0 auto;
+}
+
+.networkCard {
+ border: 1px solid var(--border-color);
+ border-radius: 8px;
+ overflow: hidden;
+}
+
+.networkHeader {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ padding: 1rem;
+ background: var(--background-color);
+ border: none;
+ cursor: pointer;
+ transition: background-color 0.2s ease;
+}
+
+.networkHeader:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+
+.networkHeader.active {
+ background: var(--active-background);
+}
+
+.networkInfo {
+ display: flex;
+ align-items: center;
+ gap: 1rem;
+}
+
+.networkInfo img {
+ border-radius: 50%;
+}
+
+.expandIcon {
+ font-size: 1.5rem;
+ font-weight: bold;
+}
+
+.networkDetails {
+ background-color: #f5f8ff;
+ padding: 1rem;
+ border-radius: 0 0 8px 8px;
+ transition: background-color 0.2s ease;
+}
+
+.networkEnvironment {
+ margin-bottom: 1.5rem;
+}
+
+.networkEnvironment h4 {
+ margin-bottom: 0.75rem;
+ color: var(--heading-color);
+}
+
+.addressContainer {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ font-family: monospace;
+ background: var(--code-background);
+ padding: 0.5rem;
+ border-radius: 4px;
+ margin-top: 0.25rem;
+}
+
+.networkStatus {
+ margin-top: 1rem;
+ padding-top: 1rem;
+ border-top: 1px solid var(--border-color);
+}
+
+.networkStatus a {
+ color: var(--link-color);
+ text-decoration: none;
+}
+
+.networkStatus a:hover {
+ text-decoration: underline;
+}
diff --git a/src/features/feeds/components/Tables.tsx b/src/features/feeds/components/Tables.tsx
index 2bd7b81d7e3..849b322172e 100644
--- a/src/features/feeds/components/Tables.tsx
+++ b/src/features/feeds/components/Tables.tsx
@@ -1,4 +1,5 @@
/** @jsxImportSource preact */
+import { useState } from "preact/hooks"
import feedList from "./FeedList.module.css"
import { clsx } from "../../../lib"
import { ChainNetwork } from "~/features/data/chains"
@@ -79,7 +80,7 @@ const Pagination = ({ addrPerPage, totalAddr, paginate, currentPage, firstAddr,
}
return (
-