Skip to main content

Fuego Cost Index (FCI)

The FCI is the basket that re-bases HEAT’s hearthstone quarterly. Miners vote six consumer prices; the daemon aggregates them into a single index and the chain re-bases the hearthstone from it. This page explains how to participate as a miner.

Who this is for

  • Miners running fuegod — see “How to vote”.
  • Node operators feeding prices via an oracle — see “Oracle mode”.
  • Integrators reading the on-chain index — see “How the vote is used”.

Unit cheat sheet (read this first)

The vote carries integers. The unit differs by category: Power is the only category on a milli-USD grid. Electricity is quoted to three decimals everywhere ($0.788/kWh), and one cent is a 5% step at US prices — too coarse for a component that carries 30% of the index. Every other category is quoted to two decimals, so cents are exact. The index math is a ratio (price ÷ baseline), so the mixed grids cancel out and never distort the result.

How to vote

Option A — pass prices on the command line

Prices are in your local currency’s USD equivalent. If your prices are in another currency, set --fci-currency EUR --fci-usd-rate 1.08 and type the local amounts; the daemon converts.

Option B — feed an oracle JSON file

The daemon reads the file once at startup. CLI flags take priority over the oracle for any category you set explicitly; the oracle fills the rest. The oracle file is plain JSON with one key per category, value in USD per natural unit:
Keys starting with _ (metadata, provenance) are ignored. Missing categories are left out of the vote; a category that rounds to zero on its grid is dropped.

Verify your vote landed

At startup the daemon logs one line:
mask=0x3f means all six categories are present. A missing category clears its bit (e.g. 0x3e means power is absent). If you see No basket prices configured, none of the inputs resolved to a non-zero value — check your units and currency rate.

Keep the oracle fresh

With --fci-oracle, the daemon checks the file’s mtime at startup. If it is older than --fci-stale-warn-days (default 30), it prints a warning:
The oracle is not re-read while running; restart the daemon after updating the file.

Producing an oracle file

A reference producer ships in tools/fci-oracle/ (Go, BLS-only, no Truflation averaging):
It fetches the BLS headline series for all six commodities plus the headline CPI, and writes USD-per-natural-unit values with a _provenance block naming the series and period used. Run it on a cron (weekly is plenty — BLS publishes monthly) and point your miners at the output.

How the vote is used

  • Each block, miners with a configured basket include their vote in the coinbase transaction.
  • Per epoch (900 blocks mainnet, 10 testnet), votes are aggregated: per category a trimmed median (25% tail trimmed), requiring at least 351 miners.
  • A category counts as “fresh” for the quarter only if at least 3 of the 6 categories cleared their quorum that epoch.
  • Quarterly (18 epochs), the index re-bases HEAT’s hearthstone, but only if at least 3 of the 6 categories were fresh in the quarter. The drift per quarter is capped at 5.04%.
  • The hearthstone is anchored to the Day-0 basket, not compounded: hearthstone = 158¢ × index ÷ 100.

Common mistakes

Where the numbers live

The baselines, weights, and limits are constants in src/CryptoNoteConfig.h (FCI_BASELINE_*, FCI_WEIGHT_*, FCI_MIN_*). The consensus logic is in src/CryptoNoteCore/FuegoCostIndex.{h,cpp}. If a value in this document ever disagrees with the code, the code wins.