Oracle
The stablecoin needs a USD price, and a new chain has no native source. Anemos derives the ANM/USD price inside consensus, as a pure function of on-chain data, so a node that was offline and re-syncs computes the identical value.
Price rides in the block
The consensus vote and certificate paths are not touched. Instead, each block:
- A deterministic committee subset (ranked by $\mathrm{Hash}(\text{seed} ,|, \text{valNum})$
over the committed $H{-}1$ sortition seed, so every node re-derives it with zero storage) signs the
canonical message $\mathrm{H}(\text{height} ,|, \text{valNum} ,|, \text{price})$ with its
validator BLS key and gossips a
PriceVote(committee-only, off the consensus vote path). - The proposer collects the subset’s votes and aggregates them into a block-body
OracleDatasection — one BLS aggregate — whose hash is folded intoBlock.Hash(). The existing precommit certificate therefore attests the oracle data with zero certificate-format change. - At commit, every node re-derives the subset, checks the signers form a subset meeting the quorum, verifies the aggregate, takes the median, bounds it to ±10% of the running price, and advances the accepted price by a slow integer EMA.
The accepted price is thus a TWAP that converges over ~$1/\alpha$ blocks, not this block’s median. Below quorum the proposer emits no section, the last price carries forward, and a staleness cap halts mint/redeem after $N$ quorum-less blocks.
Omission vs. commission
- Absence is never slashed. A node offline for minutes simply did not submit; it pays only a soft availability-score dip. This is what makes a flaky or low-resource node safe to run.
- Deviation is slashed. A signed price outside the tolerance band forfeits a small fraction of stake per period; the forfeited ANM is moved into the reserve it endangered (a transfer, not a burn). A split-committee guard suppresses slashing when deviators are ≥ half the attesters, so an honestly bimodal committee is never punished.
Trust ceiling
Moving the median requires a majority of that block’s subset, and even a fully captured subset moves the committed price by at most ~$\alpha\delta \approx 0.25%$ that block (move cap + slow EMA). The EMA integrates hundreds of attestations across many independent random subsets — effectively the whole committee — so dragging the peg requires a sustained majority over many blocks. Committee seats are stake-weighted VRF sortition, bond-lagged, and rotation-capped, so this reduces to an honest-majority-of-stake assumption, the same one consensus already makes.
Off-chain feeder
Each committee validator runs an off-chain feeder that pulls ANM/USD (for testing, PAC/USD) from
several public market-data APIs, takes a robust median, and — only when it is in the next block’s
subset — signs and gossips a PriceVote. The feeder is not consensus-critical: the on-chain layer
re-medians across the subset with quorum, the move cap, the TWAP lag, and deviation slashing.