GAIA — physical-world oracle gateway
GAIA is a physical-world oracle gateway that sells Ed25519-attested sensor readings from
virtual IoT devices as paid AIMarket v2 capabilities, and serves a Metis-envelope-compatible
/v1/verify so the hub's Pay-on-Verified escrow can settle them —
an honest reading gets the provider paid, a lying sensor refunds the buyer automatically.
It is the ecosystem's third oracle class: math oracles prove computations, Metis judges LLM output, GAIA grounds settlement in physics. The demo fleet is simulated (two co-located weather stations sharing one site truth, an air-quality node, an energy meter — models imitate BME280/SDS011/SCD30/Shelly-EM-class hardware), but every wire surface — manifest, invoke, receipts, provider signature, verify envelope, W3C WoT Thing Descriptions — is the real one.
📖 Deep-dive (monorepo):
docs/iot-physical-oracles.md🌍 Live devices:gaia/devices/live.py🎬 3D visualization:frontend/(cd frontend && npm i && npm run dev)
Quickstart
# Container
docker pull ghcr.io/alexar76/gaia:latest
docker run --rm -p 9320:9320 ghcr.io/alexar76/gaia:latest
# From source (satellite checkout vendors oracle-core)
pip install -e vendor/oracle-core -e ".[dev]" # or: pip install -e ../oracles/core -e ".[dev]"
python -m gaia.main # :9320
Poke it:
curl -s localhost:9320/.well-known/ai-market.json
curl -s localhost:9320/ai-market/v2/manifest
curl -s -X POST localhost:9320/ai-market/v2/invoke \
-H 'Content-Type: application/json' \
-d '{"capability_id": "gaia.weather.read@v1", "product_id": "gaia.gateway",
"input": {"device_id": "ws-01"}}'
Live devices — relay real public sensors
Set GAIA_ENABLE_LIVE=1 to register real public-API relays alongside the simulators.
Every relay uses the same Ed25519 attestation + plausibility path. Unreachable upstream
→ DeviceOffline → 503 / {ok:false} → no debit. Upstream hosts are allowlisted
(SSRF defence); invoke clients never supply a URL.
| Device id | Capability | Upstream | Key? |
|---|---|---|---|
nws-01 |
gaia.weather.read@v1 |
NOAA/NWS api.weather.gov |
no |
om-wx-01 |
gaia.weather.read@v1 |
Open-Meteo weather | no |
osm-01 |
gaia.air.read@v1 |
openSenseMap | no |
om-aq-01 |
gaia.air.read@v1 |
Open-Meteo air quality | no |
sta-01 |
gaia.air.read@v1 |
OGC SensorThings (Fraunhofer) | no |
openaq-01 |
gaia.air.read@v1 |
OpenAQ v3 | yes (GAIA_OPENAQ_API_KEY) |
uk-grid-01 |
gaia.grid.read@v1 |
UK Carbon Intensity | no |
usgs-quake-01 |
gaia.quake.read@v1 |
USGS GeoJSON feed | no |
noaa-tide-01 |
gaia.tide.read@v1 |
NOAA CO-OPS tides | no |
firms-fire-01 |
gaia.fire.read@v1 |
NASA FIRMS VIIRS (cite NASA) | no |
safecast-01 |
gaia.radiation.read@v1 |
Safecast (CC0) | no |
cybernews-jam-01 |
gaia.jamming.read@v1 |
CyberNews GNSS (CC BY 4.0) | no |
feeder-adsb-01 |
gaia.adsb.read@v1 |
Own dump1090 ingest | GAIA_FEEDER_* |
feeder-ais-01 |
gaia.ais.read@v1 |
Own AIS ingest | GAIA_FEEDER_* |
Full operator notes (5 languages): docs/LIVE-RELAYS.md.
Add a sensor / pin (GAIA → ATLAS): docs/add-gaia-atlas-sensor.md (EN · RU · ES · FR · ZH).
curl -s -X POST https://iot.modelmarket.dev/ai-market/v2/invoke \
-H 'Content-Type: application/json' \
-d '{"capability_id":"gaia.grid.read@v1","product_id":"gaia.gateway",
"input":{"device_id":"uk-grid-01"}}'
License
MIT — see LICENSE.
Metadata
Release files for aimarket-gaia-gateway 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aimarket_gaia_gateway-0.1.2.tar.gz | 155.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aimarket_gaia_gateway-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 288.7 kB
Release files / aimarket_gaia_gateway-0.1.2.tar.gz
| Download URL | aimarket_gaia_gateway-0.1.2.tar.gz |
|---|---|
| Size | 155.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9b782a8ec651c05dcbe06a5541add74f798410753d2402858a8a4c0013ece586
|
|
BLAKE2b-256 checksum How to use checksums |
d6396e00c058d4c6e76e36edebe061d465729a19570ad72b8c70a3d72894603a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / aimarket_gaia_gateway-0.1.2-py3-none-any.whl
| Download URL | aimarket_gaia_gateway-0.1.2-py3-none-any.whl |
|---|---|
| Size | 133.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
51e83cb7190b969f9f40d66fd78bbc6c3a88a5db28da7f58bf5b01455ea58a7a
|
|
BLAKE2b-256 checksum How to use checksums |
294557aecaa8b0f3e19505ee7185530f1fbcab44388d10b1138862bb4e030a14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|