cross-chain について
Stellarを含むクロスチェーン機能の開発を案内するスキルです。用途に応じた転送レールの選択に加え、トークン移転、コントラクト間メッセージ、統合時の注意点を説明します。
主な機能
- 01CCTP V2によるUSDC転送の案内
- 02USDT0によるUSDT転送の案内
- 03クロスチェーンのコントラクト間通信
- 04マルチチェーントークン方式の説明
- 05アドレス・小数桁・処理時間の注意点
活用シーン
- 01Stellarと対応チェーン間のUSDC移転
- 02StellarとEVMチェーン間のUSDT移転
- 03チェーンをまたぐコントラクトメッセージ送信
- 04ウォレットやdappへのクロスチェーン交換機能の追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ stellar/ stellar-dev-skill --skill cross-chainインストール後、Claude Code で/cross-chainを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
axelar.mdcctp.mdlayerzero.md詳細
Stellar のクロスチェーン
Stellar は、用途に応じて構築された複数の本番環境向けレールを通じて、ほかのブロックチェーンと接続します。誤ったレールを選ぶとエンジニアリングの労力が無駄になります。適切なレールを選ぶのは調査プロジェクトではなく、ルーティングの判断です。このファイルではルートを案内します。詳しい説明は各ファイルにあります — タスクに合ったファイルをお読みください:
| 目的 | 使用するもの | 参照先 |
|---|---|---|
| ネイティブ USDCを Stellar と EVM チェーンまたは Solana の間で移動する(ラップ資産や流動性プールは不要) | Circle CCTP V2 | cctp.md |
| ネイティブ USDTを Stellar と EVM チェーンの間で移動する | USDT0(LayerZero OFT) | layerzero.md |
| Stellar コントラクトから別のチェーン上のコントラクトを呼び出す、またはその逆の呼び出しを受け取る(任意のペイロード) | Axelar GMP または LayerZero OApp | axelar.md、layerzero.md |
| 新規または既存の Stellar 資産であるトークンを複数のチェーンに対応させる | Axelar ITS または LayerZero OFT | axelar.md、layerzero.md |
| 自分でブリッジを統合せずに、任意の資産をクロスチェーンでスワップする(BTC、ETH、SOL、… → XLM または Stellar USDC) | NEAR Intents | 以下 |
経験則:資産が USDC で、両端が CCTP 対応チェーンなら、最も安価で直接的なのは CCTP です(Circle ネイティブの USDC をバーンしてミントするため、ラップもプールもありません)。資産が USDT なら、答えは LayerZero OFT 上の USDT0 です。これは別のレールであり、経路の各区間によって仕組みが変わります。Stellar ではバーンとミントが行われますが、Ethereum 区間では OFT Adapter を通じて正規の USDT がロックおよびアンロックされます。そのため、フローを説明する前に経路の OFT モードを確認してください。転送先チェーンで単に価値を移動するのではなくロジックを実行する必要がある場合、それはメッセージパッシングです。これに対応するレールは 2 つあり、layerzero.md の末尾にある比較を参考に、Axelar の共有バリデーターセキュリティと LayerZero のアプリ設定型 DVN セットから選べます。トークンを管理していてマルチチェーン化したい場合は、同じ区分の ITS または OFT が該当します。ユーザーが「チェーン A 上の自分の X を Stellar 上の Y に交換したい」だけで、ブリッジの仕組みを扱いたくない場合は、NEAR Intents 経由で見積もりを取得してください。
このスキルを使う場面
- Stellar と Ethereum、Base、Arbitrum、Solana、またはほかの CCTP 対応チェーンの間で USDC をブリッジする
- Stellar と EVM チェーンの間で USDT をブリッジする(LayerZero OFT 上の USDT0)
- ブリッジされた USDC を Stellar アカウントまたはコントラクトで受け取る(資金を使えなくしないようにしてください — 下記のフォワーダーに関する警告を参照)
- 別のチェーン上のコントラクトにメッセージを送信したり、そこからメッセージを受信したりする Stellar スマートコントラクトを作成する
- インターチェーントークンをデプロイする、または既存の Stellar 資産をほかのエコシステムに接続する
- ウォレットや dapp に「任意のチェーンから入金」またはクロスチェーンスワップのフローを追加する
関連スキル
- トラストライン、SAC のデプロイ、資産の構造 →
../assets/SKILL.md - メッセージを送受信する Stellar スマートコントラクトの作成 →
../smart-contracts/SKILL.md - フロントエンドでのトランザクション構築、Freighter による署名、RPC 送信 →
../dapp/SKILL.md - 転送先でのミントやコントラクトイベントの監視 →
../data/SKILL.md - ブリッジではなく AI エージェントへの支払い(x402/MPP) →
../agentic-payments/SKILL.md
すべてのレールに共通する落とし穴
どのレールを選んでも、以下の点に注意してください。各補足ファイルには、そのレール固有の注意点も記載されています。
- アドレス形式は相互に変換できません。 Stellar のアドレスは
strkey文字列(G…はアカウント、C…はコントラクト、M…は多重化されたアドレス)です。EVM は 20 バイトの 16 進数形式、Solana は base58 形式を使用します。各レールでは、他のチェーンのアドレスに対して独自のエンコード方式を定めています(CCTP:生の 32 バイトペイロード、Axelar:文字列とバイトペイロード)。あるチェーンのアドレスを別のチェーン用のフィールドに貼り付けないでください。レールの仕様に従ってエンコードし、エンコード前に SDK(StrKey.isValidEd25519PublicKey/isValidContract)で検証してください。 - 小数点以下の桁数は異なります。 Stellar のクラシックアセットとその SAC は小数点以下 7 桁を使用しますが、その他の Stellar トークンコントラクト(ITS でデプロイされたトークンを含む)ではそれぞれの桁数が定められています。決めつけずに
decimals()を呼び出してください。USDC は Stellar(小数点以下 7 桁)を除く、サポート対象のすべてのチェーンで小数点以下 6 桁です。EVM トークンは通常 18 桁です。CCTP メッセージは常に小数点以下 6 桁です。境界ごとに変換し、最終桁が反映される金額でテストしてください(具体的な小数点の例は cctp.md を参照)。LayerZero OFT にはさらにもう 1 つのレイヤーがあります。OFT ではトークンのローカル桁数に加え、shared_decimalsが定められています(USDT0 は 6 桁)。送信時には この精度を下回る端数が警告なく切り捨てられます。quote_oftで見積もり、入力金額ではなくOFTReceiptを信頼してください(layerzero.md を参照)。 - Stellar のクラシックアセットの受取人は、事前にトラストラインを設定する必要があります。
G…アカウントは、そのアセットへのトラストラインがないと、発行済みアセット(USDC を含む)を受け取れません。トラストラインのないアカウント宛てのブリッジ資金は届きません。送金を開始する前に確認して設定してください。詳しくは../assets/SKILL.mdを参照してください。 - クロスチェーン処理は非同期です。 どのレールにも待ち時間があります。CCTP ではファイナリティと Circle のアテステーションを待ちます(チェーンやファイナリティのしきい値に応じて、数秒から約 15 分)。Axelar ではバリデーターの確認を、インテントではマーケットメーカーの約定を待ちます。UI とエージェントは、ステータスのポーリングを前提に構築し、「送信したら完了とみなす」設計にしないでください。
- 必ず最初にテストネットを使ってください。 メインネットに触れる前に、テストネットで全工程を一度実施してください。クロスチェーンのミスは、設計上、取り返しがつかない場合がよくあります(バーンは取り消せず、エンコードを誤ると資金が永久に失われることもあります)。ただし、この方法で事前検証できないレールが 2 つあります。NEAR Intents は実際のマーケットメーカーによって約定され、USDT0 は LayerZero のテストネットエンドポイントが存在するにもかかわらず、テストネットへのデプロイを公開していません。どちらも、まず読み取り専用の見積もり(USDT0 では
quote_oftとquote_send、インテントではドライ見積もり)を行い、その後、ごく少額の実送金で検証してください。LayerZero にはテストネットエンドポイント(EID40600)もあり、独自の OApp または OFT を接続できます。ただし、実際にテストネットで送信し、資金が届くことを確認してから利用してください。詳しくはステータスに関する注記を参照してください。
NEAR Intents(インテントベースのスワップ)
ステータスに注意してください。 チェーンとアセットの対応状況は頻繁に変わるため、構築を始める前にNEAR Intents のドキュメントでStellarの現在のステータスを確認してください。
NEAR Intentsはインテントプロトコルです。ユーザーが望む結果(「0.1 BTCをStellar上のUSDCにスワップ」など)を指定し、マーケットメーカーがその実行を競います。Stellar(XLMおよびUSDC)は送信元と送信先の両方としてサポートされているため、「任意のチェーンから入金」できるUXを実現する最短の方法です。Stellar側で連携するブリッジコントラクトは一切ありません。
連携には1Click APIを使います。アセットのペアを指定して POST /v0/quote を呼び出すと、価格と入金アドレスが返されます。そのアドレスに資金を送ると、マーケットメーカーがスワップを実行します。GET /v0/tokens にはサポートされているアセットが一覧表示されます(StellarのアセットはXLMとUSDCで、小数点以下7桁です)。また、"dry": true を指定したクォートでは、入金を確定せずに価格と所要時間の目安を取得できます。ペアを自由に試し、後から確定できます。公式SDKはTypeScript、Go、Rust向けに提供されています。
Stellar固有の事実を3つ紹介します(ライブAPIで確認済みです)。
- Stellarからの入金はMEMOモードのみで、APIによって強制されます。 Stellarを送信元とするクォートでは
"depositMode": "MEMO"を設定する必要があります。設定しないと、/v0/quoteはIncorrect depositMode for originAsset from stellar chainを返して拒否します。クォートでは入金アドレスとメモ(depositAddress+depositMemo)が返され、資金をスワップに振り分けるのはこのメモです。メモなしの入金は反映されません。メモはアドレスの一部として扱い、両方そろっていない場合は表示しないでください。 - テストネットはありません。 インテントは実際の流動性を持つ実在のマーケットメーカーによって執行されるため、リハーサルにはドライクォートの後、実際にごく少額のスワップを行います。テストネットでの往復ではありません。
- パートナーポータルからAPIキーを登録すると、デフォルトのインテグレーター手数料がなくなります。匿名での利用も可能ですが、追加料金が発生します(クォートのスプレッドに反映されます)。
クォートパラメーター、スリッページ、返金処理など、より詳しい内容については、このファイルではなく、最新の1Click APIドキュメントを参照してください。プロトコルは頻繁に更新されます。