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
--fci-currency EUR --fci-usd-rate 1.08 and type the local amounts; the daemon converts.
Option B — feed an oracle JSON file
_ (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:
Producing an oracle file
A reference producer ships intools/fci-oracle/ (Go, BLS-only, no Truflation averaging):
_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 insrc/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.
