# How a number is made

Two providers agree to the digit, or nothing prints.

## Source to final

[![Ten steps: public data, read from three providers, two agree to the digit, an anomaly check, signed with the publisher key, recorded append only, recounted in the public repository, co-signed by a second key, final after 24 hours, read by markets, agents and apps. A disagreement or an anomaly holds the print for the next read.](https://tickerz.com/docs/how-01-oracle.webp)](https://tickerz.com/docs/how-01-oracle.webp)

- **01 Source**: A public record: the Bureau of Labor Statistics, the Labor Department, a blockchain. Each index names one in its rule, with the clause of the source's terms that allows it. [Data sources](https://tickerz.com/data)
- **02 Read**: The same period is read from each provider configured for the source. On Solana: Helius, dRPC and Alchemy. Official numbers: the Bureau's API and its flat file. [providers.ts](https://github.com/tickerzhq/tickerz/blob/main/src/lib/oracle/providers.ts)
- **03 Agree**: At least two providers whose terms allow it must return the same number, to the digit. Counts are exact, so close is not agreement. If they differ, nothing is signed and the next read tries again. [agree.ts](https://github.com/tickerzhq/tickerz/blob/main/src/lib/oracle/agree.ts)
- **04 Check**: A number more than 6 robust deviations from its own history, or a read with fewer than 50% of its usual rows, waits for one more read. A real day survives it; a bad file usually does not.
- **05 Sign**: The report (ticker, period, value, rule hash, the reads) is written as canonical JSON, hashed with SHA-256 and signed with the publisher's Ed25519 key. Daily at 15:10 UTC. `/api/indices/{ticker}/report`
- **06 Record**: The report goes into tables that only take new rows. Nothing is edited. A correction is a new report that names the one it replaces.
- **07 Recount**: A separate job in the public repository counts the same period again from the source, with its own code. Daily at 16:40 UTC. [tickerz-open/oracle](https://github.com/tickerzhq/tickerz-open/tree/main/oracle)
- **08 Co-sign**: When the recount gets the same number, it signs the report's hash with its own key. When it does not, it files a dispute beside it. Both keys are in [tickerz-signer.json](https://tickerz.com/.well-known/tickerz-signer.json).
- **09 Final**: A co-signed report with no dispute after 24 hours is final at the next daily run.
- **10 Read it**: Anyone checks the hash and both signatures in the browser on [Signed numbers](https://tickerz.com/signed), or reads the feed at [oracle.tickerz.com](https://oracle.tickerz.com/).

## One day

[![One print in a day, times in UTC: read, agree and sign at 15:10 UTC; recorded; recounted and co-signed at 16:40 UTC; final 24 hours later.](https://tickerz.com/docs/how-02-day.webp)](https://tickerz.com/docs/how-02-day.webp)

## What is not signed

- **Months loaded as history**: The Bureau's figures loaded on the day the index launched. Only a month captured at its release is a first print, and only a first print is signed.
- **The Activity score**: A statistical reading of how unusual a day is. Display only.
- **Forecasts**: The next print's likely range, from models in the public repository. Display only. [Forecast](https://tickerz.com/forecast)
- **Indexes without clean rights**: Where a source's terms do not allow a market to settle on it, the print is shown and marked Display.
