[Release 80] - 2026-06-06
This is a recommended release focused on the AO → Solana migration of AR.IO protocol state, Solana-native observation and HTTPSIG signing, and data-integrity hardening. Key highlights include reading the Gateway Address Registry, ArNS/ANT records, epochs, and prescribed observers from Solana on-chain programs via @ar.io/sdk 4.0.0 (#709, #765); a Solana observer that signs and submits save_observations, uploads its report bundle, and can run the permissionless epoch cranker (#709); response trust headers signed directly with the observer's Solana key (#758); mainnet program IDs defaulted so a fresh mainnet deploy starts the observer out of the box (#766); the Solana 4.0.0 observer container wired in as the default image (#767); and a fix preventing L1 transactions with an empty/NULL data_root from serving unrelated content (#755).
Added
- Solana protocol backend — AO → Solana migration (#709): The gateway now reads all AR.IO protocol state — the Gateway Address Registry, ArNS names and ANT records, epochs, prescribed observers, and observation status — from Solana on-chain programs via
@ar.io/sdk's Solana backend, replacing the AO compute-unit reads. Configured bySOLANA_RPC_URL(defaults to mainnet-beta; use a dedicated provider in production) and theARIO_CORE_/GAR_/ARNS_/ANT_PROGRAM_IDenv vars (default to the mainnet program IDs). TheOnDemandArNSResolverroutes ANT lookups throughSolanaANTReadable. - Solana observer, cranker, and report submission (#709): The observer signs and submits
save_observationsfrom a Solana keypair (SOLANA_KEYPAIR_PATH/OBSERVER_KEYPAIR_PATH), uploads its report bundle to the permaweb under a separate upload identity — Arweave, Ethereum, or Solana, viaARWEAVE_UPLOAD_KEY_FILE,ETHEREUM_UPLOAD_PRIVATE_KEY*, orSOLANA_UPLOAD_KEYPAIR_PATH— and optionally runs the permissionless epoch cranker (ENABLE_EPOCH_CRANKING, defaultfalse). - HTTPSIG signing with the Solana observer key (#758): Response trust headers (RFC 9421) are signed directly with the observer's Solana keypair; verifiers derive the Solana address from the
keyIdand look it up in the on-chain GAR, so no separate attestation document is needed. The key can be supplied as a file (OBSERVER_KEYPAIR_PATH) or an inline base58 secret (OBSERVER_PRIVATE_KEY).
Changed
@ar.io/sdk→ stable4.0.0(#765): Moves off the4.0.0-solana.*prereleases (#761, #763) to the published stable release, which includes the compound crank-step transaction-size fix (ar-io/ar-io-sdk#670) that unwedges epoch progression on populated networks.- Mainnet program IDs by default (#766):
docker-compose.yamlnow defaults the fourARIO_*_PROGRAM_IDvars to the mainnet program IDs so a fresh mainnet deploy starts the observer without extra configuration — the observer requires them set and will not start otherwise. Operators on devnet/staging override via.env. - Default observer image → Solana 4.0.0 container (#767):
OBSERVER_IMAGE_TAGnow defaults to the Solana-track observer build. - The gateway is now Solana-only for registry/ArNS/epoch reads; the AO compute-unit dependency for protocol state has been removed.
Fixed
attachStallTimeouttimer leak: Unref the stall and wall-clock timers so a settled stream no longer keeps the event loop alive.- Over-eager source-cascade abort (PE-9108): Abort the data source cascade only on a genuine client disconnect, not on internal stream transitions, so legitimate retrievals are no longer cut short.
- Empty/NULL
data_rootcould serve unrelated content (#755): An L1 transaction with an empty or NULLdata_rootmatched anydata_rootsrow keyed on an empty value, returning an unrelated file's hash; the unguarded insert also planted such poison rows. Both queries are now guarded, the insert is a no-op for empty input, and a forward-only migration removes any previously planted rows.
Container images
Pinned image SHAs for this release (each links to its GHCR package):
CORE_IMAGE_TAG:b64d405c25d…—b64d405c25d9c04a0c931c68779f685e496fe677ENVOY_IMAGE_TAG:7ff21e83d69…—7ff21e83d69f524bd733ef580a9a1bdaadf0ee6aCLICKHOUSE_AUTO_IMPORT_IMAGE_TAG:07d9f4d5b57…—07d9f4d5b57bdd251fcb617e34a00f85f452c7c9LITESTREAM_IMAGE_TAG:be121fc0ae2…—be121fc0ae24a9eb7cdb2b92d01f047039b5f5e8OBSERVER_IMAGE_TAG:db292b8e368…—db292b8e368cdd8dab0b600bd426ade3768eaa75