mcpField
S
supra-push-oracle

supra-push-oracle

github.com/hedera-devDevelopment28463 installsUpdated 8w ago
Repository

About supra-push-oracle

supra-push-oracle is a skill for integrating Supra push-oracle feeds on Hedera. It guides contract readers through price retrieval and validation, with attention to timestamp units, quote assets, and decimal normalization.

Key features

  1. 01Read quotes with getSvalue(pairId)
  2. 02Convert millisecond timestamps to seconds
  3. 03Validate freshness and nonzero values
  4. 04Normalize price values using decimals

Use cases

  1. 01Integrate Supra price feeds in Hedera contracts
  2. 02Review timestamp handling in price reads
  3. 03Reject stale or invalid quotes

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/hedera-dev/hedera-skills --skill supra-push-oracle

After installing, type/supra-push-oraclein Claude Code to confirm it loaded.

Bundled filesreferences/examples.mdreferences/hedera-feeds.md

Details

From the project README

Supra Push Oracle (Hedera)

Push S-Value pattern: Supra updates an on-chain feed; readers call getSvalue(pairId) and must reject empty, zero, or stale quotes.

Supra push oracle → getSvalue(pairId) → consumer

Consumers may wrap the feed behind a local interface; that is optional. Do not assume a project-specific adapter name.

Quick Reference

PieceRole
Push oracleImmutable ISupraSValueFeed address for the network
Pair IDNumeric Supra pair id (not an EVM aggregator address)
ReadgetSvalue(pairId) → price, decimals, time
TimeOften milliseconds on Hedera — convert when time > 1e10
Quote assetHedera feeds are often USDT, not USD
FreshnessCompare unix seconds to a max staleness

Hedera chain IDs: testnet 296, mainnet 295.

See references/hedera-feeds.md for where to source push-oracle addresses and pair IDs. See references/examples.md for read sketches.

Critical: Millisecond Timestamps

Supra time on Hedera is frequently milliseconds. Treat values > 10_000_000_000 as ms and convert before staleness checks:

uint256 updatedAt = pf.time > 10_000_000_000 ? pf.time / 1_000 : pf.time;
if (block.timestamp - updatedAt > maxStaleness) revert StalePrice(updatedAt, maxStaleness);

Comparing a millisecond timestamp to block.timestamp (seconds) will look “in the future” or skip staleness incorrectly.

Critical: USDT Pairs On Hedera

Current Hedera Supra feeds often quote USDT, not USD. Pair keys / symbols must match the actual quote (HBAR/USDT, BTC/USDT). Do not label a USDT feed as USD.

Completeness And Invalid Prices

Revert when:

ConditionWhy
pf.time == 0No successful update
pf.price == 0Invalid price
Stale after converting to secondsOlder than maxStaleness
Unknown pair IDDo not return zero

Normalize pf.price with pf.decimals to the consumer scale (often 18).

Checklist

When implementing or reviewing Supra reads on Hedera:

  • Push-oracle address and pair IDs taken from Supra Hedera docs (not Ethereum)
  • Timestamps converted to unix seconds when they look like milliseconds
  • Pair symbols match the real quote asset (often USDT)
  • Zero / missing updates revert
  • Staleness bound is enforced in seconds
  • Decimals normalized to the consumer scale

References

Comments

Markdown supported