Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ NETWORK=
NETUID=
LOG_ID_PREFIX=

# Pyth API key for Lazer (Pro) backend. If set, the miner will use Pyth Lazer instead of Hermes for assets with a Lazer feed.
PYTH_API_KEY=

# Bigtable storage backend for miner predictions. Only required when the
# validator is launched with `--storage.backend bigtable`. Two tables are
# used so that retention is enforced by per-table GC policy: one for the
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,8 @@ jobs:
uv run black --check .

- name: Run unit tests
env:
# api.binance.com geo-blocks US IPs (HTTP 451) and GitHub
# runners are US-hosted; use Binance's public market-data host.
BINANCE_API_HOST: https://data-api.binance.vision
run: uv run pytest ./tests/
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ The asset set has grown over time:
| 2026-01 | Added tokenized equities SPYX, NVDAX, TSLAX, AAPLX, GOOGLX to the `24h` competition. |
| 2026-03 | Added XRP, HYPE, WTIOIL to the `24h` competition; added HYPE to the `1h` competition. |
| 2026-06 | Changed the split of the competitions from 2 (1h/24h) to 3 (Crypto 1h, Crypto 24h, Commodities/Equities 24h). Added XRP to the 1h time length, removed XAU from the 1h time length, added SPCX to the 24h time length |
| 2026-07 | Migrated price feeds off Pyth: BTC/ETH/SOL/XRP to Binance spot, HYPE to Hyperliquid spot, equities/commodities to Hyperliquid perps. Replaced SPYX (tokenized SPY) with SP500 (S&P 500 index) in the Commodities/Equities 24h competition. |

Whereas other subnets ask miners to predict single values for future prices, we’re interested in the miners correctly quantifying uncertainty. We want their price paths to represent their view of the probability distribution of the future price, and we want their paths to encapsulate realistic price dynamics, such as volatility clustering and skewed fat tailed price change distributions. As the network matures, modelling the correlations between asset prices will be essential.

Expand All @@ -133,15 +134,15 @@ The three competitions differ on the parameters below:
| Time increment ($\Delta t$) | 1 min | 5 min | 5 min |
| Time horizon ($T$) | 1 h | 24 h | 24 h |
| Simulations ($N_{\text{sim}}$) | 1000 | 1000 | 1000 |
| Assets | BTC, ETH, SOL, XRP, HYPE | BTC, ETH, SOL, XRP, HYPE | XAU, SPYX, NVDAX, GOOGLX, TSLAX, AAPLX, WTIOIL, SPCX |
| Assets | BTC, ETH, SOL, XRP, HYPE | BTC, ETH, SOL, XRP, HYPE | XAU, SP500, NVDAX, GOOGLX, TSLAX, AAPLX, WTIOIL, SPCX |
| Rolling-average window | 5 days | 10 days | 10 days |
| Softmax temperature ($\beta$) | 0.3 (sharper allocation) | 0.15 | 0.15 |

The validator requests are sent to miner following this schedule:

| Cycle | Low frequency (LF) | High frequency (HF) |
| ------ | ------------------------------------------------------------------------------ | ------------------------ |
| Assets | BTC, ETH, SOL, XRP, HYPE, XAU, SPYX, NVDAX, GOOGLX, TSLAX, AAPLX, WTIOIL, SPCX | BTC, ETH, SOL, XRP, HYPE |
| Assets | BTC, ETH, SOL, XRP, HYPE, XAU, SP500, NVDAX, GOOGLX, TSLAX, AAPLX, WTIOIL, SPCX | BTC, ETH, SOL, XRP, HYPE |

Validators cycle through the assets, sending out prediction requests at regular intervals. The miner has until the start time to return ($N_{\text{sim}}$) paths, each containing price predictions at times given by:

Expand All @@ -153,7 +154,7 @@ where:

- $N = \dfrac{T}{\Delta t}$ is the total number of increments.

We recommend the miner sends a request to the Pyth Oracle to acquire the price of the asset at the start_time.
We recommend the miner acquires the price of the asset at the start_time from the same feed the validator scores against: Binance spot for BTC/ETH/SOL/XRP, Hyperliquid for everything else (see `synth/miner/price_simulation.py` for the reference implementation and the asset maps).

If they fail to return predictions by the start_time or the predictions are in the wrong format, the submission is marked invalid and assigned the 90th-percentile score during the per-prompt CRPS transformation (see [§1.4](#14-calculation-of-leaderboard-score)).

Expand All @@ -165,7 +166,7 @@ The assets and their weights for the rolling average are as follows:
| ETH | 0.7064366394033871 |
| XAU | 1.7370922597118699 |
| SOL | 0.6310037175639559 |
| SPYX | 3.437935601155441 |
| SP500 | 3.437935601155441 |
| NVDAX | 1.6028217601617174 |
| TSLAX | 1.6068755936957768 |
| AAPLX | 2.0916380815843123 |
Expand Down Expand Up @@ -210,7 +211,7 @@ To comprehensively assess the miners' forecasts, the CRPS is applied to sets of
For each time increment:

- **Predicted Price Changes**: The miners' ensemble forecasts are used to compute predicted price changes in basis points over the specified intervals
- **Observed Price Changes**: The real asset prices are used to calculate the observed price changes in basis points over the same intervals. We recommend the validators collect and store the prices by sending requests to the Pyth oracle at each time increment, to be used at the end of the time horizon.
- **Observed Price Changes**: The real asset prices are used to calculate the observed price changes in basis points over the same intervals. The validator scores against 1-minute candle close prices — Binance spot for BTC/ETH/SOL/XRP, Hyperliquid spot for HYPE, Hyperliquid perps for equities/commodities (see the asset maps in `synth/validator/price_data_provider.py`).
- **CRPS Calculation**: The CRPS is calculated for each increment by comparing the ensemble of predicted changes in basis points to the observed price change.

The final score for a miner for a single checking prompt is the sum of these CRPS values over all the time increments.
Expand Down
248 changes: 0 additions & 248 deletions scripts/pyth-lazer-listing.py

This file was deleted.

62 changes: 0 additions & 62 deletions scripts/pyth-listing.py

This file was deleted.

Loading
Loading