メインコンテンツへスキップ
このチュートリアルでは、以下を行います:
  • CCTPのburn-attest-mintプロトコルの仕組みを学ぶ
  • クロスチェーン送金を開始するために、ソースチェーン上でUSDCをburnする
  • デスティネーションチェーン上でのmintを認可するCircleのattestationを取得する
  • デスティネーションチェーン上でUSDCをmintして送金を完了する
Injective上のCCTPとは? Cross-Chain Transfer Protocol (CCTP) を使うと、Injectiveと他のネットワーク間でUSDCを1:1で移転できます。 USDCはInjective上でネイティブステーブルコインとして利用可能です。 これは CCTP を通じて提供されます。 CCTPはサポート対象ネットワーク間でUSDCを1:1で移転します。 プロセスは以下の通りです:
  1. ソースチェーン上でUSDCをburnする。
  2. attestation を受け取る。
  3. デスティネーションチェーン上で同等量のUSDCをmintする。
wrappingやbridgingは不要です。

前提条件

このチュートリアルを始める前に、以下がインストールされていることを確認してください: 加えて、以下が必要です:

はじめに

このチュートリアルに付属するコードは USDC CCTP demo リポジトリで利用可能です。 リポジトリをクローンし、依存関係をインストールします:
開発サーバーを起動します:
ブラウザで http://localhost:5173 を開いてdAppを表示します。

CCTPはどのように動作するか?

CCTPは、ソースチェーン上でUSDCをburnし、CircleのAPIから署名付きattestationを取得し、デスティネーションチェーン上で同等量をmintすることで、チェーン間でUSDCを移転します。 CCTPは以下の3ステップでUSDCをチェーン間で移転します:
  1. Burn: ソースチェーンの TokenMessengerV2 コントラクトが指定されたUSDC量をburnします。 その後、送金詳細を含む MessageSent イベントを発行します。
  2. Attest: CircleのIris APIがオンチェーンイベントを監視し、メッセージに署名します。 burnの確定後、attestationを生成します。
  3. Mint: デスティネーションチェーンの MessageTransmitterV2 コントラクトがattestationを検証し、同等量のUSDCをrecipientアドレスへmintします。
このチュートリアルに付属するデモアプリケーションは、ステップ2と3を自動化し、attestationの準備が整うまでCircleのAPIをポーリングし、その後mintアクションをアンロックします。
dAppは各ステップを以下の呼び出しで実装しています:
Injective上で使用されるコントラクトアドレスについては、Injective上のUSDC を参照してください。

ソースチェーン上でUSDCをburnする

dAppが http://localhost:5173 で開かれた状態で:
  1. Connect Wallet を選択し、MetaMaskの接続プロンプトを承認します。
  2. ソースチェーン(例えば Ethereum Sepolia)とデスティネーションチェーン(Injective EVM Testnet)を選択し、移転するUSDC量を入力します。
  3. Approve USDC を選択し、MetaMaskで承認トランザクションを確認します。
  4. Burn USDC を選択し、burnトランザクションを確認します。
dAppはトランザクションハッシュを表示し、burnトランザクションがオンチェーンで確定すると自動的にattestationステップへ進みます。
Burn USDC を選択すると、dAppは TokenMessengerV2 コントラクトの depositForBurn を呼び出します:
minFinalityThreshold の値は以下のように設定する必要があります:
  • 値が1000以下の場合は「fast」メッセージとなり、
  • 値が1000より大きい場合は「standard」メッセージとなります。
Sepolia上では、standardメッセージとfastメッセージの両方がサポートされており、 standardメッセージは約15〜19分、 fastメッセージは約20秒かかります。Injective上では、standardメッセージのみがサポートされており、 standardメッセージは約0.65秒かかります。 Injectiveの高速なブロックタイムと即時ファイナリティのおかげで、fastメッセージは不要なためサポートされていません。これに関する正式なリファレンスとして、Circleドキュメントの Block confirmation requirements and attestation timing for CCTP を参照してください。

Circle attestationとは?

Circle attestationは、ソースチェーン上でUSDCのburnが発生したことを証明する、CircleのIris APIからの暗号学的署名です。 attestationは、デスティネーションチェーン上での対応するmintを認可するために使用されます。 burnの後、CircleのIris APIは ソースチェーン 上の MessageSent イベントを監視します。 必要な数のブロック確認が完了すると、Circleはメッセージに署名し、attestationを発行します。 attestationの所要時間はソースチェーンによって異なります:
  • Ethereum Sepolia (standardモード): 15〜20分
  • Injective EVM Testnet: 通常数分
Sepoliaからの送金は、待ち時間を大幅に短縮するfastモードをサポートしていますが、十分な maxFee の設定が必要です。 手数料が低すぎる場合、送金はstandardモードへフォールバックします。

attestationを待つ

このdAppは自動的にIris APIをポーリングします。 ページを離れる必要はありません。 attestationの準備が整うと、UIが通知します。
dAppはburnステップのトランザクションハッシュを使ってattestationを取得します:

デスティネーションチェーン上でUSDCをmintする

dAppに「Attestation received」が表示されたら:
  1. プロンプトが表示されたら、MetaMaskを デスティネーションチェーン に切り替えます。
  2. Mint USDC を選択し、MetaMaskでトランザクションを確認します。
  3. dApp上に表示される残高、または Injective Testnet Blockscout もしくは Sepolia Etherscan でアドレスを確認することで、デスティネーションチェーン上のUSDC残高を確認します。
Mint USDC を選択すると、dAppは MessageTransmitterV2 コントラクトの receiveMessage を呼び出します:

次のステップ

Injective上でCCTPを使った初めてのクロスチェーンUSDC送金、おつかれさまでした! このチュートリアルで学んだ内容は以下の通りです:
  • CCTPのburn-attest-mintプロトコルが、wrappingやbridgingを 行わずに USDCを1:1でチェーン間で移転する方法
  • クロスチェーン送金を開始するために、ソースチェーン上でUSDCをburnする方法
  • Circleのattestationを取得し、それを使ってデスティネーションチェーン上でUSDCをmintする方法
USDCをチェーン間で移転できるようになったところで、次は以下を検討してみてください:
  • Injective上のUSDC: コントラクトアドレス、テストネットfaucet、よくある質問。
  • MultiVM Token Standard: bridgingなしで、Injective上のEVMとCosmosの両方でUSDCを使用します。
最終更新日 2026年5月12日