> For the complete documentation index, see [llms.txt](https://docs.aftermath.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aftermath.finance/perpetuals/architecture/market-specifications/24-5-commodity-markets.md).

# 24/5 Commodity Markets

Specifications, session hours, and oracle details for commodity-referenced perpetuals.

Commodity markets track spot or futures prices from real-world exchanges, so they follow those exchanges' trading hours.

### Instrument Specifications

| Market | Ticker         | Description                                                                                                                  | Settlement | Max Leverage | MMR | Liq. Leverage | Margin Mode | Contract Size | Oracle                                                                                                                                            |
| ------ | -------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------- | ------------ | --- | ------------- | ----------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| Silver | XAG/USD:USDC   | Tracks the value of 1 troy ounce of silver.                                                                                  | USDC       | 10×          | 5%  | 20×           | Isolated    | 0.00001       | [Pyth (XAG)](https://app.pyth.com/explore/Metal.XAG%2FUSD)                                                                                        |
| WTI    | WTI/USD:USDC   | Tracks West Texas Intermediate crude oil through cash-settled ICE Futures Europe WTI futures. See Oracle Roll section below. | USDC       | 5×           | 10% | 10×           | Isolated    | 0.00001       | [Pyth CLLZ6 (front)](https://app.pyth.com/explore/Commodities.CLLZ6%2FUSD) / [CLLF7 (next)](https://app.pyth.com/explore/Commodities.CLLF7%2FUSD) |
| Brent  | BRENT/USD:USDC | Tracks the price of Brent crude oil. See Oracle Roll section below.                                                          | USDC       | 5×           | 10% | 10×           | Isolated    | 0.00001       | [Pyth (front)](https://app.pyth.com/explore/Commodities.BRENTF7%2FUSD) / [next](https://app.pyth.com/explore/Commodities.BRENTG7%2FUSD)           |

**MMR** is the maintenance margin ratio; **Liq. Leverage** = 1 / MMR. Liquidations are partial. See [Margin](/perpetuals/architecture/margin.md) and [Liquidations](/perpetuals/architecture/liquidations.md).

### Session Hours

| Market    | Session hours                                                                                                                                                                                              |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **WTI**   | Sunday 11:00 PM–midnight; Monday midnight–11:00 PM; Tuesday–Friday 1:00 AM–11:00 PM; Saturday closed. All times use the Europe/London time zone.                                                           |
| **Brent** | Sunday 11:00 PM–midnight, Monday midnight–11:00 PM, and Tuesday–Friday 1:00 AM–11:00 PM in the Europe/London time zone. Trading follows the feed-specific holiday schedule shown on the linked Pyth pages. |

Hours follow the Pyth feeds' regular session in Europe/London time, including daylight saving. Pyth's holiday closures and early closes apply; while the feeds are closed, the index price does not update.

### Oracle Roll

WTI and BRENT are priced from dated futures contracts. To avoid a price jump when the front contract nears expiry, the oracle blends the front and next contracts on-chain over a roll window:

$$
P\_{blended} = w\_{front\_month} ⋅
P\_{front\_month} + w\_{next\_month} ⋅ P\_{next\_month}
$$

The weights always sum to 1 and come from the current time `t` and the on-chain roll window:

* `t ≤ roll_start`: 100% front month
* `t ≥ roll_end`: 100% next month
* Otherwise: w₂ = (`t` − `roll_start`) / (`roll_end` − `roll_start`), and w₁ = 1 − w₂

After `roll_end`, the next contract becomes the price source and the configuration advances to the following month. Both raw Pyth feeds are visible on-chain. Month codes: F=Jan, G=Feb, H=Mar, J=Apr, K=May, M=Jun, N=Jul, Q=Aug, U=Sep, V=Oct, X=Nov, Z=Dec.

### WTI

WTI uses Pyth's `CLL` series, which tracks [WTI crude futures on ICE Futures Europe](https://www.ice.com/products/213), quoted in USD per barrel and cash-settled. The next roll runs from November 6, 2026 at 10:30 PM UTC to November 12, 2026 at 10:30 PM UTC, ahead of the front contract's November 19 expiry.

#### Active Pyth Feeds

| Role  | Pyth feed                                                         | Lazer ID | ICE WTI contract | Feed expiry                                    | Pyth status |
| ----- | ----------------------------------------------------------------- | -------- | ---------------- | ---------------------------------------------- | ----------- |
| Front | [CLLZ6/USD](https://app.pyth.com/explore/Commodities.CLLZ6%2FUSD) | `3455`   | December 2026    | November 19, 2026 at 7:30 PM GMT (7:30 PM UTC) | Stable      |
| Next  | [CLLF7/USD](https://app.pyth.com/explore/Commodities.CLLF7%2FUSD) | `3759`   | January 2027     | December 18, 2026 at 7:30 PM GMT (7:30 PM UTC) | Stable      |

The [on-chain `WTIUSD` rolling object](/perpetuals/contracts.md) exposes `front_feed_id: 3455`, `next_feed_id: 3759`, `roll_start_timestamp_ms: 1794004200000`, `roll_end_timestamp_ms: 1794522600000`, and `expiry_timestamp_ms: 1795116600000`. These match the roll and expiry times above.

### BRENT

BRENT uses the same roll, applied to ICE Brent crude futures:

* Front contract: [BRENTF7/USD](https://app.pyth.com/explore/Commodities.BRENTF7%2FUSD), Lazer ID `3682`, expiring November 30, 2026 at 7:30 PM GMT (7:30 PM UTC)
* Next contract: [BRENTG7/USD](https://app.pyth.com/explore/Commodities.BRENTG7%2FUSD), Lazer ID `3683`, expiring December 30, 2026 at 7:30 PM GMT (7:30 PM UTC)
* Roll window: November 6, 2026 at 10:30 PM UTC through November 12, 2026 at 10:30 PM UTC
* The [on-chain `BRENTUSD` rolling object](/perpetuals/contracts.md) exposes `front_feed_id: 3682`, `next_feed_id: 3683`, `roll_start_timestamp_ms: 1794004200000`, `roll_end_timestamp_ms: 1794522600000`, and `expiry_timestamp_ms: 1796067000000`

### Verify On-Chain

Send these queries to the [Sui mainnet GraphQL endpoint](https://graphql.mainnet.sui.io/graphql). The WTI and BRENT roll objects:

```graphql
query VerifyRollConfiguration {
  wtiRoll: object(
    address: "0xa9e7e6c24eb29920831ed5e5f5e101eb985eacf4ef619fc620f7f4511e9d286a"
  ) {
    ...RollFields
  }
  brentRoll: object(
    address: "0x885a51572084e0b8dd5ebeef59e5d0595b45d8f623fcd3c32bfbfc0527712400"
  ) {
    ...RollFields
  }
}

fragment RollFields on Object {
  version
  previousTransaction {
    digest
  }
  asMoveObject {
    contents {
      type {
        repr
      }
      json
    }
  }
}
```

Each returns the front and next feed IDs, roll start, roll end, and expiry (Unix milliseconds). `previousTransaction.digest` is the last transaction that changed it.

The deployed rolling-oracle code:

```graphql
query VerifyWtiRollLogic {
  package(
    address: "0x7ab17437b8abad366757ac8cec7cdf8ab483090d9d5026e45cc37f27769535e8"
  ) {
    version
    module(name: "price_feed_storage") {
      name
      disassembly
    }
  }
}
```

`blended_price_and_timestamp_ms` returns the front feed at or before `roll_start`, the next feed at or after `roll_end`, and the time-weighted blend in between.
