chainlink-data-feeds — скилл для Claude Code: обзор и установка
Помогает безопасно читать ценовые фиды Chainlink AggregatorV3 на Hedera (chain ID 295 и 296), проверять полноту и свежесть раундов и нормализовать decimals.
npx skills add hedera-dev/hedera-skills --skill chainlink-data-feeds -a claude-codeЧто делает chainlink-data-feeds
Скилл инструктирует ИИ-агента при интеграции ценовых оракулов Chainlink на блокчейне Hedera. Он задаёт строгий порядок чтения данных через вызов latestRoundData() интерфейса AggregatorV3Interface. Агент сразу отклоняет раунды, если answeredInRound < roundId, время обновления равно нулю, а цена неположительная.
Обязательно проверяется свежесть данных: разница между block.timestamp и updatedAt сравнивается с порогом maxStaleness. Оракулы Chainlink возвращают значение со своим масштабом, чаще всего 8 знаков, поэтому скилл требует нормализовать результат к шкале контракта (обычно 18 знаков) с явным округлением вниз.
Адреса оракулов из сети Ethereum на Hedera работать не будут. Скилл запрещает копировать чужие адреса и требует брать фиды именно под Hedera mainnet (chain ID 295) или testnet (chain ID 296). При этом расширение рассчитано только на котировки и не поддерживает межсетевой протокол Chainlink CCIP.
Какие задачи решает
- считывать котировки через AggregatorV3Interface на Hedera
- отсекать неполные и устаревшие раунды оракула Chainlink
- приводить точность котировок из 8 decimals в 18 decimals
- находить правильные адреса фидов для chain ID 295 и 296
Примеры запросов агенту
- Напиши функцию чтения цены HBAR/USD через AggregatorV3Interface для Hedera mainnet
- Проверь смарт-контракт на обработку устаревших раундов Chainlink и валидацию updatedAt
- Добавь нормализацию decimals для фида Chainlink с округлением вниз
Как установить chainlink-data-feeds
1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill chainlink-data-feeds -a claude-code2Вручную: положить файлы
~/.claude/skills/chainlink-data-feeds/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/chainlink-data-feeds/
1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill chainlink-data-feeds -a codex2Вручную: положить файлы
.agents/skills/chainlink-data-feeds/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill chainlink-data-feeds -a cursor2Вручную: положить файлы
.cursor/skills/chainlink-data-feeds/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install hedera-dev/hedera-skills chainlink-data-feeds2Вручную: положить файлы
.github/skills/chainlink-data-feeds/SKILL.md1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill chainlink-data-feeds -a gemini-cli2Командой платформы
gemini skills install https://github.com/hedera-dev/hedera-skills --path plugins/oracles/skills/chainlink-data-feedsВручную: положить файлы
.devin/skills/chainlink-data-feeds/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill chainlink-data-feeds -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о chainlink-data-feeds
Как установить chainlink-data-feeds в Claude Code?
Выполните команду npx skills add hedera-dev/hedera-skills --skill chainlink-data-feeds -a claude-code. Конфигурация навыка запишется в файл ~/.claude/skills/chainlink-data-feeds/SKILL.md.
Что проверяет chainlink-data-feeds при чтении раунда?
Скилл контролирует корректность ответа оракула: отклоняет раунды с answeredInRound < roundId, проверяет, что время updatedAt не равно нулю, а полученная цена строго больше нуля. Также он требует сверять разницу block.timestamp - updatedAt с допустимым интервалом maxStaleness.
Подходит ли этот скилл для работы с Chainlink CCIP?
Нет, скилл предназначен исключительно для ценовых фидов Data Feeds на Hedera (chain ID 295 и 296). Межсетевые токены и протокол Chainlink CCIP в нём не рассматриваются.
Исходный текст
SKILL.md · Apache-2.0
---
name: chainlink-data-feeds
description: >
Chainlink Data Feeds on Hedera. Use when reading AggregatorV3 price feeds on Hedera
(testnet 296 / mainnet 295), calling latestRoundData, checking round completeness and
staleness, or normalizing feed decimals. Not for Chainlink CCIP (cross-chain tokens).
---
# Chainlink Data Feeds (Hedera)
**Push feed pattern:** a Chainlink aggregator is updated off-chain; on-chain readers call `latestRoundData()` and must reject incomplete, non-positive, or stale rounds.
```text
Chainlink DON → AggregatorV3Interface feed → consumer latestRoundData()
```
Consumers may wrap the feed behind a local interface; that is optional. Do not assume a project-specific adapter name.
## Quick Reference
| Piece | Role |
| ----- | ---- |
| `AggregatorV3Interface` | `latestRoundData()` + `decimals()` |
| Round completeness | `answeredInRound >= roundId` and `updatedAt != 0` |
| Price | `answer > 0` (feeds are typically signed `int256`) |
| Freshness | Compare `block.timestamp - updatedAt` to a max staleness |
| Scale | Normalize feed decimals to the consumer’s scale (often 18) |
| Pair identity | Prefer canonical uppercase symbols (`HBAR`, `USD`) if you hash pair keys |
**Hedera chain IDs:** testnet `296`, mainnet `295`.
See [references/hedera-feeds.md](references/hedera-feeds.md) for where to source Hedera feed addresses. See [references/examples.md](references/examples.md) for read and normalize sketches.
## Critical: Completeness Then Staleness
Never return a price from a missing or unfinished round. Revert when:
| Condition | Why |
| --------- | --- |
| `answeredInRound < roundId` | Aggregator has not finished this round |
| `updatedAt == 0` | No successful update |
| `answer <= 0` | Invalid / non-positive price |
| `block.timestamp - updatedAt > maxStaleness` | Stale for this consumer |
```solidity
(uint80 roundId, int256 answer,, uint256 updatedAt, uint80 answeredInRound) =
feed.latestRoundData();
if (answeredInRound < roundId || updatedAt == 0) revert IncompleteRound();
if (answer <= 0) revert InvalidPrice();
if (block.timestamp - updatedAt > maxStaleness) revert StalePrice(updatedAt, maxStaleness);
```
## Critical: Hedera Feeds, Not Ethereum Addresses
Do **not** copy Ethereum mainnet aggregator addresses onto Hedera. Look up Hedera-specific Data Feed addresses for chain `295` / `296` and re-check docs before mainnet.
Pair maps (if you use them) should be constructor-only unless the project explicitly supports post-deploy updates.
## Decimal Normalization
`feed.decimals()` is often 8. Convert to the scale your app uses before arithmetic:
```solidity
uint256 price = normalizeToScale(uint256(answer), feed.decimals(), /* target */ 18);
```
Keep conversion rounding explicit (usually round down). Do not mix raw aggregator units with 18-decimal amounts.
## Checklist
When implementing or reviewing Chainlink reads on Hedera:
- [ ] Feed address taken from Hedera Data Feeds docs (not Ethereum)
- [ ] `latestRoundData` completeness checks before using `answer`
- [ ] Non-positive prices revert
- [ ] Staleness bound is enforced
- [ ] Decimals normalized to the consumer scale
- [ ] Chain ID is `295` or `296` (or the project’s documented Hedera network)
## References
- [references/examples.md](references/examples.md) — `latestRoundData` and normalize sketches
- [references/hedera-feeds.md](references/hedera-feeds.md) — where to source Hedera aggregator addresses
- [Chainlink Data Feeds](https://docs.chain.link/data-feeds)
- [Hedera price feed addresses](https://docs.chain.link/data-feeds/price-feeds/addresses?network=hedera)
© hedera-dev · Apache-2.0 · hedera-dev/hedera-skills