ccip — скилл для Claude Code: что делает и как установить
Помогает настроить перенос токенов между Hedera и EVM-сетями через Chainlink CCIP. Пригодится при выпуске burn-and-mint токенов и интеграции HTS.
npx skills add hedera-dev/hedera-skills --skill ccip -a claude-codeЧто делает ccip
Скилл учит агента работать с протоколом Chainlink CCIP в сети Hedera. Он ведёт по шагам развёртывания токенов с логикой burn-and-mint, связывания пулов через TokenAdminRegistry и вызова ccipSend. Инструмент рассчитан только на токены и кроссчейн-сообщения. Оракулы цен Chainlink Data Feeds этот навык не настраивает.
Для Hedera здесь разобраны два сценария: обычный ERC-20 и нативный токен Hedera Token Service (HTS). Для HTS используется контракт-обёртка HtsBurnMintERC20, потому что CCIP регистрирует интерфейс пула, пока пользователи держат нативный токен. В таком режиме требуются два вызова approve и привязка токена к аккаунту получателя через associate.
Частая ошибка — подстановка обычного EVM chain ID вместо uint64 Chain Selector из каталога CCIP. Тестовая сеть Hedera имеет ID 296, но селектор у неё совсем другой, поэтому передача ID сети сломает транзакцию. Также объёмы чеканки для HTS ограничены лимитом int64.
Какие задачи решает
- настроить перенос burn-and-mint токенов между Hedera и EVM
- зарегистрировать пул в TokenAdminRegistry и настроить связку сетей
- подключить обёртку HtsBurnMintERC20 для работы с нативными HTS-токенами
- составить вызов ccipSend с оплатой комиссии в нативном газе
Примеры запросов агенту
- Помоги настроить BurnMintTokenPool для сети Hedera и связать его с Sepolia через CCIP.
- Напиши вызов ccipSend для отправки HTS-токена через обёртку HtsBurnMintERC20.
- Проверь конфигурацию TokenAdminRegistry и привязку селекторов перед отправкой сообщений.
Как установить ccip
1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill ccip -a claude-code2Вручную: положить файлы
~/.claude/skills/ccip/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/ccip/
1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill ccip -a codex2Вручную: положить файлы
.agents/skills/ccip/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill ccip -a cursor2Вручную: положить файлы
.cursor/skills/ccip/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install hedera-dev/hedera-skills ccip2Вручную: положить файлы
.github/skills/ccip/SKILL.md1Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill ccip -a gemini-cli2Командой платформы
gemini skills install https://github.com/hedera-dev/hedera-skills --path plugins/cross-chain/skills/ccipВручную: положить файлы
.devin/skills/ccip/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add hedera-dev/hedera-skills --skill ccip -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о ccip
Как установить ccip в Claude Code?
Запустите команду npx skills add hedera-dev/hedera-skills --skill ccip -a claude-code. Конфигурация сохранится в файле ~/.claude/skills/ccip/SKILL.md.
Что делает скилл ccip?
Он даёт инструкции по созданию кроссчейн-токенов burn-and-mint между сетью Hedera и EVM-чейнами. Скилл помогает вызывать ccipSend, конфигурировать реестры TokenAdminRegistry и обёртки для HTS.
Можно ли использовать EVM chain ID вместо селектора цепи?
Нет, протокол Chainlink CCIP требует передавать специальные uint64 Chain Selectors. У Hedera testnet идентификатор 296, но селектор CCIP имеет другое значение из справочника Chainlink.
Исходный текст
SKILL.md · Apache-2.0
---
name: ccip
description: >
Chainlink CCIP Cross-Chain Tokens on Hedera. Use when bridging burn-and-mint CCT between
Hedera and EVM, registering TokenAdminRegistry / pools, calling ccipSend with chain
selectors, or wiring HTS-backed wrappers (HtsBurnMintERC20) vs vanilla BurnMintERC20.
Not for Chainlink Data Feeds / price oracles.
---
# Chainlink CCIP (Hedera)
**CCT burn-and-mint pattern:** deploy a burn-mint token + token pool on each chain, register the token with CCIP, wire remote pools with **chain selectors**, then `ccipSend` paying native fees.
```text
BurnMint token + TokenPool (source)
→ Router.ccipSend(destSelector, message)
→ TokenPool lockOrBurn / releaseOrMint (dest)
```
On Hedera you can use a vanilla ERC-20 CCT **or** an HTS-backed wrapper. CCIP always registers the ERC-20 the pool sees — for HTS that is the **wrapper**, while users hold the native HTS token.
This skill is **cross-chain tokens/messages**, not Chainlink Data Feeds.
## Quick Reference
| Piece | Role |
| ----- | ---- |
| Router | `getFee` + `ccipSend{value}` |
| Chain selector | `uint64` CCIP id — **not** EVM chain ID |
| Token + pool | Burn-mint ERC-20 + `BurnMintTokenPool` (or Hedera HTS variants) |
| Admin registry | `RegistryModuleOwnerCustom` → `TokenAdminRegistry.acceptAdminRole` → `setPool` |
| Lane config | `TokenPool.applyChainUpdates` both directions |
| Fee | Native gas (`feeToken = address(0)`); attach `msg.value` |
| Receiver | `abi.encode(address)` in `EVM2AnyMessage.receiver` |
See [references/hedera-ccip.md](references/hedera-ccip.md) for where to source selectors and registry addresses. See [references/examples.md](references/examples.md) for register / wire / send sketches.
## Critical: Selectors, Not Chain IDs
`ccipSend` and pool `remoteChainSelector` take CCIP **chain selectors**. Hedera testnet (`296`) and Sepolia (`11155111`) have different selector values than their EVM chain IDs. Look them up in the CCIP directory; do not pass `296` as a selector.
Do not reuse Axelar GMP names or LayerZero EIDs here.
## Critical: Register Then Wire Both Lanes
Incomplete registry/pool config bricks the token. Per chain:
1. Deploy token + pool
2. Grant the pool mint/burn roles on the token
3. `registerAdminViaGetCCIPAdmin(token)` then `acceptAdminRole(token)`
4. `TokenAdminRegistry.setPool(token, pool)`
5. After **both** chains have token+pool addresses: `applyChainUpdates` on each pool (remote selector, remote pool, remote token)
Then send a small test amount and track it on CCIP Explorer.
## Critical: Hedera HTS-Backed CCT
Vanilla path: `BurnMintERC20` + `BurnMintTokenPool` on Hedera EVM, same as Sepolia.
HTS-backed path:
- Users hold a native HTS token created via precompile `0x167`
- CCIP registers the **wrapper** (`HtsBurnMintERC20`), not the HTS token id/address users see in wallets
- Pool (`HtsBurnMintTokenPool`) must associate itself with the native HTS token and approve the wrapper
- Hedera → remote send needs **two approvals**: HTS → wrapper, wrapper → Router
- Receiver accounts must **associate** the native HTS token before inbound mints
- Mint/burn/transfer amounts must fit HTS `int64`
Do not mix Axelar or LayerZero token addresses into CCIP env/config.
## Send Flow (native fee)
```solidity
Client.EVM2AnyMessage memory message = Client.EVM2AnyMessage({
receiver: abi.encode(receiver),
data: "",
tokenAmounts: tokenAmounts, // token is the CCIP-registered ERC-20 / wrapper
feeToken: address(0),
extraArgs: Client._argsToBytes(
Client.EVMExtraArgsV2({ gasLimit: 0, allowOutOfOrderExecution: true })
)
});
uint256 fee = IRouterClient(router).getFee(destinationChainSelector, message);
IERC20(tokenToSend).approve(router, amount);
IRouterClient(router).ccipSend{ value: fee }(destinationChainSelector, message);
```
## Checklist
- [ ] Chain selectors from the CCIP directory (not EVM chain IDs, Axelar names, or LZ EIDs)
- [ ] Token admin registered and pool set on **both** chains
- [ ] `applyChainUpdates` wired both directions before sending
- [ ] Native fee attached to `ccipSend` (`feeToken = address(0)`)
- [ ] HTS path: wrapper registered with CCIP; users hold native HTS; dual approve + associate
- [ ] Amounts fit `int64` when touching HTS mint/burn
- [ ] CCIP token/pool addresses not copied from Axelar/LayerZero configs
## References
- [references/examples.md](references/examples.md) — register, wire, send, HTS dual-approve sketches
- [references/hedera-ccip.md](references/hedera-ccip.md) — selectors vs chain IDs, where to source router/registry
- [CCIP directory](https://docs.chain.link/ccip/directory)
- [CCIP burn-and-mint CCT](https://docs.chain.link/ccip/tutorials/evm/cross-chain-tokens/register-from-eoa-burn-mint-hardhat)
- [CCIP Explorer](https://ccip.chain.link)
© hedera-dev · Apache-2.0 · hedera-dev/hedera-skills