From 6ed6bc9758e1b96b91781724ee740d33441871be Mon Sep 17 00:00:00 2001 From: Sebastian Lerner Date: Sat, 22 Aug 2026 13:57:27 -0400 Subject: [PATCH 01/10] Add beta Futures data streams page Documents the generic front/second/third-month feed rotation methodology for the new commodities futures product (gold, silver, WTI oil, natural gas). Avoids exchange names and proprietary contract symbology per licensing guidance. Co-Authored-By: Claude Sonnet 5 --- src/config/sidebar.ts | 4 + src/content/data-streams/llms-full.txt | 106 ++++++++++++++++ .../data-streams/rwa-streams/futures.mdx | 117 ++++++++++++++++++ 3 files changed, 227 insertions(+) create mode 100644 src/content/data-streams/rwa-streams/futures.mdx diff --git a/src/config/sidebar.ts b/src/config/sidebar.ts index 731b7b1e338..a810fef123d 100644 --- a/src/config/sidebar.ts +++ b/src/config/sidebar.ts @@ -1275,6 +1275,10 @@ export const SIDEBAR: Partial> = { title: "APAC Equities", url: "data-streams/rwa-streams/apac-equities", }, + { + title: "Futures", + url: "data-streams/rwa-streams/futures", + }, ], }, { diff --git a/src/content/data-streams/llms-full.txt b/src/content/data-streams/llms-full.txt index 868945c8e77..ff2d73e0f74 100644 --- a/src/content/data-streams/llms-full.txt +++ b/src/content/data-streams/llms-full.txt @@ -6518,6 +6518,112 @@ For inquiries related to a data outage, contact Chainlink Labs at [data_support@ --- +# Futures +Source: https://docs.chain.link/data-streams/rwa-streams/futures + + + +Futures streams provide price data for exchange-traded futures contracts. These streams enable onchain protocols to build markets around futures price exposure. At launch, coverage is limited to commodities — energy and precious metals — described below. + +Because futures contracts expire, Data Streams does not publish one feed per contract. Instead, each instrument is represented by three **generic** feeds that always track the current front, second, and third contract. This is explained in [Rotation methodology](#rotation-methodology) below. + +Developers are responsible for choosing the appropriate feed and ensuring that the operation and performance of their choice matches expectations. For more information, see the [Developer Responsibilities](/data-streams/developer-responsibilities) guidance. + +## Coverage + +At launch, Futures streams are available for the following commodities. Additional commodities and asset classes may be added based on demand. + +| Commodity | Generic feeds | +| ----------- | ------------------------------------------------ | +| Gold | Front-month, second-month, and third-month feeds | +| Silver | Front-month, second-month, and third-month feeds | +| Oil (WTI) | Front-month, second-month, and third-month feeds | +| Natural Gas | Front-month, second-month, and third-month feeds | + +## Naming and price representation + +Feed names use the plain instrument name only (for example, "WTI," "Gold," "Natural Gas"). Chainlink does not use any exchange's proprietary contract ticker in its feed or stream identifiers. + +Contract specifications — contract size, tick size, quotation units, and similar terms — can vary between exchanges for the same underlying instrument. Chainlink does not publish these specifications, since they belong to the exchange where a given contract is listed. If your application needs exact contract specifications, consult that exchange's own public product documentation directly. + +## Rotation methodology + +Unlike spot instruments, futures contracts have a finite life. For example, a given month's Natural Gas contract trades for a limited window and then expires. If Data Streams published a dedicated feed per contract, integrators would need to re-point their integration to a new feed every time a contract expired. + +To avoid this, each instrument is represented by three static, non-expiring **generic feeds** that always represent the near-term forward curve of eligible contracts: + +| Generic feed | Meaning | +| --------------------- | ---------------------------------------------------------------- | +| **Front-month feed** | Tracks the nearest unexpired eligible contract | +| **Second-month feed** | Tracks the next eligible contract after the front-month contract | +| **Third-month feed** | Tracks the eligible contract after that | + +This design means: + +- **Zero maintenance.** Integrate the three generic feeds once. You never need to re-point feed endpoints when a contract expires — the feeds re-map internally. +- **Full visibility of the curve.** Because the front, second, and third contracts are exposed simultaneously, you retain full autonomy over your own rolling logic. You can roll positions on a fixed schedule ahead of expiry, or when liquidity migrates from the front contract to the second — Data Streams does not impose a roll strategy. + +### How the roll works + +When the front-month contract reaches its expiration, the generic feeds cascade forward: + +- The **front-month feed** takes over the contract previously tracked by the second-month feed +- The **second-month feed** takes over the contract previously tracked by the third-month feed +- The **third-month feed** begins tracking the next eligible contract in that instrument's cycle + +A few properties of the roll are worth calling out explicitly: + +- **The roll is triggered by the front-month contract's expiration**, as defined by the listed expiration calendar for that specific instrument. Expiration conventions differ by instrument, so rolls for different instruments happen on different dates — there is no single "roll day" across all instruments. +- **The roll is a re-mapping, not a price adjustment.** At the moment of the roll, the front-month feed switches from quoting the expiring contract to quoting what was previously the second-month contract. Because different contract months can trade at different prices, **expect a price discontinuity on the generic feed at each roll**. Feeds are not back-adjusted into a smooth continuous series — if your application needs a continuous series, construct it from the raw generic feeds on your end. +- **Until expiration, the front-month feed continues to track the expiring contract**, even in its final days when liquidity has typically already migrated to the next contract. This is precisely why the second-month feed is exposed — so you can implement your own liquidity-based rolls ahead of expiry instead of holding the front-month contract to the end. + +### Contract eligibility varies by instrument + +"Front-month" does not always mean "nearest calendar month." Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: + +- **Energy** (Oil, Natural Gas): every calendar month is listed and liquid. The generic feeds walk the full monthly strip, so the front-, second-, and third-month feeds track three **consecutive** calendar months. +- **Precious metals** (Gold, Silver): many calendar months are listed, but liquidity concentrates in a benchmark cycle. The generic feeds follow the benchmark cycle only and skip non-benchmark months, even though those contracts exist and trade. + +| Commodity | Benchmark months | +| --------- | ---------------------------- | +| Gold | Feb, Apr, Jun, Aug, Oct, Dec | +| Silver | Mar, May, Jul, Sep, Dec | + +The practical consequence: **the gap between the front-, second-, and third-month feeds is not always one month.** For Gold or Silver, consecutive generic feeds can be one to three months apart. Do not assume monthly spacing in your integration. + +### Worked example + +Gold follows its benchmark cycle (Feb/Apr/Jun/Aug/Oct/Dec). In August 2026, before the August contract expires: + +| Feed | Contract tracked | +| ----------------- | ---------------- | +| Front-month feed | August 2026 | +| Second-month feed | October 2026 | +| Third-month feed | December 2026 | + +When the August contract expires, the front-month feed jumps directly to October, the second-month feed jumps to December, and the third-month feed begins tracking February 2027 — skipping the non-benchmark September and November contracts entirely, since they never appear on the generic feeds. + +## Integration guidance + +- **Do not hardcode contract-month assumptions.** The spacing between the front-, second-, and third-month feeds varies by instrument — one month for energy, up to a few months for precious metals. +- **Expect price steps at rolls.** A protocol using the front-month feed directly for margining or liquidation should either accept the step as economically correct (the front contract genuinely changed), implement its own early roll using the second-month feed, or build an adjusted continuous series off-chain from the raw generic feeds. +- **Roll early if you depend on liquidity.** In the final days of a contract's life, trading volume typically migrates to the next contract while the front-month feed still tracks the expiring one. If your application is sensitive to thin markets, consider rolling ahead of expiry using the second-month feed. +- **Follow the listed expiration calendar.** Expiration dates follow the official listed calendar of the exchange where the underlying contract trades, including holiday adjustments. Consult that exchange for the operative source of truth. + +## Trading hours + +Futures trade during standard trading hours for each instrument, with a scheduled break each trading day. Consult the exchange where the underlying contract is listed for holiday and early-close schedules. + +## Support + +For inquiries related to a data outage, contact Chainlink Labs at [chainlink_data_feeds@smartcontract.com](mailto:chainlink_data_feeds@smartcontract.com). + +--- + # Handling Market Events (v11) Source: https://docs.chain.link/data-streams/rwa-streams/handling-market-events-v11 diff --git a/src/content/data-streams/rwa-streams/futures.mdx b/src/content/data-streams/rwa-streams/futures.mdx new file mode 100644 index 00000000000..d6449a95852 --- /dev/null +++ b/src/content/data-streams/rwa-streams/futures.mdx @@ -0,0 +1,117 @@ +--- +section: dataStreams +date: "Last Modified" +title: "Futures" +metadata: + title: "Futures | Chainlink Data Streams" + description: "Reference for Chainlink Futures Data Streams, covering coverage, generic feed rotation, and risk considerations." +whatsnext: + { + "Learn about developer responsibilities": "/data-streams/developer-responsibilities", + "Learn about Data Streams market hours and schedules": "/data-streams/market-hours", + "Find the list of available RWA streams": "/data-streams/rwa-streams", + } +--- + +import { Aside } from "@components" + + + +Futures streams provide price data for exchange-traded futures contracts. These streams enable onchain protocols to build markets around futures price exposure. At launch, coverage is limited to commodities — energy and precious metals — described below. + +Because futures contracts expire, Data Streams does not publish one feed per contract. Instead, each instrument is represented by three **generic** feeds that always track the current front, second, and third contract. This is explained in [Rotation methodology](#rotation-methodology) below. + +Developers are responsible for choosing the appropriate feed and ensuring that the operation and performance of their choice matches expectations. For more information, see the [Developer Responsibilities](/data-streams/developer-responsibilities) guidance. + +## Coverage + +At launch, Futures streams are available for the following commodities. Additional commodities and asset classes may be added based on demand. + +| Commodity | Generic feeds | +| ----------- | ------------------------------------------------ | +| Gold | Front-month, second-month, and third-month feeds | +| Silver | Front-month, second-month, and third-month feeds | +| Oil (WTI) | Front-month, second-month, and third-month feeds | +| Natural Gas | Front-month, second-month, and third-month feeds | + +## Naming and price representation + +Feed names use the plain instrument name only (for example, "WTI," "Gold," "Natural Gas"). Chainlink does not use any exchange's proprietary contract ticker in its feed or stream identifiers. + +Contract specifications — contract size, tick size, quotation units, and similar terms — can vary between exchanges for the same underlying instrument. Chainlink does not publish these specifications, since they belong to the exchange where a given contract is listed. If your application needs exact contract specifications, consult that exchange's own public product documentation directly. + +## Rotation methodology + +Unlike spot instruments, futures contracts have a finite life. For example, a given month's Natural Gas contract trades for a limited window and then expires. If Data Streams published a dedicated feed per contract, integrators would need to re-point their integration to a new feed every time a contract expired. + +To avoid this, each instrument is represented by three static, non-expiring **generic feeds** that always represent the near-term forward curve of eligible contracts: + +| Generic feed | Meaning | +| --------------------- | ---------------------------------------------------------------- | +| **Front-month feed** | Tracks the nearest unexpired eligible contract | +| **Second-month feed** | Tracks the next eligible contract after the front-month contract | +| **Third-month feed** | Tracks the eligible contract after that | + +This design means: + +- **Zero maintenance.** Integrate the three generic feeds once. You never need to re-point feed endpoints when a contract expires — the feeds re-map internally. +- **Full visibility of the curve.** Because the front, second, and third contracts are exposed simultaneously, you retain full autonomy over your own rolling logic. You can roll positions on a fixed schedule ahead of expiry, or when liquidity migrates from the front contract to the second — Data Streams does not impose a roll strategy. + +### How the roll works + +When the front-month contract reaches its expiration, the generic feeds cascade forward: + +- The **front-month feed** takes over the contract previously tracked by the second-month feed +- The **second-month feed** takes over the contract previously tracked by the third-month feed +- The **third-month feed** begins tracking the next eligible contract in that instrument's cycle + +A few properties of the roll are worth calling out explicitly: + +- **The roll is triggered by the front-month contract's expiration**, as defined by the listed expiration calendar for that specific instrument. Expiration conventions differ by instrument, so rolls for different instruments happen on different dates — there is no single "roll day" across all instruments. +- **The roll is a re-mapping, not a price adjustment.** At the moment of the roll, the front-month feed switches from quoting the expiring contract to quoting what was previously the second-month contract. Because different contract months can trade at different prices, **expect a price discontinuity on the generic feed at each roll**. Feeds are not back-adjusted into a smooth continuous series — if your application needs a continuous series, construct it from the raw generic feeds on your end. +- **Until expiration, the front-month feed continues to track the expiring contract**, even in its final days when liquidity has typically already migrated to the next contract. This is precisely why the second-month feed is exposed — so you can implement your own liquidity-based rolls ahead of expiry instead of holding the front-month contract to the end. + +### Contract eligibility varies by instrument + +"Front-month" does not always mean "nearest calendar month." Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: + +- **Energy** (Oil, Natural Gas): every calendar month is listed and liquid. The generic feeds walk the full monthly strip, so the front-, second-, and third-month feeds track three **consecutive** calendar months. +- **Precious metals** (Gold, Silver): many calendar months are listed, but liquidity concentrates in a benchmark cycle. The generic feeds follow the benchmark cycle only and skip non-benchmark months, even though those contracts exist and trade. + +| Commodity | Benchmark months | +| --------- | ---------------------------- | +| Gold | Feb, Apr, Jun, Aug, Oct, Dec | +| Silver | Mar, May, Jul, Sep, Dec | + +The practical consequence: **the gap between the front-, second-, and third-month feeds is not always one month.** For Gold or Silver, consecutive generic feeds can be one to three months apart. Do not assume monthly spacing in your integration. + +### Worked example + +Gold follows its benchmark cycle (Feb/Apr/Jun/Aug/Oct/Dec). In August 2026, before the August contract expires: + +| Feed | Contract tracked | +| ----------------- | ---------------- | +| Front-month feed | August 2026 | +| Second-month feed | October 2026 | +| Third-month feed | December 2026 | + +When the August contract expires, the front-month feed jumps directly to October, the second-month feed jumps to December, and the third-month feed begins tracking February 2027 — skipping the non-benchmark September and November contracts entirely, since they never appear on the generic feeds. + +## Integration guidance + +- **Do not hardcode contract-month assumptions.** The spacing between the front-, second-, and third-month feeds varies by instrument — one month for energy, up to a few months for precious metals. +- **Expect price steps at rolls.** A protocol using the front-month feed directly for margining or liquidation should either accept the step as economically correct (the front contract genuinely changed), implement its own early roll using the second-month feed, or build an adjusted continuous series off-chain from the raw generic feeds. +- **Roll early if you depend on liquidity.** In the final days of a contract's life, trading volume typically migrates to the next contract while the front-month feed still tracks the expiring one. If your application is sensitive to thin markets, consider rolling ahead of expiry using the second-month feed. +- **Follow the listed expiration calendar.** Expiration dates follow the official listed calendar of the exchange where the underlying contract trades, including holiday adjustments. Consult that exchange for the operative source of truth. + +## Trading hours + +Futures trade during standard trading hours for each instrument, with a scheduled break each trading day. Consult the exchange where the underlying contract is listed for holiday and early-close schedules. + +## Support + +For inquiries related to a data outage, contact Chainlink Labs at [chainlink_data_feeds@smartcontract.com](mailto:chainlink_data_feeds@smartcontract.com). From 557e8abb9eea242f40e23d0077c161c7dfec8826 Mon Sep 17 00:00:00 2001 From: Sebastian Lerner Date: Sat, 22 Aug 2026 14:13:01 -0400 Subject: [PATCH 02/10] Add single-source data risk note to Futures page Mirrors the same risk consideration already documented for APAC Equities: each instrument is sourced from a single data provider with no cross-validation or fallback. Co-Authored-By: Claude Sonnet 5 --- src/content/data-streams/llms-full.txt | 10 ++++++++++ src/content/data-streams/rwa-streams/futures.mdx | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/content/data-streams/llms-full.txt b/src/content/data-streams/llms-full.txt index ff2d73e0f74..1931dbefe18 100644 --- a/src/content/data-streams/llms-full.txt +++ b/src/content/data-streams/llms-full.txt @@ -6618,6 +6618,16 @@ When the August contract expires, the front-month feed jumps directly to October Futures trade during standard trading hours for each instrument, with a scheduled break each trading day. Consult the exchange where the underlying contract is listed for holiday and early-close schedules. +## Risk considerations + +Integrating protocols are responsible for implementing appropriate monitoring and risk mitigation mechanisms to ensure safe market operation. + +### Single-source data + +Each Futures instrument is sourced from a single institutional-grade data provider per feed. While this enables high-frequency, low-latency delivery, it introduces dependency on that provider's data quality and availability. There is no redundant cross-validation between providers for a given feed. + +If the underlying provider fails to deliver data, there is no fallback source, and a gap in data may not be immediately obvious from price alone. Protocols should continuously monitor feed freshness and implement safeguards — such as pausing trading or restricting liquidations — if updates stop arriving or a feed appears stale. Review the [Developer Responsibilities](/data-streams/developer-responsibilities) guidance before integration. + ## Support For inquiries related to a data outage, contact Chainlink Labs at [chainlink_data_feeds@smartcontract.com](mailto:chainlink_data_feeds@smartcontract.com). diff --git a/src/content/data-streams/rwa-streams/futures.mdx b/src/content/data-streams/rwa-streams/futures.mdx index d6449a95852..d064159b036 100644 --- a/src/content/data-streams/rwa-streams/futures.mdx +++ b/src/content/data-streams/rwa-streams/futures.mdx @@ -112,6 +112,16 @@ When the August contract expires, the front-month feed jumps directly to October Futures trade during standard trading hours for each instrument, with a scheduled break each trading day. Consult the exchange where the underlying contract is listed for holiday and early-close schedules. +## Risk considerations + +Integrating protocols are responsible for implementing appropriate monitoring and risk mitigation mechanisms to ensure safe market operation. + +### Single-source data + +Each Futures instrument is sourced from a single institutional-grade data provider per feed. While this enables high-frequency, low-latency delivery, it introduces dependency on that provider's data quality and availability. There is no redundant cross-validation between providers for a given feed. + +If the underlying provider fails to deliver data, there is no fallback source, and a gap in data may not be immediately obvious from price alone. Protocols should continuously monitor feed freshness and implement safeguards — such as pausing trading or restricting liquidations — if updates stop arriving or a feed appears stale. Review the [Developer Responsibilities](/data-streams/developer-responsibilities) guidance before integration. + ## Support For inquiries related to a data outage, contact Chainlink Labs at [chainlink_data_feeds@smartcontract.com](mailto:chainlink_data_feeds@smartcontract.com). From 4a40e1e88585501c9380fbbbacbf11ff6b546837 Mon Sep 17 00:00:00 2001 From: Sebastian Lerner Date: Sun, 23 Aug 2026 09:06:52 -0400 Subject: [PATCH 03/10] Simplify beta note and drop launch-specific language Schema and fields are settled, not subject to change, so the beta note now only flags access. Coverage wording no longer frames current availability as launch-specific, so the page doesn't need updating when it's no longer new. Co-Authored-By: Claude Sonnet 5 --- src/content/data-streams/llms-full.txt | 7 +++---- src/content/data-streams/rwa-streams/futures.mdx | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/content/data-streams/llms-full.txt b/src/content/data-streams/llms-full.txt index 1931dbefe18..80079862b2e 100644 --- a/src/content/data-streams/llms-full.txt +++ b/src/content/data-streams/llms-full.txt @@ -6522,12 +6522,11 @@ For inquiries related to a data outage, contact Chainlink Labs at [data_support@ Source: https://docs.chain.link/data-streams/rwa-streams/futures -Futures streams provide price data for exchange-traded futures contracts. These streams enable onchain protocols to build markets around futures price exposure. At launch, coverage is limited to commodities — energy and precious metals — described below. +Futures streams provide price data for exchange-traded futures contracts. These streams enable onchain protocols to build markets around futures price exposure. Coverage currently includes commodities — energy and precious metals — described below. Because futures contracts expire, Data Streams does not publish one feed per contract. Instead, each instrument is represented by three **generic** feeds that always track the current front, second, and third contract. This is explained in [Rotation methodology](#rotation-methodology) below. @@ -6535,7 +6534,7 @@ Developers are responsible for choosing the appropriate feed and ensuring that t ## Coverage -At launch, Futures streams are available for the following commodities. Additional commodities and asset classes may be added based on demand. +Futures streams are currently available for the following commodities. Additional commodities and asset classes may be added based on demand. | Commodity | Generic feeds | | ----------- | ------------------------------------------------ | diff --git a/src/content/data-streams/rwa-streams/futures.mdx b/src/content/data-streams/rwa-streams/futures.mdx index d064159b036..dc7c20d49f5 100644 --- a/src/content/data-streams/rwa-streams/futures.mdx +++ b/src/content/data-streams/rwa-streams/futures.mdx @@ -16,12 +16,11 @@ whatsnext: import { Aside } from "@components" -Futures streams provide price data for exchange-traded futures contracts. These streams enable onchain protocols to build markets around futures price exposure. At launch, coverage is limited to commodities — energy and precious metals — described below. +Futures streams provide price data for exchange-traded futures contracts. These streams enable onchain protocols to build markets around futures price exposure. Coverage currently includes commodities — energy and precious metals — described below. Because futures contracts expire, Data Streams does not publish one feed per contract. Instead, each instrument is represented by three **generic** feeds that always track the current front, second, and third contract. This is explained in [Rotation methodology](#rotation-methodology) below. @@ -29,7 +28,7 @@ Developers are responsible for choosing the appropriate feed and ensuring that t ## Coverage -At launch, Futures streams are available for the following commodities. Additional commodities and asset classes may be added based on demand. +Futures streams are currently available for the following commodities. Additional commodities and asset classes may be added based on demand. | Commodity | Generic feeds | | ----------- | ------------------------------------------------ | From 0a1ddac5cd79af1c241fb4fd757c00344a0c0e8a Mon Sep 17 00:00:00 2001 From: Sebastian Lerner Date: Sun, 23 Aug 2026 09:12:55 -0400 Subject: [PATCH 04/10] Trim redundant naming disclaimer Co-Authored-By: Claude Sonnet 5 --- src/content/data-streams/llms-full.txt | 2 +- src/content/data-streams/rwa-streams/futures.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/data-streams/llms-full.txt b/src/content/data-streams/llms-full.txt index 80079862b2e..8d90b1d898c 100644 --- a/src/content/data-streams/llms-full.txt +++ b/src/content/data-streams/llms-full.txt @@ -6545,7 +6545,7 @@ Futures streams are currently available for the following commodities. Additiona ## Naming and price representation -Feed names use the plain instrument name only (for example, "WTI," "Gold," "Natural Gas"). Chainlink does not use any exchange's proprietary contract ticker in its feed or stream identifiers. +Feed names use the plain instrument name only (for example, "WTI," "Gold," "Natural Gas"). Contract specifications — contract size, tick size, quotation units, and similar terms — can vary between exchanges for the same underlying instrument. Chainlink does not publish these specifications, since they belong to the exchange where a given contract is listed. If your application needs exact contract specifications, consult that exchange's own public product documentation directly. diff --git a/src/content/data-streams/rwa-streams/futures.mdx b/src/content/data-streams/rwa-streams/futures.mdx index dc7c20d49f5..25fd59880c4 100644 --- a/src/content/data-streams/rwa-streams/futures.mdx +++ b/src/content/data-streams/rwa-streams/futures.mdx @@ -39,7 +39,7 @@ Futures streams are currently available for the following commodities. Additiona ## Naming and price representation -Feed names use the plain instrument name only (for example, "WTI," "Gold," "Natural Gas"). Chainlink does not use any exchange's proprietary contract ticker in its feed or stream identifiers. +Feed names use the plain instrument name only (for example, "WTI," "Gold," "Natural Gas"). Contract specifications — contract size, tick size, quotation units, and similar terms — can vary between exchanges for the same underlying instrument. Chainlink does not publish these specifications, since they belong to the exchange where a given contract is listed. If your application needs exact contract specifications, consult that exchange's own public product documentation directly. From e2ad5af7f7ff1a525bf61cd7ec0491da099aa597 Mon Sep 17 00:00:00 2001 From: Sebastian Lerner Date: Mon, 24 Aug 2026 13:21:35 +0100 Subject: [PATCH 05/10] Add schema fields, exact roll time, and tighten liquidity wording Adds a Schema section (bid/ask/mid) matching the heading pattern used on other Data Streams product pages, states the 00:00:00 ET roll time per product spec, and clarifies that energy contracts are listed every month but liquidity concentrates in nearer maturities. Co-Authored-By: Claude Sonnet 5 --- src/content/data-streams/llms-full.txt | 8 ++++++-- src/content/data-streams/rwa-streams/futures.mdx | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/content/data-streams/llms-full.txt b/src/content/data-streams/llms-full.txt index 8d90b1d898c..71411cb1ace 100644 --- a/src/content/data-streams/llms-full.txt +++ b/src/content/data-streams/llms-full.txt @@ -6532,6 +6532,10 @@ Because futures contracts expire, Data Streams does not publish one feed per con Developers are responsible for choosing the appropriate feed and ensuring that the operation and performance of their choice matches expectations. For more information, see the [Developer Responsibilities](/data-streams/developer-responsibilities) guidance. +## Schema + +Futures feeds publish bid, ask, and mid prices for each generic contract. + ## Coverage Futures streams are currently available for the following commodities. Additional commodities and asset classes may be added based on demand. @@ -6568,7 +6572,7 @@ This design means: ### How the roll works -When the front-month contract reaches its expiration, the generic feeds cascade forward: +When the front-month contract reaches its expiration, the generic feeds cascade forward at 00:00:00 (midnight) Eastern Time on the expiration date: - The **front-month feed** takes over the contract previously tracked by the second-month feed - The **second-month feed** takes over the contract previously tracked by the third-month feed @@ -6584,7 +6588,7 @@ A few properties of the roll are worth calling out explicitly: "Front-month" does not always mean "nearest calendar month." Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: -- **Energy** (Oil, Natural Gas): every calendar month is listed and liquid. The generic feeds walk the full monthly strip, so the front-, second-, and third-month feeds track three **consecutive** calendar months. +- **Energy** (Oil, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front-, second-, and third-month feeds track three **consecutive** calendar months. - **Precious metals** (Gold, Silver): many calendar months are listed, but liquidity concentrates in a benchmark cycle. The generic feeds follow the benchmark cycle only and skip non-benchmark months, even though those contracts exist and trade. | Commodity | Benchmark months | diff --git a/src/content/data-streams/rwa-streams/futures.mdx b/src/content/data-streams/rwa-streams/futures.mdx index 25fd59880c4..5e874f00036 100644 --- a/src/content/data-streams/rwa-streams/futures.mdx +++ b/src/content/data-streams/rwa-streams/futures.mdx @@ -26,6 +26,10 @@ Because futures contracts expire, Data Streams does not publish one feed per con Developers are responsible for choosing the appropriate feed and ensuring that the operation and performance of their choice matches expectations. For more information, see the [Developer Responsibilities](/data-streams/developer-responsibilities) guidance. +## Schema + +Futures feeds publish bid, ask, and mid prices for each generic contract. + ## Coverage Futures streams are currently available for the following commodities. Additional commodities and asset classes may be added based on demand. @@ -62,7 +66,7 @@ This design means: ### How the roll works -When the front-month contract reaches its expiration, the generic feeds cascade forward: +When the front-month contract reaches its expiration, the generic feeds cascade forward at 00:00:00 (midnight) Eastern Time on the expiration date: - The **front-month feed** takes over the contract previously tracked by the second-month feed - The **second-month feed** takes over the contract previously tracked by the third-month feed @@ -78,7 +82,7 @@ A few properties of the roll are worth calling out explicitly: "Front-month" does not always mean "nearest calendar month." Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: -- **Energy** (Oil, Natural Gas): every calendar month is listed and liquid. The generic feeds walk the full monthly strip, so the front-, second-, and third-month feeds track three **consecutive** calendar months. +- **Energy** (Oil, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front-, second-, and third-month feeds track three **consecutive** calendar months. - **Precious metals** (Gold, Silver): many calendar months are listed, but liquidity concentrates in a benchmark cycle. The generic feeds follow the benchmark cycle only and skip non-benchmark months, even though those contracts exist and trade. | Commodity | Benchmark months | From d789e6162ab9e5419b5cde2770b427fda4e60217 Mon Sep 17 00:00:00 2001 From: Sebastian Lerner Date: Mon, 24 Aug 2026 13:32:39 +0100 Subject: [PATCH 06/10] Expand Schema section with v14 field list Names the v14 schema and lists its fields (mid, bid, ask, expiry_time, roll_date, lastSeenTimestampNs, marketStatus, contract_month) per the Lo Tech schema requirements. Co-Authored-By: Claude Sonnet 5 --- src/content/data-streams/llms-full.txt | 13 ++++++++++++- src/content/data-streams/rwa-streams/futures.mdx | 13 ++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/content/data-streams/llms-full.txt b/src/content/data-streams/llms-full.txt index 71411cb1ace..6730f2aef60 100644 --- a/src/content/data-streams/llms-full.txt +++ b/src/content/data-streams/llms-full.txt @@ -6534,7 +6534,18 @@ Developers are responsible for choosing the appropriate feed and ensuring that t ## Schema -Futures feeds publish bid, ask, and mid prices for each generic contract. +Futures streams use the v14 schema. + +| Field | Description | +| --------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `mid` | Mid price | +| `bid` | Bid price | +| `ask` | Ask price | +| `expiry_time` | Contract expiration time | +| `roll_date` | First day of notice, as a Unix timestamp | +| `lastSeenTimestampNs` | Timestamp of the last update received from the data provider | +| `marketStatus` | Market status indicator | +| `contract_month` | Standard futures month code (F=Jan, G=Feb, H=Mar, J=Apr, K=May, M=Jun, N=Jul, Q=Aug, U=Sep, V=Oct, X=Nov, Z=Dec) | ## Coverage diff --git a/src/content/data-streams/rwa-streams/futures.mdx b/src/content/data-streams/rwa-streams/futures.mdx index 5e874f00036..cda39fd7e97 100644 --- a/src/content/data-streams/rwa-streams/futures.mdx +++ b/src/content/data-streams/rwa-streams/futures.mdx @@ -28,7 +28,18 @@ Developers are responsible for choosing the appropriate feed and ensuring that t ## Schema -Futures feeds publish bid, ask, and mid prices for each generic contract. +Futures streams use the v14 schema. + +| Field | Description | +| --------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `mid` | Mid price | +| `bid` | Bid price | +| `ask` | Ask price | +| `expiry_time` | Contract expiration time | +| `roll_date` | First day of notice, as a Unix timestamp | +| `lastSeenTimestampNs` | Timestamp of the last update received from the data provider | +| `marketStatus` | Market status indicator | +| `contract_month` | Standard futures month code (F=Jan, G=Feb, H=Mar, J=Apr, K=May, M=Jun, N=Jul, Q=Aug, U=Sep, V=Oct, X=Nov, Z=Dec) | ## Coverage From 50af80d8612697c9ca743a3406c70ea70f080072 Mon Sep 17 00:00:00 2001 From: Sebastian Lerner Date: Tue, 25 Aug 2026 00:07:52 +0100 Subject: [PATCH 07/10] Address review feedback from Will - Drop "-month" from feed labels (front-month/second-month/third-month -> front/second/third) since the ordinal naming implied literal calendar-month spacing, contradicting the benchmark-cycle explanation for Gold/Silver - Rename WTI -> US Oil per Nora's naming guidance - Remove the specific 00:00:00 ET roll time, which is disputed internally (LO Tech/DSA still need to confirm exact timing) - Reframe the early-roll guidance around price volatility and liquidation risk near expiry, not just thin liquidity - Note that marketStatus reflects the primary exchange venue's current status, in Trading hours Co-Authored-By: Claude Sonnet 5 --- src/content/data-streams/llms-full.txt | 64 ++++++++++--------- .../data-streams/rwa-streams/futures.mdx | 64 ++++++++++--------- 2 files changed, 66 insertions(+), 62 deletions(-) diff --git a/src/content/data-streams/llms-full.txt b/src/content/data-streams/llms-full.txt index 6730f2aef60..eca69551cb7 100644 --- a/src/content/data-streams/llms-full.txt +++ b/src/content/data-streams/llms-full.txt @@ -6551,16 +6551,16 @@ Futures streams use the v14 schema. Futures streams are currently available for the following commodities. Additional commodities and asset classes may be added based on demand. -| Commodity | Generic feeds | -| ----------- | ------------------------------------------------ | -| Gold | Front-month, second-month, and third-month feeds | -| Silver | Front-month, second-month, and third-month feeds | -| Oil (WTI) | Front-month, second-month, and third-month feeds | -| Natural Gas | Front-month, second-month, and third-month feeds | +| Commodity | Generic feeds | +| ----------- | ------------------------------ | +| Gold | Front, second, and third feeds | +| Silver | Front, second, and third feeds | +| US Oil | Front, second, and third feeds | +| Natural Gas | Front, second, and third feeds | ## Naming and price representation -Feed names use the plain instrument name only (for example, "WTI," "Gold," "Natural Gas"). +Feed names use the plain instrument name only (for example, "US Oil," "Gold," "Natural Gas"). Contract specifications — contract size, tick size, quotation units, and similar terms — can vary between exchanges for the same underlying instrument. Chainlink does not publish these specifications, since they belong to the exchange where a given contract is listed. If your application needs exact contract specifications, consult that exchange's own public product documentation directly. @@ -6570,11 +6570,11 @@ Unlike spot instruments, futures contracts have a finite life. For example, a gi To avoid this, each instrument is represented by three static, non-expiring **generic feeds** that always represent the near-term forward curve of eligible contracts: -| Generic feed | Meaning | -| --------------------- | ---------------------------------------------------------------- | -| **Front-month feed** | Tracks the nearest unexpired eligible contract | -| **Second-month feed** | Tracks the next eligible contract after the front-month contract | -| **Third-month feed** | Tracks the eligible contract after that | +| Generic feed | Meaning | +| --------------- | ---------------------------------------------------------- | +| **Front feed** | Tracks the nearest unexpired eligible contract | +| **Second feed** | Tracks the next eligible contract after the front contract | +| **Third feed** | Tracks the eligible contract after that | This design means: @@ -6583,23 +6583,23 @@ This design means: ### How the roll works -When the front-month contract reaches its expiration, the generic feeds cascade forward at 00:00:00 (midnight) Eastern Time on the expiration date: +When the front contract reaches its expiration, the generic feeds cascade forward: -- The **front-month feed** takes over the contract previously tracked by the second-month feed -- The **second-month feed** takes over the contract previously tracked by the third-month feed -- The **third-month feed** begins tracking the next eligible contract in that instrument's cycle +- The **front feed** takes over the contract previously tracked by the second feed +- The **second feed** takes over the contract previously tracked by the third feed +- The **third feed** begins tracking the next eligible contract in that instrument's cycle A few properties of the roll are worth calling out explicitly: -- **The roll is triggered by the front-month contract's expiration**, as defined by the listed expiration calendar for that specific instrument. Expiration conventions differ by instrument, so rolls for different instruments happen on different dates — there is no single "roll day" across all instruments. -- **The roll is a re-mapping, not a price adjustment.** At the moment of the roll, the front-month feed switches from quoting the expiring contract to quoting what was previously the second-month contract. Because different contract months can trade at different prices, **expect a price discontinuity on the generic feed at each roll**. Feeds are not back-adjusted into a smooth continuous series — if your application needs a continuous series, construct it from the raw generic feeds on your end. -- **Until expiration, the front-month feed continues to track the expiring contract**, even in its final days when liquidity has typically already migrated to the next contract. This is precisely why the second-month feed is exposed — so you can implement your own liquidity-based rolls ahead of expiry instead of holding the front-month contract to the end. +- **The roll is triggered by the front contract's expiration**, as defined by the listed expiration calendar for that specific instrument. Expiration conventions differ by instrument, so rolls for different instruments happen on different dates — there is no single "roll day" across all instruments. +- **The roll is a re-mapping, not a price adjustment.** At the moment of the roll, the front feed switches from quoting the expiring contract to quoting what was previously the second contract. Because different contract months can trade at different prices, **expect a price discontinuity on the generic feed at each roll**. Feeds are not back-adjusted into a smooth continuous series — if your application needs a continuous series, construct it from the raw generic feeds on your end. +- **Until expiration, the front feed continues to track the expiring contract**, even in its final days when liquidity has typically already migrated to the next contract. This is precisely why the second feed is exposed — so you can implement your own liquidity-based rolls ahead of expiry instead of holding the front contract to the end. ### Contract eligibility varies by instrument -"Front-month" does not always mean "nearest calendar month." Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: +The front feed does not necessarily track the nearest calendar month — it tracks the nearest unexpired eligible contract, whatever month that happens to be. Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: -- **Energy** (Oil, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front-, second-, and third-month feeds track three **consecutive** calendar months. +- **Energy** (US Oil, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front, second, and third feeds track three **consecutive** calendar months. - **Precious metals** (Gold, Silver): many calendar months are listed, but liquidity concentrates in a benchmark cycle. The generic feeds follow the benchmark cycle only and skip non-benchmark months, even though those contracts exist and trade. | Commodity | Benchmark months | @@ -6607,31 +6607,33 @@ A few properties of the roll are worth calling out explicitly: | Gold | Feb, Apr, Jun, Aug, Oct, Dec | | Silver | Mar, May, Jul, Sep, Dec | -The practical consequence: **the gap between the front-, second-, and third-month feeds is not always one month.** For Gold or Silver, consecutive generic feeds can be one to three months apart. Do not assume monthly spacing in your integration. +The practical consequence: **the gap between the front, second, and third feeds is not always one month.** For Gold or Silver, consecutive generic feeds can be one to three months apart. Do not assume monthly spacing in your integration. ### Worked example Gold follows its benchmark cycle (Feb/Apr/Jun/Aug/Oct/Dec). In August 2026, before the August contract expires: -| Feed | Contract tracked | -| ----------------- | ---------------- | -| Front-month feed | August 2026 | -| Second-month feed | October 2026 | -| Third-month feed | December 2026 | +| Feed | Contract tracked | +| ----------- | ---------------- | +| Front feed | August 2026 | +| Second feed | October 2026 | +| Third feed | December 2026 | -When the August contract expires, the front-month feed jumps directly to October, the second-month feed jumps to December, and the third-month feed begins tracking February 2027 — skipping the non-benchmark September and November contracts entirely, since they never appear on the generic feeds. +When the August contract expires, the front feed jumps directly to October, the second feed jumps to December, and the third feed begins tracking February 2027 — skipping the non-benchmark September and November contracts entirely, since they never appear on the generic feeds. ## Integration guidance -- **Do not hardcode contract-month assumptions.** The spacing between the front-, second-, and third-month feeds varies by instrument — one month for energy, up to a few months for precious metals. -- **Expect price steps at rolls.** A protocol using the front-month feed directly for margining or liquidation should either accept the step as economically correct (the front contract genuinely changed), implement its own early roll using the second-month feed, or build an adjusted continuous series off-chain from the raw generic feeds. -- **Roll early if you depend on liquidity.** In the final days of a contract's life, trading volume typically migrates to the next contract while the front-month feed still tracks the expiring one. If your application is sensitive to thin markets, consider rolling ahead of expiry using the second-month feed. +- **Do not hardcode contract-month assumptions.** The spacing between the front, second, and third feeds varies by instrument — one month for energy, up to a few months for precious metals. +- **Expect price steps at rolls.** A protocol using the front feed directly for margining or liquidation should either accept the step as economically correct (the front contract genuinely changed), implement its own early roll using the second feed, or build an adjusted continuous series off-chain from the raw generic feeds. +- **Roll early to avoid volatility near expiry.** In the final days of a contract's life, trading volume typically migrates to the next contract while the front feed still tracks the expiring one. Thin liquidity in the expiring contract can increase price volatility, which may unexpectedly trigger perpetual trades, liquidations, or other price-sensitive logic. If your application is sensitive to this, consider rolling ahead of expiry using the second feed. - **Follow the listed expiration calendar.** Expiration dates follow the official listed calendar of the exchange where the underlying contract trades, including holiday adjustments. Consult that exchange for the operative source of truth. ## Trading hours Futures trade during standard trading hours for each instrument, with a scheduled break each trading day. Consult the exchange where the underlying contract is listed for holiday and early-close schedules. +Each feed's `marketStatus` field reflects the current market status of the primary exchange venue for that instrument. + ## Risk considerations Integrating protocols are responsible for implementing appropriate monitoring and risk mitigation mechanisms to ensure safe market operation. diff --git a/src/content/data-streams/rwa-streams/futures.mdx b/src/content/data-streams/rwa-streams/futures.mdx index cda39fd7e97..08ae7853641 100644 --- a/src/content/data-streams/rwa-streams/futures.mdx +++ b/src/content/data-streams/rwa-streams/futures.mdx @@ -45,16 +45,16 @@ Futures streams use the v14 schema. Futures streams are currently available for the following commodities. Additional commodities and asset classes may be added based on demand. -| Commodity | Generic feeds | -| ----------- | ------------------------------------------------ | -| Gold | Front-month, second-month, and third-month feeds | -| Silver | Front-month, second-month, and third-month feeds | -| Oil (WTI) | Front-month, second-month, and third-month feeds | -| Natural Gas | Front-month, second-month, and third-month feeds | +| Commodity | Generic feeds | +| ----------- | ------------------------------ | +| Gold | Front, second, and third feeds | +| Silver | Front, second, and third feeds | +| US Oil | Front, second, and third feeds | +| Natural Gas | Front, second, and third feeds | ## Naming and price representation -Feed names use the plain instrument name only (for example, "WTI," "Gold," "Natural Gas"). +Feed names use the plain instrument name only (for example, "US Oil," "Gold," "Natural Gas"). Contract specifications — contract size, tick size, quotation units, and similar terms — can vary between exchanges for the same underlying instrument. Chainlink does not publish these specifications, since they belong to the exchange where a given contract is listed. If your application needs exact contract specifications, consult that exchange's own public product documentation directly. @@ -64,11 +64,11 @@ Unlike spot instruments, futures contracts have a finite life. For example, a gi To avoid this, each instrument is represented by three static, non-expiring **generic feeds** that always represent the near-term forward curve of eligible contracts: -| Generic feed | Meaning | -| --------------------- | ---------------------------------------------------------------- | -| **Front-month feed** | Tracks the nearest unexpired eligible contract | -| **Second-month feed** | Tracks the next eligible contract after the front-month contract | -| **Third-month feed** | Tracks the eligible contract after that | +| Generic feed | Meaning | +| --------------- | ---------------------------------------------------------- | +| **Front feed** | Tracks the nearest unexpired eligible contract | +| **Second feed** | Tracks the next eligible contract after the front contract | +| **Third feed** | Tracks the eligible contract after that | This design means: @@ -77,23 +77,23 @@ This design means: ### How the roll works -When the front-month contract reaches its expiration, the generic feeds cascade forward at 00:00:00 (midnight) Eastern Time on the expiration date: +When the front contract reaches its expiration, the generic feeds cascade forward: -- The **front-month feed** takes over the contract previously tracked by the second-month feed -- The **second-month feed** takes over the contract previously tracked by the third-month feed -- The **third-month feed** begins tracking the next eligible contract in that instrument's cycle +- The **front feed** takes over the contract previously tracked by the second feed +- The **second feed** takes over the contract previously tracked by the third feed +- The **third feed** begins tracking the next eligible contract in that instrument's cycle A few properties of the roll are worth calling out explicitly: -- **The roll is triggered by the front-month contract's expiration**, as defined by the listed expiration calendar for that specific instrument. Expiration conventions differ by instrument, so rolls for different instruments happen on different dates — there is no single "roll day" across all instruments. -- **The roll is a re-mapping, not a price adjustment.** At the moment of the roll, the front-month feed switches from quoting the expiring contract to quoting what was previously the second-month contract. Because different contract months can trade at different prices, **expect a price discontinuity on the generic feed at each roll**. Feeds are not back-adjusted into a smooth continuous series — if your application needs a continuous series, construct it from the raw generic feeds on your end. -- **Until expiration, the front-month feed continues to track the expiring contract**, even in its final days when liquidity has typically already migrated to the next contract. This is precisely why the second-month feed is exposed — so you can implement your own liquidity-based rolls ahead of expiry instead of holding the front-month contract to the end. +- **The roll is triggered by the front contract's expiration**, as defined by the listed expiration calendar for that specific instrument. Expiration conventions differ by instrument, so rolls for different instruments happen on different dates — there is no single "roll day" across all instruments. +- **The roll is a re-mapping, not a price adjustment.** At the moment of the roll, the front feed switches from quoting the expiring contract to quoting what was previously the second contract. Because different contract months can trade at different prices, **expect a price discontinuity on the generic feed at each roll**. Feeds are not back-adjusted into a smooth continuous series — if your application needs a continuous series, construct it from the raw generic feeds on your end. +- **Until expiration, the front feed continues to track the expiring contract**, even in its final days when liquidity has typically already migrated to the next contract. This is precisely why the second feed is exposed — so you can implement your own liquidity-based rolls ahead of expiry instead of holding the front contract to the end. ### Contract eligibility varies by instrument -"Front-month" does not always mean "nearest calendar month." Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: +The front feed does not necessarily track the nearest calendar month — it tracks the nearest unexpired eligible contract, whatever month that happens to be. Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: -- **Energy** (Oil, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front-, second-, and third-month feeds track three **consecutive** calendar months. +- **Energy** (US Oil, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front, second, and third feeds track three **consecutive** calendar months. - **Precious metals** (Gold, Silver): many calendar months are listed, but liquidity concentrates in a benchmark cycle. The generic feeds follow the benchmark cycle only and skip non-benchmark months, even though those contracts exist and trade. | Commodity | Benchmark months | @@ -101,31 +101,33 @@ A few properties of the roll are worth calling out explicitly: | Gold | Feb, Apr, Jun, Aug, Oct, Dec | | Silver | Mar, May, Jul, Sep, Dec | -The practical consequence: **the gap between the front-, second-, and third-month feeds is not always one month.** For Gold or Silver, consecutive generic feeds can be one to three months apart. Do not assume monthly spacing in your integration. +The practical consequence: **the gap between the front, second, and third feeds is not always one month.** For Gold or Silver, consecutive generic feeds can be one to three months apart. Do not assume monthly spacing in your integration. ### Worked example Gold follows its benchmark cycle (Feb/Apr/Jun/Aug/Oct/Dec). In August 2026, before the August contract expires: -| Feed | Contract tracked | -| ----------------- | ---------------- | -| Front-month feed | August 2026 | -| Second-month feed | October 2026 | -| Third-month feed | December 2026 | +| Feed | Contract tracked | +| ----------- | ---------------- | +| Front feed | August 2026 | +| Second feed | October 2026 | +| Third feed | December 2026 | -When the August contract expires, the front-month feed jumps directly to October, the second-month feed jumps to December, and the third-month feed begins tracking February 2027 — skipping the non-benchmark September and November contracts entirely, since they never appear on the generic feeds. +When the August contract expires, the front feed jumps directly to October, the second feed jumps to December, and the third feed begins tracking February 2027 — skipping the non-benchmark September and November contracts entirely, since they never appear on the generic feeds. ## Integration guidance -- **Do not hardcode contract-month assumptions.** The spacing between the front-, second-, and third-month feeds varies by instrument — one month for energy, up to a few months for precious metals. -- **Expect price steps at rolls.** A protocol using the front-month feed directly for margining or liquidation should either accept the step as economically correct (the front contract genuinely changed), implement its own early roll using the second-month feed, or build an adjusted continuous series off-chain from the raw generic feeds. -- **Roll early if you depend on liquidity.** In the final days of a contract's life, trading volume typically migrates to the next contract while the front-month feed still tracks the expiring one. If your application is sensitive to thin markets, consider rolling ahead of expiry using the second-month feed. +- **Do not hardcode contract-month assumptions.** The spacing between the front, second, and third feeds varies by instrument — one month for energy, up to a few months for precious metals. +- **Expect price steps at rolls.** A protocol using the front feed directly for margining or liquidation should either accept the step as economically correct (the front contract genuinely changed), implement its own early roll using the second feed, or build an adjusted continuous series off-chain from the raw generic feeds. +- **Roll early to avoid volatility near expiry.** In the final days of a contract's life, trading volume typically migrates to the next contract while the front feed still tracks the expiring one. Thin liquidity in the expiring contract can increase price volatility, which may unexpectedly trigger perpetual trades, liquidations, or other price-sensitive logic. If your application is sensitive to this, consider rolling ahead of expiry using the second feed. - **Follow the listed expiration calendar.** Expiration dates follow the official listed calendar of the exchange where the underlying contract trades, including holiday adjustments. Consult that exchange for the operative source of truth. ## Trading hours Futures trade during standard trading hours for each instrument, with a scheduled break each trading day. Consult the exchange where the underlying contract is listed for holiday and early-close schedules. +Each feed's `marketStatus` field reflects the current market status of the primary exchange venue for that instrument. + ## Risk considerations Integrating protocols are responsible for implementing appropriate monitoring and risk mitigation mechanisms to ensure safe market operation. From 5dad3438be3e40dbd00f958d548ec8e45d2129ab Mon Sep 17 00:00:00 2001 From: Sebastian Lerner Date: Fri, 28 Aug 2026 15:12:59 +0100 Subject: [PATCH 08/10] Add Brent coverage, last_trading_day field, roll methodology fields, and confirmed roll timing - Add Brent to Coverage and the Energy grouping (WTI, Brent, NatGas, Gold, Silver ingestion confirmed in progress per Nora) - Add last_trading_day to the base schema field list (confirmed by Lo Tech) - Add a Continuous roll price fields section: price_notice_roll, price_goldman_roll (GSCI methodology), price_continuous_roll, and first_notice_date, plus a note on the planned current-business-day field pending finalization - Add confirmed roll timing: the switch happens right after the primary exchange's session close (e.g. ~17:00 ET for CME), not at a fixed midnight time as previously assumed Co-Authored-By: Claude Sonnet 5 --- src/content/data-streams/llms-full.txt | 18 +++++++++++++++++- .../data-streams/rwa-streams/futures.mdx | 18 +++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/content/data-streams/llms-full.txt b/src/content/data-streams/llms-full.txt index eca69551cb7..e3f267a1ae9 100644 --- a/src/content/data-streams/llms-full.txt +++ b/src/content/data-streams/llms-full.txt @@ -6546,6 +6546,20 @@ Futures streams use the v14 schema. | `lastSeenTimestampNs` | Timestamp of the last update received from the data provider | | `marketStatus` | Market status indicator | | `contract_month` | Standard futures month code (F=Jan, G=Feb, H=Mar, J=Apr, K=May, M=Jun, N=Jul, Q=Aug, U=Sep, V=Oct, X=Nov, Z=Dec) | +| `last_trading_day` | The final day the current contract trades | + +### Continuous roll price fields + +In addition to the raw generic feed prices above — which switch entirely to the next contract at the first notice date — Chainlink also publishes continuous price series built using alternative rolling methodologies, for integrators who want a smoothed price instead of a hard cutover: + +| Field | Description | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `price_notice_roll` | Equivalent to the generic front feed price: switches entirely to the next contract at the first notice date | +| `price_goldman_roll` | Uses the Goldman Roll (GSCI methodology): shifts 20% of the position to the next contract each business day, over business days 5–9 of the month preceding delivery | +| `price_continuous_roll` | Smooths the transition evenly (1/N per business day) across the entire contract cycle, rather than a fixed window | +| `first_notice_date` | Date on which `price_notice_roll` switches to the next contract | + +Chainlink also plans to publish the current business day count within the active roll window, so integrators can implement the Goldman Roll or Continuous Roll methodology themselves. Behavior on non-trading days (holding the last value versus resetting to zero) is still being finalized. ## Coverage @@ -6556,6 +6570,7 @@ Futures streams are currently available for the following commodities. Additiona | Gold | Front, second, and third feeds | | Silver | Front, second, and third feeds | | US Oil | Front, second, and third feeds | +| Brent | Front, second, and third feeds | | Natural Gas | Front, second, and third feeds | ## Naming and price representation @@ -6592,6 +6607,7 @@ When the front contract reaches its expiration, the generic feeds cascade forwar A few properties of the roll are worth calling out explicitly: - **The roll is triggered by the front contract's expiration**, as defined by the listed expiration calendar for that specific instrument. Expiration conventions differ by instrument, so rolls for different instruments happen on different dates — there is no single "roll day" across all instruments. +- **The switch happens right after the primary exchange's trading session closes** on the expiration date, not at a fixed clock time across all instruments. For example, CME-listed instruments typically close around 17:00 ET. - **The roll is a re-mapping, not a price adjustment.** At the moment of the roll, the front feed switches from quoting the expiring contract to quoting what was previously the second contract. Because different contract months can trade at different prices, **expect a price discontinuity on the generic feed at each roll**. Feeds are not back-adjusted into a smooth continuous series — if your application needs a continuous series, construct it from the raw generic feeds on your end. - **Until expiration, the front feed continues to track the expiring contract**, even in its final days when liquidity has typically already migrated to the next contract. This is precisely why the second feed is exposed — so you can implement your own liquidity-based rolls ahead of expiry instead of holding the front contract to the end. @@ -6599,7 +6615,7 @@ A few properties of the roll are worth calling out explicitly: The front feed does not necessarily track the nearest calendar month — it tracks the nearest unexpired eligible contract, whatever month that happens to be. Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: -- **Energy** (US Oil, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front, second, and third feeds track three **consecutive** calendar months. +- **Energy** (US Oil, Brent, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front, second, and third feeds track three **consecutive** calendar months. - **Precious metals** (Gold, Silver): many calendar months are listed, but liquidity concentrates in a benchmark cycle. The generic feeds follow the benchmark cycle only and skip non-benchmark months, even though those contracts exist and trade. | Commodity | Benchmark months | diff --git a/src/content/data-streams/rwa-streams/futures.mdx b/src/content/data-streams/rwa-streams/futures.mdx index 08ae7853641..474f1dcddaa 100644 --- a/src/content/data-streams/rwa-streams/futures.mdx +++ b/src/content/data-streams/rwa-streams/futures.mdx @@ -40,6 +40,20 @@ Futures streams use the v14 schema. | `lastSeenTimestampNs` | Timestamp of the last update received from the data provider | | `marketStatus` | Market status indicator | | `contract_month` | Standard futures month code (F=Jan, G=Feb, H=Mar, J=Apr, K=May, M=Jun, N=Jul, Q=Aug, U=Sep, V=Oct, X=Nov, Z=Dec) | +| `last_trading_day` | The final day the current contract trades | + +### Continuous roll price fields + +In addition to the raw generic feed prices above — which switch entirely to the next contract at the first notice date — Chainlink also publishes continuous price series built using alternative rolling methodologies, for integrators who want a smoothed price instead of a hard cutover: + +| Field | Description | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `price_notice_roll` | Equivalent to the generic front feed price: switches entirely to the next contract at the first notice date | +| `price_goldman_roll` | Uses the Goldman Roll (GSCI methodology): shifts 20% of the position to the next contract each business day, over business days 5–9 of the month preceding delivery | +| `price_continuous_roll` | Smooths the transition evenly (1/N per business day) across the entire contract cycle, rather than a fixed window | +| `first_notice_date` | Date on which `price_notice_roll` switches to the next contract | + +Chainlink also plans to publish the current business day count within the active roll window, so integrators can implement the Goldman Roll or Continuous Roll methodology themselves. Behavior on non-trading days (holding the last value versus resetting to zero) is still being finalized. ## Coverage @@ -50,6 +64,7 @@ Futures streams are currently available for the following commodities. Additiona | Gold | Front, second, and third feeds | | Silver | Front, second, and third feeds | | US Oil | Front, second, and third feeds | +| Brent | Front, second, and third feeds | | Natural Gas | Front, second, and third feeds | ## Naming and price representation @@ -86,6 +101,7 @@ When the front contract reaches its expiration, the generic feeds cascade forwar A few properties of the roll are worth calling out explicitly: - **The roll is triggered by the front contract's expiration**, as defined by the listed expiration calendar for that specific instrument. Expiration conventions differ by instrument, so rolls for different instruments happen on different dates — there is no single "roll day" across all instruments. +- **The switch happens right after the primary exchange's trading session closes** on the expiration date, not at a fixed clock time across all instruments. For example, CME-listed instruments typically close around 17:00 ET. - **The roll is a re-mapping, not a price adjustment.** At the moment of the roll, the front feed switches from quoting the expiring contract to quoting what was previously the second contract. Because different contract months can trade at different prices, **expect a price discontinuity on the generic feed at each roll**. Feeds are not back-adjusted into a smooth continuous series — if your application needs a continuous series, construct it from the raw generic feeds on your end. - **Until expiration, the front feed continues to track the expiring contract**, even in its final days when liquidity has typically already migrated to the next contract. This is precisely why the second feed is exposed — so you can implement your own liquidity-based rolls ahead of expiry instead of holding the front contract to the end. @@ -93,7 +109,7 @@ A few properties of the roll are worth calling out explicitly: The front feed does not necessarily track the nearest calendar month — it tracks the nearest unexpired eligible contract, whatever month that happens to be. Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: -- **Energy** (US Oil, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front, second, and third feeds track three **consecutive** calendar months. +- **Energy** (US Oil, Brent, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front, second, and third feeds track three **consecutive** calendar months. - **Precious metals** (Gold, Silver): many calendar months are listed, but liquidity concentrates in a benchmark cycle. The generic feeds follow the benchmark cycle only and skip non-benchmark months, even though those contracts exist and trade. | Commodity | Benchmark months | From b69b851aae9a255a6b9c62cbd921aef890fe3ea1 Mon Sep 17 00:00:00 2001 From: Sebastian Lerner Date: Fri, 28 Aug 2026 17:51:40 -0400 Subject: [PATCH 09/10] Rename Brent to UK Oil for naming consistency Matches the US Oil / UK Oil naming pair already confirmed for this product (Jira OPDATA-8442: assetName "NY UKOIL / USD") instead of using the plain commodity name. Co-Authored-By: Claude Sonnet 5 --- src/content/data-streams/llms-full.txt | 4 ++-- src/content/data-streams/rwa-streams/futures.mdx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/data-streams/llms-full.txt b/src/content/data-streams/llms-full.txt index e3f267a1ae9..d949f4b014e 100644 --- a/src/content/data-streams/llms-full.txt +++ b/src/content/data-streams/llms-full.txt @@ -6570,7 +6570,7 @@ Futures streams are currently available for the following commodities. Additiona | Gold | Front, second, and third feeds | | Silver | Front, second, and third feeds | | US Oil | Front, second, and third feeds | -| Brent | Front, second, and third feeds | +| UK Oil | Front, second, and third feeds | | Natural Gas | Front, second, and third feeds | ## Naming and price representation @@ -6615,7 +6615,7 @@ A few properties of the roll are worth calling out explicitly: The front feed does not necessarily track the nearest calendar month — it tracks the nearest unexpired eligible contract, whatever month that happens to be. Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: -- **Energy** (US Oil, Brent, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front, second, and third feeds track three **consecutive** calendar months. +- **Energy** (US Oil, UK Oil, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front, second, and third feeds track three **consecutive** calendar months. - **Precious metals** (Gold, Silver): many calendar months are listed, but liquidity concentrates in a benchmark cycle. The generic feeds follow the benchmark cycle only and skip non-benchmark months, even though those contracts exist and trade. | Commodity | Benchmark months | diff --git a/src/content/data-streams/rwa-streams/futures.mdx b/src/content/data-streams/rwa-streams/futures.mdx index 474f1dcddaa..e23ac912f5a 100644 --- a/src/content/data-streams/rwa-streams/futures.mdx +++ b/src/content/data-streams/rwa-streams/futures.mdx @@ -64,7 +64,7 @@ Futures streams are currently available for the following commodities. Additiona | Gold | Front, second, and third feeds | | Silver | Front, second, and third feeds | | US Oil | Front, second, and third feeds | -| Brent | Front, second, and third feeds | +| UK Oil | Front, second, and third feeds | | Natural Gas | Front, second, and third feeds | ## Naming and price representation @@ -109,7 +109,7 @@ A few properties of the roll are worth calling out explicitly: The front feed does not necessarily track the nearest calendar month — it tracks the nearest unexpired eligible contract, whatever month that happens to be. Each instrument has its own set of listed contract months, and for several instruments, the actively traded contracts are only a subset of what is listed: -- **Energy** (US Oil, Brent, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front, second, and third feeds track three **consecutive** calendar months. +- **Energy** (US Oil, UK Oil, Natural Gas): every calendar month is listed, though liquidity is generally concentrated in nearer maturities. The generic feeds walk the full monthly strip regardless, so the front, second, and third feeds track three **consecutive** calendar months. - **Precious metals** (Gold, Silver): many calendar months are listed, but liquidity concentrates in a benchmark cycle. The generic feeds follow the benchmark cycle only and skip non-benchmark months, even though those contracts exist and trade. | Commodity | Benchmark months | From b730d9581ada35b52ff5f6666d1cadf8ad9c57b2 Mon Sep 17 00:00:00 2001 From: Sebastian Lerner Date: Fri, 28 Aug 2026 18:08:11 -0400 Subject: [PATCH 10/10] Remove CME name from roll-timing example Same rule as everywhere else on this page: no exchange names. The CME reference slipped in when the exact roll-timing detail was added. Co-Authored-By: Claude Sonnet 5 --- src/content/data-streams/llms-full.txt | 2 +- src/content/data-streams/rwa-streams/futures.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/data-streams/llms-full.txt b/src/content/data-streams/llms-full.txt index d949f4b014e..d2d564b215f 100644 --- a/src/content/data-streams/llms-full.txt +++ b/src/content/data-streams/llms-full.txt @@ -6607,7 +6607,7 @@ When the front contract reaches its expiration, the generic feeds cascade forwar A few properties of the roll are worth calling out explicitly: - **The roll is triggered by the front contract's expiration**, as defined by the listed expiration calendar for that specific instrument. Expiration conventions differ by instrument, so rolls for different instruments happen on different dates — there is no single "roll day" across all instruments. -- **The switch happens right after the primary exchange's trading session closes** on the expiration date, not at a fixed clock time across all instruments. For example, CME-listed instruments typically close around 17:00 ET. +- **The switch happens right after the primary exchange's trading session closes** on the expiration date, not at a fixed clock time across all instruments. For these commodities, that session close is typically around 17:00 ET. - **The roll is a re-mapping, not a price adjustment.** At the moment of the roll, the front feed switches from quoting the expiring contract to quoting what was previously the second contract. Because different contract months can trade at different prices, **expect a price discontinuity on the generic feed at each roll**. Feeds are not back-adjusted into a smooth continuous series — if your application needs a continuous series, construct it from the raw generic feeds on your end. - **Until expiration, the front feed continues to track the expiring contract**, even in its final days when liquidity has typically already migrated to the next contract. This is precisely why the second feed is exposed — so you can implement your own liquidity-based rolls ahead of expiry instead of holding the front contract to the end. diff --git a/src/content/data-streams/rwa-streams/futures.mdx b/src/content/data-streams/rwa-streams/futures.mdx index e23ac912f5a..f7c2be24e90 100644 --- a/src/content/data-streams/rwa-streams/futures.mdx +++ b/src/content/data-streams/rwa-streams/futures.mdx @@ -101,7 +101,7 @@ When the front contract reaches its expiration, the generic feeds cascade forwar A few properties of the roll are worth calling out explicitly: - **The roll is triggered by the front contract's expiration**, as defined by the listed expiration calendar for that specific instrument. Expiration conventions differ by instrument, so rolls for different instruments happen on different dates — there is no single "roll day" across all instruments. -- **The switch happens right after the primary exchange's trading session closes** on the expiration date, not at a fixed clock time across all instruments. For example, CME-listed instruments typically close around 17:00 ET. +- **The switch happens right after the primary exchange's trading session closes** on the expiration date, not at a fixed clock time across all instruments. For these commodities, that session close is typically around 17:00 ET. - **The roll is a re-mapping, not a price adjustment.** At the moment of the roll, the front feed switches from quoting the expiring contract to quoting what was previously the second contract. Because different contract months can trade at different prices, **expect a price discontinuity on the generic feed at each roll**. Feeds are not back-adjusted into a smooth continuous series — if your application needs a continuous series, construct it from the raw generic feeds on your end. - **Until expiration, the front feed continues to track the expiring contract**, even in its final days when liquidity has typically already migrated to the next contract. This is precisely why the second feed is exposed — so you can implement your own liquidity-based rolls ahead of expiry instead of holding the front contract to the end.