Open source collectors and reproducible price feeds for NVIDIA B200, B300, GB200 and GB300 rental rates. The Blackwell Index (SBX) combines four model feeds using disclosed fixed weights. ALTX is the product website.
The goal is open participation in compute-price collection, independently reproducible aggregation and decentralized governance. The current prototype provides candidate admission and an explicit registry; independent operators and a shared process for approving registry and methodology changes must still be established. A B200-only benchmark is an optional proposal, not the selected V1 scope.
Status: development network. Pyth publication is pending onboarding and feed approval. Public pages never substitute generated prices. An unavailable feed has no current value.
The website separates Demo and Real modes. Demo is a centralized view of current collected prices, not the governed SBX oracle or a Pyth feed. Real uses /v1/feeds, keeps the oracle's approval and quorum gates, and never falls back to demo prices. Demo scope and permissions.
Install Bun 1.4.2, then:
git clone https://github.com/elizaOS/blackwell-index.git
cd blackwell-index
bun install --frozen-lockfile
bun run setup
bun run collect
bun startOpen http://127.0.0.1:3410. Setup generates a random Ed25519 collector key, private local configuration and a persistent SQLite journal. Oracle, Azure and Verda public catalog collectors are enabled for local research. Source publication permissions, provider weights and trusted operator identities start unconfigured. That means real local collection can succeed while public prices remain unavailable.
For collection-only research with the existing draft public-source configuration, run bun --no-env-file src/cli.ts research-collect. It retains captures without loading a signing identity, credentials, peers or publisher. bun --no-env-file src/cli.ts research-health checks freshness and source errors read-only. See local supervision and monitoring, source qualification and the unsent partner drafts.
List collectors with bun src/cli.ts providers. Enable selected collectors at setup:
bun src/cli.ts setup --dir ./operator-two \
--providers oracle-public,azure-retail,lambda-cloud \
--peers https://your-bootstrap-node.exampleAPI keys belong in environment variables or a secret manager. bun src/cli.ts credentials lambda-cloud accepts a hidden terminal entry and writes private data/credentials.json, excluded from Git. JSON storage preserves special characters without shell expansion. An existing node-local .env is also supported. The provider documentation explains multi-field credentials and mappings. Never submit credentials to another node or commit local configuration.
Eleven collectors are implemented. Oracle, Azure and Verda have real public retrieval evidence; authenticated sources still require live account verification. Prime Intellect is registered but disabled, with no approved collection or publication rights. Its supported account-specific B200/B300 quotes are outside the public-list cohort; GB200/GB300 remain discovery-only.
Anyone can run a node, select sources, submit eligible signed reports and independently reproduce calculations. A new identity joins as a candidate. It does not gain benchmark voting power by creating additional keys. An explicit registry records source approval and operator groups; its labels do not themselves verify corporate independence or legal rights. Operators can use their own registry; its hash is published with every snapshot. This is an open collector network with governed admission to the benchmark, not permissionless Pyth publisher admission.
| Output | Meaning |
|---|---|
SBX:<provider>:<model> |
Comparable prices collected from that provider, with independent collector agreement |
SBX:B200, SBX:B300, SBX:GB200, SBX:GB300 |
Fixed-weight averages of configured independent provider groups |
SBX |
Fixed-weight average of all four model feeds |
The current default registry defines 49 feed slots: 44 provider/model combinations, four model feeds and one composite. These are output definitions, not 49 available prices or evidence of 11 independent supply groups. Existing local registries are not silently migrated.
An optional B200 publication scope can restrict publication to SBX:B200, with explicit methodology evidence and matching delivery scope. A separate fixed offer schedule can require exact eight-GPU HGX membership without substitution when offers or suppliers disappear. Both are inactive in bundled configurations. Defaults still require the four-model composite. Neither establishes source qualification or Pyth/market approval.
The draft cohort is global, public, on-demand, exclusive-instance list pricing in USD per physical GPU-hour. Dividing an instance tariff by GPU count includes the bundled host services. It does not measure GPU-only hardware price, performance-equivalent compute, or guaranteed available capacity. Spot, reservations, scheduled capacity, account-specific rates and fractional tenancy are retained separately and excluded from this cohort.
Each matched SKU needs reports from at least the configured minimum independent operator groups and more than two-thirds of all admitted operator groups. Repeated keys, scraped copies and upstream resellers do not create additional economic weight. Within a provider, SKU prices are summarized within regions and then across regions. Model weights refer to provider economic groups, not node counts, advertised fleet size or listing count. All fixed-weight constituents must be present. The four model weights initially equal 25% each as a research choice. Production provider weights remain unset until evidence is available.
Read the methodology, source research, security model, and implementation plan.
For licensed delivered-usage and invoice records, the offline transaction research workflow compares GPU-hour-weighted estimators and historical coverage. It is private, requires explicit evaluation permission, and cannot publish or change production weights. Use the data intake checklist before integrating a contributor.
| Endpoint | Purpose |
|---|---|
GET /healthz |
Process liveness |
GET /v1/ready |
Benchmark publication readiness; 503 when unavailable |
GET /v1/status |
Node identity, configuration hashes and local counts |
GET /v1/demo |
Separate centralized view of current prices with applicable source permissions; never publishable or Pyth-backed |
GET /v1/feeds |
Provider feeds, four model feeds, SBX and reasons for missing values |
GET /v1/feeds/SBX |
One feed; 503 when it has no current price |
GET /v1/methodology |
Versioned calculation rules |
GET /v1/registry |
Provider and admitted operator registry |
POST /v1/join, POST /v1/reports |
Signed batch submission |
GET /v1/reports |
Currently shareable admitted reports |
GET /v1/history?after=0&limit=100 |
Explicitly paginated snapshot history |
Collector signatures bind exact bytes to keys. They do not prove that a provider really returned the claimed value. Independent collection, source checks, governance, retained raw responses and supplier participation address that separate problem. Public peer URLs are explicitly configured; candidate-supplied destinations are never fetched automatically.
The adapter targets the current official pyth-lazer-agent 0.16.0. It prepares signed-agent submissions only for approved feed bindings, exact units and current data. Pyth Core migrated to Pro infrastructure in August 2026; the old Pythnet validator workflow is not the deployment plan.
No SBX feed IDs, publisher credentials or Pyth approvals are bundled. Pyth acceptance is required for each publisher and feed. A local agent acknowledgement is labeled QUEUED_LOCAL; it is not proof of a published oracle. See Pyth architecture, setup and readback requirements.
Phase 0 prioritizes a governed rental benchmark and actual market consumption. The delivery review covers managed HIP-3 custom ingestion, native Pro/Core, attributed Data Marketplace distribution and custom-index collaboration. These require different agreements; a Marketplace listing alone does not establish native signed-feed availability or a market listing.
The separate authenticated readback monitor checks approved Pro feeds against retained local snapshots. It uses a backend PYTH_PRO_API_KEY, a private state database and the node's approved Pyth manifest. The supplied configuration is disabled; its example thresholds require review. Default HTTPS readback does not verify signatures. Optional signed EVM verification is a separate mode with its own acceptance requirements; neither mode submits a chain transaction.
bun run pyth:readback --dir /absolute/private/node \
--node-config config/node.local.json --config config/pyth-readback.json \
--state data/pyth-readback.sqlite --init-state --onceUse --init-state only for a reviewed first bootstrap; omit it on restart to preserve accepted timestamps and retry deadlines. Omit --once for an abortable continuous monitor under an operator-owned supervisor. See Pyth recovery before restoring any publishing node; collector identity rotation alone does not revoke the previous Pyth publisher.
The existing signed EVM consumer plan targets Base Sepolia, followed by Base mainnet. Solana and Robinhood Chain have separate verification plans. This consumer work does not establish HIP-3 market acceptance or automatically precede a managed custom-feed pilot. Chain selection and implementation gates distinguishes supported Pyth contracts from an actual SBX integration; no SBX transaction has been verified yet.
bun run pyth:chain-preflight checks Base Sepolia's network and Pyth deployment through its fixed public RPC; add --network base for Base mainnet. It requires no credentials or gas, submits no transactions and does not verify any price or signed payload. A passed deployment check is not oracle readiness.
A self-hosted node can set pythManifestPath in its private configuration to attempt publication after each eligible collection cycle. The runtime checks current feed metadata, keeps durable per-feed timestamps, and connects to a separately running local Pyth agent. Hosted collector nodes do not hold Pyth signing keys.
bun run verifyThe suite checks exact arithmetic, all four models, fixed-weight missing-data behavior, quorum and duplicate identities, signed report validation, replay after restart, retained evidence, API failures and public UI behavior. Three real local HTTP node instances exchange signed test reports and reproduce the same snapshot. Test values are isolated to test files.
The additional protocol conformance test uses the actual official Rust Pyth agent:
cargo install pyth-lazer-agent --version 0.16.0 --locked
PYTH_AGENT_BIN="$(command -v pyth-lazer-agent)" bun test test/pyth.test.tsThat test verifies the agent's real encoded transaction and signature against a local test receiver. It does not connect to Pyth production. Validation and experiment plan.
The repository includes a container deployment and a Cloudflare node deployment. Separate nodes in the same account belong to one operator group. Independent operators and distinct source organizations must be established before claiming production decentralization.
Initialize the persistent container volume before its first start:
docker compose build
docker compose run --rm node setup --dir /var/lib/sbx --host 0.0.0.0
docker compose up -dThe published port binds to localhost; use an HTTPS reverse proxy for public peer access. Repeat setup only for a new volume. Collector identities and replay state must survive container upgrades. See Cloudflare deployment for managed durable nodes and domain routing.
Self-hosted nodes support encrypted V1 journal backups and verified restoration into a new, disabled identity. Streaming recovery adds bounded V2 checkpoint export through a private Cloudflare service binding, encryption, inspection and chunk-aware restore. Recovered local nodes use backup-stream for subsequent backups, preserving previous recovery receipts without modifying the running journal. The original hosted V1 format retains its 8 MiB limit. Restore never resumes an old signer, copies provider credentials or replaces a live Durable Object. Offsite custody, recurring backups and a host-loss exercise remain operating requirements; check the exact acceptance evidence.
The retained-data operating study analyzes private captured observations without fetching prices or filling gaps. study --stream supports full-period aggregates without retaining point arrays. It reports coverage, cadence and dated changes, not trading returns or benchmark approval. Thirty-day qualification remains NOT_ESTABLISHED; parser tests and calendar span do not complete that gate.
For B200 derivative research, bun src/cli.ts shadow --output data/studies/b200-shadow.json creates a private, read-only qualification and stress report. It preserves production gates and isolates hypothetical source-loss and position scenarios. See the draft contract and unsent Pyth/operator packet for the proposed division of responsibility and pending decisions.
Pyth is the selected delivery provider. The Pyth delivery plan proposes managed HIP-3 custom-feed delivery with an existing market operator, while preserving the tested Pro/Core adapter. Pyth service acceptance, the venue and the exact interface remain pending.
The local HIP-3 resolver harness tests signed synthetic SBX inputs against pinned official Pyth code, including exact decimals and stale-source refusal. It runs no publisher or venue submission and does not invent a managed-service ingestion API.
bun --no-env-file src/cli.ts audit-sources --output data/studies/b200-sources.json verifies and replays retained B200 response evidence entirely offline. The source audit reports integrity, offer comparability and unverified rights/ownership separately; the Pyth acceptance checklist identifies what still needs external agreement.
The launch checklist names the required accounts, source permissions, Pyth onboarding, external verification and operating evidence. Domain status records the four requested registrations. Private keys, raw account data and private business documents are not included in this repository.
Live development sites: Blackwell Index and ALTX. See the initial release evidence, provider and recovery expansion and operating costs. The deployed nodes collect real data but do not publish prices while the launch requirements remain unmet.
After deployment, verify the committed source, both nodes and the explicitly unavailable public feeds:
bun scripts/verify-deployment.ts --release <deployed-40-character-commit-SHA>This read-only check targets the development-network contract, not a production benchmark. It must be revised when an approved public feed is deliberately launched.
MIT licensed. Contributions should include official source documentation, exact unit/model mapping and tests covering missing, changed and invalid responses.