§ Wiki · Wiki entry

Thirty-Day Moving Average ICP/XDR Conversion

How the Cycles Minting Canister computes the 30-day moving average ICP/XDR exchange rate that converts XDR-denominated node provider rewards into ICP at minting time.

·May 4, 2026·2 min read

Node provider rewards are denominated in XDR — the IMF's Special Drawing Rights basket — but paid in ICP. The conversion at minting time uses a 30-day moving average of the ICP/XDR exchange rate, computed inside the Cycles Minting Canister (CMC), which is part of the Network Nervous System (NNS).

This entry describes how the moving average is sampled and computed, where the source data comes from, and how to verify the current value yourself. For the rate cards being converted, see Node Provider Remuneration.

Where the data comes from

The CMC pulls the live ICP/XDR rate from the network's exchange rate canister — an on-chain price oracle — on a fixed cadence:

  • Sampling frequency: every 5 minutes.
  • Source: the exchange rate canister.
  • Storage: start-of-day rates are recorded in UTC and retained for at least 30 days.

How the average is computed

At each conversion point, the CMC takes the start-of-day rates for the past 30 days and averages them. The full implementation is in the CMC source code on GitHub and can be audited directly.

Because the average is over start-of-day rates rather than the live price, the conversion is insulated from short-term volatility on any given trading day — a short price spike does not propagate into the rewards calculation unless it is sustained.

Where to read the current value

When the conversion happens

Node provider rewards are minted every 2,629,700 seconds (one-twelfth of a year). At each minting event, the CMC reads the current 30-day moving average and uses it to convert the XDR-denominated reward into ICP, which is then transferred to the principal registered against each provider.

The next minting date is published at next-rewards-gnj.caffeine.xyz.