mcpField
C
ccip

ccip

github.com/hedera-dev開発28463 回インストール8 週間前に更新
リポジトリ

ccip について

ccipは、HederaでChainlink CCIPによるクロスチェーントークンとメッセージを実装するスキルです。バーン・ミントの構成、トークン登録、双方向レーン設定、送信に加え、HTSトークンと登録するラッパーの違いも扱います。

主な機能

  1. 01バーン・ミント型トークンとプールのデプロイ
  2. 02トークン登録と双方向レーンの設定
  3. 03ネイティブガス料金でのメッセージ送信
  4. 04HTSラッパー統合の要件説明

活用シーン

  1. 01Hederaと他チェーン間のトークン転送構築
  2. 02CCIPトークンプールとリモートレーンの設定
  3. 03HTSトークンのクロスチェーン送信の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hedera-dev/hedera-skills --skill ccip

インストール後、Claude Code で/ccipを入力して読み込まれたか確認します。

同梱ファイルreferences/examples.mdreferences/hedera-ccip.md

詳細

Chainlink CCIP (Hedera)

CCT バーン・アンド・ミントパターン: 各チェーンにバーン・ミントトークン + トークンプールをデプロイし、トークンを CCIP に登録し、チェーンセレクターでリモートプールを接続し、ネイティブ手数料を支払って ccipSend を実行します。

BurnMint token + TokenPool (source)
        → Router.ccipSend(destSelector, message)
             → TokenPool lockOrBurn / releaseOrMint (dest)

Hedera では、バニラ ERC-20 CCT または HTS ベースのラッパーを使用できます。CCIP は常にプールが見る ERC-20 を登録します。HTS の場合、それはラッパーであり、ユーザーはネイティブ HTS トークンを保有します。

このスキルは クロスチェーンのトークン/メッセージ であり、Chainlink Data Feeds ではありません。

クイックリファレンス

要素役割
RoutergetFee + ccipSend{value}
チェーンセレクターuint64 の CCIP ID — EVM チェーン ID ではありません
トークン + プールバーン・ミント ERC-20 + BurnMintTokenPool (または Hedera HTS バリアント)
管理者レジストリRegistryModuleOwnerCustom → TokenAdminRegistry.acceptAdminRole → setPool
レーン設定TokenPool.applyChainUpdates を双方向に
手数料ネイティブガス (feeToken = address(0))、msg.value を添付
レシーバーEVM2AnyMessage.receiver 内で abi.encode(address)

セレクターやレジストリアドレスの入手先については references/hedera-ccip.md を参照してください。登録 / 接続 / 送信のスケッチについては references/examples.md を参照してください。

重要: チェーン ID ではなくセレクター

ccipSend およびプールの remoteChainSelector は CCIP チェーンセレクターを取ります。Hedera テストネット (296) と Sepolia (11155111) は、それぞれの EVM チェーン ID とは異なるセレクター値を持ちます。CCIP ディレクトリで調べてください。296 をセレクターとして渡さないでください。

ここで Axelar GMP の名前や LayerZero EID を再利用しないでください。

重要: 登録してから両方のレーンを接続

レジストリ/プールの設定が不完全だとトークンが機能しなくなります。チェーンごとに:

  1. トークン + プールをデプロイ
  2. トークン上のプールにミント/バーンロールを付与
  3. registerAdminViaGetCCIPAdmin(token) を実行してから acceptAdminRole(token)
  4. TokenAdminRegistry.setPool(token, pool)
  5. 両方のチェーンにトークン+プールアドレスが揃ったら: 各プールで applyChainUpdates を実行 (リモートセレクター、リモートプール、リモートトークン)

その後、少量のテスト額を送信し、CCIP Explorer で追跡します。

重要: Hedera HTS ベースの CCT

バニラパス: Hedera EVM 上の BurnMintERC20 + BurnMintTokenPool、Sepolia と同じです。

HTS ベースのパス:

  • ユーザーはプリコンパイル 0x167 で作成されたネイティブ HTS トークンを保有
  • CCIP はラッパー (HtsBurnMintERC20) を登録し、ユーザーがウォレットで見る HTS トークン ID/アドレスは登録しない
  • プール (HtsBurnMintTokenPool) はネイティブ HTS トークンに自身をアソシエイトし、ラッパーを承認する必要がある
  • Hedera → リモート送信には2 つの承認が必要: HTS → ラッパー、ラッパー → Router
  • 受信アカウントは、インバウンドミントの前にネイティブ HTS トークンをアソシエイトする必要がある
  • ミント/バーン/転送額は HTS の int64 に収まる必要がある

Axelar や LayerZero のトークンアドレスを CCIP の env/config に混在させないでください。

送信フロー (ネイティブ手数料)

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);

チェックリスト

  • チェーンセレクターは CCIP ディレクトリから (EVM チェーン ID、Axelar 名、LZ EID ではない)
  • 両方のチェーンでトークン管理者が登録され、プールが設定されている
  • 送信前に applyChainUpdates が双方向に接続されている
  • ccipSend にネイティブ手数料を添付 (feeToken = address(0))
  • HTS パス: ラッパーが CCIP に登録されている; ユーザーはネイティブ HTS を保有; デュアル承認 + アソシエイト
  • HTS のミント/バーンに触れる場合、額が int64 に収まる
  • CCIP のトークン/プールアドレスを Axelar/LayerZero の設定からコピーしていない

リファレンス

コメント