diff --git a/src/config/sidebar.ts b/src/config/sidebar.ts index c5669c49bd6..f1a0c6fcc40 100644 --- a/src/config/sidebar.ts +++ b/src/config/sidebar.ts @@ -876,6 +876,7 @@ export const SIDEBAR: Partial> = { }, { title: "Rate and Volatility Feeds", url: "data-feeds/rates-feeds" }, { title: "L2 Sequencer Uptime Feeds", url: "data-feeds/l2-sequencer-feeds" }, + { title: "24/7 Blended Precious Metals Feeds", url: "data-feeds/blended-precious-metals-feeds" }, { title: "Self-Managed Feeds", url: "data-feeds/self-managed-feeds" }, ], }, diff --git a/src/content/data-feeds/blended-precious-metals-feeds.mdx b/src/content/data-feeds/blended-precious-metals-feeds.mdx new file mode 100644 index 00000000000..09bb0fb8cb3 --- /dev/null +++ b/src/content/data-feeds/blended-precious-metals-feeds.mdx @@ -0,0 +1,50 @@ +--- +section: dataFeeds +date: Last Modified +title: "24/7 Blended Precious Metals Feeds" +metadata: + title: "24/7 Blended Precious Metals Feeds | Chainlink Data Feeds" + description: "Learn how 24/7 blended precious metals price feeds work, including closed-market methodology and integration risks for custom feeds such as tGLD/USD." + keywords: + ["Blended Precious Metals Feeds", "tGLD", "Custom Feeds", "Precious Metals", "XAU", "Blended Gold", "Data Feeds"] +whatsnext: + { + "Review custom feed categories": "/data-feeds/selecting-data-feeds#-custom-feeds", + "Find Price Feed Addresses": "/data-feeds/price-feeds/addresses", + "Learn about developer responsibilities": "/data-feeds/developer-responsibilities", + } +--- + +import { Aside } from "@components" +import { FeedList } from "@features/feeds" + +24/7 blended precious metals price feeds are [custom feeds](/data-feeds/selecting-data-feeds#-custom-feeds) designed to publish a precious-metals-linked price both during and outside regular [precious metals market hours](/data-feeds/selecting-data-feeds#market-hours). They use a bespoke methodology rather than a continuously open physical precious metals spot market. + +Developers integrating these feeds should review this page alongside the [Custom Feeds](/data-feeds/selecting-data-feeds#-custom-feeds) section and implement [risk mitigation](/data-feeds/selecting-data-feeds#risk-mitigation) appropriate for their use case. + +## How it works + +During [open precious metals market hours](/data-feeds/selecting-data-feeds#market-hours), the feed reports the underlying precious metals spot price (for example, XAU/USD for gold). When the precious metals market is _closed_, the feed starts from the last observed open-market price and adjusts it with a blended signal derived from tokenized precious metals price streams. + +For example, the current tGLD/USD implementation uses [XAUT/USD](/data-streams/crypto-streams?search=XAUT) and [PAXG/USD](/data-streams/crypto-streams?search=PAXG) streams for the closed-market signal. For each available tokenized precious metals stream, the adapter tracks the token's open-market premium or discount to the spot price with an EMA, uses that value to derive a spot-equivalent tokenized price, averages the valid derived prices, and smooths the resulting deviation from the last spot price with another EMA. The composite price applies configurable weighting and deviation controls before the closed-market adjustment is reflected in the answer. Other blended precious metals feeds may use different tokenized streams or methodology variations. + +## Supported feeds + +The following table shows the available 24/7 blended precious metals feeds. + + + +Find these feeds on the [Price Feed Addresses](/data-feeds/price-feeds/addresses) page. + +## Risks + + diff --git a/src/content/data-feeds/llms-full.txt b/src/content/data-feeds/llms-full.txt index bed70e1dacf..073459d7db1 100644 --- a/src/content/data-feeds/llms-full.txt +++ b/src/content/data-feeds/llms-full.txt @@ -774,6 +774,40 @@ In this step, you will interact with your deployed contract to fetch the BTC/USD --- +# 24/7 Blended Precious Metals Feeds +Source: https://docs.chain.link/data-feeds/blended-precious-metals-feeds + +24/7 blended precious metals price feeds are [custom feeds](/data-feeds/selecting-data-feeds#-custom-feeds) designed to publish a precious-metals-linked price both during and outside regular [precious metals market hours](/data-feeds/selecting-data-feeds#market-hours). They use a bespoke methodology rather than a continuously open physical precious metals spot market. + +Developers integrating these feeds should review this page alongside the [Custom Feeds](/data-feeds/selecting-data-feeds#-custom-feeds) section and implement [risk mitigation](/data-feeds/selecting-data-feeds#risk-mitigation) appropriate for their use case. + +## How it works + +During [open precious metals market hours](/data-feeds/selecting-data-feeds#market-hours), the feed reports the underlying precious metals spot price (for example, XAU/USD for gold). When the precious metals market is *closed*, the feed starts from the last observed open-market price and adjusts it with a blended signal derived from tokenized precious metals price streams. + +For example, the current tGLD/USD implementation uses [XAUT/USD](/data-streams/crypto-streams?search=XAUT) and [PAXG/USD](/data-streams/crypto-streams?search=PAXG) streams for the closed-market signal. For each available tokenized precious metals stream, the adapter tracks the token's open-market premium or discount to the spot price with an EMA, uses that value to derive a spot-equivalent tokenized price, averages the valid derived prices, and smooths the resulting deviation from the last spot price with another EMA. The composite price applies configurable weighting and deviation controls before the closed-market adjustment is reflected in the answer. Other blended precious metals feeds may use different tokenized streams or methodology variations. + +## Supported feeds + +The following table shows the available 24/7 blended precious metals feeds. + +Find these feeds on the [Price Feed Addresses](/data-feeds/price-feeds/addresses) page. + +## Risks + + + +--- + # Flags Contract Registry Source: https://docs.chain.link/data-feeds/contract-registry @@ -3704,6 +3738,7 @@ Custom Feeds have the following categories and compositions: - [🟡](#-medium-market-pricing-risk-feeds) **Technical Feeds:** Feeds within this category measure a particular technical metric from a specified blockchain. For example, Fast Gas or Block Difficulty. - [🟡](#-medium-market-pricing-risk-feeds) **Total Value Locked Feeds:** These feeds measure the total value locked in a particular protocol. - [🟠](#-high-market-pricing-risk-feeds) **Custom Index Feeds:** An index calculates a function of the values for multiple underlying assets. The function is specific to that index and is typically calculated by node operators following an agreed formula. +- [🟠](#-high-market-pricing-risk-feeds) **24/7 Blended Price Feeds:** Custom feeds that publish outside standard market hours by blending a reference price with other inputs such as tokenized asset streams. See [24/7 blended precious metals feeds](/data-feeds/blended-precious-metals-feeds) for methodology and risk considerations. - [🟠](#-high-market-pricing-risk-feeds) **Offchain Single Source Feeds:** Some data providers use a single data source, which might be necessary if only one source exists offchain for a specific type of data. - [🟠](#-high-market-pricing-risk-feeds) **Offchain Proof of Reserve Feeds:** Chainlink Proof of Reserve uses a large decentralized collection of security-reviewed and Sybil-resistant node operators to acquire and verify reserve data. In this use case, reserves reside offchain. - [🟠](#-high-market-pricing-risk-feeds) **LP Token Feeds:** These feeds use a decentralized feed for the underlying asset as well as calculations to value the liquidity pool (LP) tokens. @@ -3740,7 +3775,7 @@ In addition to categories, be aware that markets for several assets are actively | **US_Equities_24/5** | 24 hours a day, 5 days a week: 18:00 ET Sunday to 17:00 ET Friday. These feeds aggregate data across regular, pre-market, post-market, and overnight equity trading sessions. Used by [tokenized equity feeds](/data-feeds/tokenized-equity-feeds) that require continuous equity pricing outside of standard market hours. Feeds are not updated on weekends or US equity market holidays. | | **UK_ETF** | Standard UK equity market hours: 08:00 - 16:30 UK time M-F excluding UK equity market holidays. | | **Forex** | 18:00 ET Sunday to 17:00 ET Friday.
The feeds also follow the global Forex market Christmas and New Year's Day holiday schedule. Many non-G12 currencies primarily trade during local market hours. It is recommended to use those feeds only during local trading hours. We generally observe normal trading within these hours. Prices outside of these hours may be subject to volatility and users are advised to implement additional controls. In addition, local holidays, natural disasters, political unrest or other exogenous shocks are liable to interrupt normal trading in less-liquid currencies. | -| **Precious_Metals** | 18:00 ET Sunday to 17:00 ET Friday with a one-hour break Monday through Thursday from 17:00 to 18:00.
The feeds also follow the global Forex market holiday schedule for Christmas and New Year's Day. | +| **Precious_Metals** | 18:00 ET Sunday to 17:00 ET Friday with a one-hour break Monday through Thursday from 17:00 to 18:00.
The feeds also follow the global Forex market holiday schedule for Christmas and New Year's Day. Some [24/7 blended precious metals feeds](/data-feeds/blended-precious-metals-feeds) publish outside these hours using a custom methodology. | | **NYMEX** (US OIL) | 18:00 ET Sunday to 17:00 ET Friday, with a one-hour break Monday through Thursday from 17:00 to 18:00.
The feed also follows the NYMEX market holiday schedule. | | **COMEX** (Non precious metals) | 18:00 ET Sunday to 17:00 ET Friday with a one-hour break Monday through Thursday from 17:00 to 18:00.
The feed also follows the COMEX market holiday schedule. | | **CBOT** (Agricultural) | Monday - Thursday 00:00-08:45, 09:30-00:00 and Friday 00:00-08:45, 09:30-14:00 ET, excluding CBOT market holidays. | diff --git a/src/content/data-feeds/selecting-data-feeds.mdx b/src/content/data-feeds/selecting-data-feeds.mdx index ae3b7a7c9ad..a3722c1526f 100644 --- a/src/content/data-feeds/selecting-data-feeds.mdx +++ b/src/content/data-feeds/selecting-data-feeds.mdx @@ -95,6 +95,7 @@ Custom Feeds have the following categories and compositions: - [🟡](#-medium-market-pricing-risk-feeds) **Technical Feeds:** Feeds within this category measure a particular technical metric from a specified blockchain. For example, Fast Gas or Block Difficulty. - [🟡](#-medium-market-pricing-risk-feeds) **Total Value Locked Feeds:** These feeds measure the total value locked in a particular protocol. - [🟠](#-high-market-pricing-risk-feeds) **Custom Index Feeds:** An index calculates a function of the values for multiple underlying assets. The function is specific to that index and is typically calculated by node operators following an agreed formula. +- [🟠](#-high-market-pricing-risk-feeds) **24/7 Blended Price Feeds:** Custom feeds that publish outside standard market hours by blending a reference price with other inputs such as tokenized asset streams. See [24/7 blended precious metals feeds](/data-feeds/blended-precious-metals-feeds) for methodology and risk considerations. - [🟠](#-high-market-pricing-risk-feeds) **Offchain Single Source Feeds:** Some data providers use a single data source, which might be necessary if only one source exists offchain for a specific type of data. - [🟠](#-high-market-pricing-risk-feeds) **Offchain Proof of Reserve Feeds:** Chainlink Proof of Reserve uses a large decentralized collection of security-reviewed and Sybil-resistant node operators to acquire and verify reserve data. In this use case, reserves reside offchain. - [🟠](#-high-market-pricing-risk-feeds) **LP Token Feeds:** These feeds use a decentralized feed for the underlying asset as well as calculations to value the liquidity pool (LP) tokens. @@ -130,7 +131,7 @@ In addition to categories, be aware that markets for several assets are actively | **US_Equities_24/5** | 24 hours a day, 5 days a week: 18:00 ET Sunday to 17:00 ET Friday. These feeds aggregate data across regular, pre-market, post-market, and overnight equity trading sessions. Used by [tokenized equity feeds](/data-feeds/tokenized-equity-feeds) that require continuous equity pricing outside of standard market hours. Feeds are not updated on weekends or US equity market holidays. | | **UK_ETF** | Standard UK equity market hours: 08:00 - 16:30 UK time M-F excluding UK equity market holidays. | | **Forex** | 18:00 ET Sunday to 17:00 ET Friday.
The feeds also follow the global Forex market Christmas and New Year's Day holiday schedule. Many non-G12 currencies primarily trade during local market hours. It is recommended to use those feeds only during local trading hours. We generally observe normal trading within these hours. Prices outside of these hours may be subject to volatility and users are advised to implement additional controls. In addition, local holidays, natural disasters, political unrest or other exogenous shocks are liable to interrupt normal trading in less-liquid currencies. | -| **Precious_Metals** | 18:00 ET Sunday to 17:00 ET Friday with a one-hour break Monday through Thursday from 17:00 to 18:00.
The feeds also follow the global Forex market holiday schedule for Christmas and New Year's Day. | +| **Precious_Metals** | 18:00 ET Sunday to 17:00 ET Friday with a one-hour break Monday through Thursday from 17:00 to 18:00.
The feeds also follow the global Forex market holiday schedule for Christmas and New Year's Day. Some [24/7 blended precious metals feeds](/data-feeds/blended-precious-metals-feeds) publish outside these hours using a custom methodology. | | **NYMEX** (US OIL) | 18:00 ET Sunday to 17:00 ET Friday, with a one-hour break Monday through Thursday from 17:00 to 18:00.
The feed also follows the NYMEX market holiday schedule. | | **COMEX** (Non precious metals) | 18:00 ET Sunday to 17:00 ET Friday with a one-hour break Monday through Thursday from 17:00 to 18:00.
The feed also follows the COMEX market holiday schedule. | | **CBOT** (Agricultural) | Monday - Thursday 00:00-08:45, 09:30-00:00 and Friday 00:00-08:45, 09:30-14:00 ET, excluding CBOT market holidays. | diff --git a/src/features/data/chains.ts b/src/features/data/chains.ts index 5a93c6d1b9a..b62e9f68ba1 100644 --- a/src/features/data/chains.ts +++ b/src/features/data/chains.ts @@ -3,7 +3,15 @@ import { ChainMetadata } from "./api/index.ts" // Cross-networks export const POR_MVR_FEEDS_URL = "https://reference-data-directory.vercel.app/por-data-feeds.json" -type ChainTags = ("default" | "smartData" | "rates" | "streams" | "usGovernmentMacroeconomicData" | "tokenizedEquity")[] +type ChainTags = ( + | "default" + | "smartData" + | "rates" + | "streams" + | "usGovernmentMacroeconomicData" + | "tokenizedEquity" + | "blendedPreciousMetals" +)[] export interface ChainNetwork { name: string explorerUrl: string @@ -254,7 +262,14 @@ export const CHAINS: Chain[] = [ title: "Data Feeds", img: "/assets/chains/ethereum.svg", networkStatusUrl: "https://ethstats.dev/", - tags: ["default", "smartData", "rates", "usGovernmentMacroeconomicData", "tokenizedEquity"], + tags: [ + "default", + "smartData", + "rates", + "usGovernmentMacroeconomicData", + "tokenizedEquity", + "blendedPreciousMetals", + ], supportedFeatures: ["vrfSubscription", "vrfDirectFunding", "feeds"], networks: [ { @@ -264,7 +279,7 @@ export const CHAINS: Chain[] = [ rddUrl: "https://reference-data-directory.vercel.app/feeds-mainnet.json", rddBundleUrl: "https://reference-data-directory.vercel.app/bundle-proxies-mainnet.json", queryString: "ethereum-mainnet", - tags: ["smartData", "usGovernmentMacroeconomicData", "tokenizedEquity"], + tags: ["smartData", "usGovernmentMacroeconomicData", "tokenizedEquity", "blendedPreciousMetals"], }, { name: "Sepolia Testnet", diff --git a/src/features/feeds/components/Tables.tsx b/src/features/feeds/components/Tables.tsx index 3a0c7cf1c51..d663f11f390 100644 --- a/src/features/feeds/components/Tables.tsx +++ b/src/features/feeds/components/Tables.tsx @@ -20,7 +20,11 @@ import { REPORT_SCHEMA_DEFINITIONS, type SchemaDefinition } from "./reportSchema import schemaFieldsTableStyles from "../../data-streams/common/schemaFieldsTable.module.css" import { isSharedSVR, isAaveSVR } from "~/features/feeds/utils/svrDetection.ts" import { ExpandableTableWrapper } from "./ExpandableTableWrapper.tsx" -import { shouldHideAddress, shouldHideStreamFeedId } from "~/features/feeds/utils/feedVisibility.ts" +import { + shouldHideAddress, + shouldHideStreamFeedId, + BLENDED_PRECIOUS_METALS_PROXY_ADDRESSES, +} from "~/features/feeds/utils/feedVisibility.ts" import { DATA_STREAMS_CONTACT_URL, TOKENIZED_EQUITY_CONTACT_EMAIL } from "~/features/feeds/constants.ts" import { getSchemaVersion, @@ -564,6 +568,17 @@ const DefaultTr = ({ )} + {BLENDED_PRECIOUS_METALS_PROXY_ADDRESSES.has(metadata.proxyAddress?.toLowerCase()) && ( +
+ + 24/7 Blended Precious Metals + +
+ )} {stablecoinBound && (
> = { rates: "rates", usGovernmentMacroeconomicData: "usGovernmentMacroeconomicData", tokenizedEquity: "tokenizedEquity", + blendedPreciousMetals: "blendedPreciousMetals", } export function chainMatchesFeedTypeTag(chain: Taggable, dataFeedType: DataFeedType): boolean { @@ -50,6 +51,9 @@ export function shouldRenderNetworkSection( if (dataFeedType === "usGovernmentMacroeconomicData") { return network.tags?.includes("usGovernmentMacroeconomicData") ?? false } + if (dataFeedType === "blendedPreciousMetals") { + return network.tags?.includes("blendedPreciousMetals") ?? false + } return true } @@ -60,6 +64,7 @@ export function shouldFilterSelectableChainsByVisibleFeeds(dataFeedType: DataFee dataFeedType === "smartdata" || dataFeedType === "rates" || dataFeedType === "usGovernmentMacroeconomicData" || - dataFeedType === "tokenizedEquity" + dataFeedType === "tokenizedEquity" || + dataFeedType === "blendedPreciousMetals" ) } diff --git a/src/features/feeds/utils/feedVisibility.ts b/src/features/feeds/utils/feedVisibility.ts index e60d052f064..8c9f8286222 100644 --- a/src/features/feeds/utils/feedVisibility.ts +++ b/src/features/feeds/utils/feedVisibility.ts @@ -17,6 +17,13 @@ export const CONTACT_EMAIL_PROXY_ADDRESSES = new Set([ "0xbb65fa58bdb7d33e4a3d1a40a7a9bd99e746367b", ]) +/** + * Proxy addresses (lowercase) for 24/7 blended gold feeds. + * Add new blended gold feed proxy addresses here to include them in the + * blended gold feed page and badge. + */ +export const BLENDED_PRECIOUS_METALS_PROXY_ADDRESSES = new Set(["0x369c67e8b026cc4ef98350f332d7dd52b85b7674"]) + /** * Returns true when the feed's contract address should be hidden and replaced * with the data-feeds contact email in the UI. @@ -84,7 +91,8 @@ export function isFeedVisible( // 1. Universal Exclusions // =========================================================================== const isTokenizedEquity = dataFeedType === "tokenizedEquity" - if (feed.docs?.hidden && !isTokenizedEquity) return false + const isBlendedPreciousMetals = dataFeedType === "blendedPreciousMetals" + if (feed.docs?.hidden && !isTokenizedEquity && !isBlendedPreciousMetals) return false const isDeprecating = ecosystem === "deprecating" const isStreams = @@ -145,6 +153,8 @@ export function isFeedVisible( (assetClass === "Equity" || assetClass === "Equities") && feed.contractType !== "verifier" && feed.docs?.productTypeCode === "primaryTokenizedPrice" + } else if (isBlendedPreciousMetals) { + isVisible = BLENDED_PRECIOUS_METALS_PROXY_ADDRESSES.has(feed.proxyAddress?.toLowerCase()) } else { isVisible = !feed.docs?.porType &&