supra-push-oracle — скилл для Claude Code: чтение цен Supra на Hedera
Скилл для чтения push-оракула Supra на Hedera: getSvalue(pairId), миллисекундные метки времени и пары USDT. Пригодится, если контракт берёт цены из Supra.
npx skills add hedera-dev/hedera-skills --skill supra-push-oracle -a claude-codeЧто делает supra-push-oracle
Скилл описывает push-паттерн Supra: оракул обновляет данные в контракте, а потребитель вызывает getSvalue(pairId) и получает цену, decimals и время. Адрес ISupraSValueFeed фиксирован для сети, а pair ID — это числовой идентификатор Supra, не адрес агрегатора EVM. Chain ID: testnet 296, mainnet 295.
Главная ловушка — время. На Hedera поле time часто приходит в миллисекундах, поэтому перед проверкой свежести его сравнивают с порогом 10_000_000_000 и делят на 1_000. Если этого не сделать, метка выглядит как будущее, и проверка на устаревание молча пропускает старые котировки. Вторая ловушка — актив котировки: фиды на Hedera часто номинированы в USDT, а не в USD, и подписывать их как USD нельзя.
Отдельно разобран отказ от неполных данных: нулевое время, нулевая цена, устаревшая метка и неизвестный pair ID должны приводить к revert, а не к возврату нуля. Цену нормализуют через decimals под шкалу потребителя, обычно 18. Внутри — SKILL.md с чек-листом и два справочника: references/examples.md с набросками чтения и references/hedera-feeds.md о том, где брать адреса и pair ID.
Какие задачи решает
- прочитать цену из фида Supra на Hedera
- перевести миллисекундную метку времени в unix-секунды
- отсечь устаревшую или нулевую котировку до расчёта
- подобрать pair ID под нужную пару
- не подписать фид USDT как USD
Примеры запросов агенту
- Добавь чтение цены Supra на Hedera в контракт потребителя
- Проверь, что метка времени из
getSvalueпереведена в секунды перед проверкой свежести - Сделай ревью чтения оракула: нули, устаревание, decimals
Как установить supra-push-oracle
1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill supra-push-oracle -a claude-code2Вручную: положить файлы
~/.claude/skills/supra-push-oracle/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/supra-push-oracle/
1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill supra-push-oracle -a codex2Вручную: положить файлы
.agents/skills/supra-push-oracle/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill supra-push-oracle -a cursor2Вручную: положить файлы
.cursor/skills/supra-push-oracle/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install hedera-dev/hedera-skills supra-push-oracle2Вручную: положить файлы
.github/skills/supra-push-oracle/SKILL.md1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill supra-push-oracle -a gemini-cli2Командой платформы
gemini skills install https://github.com/hedera-dev/hedera-skills --path plugins/oracles/skills/supra-push-oracleВручную: положить файлы
.devin/skills/supra-push-oracle/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill supra-push-oracle -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о supra-push-oracle
Как установить supra-push-oracle в Claude?
Выполни npx skills add hedera-dev/hedera-skills --skill supra-push-oracle -a claude-code. Скилл окажется в ~/.claude/skills/supra-push-oracle/SKILL.md.
Что делает supra-push-oracle?
Описывает чтение push-оракула Supra на Hedera: вызов getSvalue(pairId), разбор decimals и времени, проверку свежести и отказ от неполных котировок.
Почему метка времени выглядит как будущее?
На Hedera поле time часто в миллисекундах. Значения больше 10_000_000_000 делят на 1_000 перед сравнением с block.timestamp.
Исходный текст
SKILL.md · Apache-2.0
--- name: supra-push-oracle description: > Supra S-Value push oracle on Hedera. Use when reading getSvalue price feeds on Hedera (testnet 296 / mainnet 295), mapping pair IDs, converting millisecond timestamps to unix seconds, or quoting USDT pairs where USD is unavailable. --- # 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. ```text 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 | Piece | Role | | ----- | ---- | | Push oracle | Immutable `ISupraSValueFeed` address for the network | | Pair ID | Numeric Supra pair id (not an EVM aggregator address) | | Read | `getSvalue(pairId)` → price, decimals, time | | Time | Often **milliseconds** on Hedera — convert when `time > 1e10` | | Quote asset | Hedera feeds are often **USDT**, not USD | | Freshness | Compare unix **seconds** to a max staleness | **Hedera chain IDs:** testnet `296`, mainnet `295`. See [references/hedera-feeds.md](references/hedera-feeds.md) for where to source push-oracle addresses and pair IDs. See [references/examples.md](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: ```solidity 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: | Condition | Why | | --------- | --- | | `pf.time == 0` | No successful update | | `pf.price == 0` | Invalid price | | Stale after converting to seconds | Older than `maxStaleness` | | Unknown pair ID | Do 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 - [references/examples.md](references/examples.md) — `getSvalue` and timestamp sketches - [references/hedera-feeds.md](references/hedera-feeds.md) — where to source push-oracle addresses and pair IDs - [Supra push oracle networks](https://docs.supra.com/oracles/data-feeds/push-oracle/networks) - [Supra data feeds index](https://docs.supra.com/oracles/data-feeds/data-feeds-index)
© hedera-dev · Apache-2.0 · hedera-dev/hedera-skills