mcpField
L
lifi

lifi

github.com/sendaifun開発13046 回インストール13 週間前に更新
リポジトリ

lifi について

LI.FIは、クロスチェーン送金、スワップ、決済フローが必要なアプリ、ウォレット、バックエンド、AIエージェント向けの連携ガイドです。REST API、SDK、MCPサーバー、CLI、Widgetの選び方に加え、ルート検索、実行、ステータス追跡を説明します。

主な機能

  1. 01クロスチェーンの見積もりとルート
  2. 02ルート比較と実行ガイド
  3. 03送金ステータスの追跡
  4. 04チェーン、トークン、ブリッジ、取引所の検索
  5. 05Solana送金の専用ガイド

活用シーン

  1. 01アプリへのクロスチェーン送金追加
  2. 02ブリッジルートと手数料の比較
  3. 03チェーン間送金の到達状況の追跡
  4. 04対応するSolanaトークンとチェーンの確認

MCP 対応

LI.FIはMCP対応AIホスト向けにMCPサーバーを提供し、型付きツールの検索を可能にします。ガイドではREST API、SDK、CLI、Widgetによる連携方法も説明します。

インストール

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

$npx skills add https://github.com/sendaifun/skills --skill lifi

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

詳細

LI.FI クロスチェーン連携ガイド

Solana アプリ、ウォレット、バックエンド、または AI エージェントで、クロスチェーンのトークン送金、ブリッジ集約、同一チェーン内のスワップ、決済フロー、送金状況の追跡が必要な場合は LI.FI を使用してください。LI.FI は、REST API、SDK、MCP サーバー、CLI、ウィジェットを通じて、同じルーティングエンジンを提供します。

概要

LI.FI は、スワップとブリッジのためのマルチチェーン流動性集約プラットフォームです。エージェントやバックエンドとの連携では、依存関係が最も少ない REST API が標準的な選択肢です。フロントエンドアプリでは、ウォレット、署名、実行状況の追跡、エコシステム固有のトランザクション処理に対応する SDK を推奨します。MCP 互換の AI ホストでは、型付きのツール検出が可能な LI.FI MCP サーバーを推奨します。

主な機能:

  • 見積もり:最適なルートの、署名可能なトランザクションを取得します。
  • ルート:複数のルート候補を比較し、手順ごとに実行します。
  • 状況追跡:送信元と送信先のチェーンで、送金の進行状況を追跡します。
  • 検出:サポート対象のチェーン、トークン、ブリッジ、取引所を実行時に照会します。
  • Solana サポート:chainTypes=SVM を使用して Solana 固有のチェーン/トークンデータをリクエストし、API の例では Solana のチェーンキーとして SOL を使用します。

製品インターフェースの選択

タスクに合った、最小限のインターフェースを選択してください。

  • REST API:バックエンドサービス、スクリプト、汎用 AI エージェント向けです。シンプルな HTTP 呼び出しで、実行時の依存関係はありません。
  • SDK(@lifi/sdk):フロントエンドや、実行フロー全体を扱う場合に適しています。ウォレットコネクター、署名、ルート実行、更新フックに対応します。
  • MCP サーバー:Claude、Cursor、Windsurf などの MCP 互換 AI ホスト向けです。型付きのツール検出が利用できる場合に使用します。
  • CLI:生の JSON よりも簡潔で人が読みやすい出力が望ましい、トークン効率の高いエージェントのワークフロー向けです。
  • ウィジェット:カスタムの連携ではなく、埋め込み可能なスワップ/ブリッジ UX をユーザーが求めている場合に、すぐに使える UI を提供します。

すべての連携で SDK を使う必要はありません。見積もりの検索、ルートの比較、状況の確認には、API のほうがシンプルで監査しやすい場合がよくあります。

ベース URL と認証

Production API: https://li.quest/v1
Staging API:    https://staging.li.quest/v1
Docs:           https://docs.li.fi
OpenAPI:        https://docs.li.fi/openapi.yaml
LLM overview:   https://docs.li.fi/llms.txt

LI.FI API は API キーなしで利用できます。レート制限の緩和や認証が必要なパートナー利用には、API キーを使用してください。API キーを取得するには、LI.FI Partner Portal で連携を登録します:https://portal.li.fi/

REST を直接呼び出す場合は、x-lifi-api-key ヘッダーにキーを渡してください。

curl 'https://li.quest/v1/chains?chainTypes=EVM,SVM' \
  --header 'accept: application/json' \
  --header 'x-lifi-api-key: YOUR_API_KEY_IF_AVAILABLE'

本番環境で使用する前に、サーバー側でキーをテストしてください。

curl 'https://li.quest/v1/keys/test' \
  --header 'x-lifi-api-key: YOUR_API_KEY'

x-lifi-api-key をブラウザーのコード、公開リポジトリ、または Widget の直接設定で公開しないでください。バックエンドまたは信頼できる実行環境から SDK を使用する場合は、createConfig({ apiKey: '...' }) を通じてキーを渡してください。フロントエンドで Widget を使用する場合は、API キーを渡さないでください。

統合ワークフロー

  1. 転送の意図を確認する

    • 送信元チェーン、送信先チェーン、送信元トークン、送信先トークン。
    • トークンの最小単位での金額。
    • 送信者アドレスと、異なる場合は受取人アドレス。
    • ユーザーが最適なルートを1つだけ求めているのか、ルートの比較を求めているのか。
  2. ハードコードせずに対応状況を確認する

    • /chains を使用してチェーンを確認します。
    • /tokens または /token を使用してトークンのアドレスと小数桁数を確認します。
    • /tools を使用して現在利用可能なブリッジと取引所を一覧表示します。
    • すべてのトークン、ブリッジ、チェーンの組み合わせが利用可能だと想定しないでください。
  3. 見積もりとルートのどちらを使うか選択する

    • 最適な実行可能ルートが1つあればよい単純な転送には、GET /quote を使用します。
    • 選択肢を比較する場合、またはユーザーがルートの選択、コスト、速度、ツールの許可リスト、複数のステップを求めている場合は、POST /advanced/routes を使用します。
    • 高度なルートを実行する際、個々のルートステップのトランザクションデータを設定するには、POST /advanced/stepTransaction を使用します。
  4. 署名する内容をユーザーに提示する

    • 送信元チェーン、送信先チェーン、送信元トークン、送信先トークン、金額、推定出力、ツール/ブリッジ、手数料、受取人、スリッページを要約します。
    • 人が読める要約を提示せずに、内容が不透明なトランザクションデータへの署名をユーザーに求めてはいけません。
  5. 適切なウォレット経路を通じて実行する

    • GET /quote を使用する場合、レスポンスにはすでに transactionRequest が含まれています。Allowance/Permit の処理後、送信元チェーンのウォレットでそのトランザクションを送信します。
    • POST /advanced/routes を使用する場合、まずルートを選択し、実行前に POST /advanced/stepTransaction で各ステップのデータを設定します。
    • EVM のトランザクションリクエストには通常、to、data、value、ガス関連フィールドなどが含まれます。
    • Solana を送信元とする転送では、Solana のトランザクションデータが transactionRequest.data に Base64 形式で返されます。デシリアライズして署名し、ユーザーの Solana ウォレットまたは SDK 経由で送信します。
    • 本番環境での複数ステップ実行には、Allowance と残高の確認、チェーン切り替え、トランザクションデータの取得、トランザクションの送信、ステータスの追跡を管理する SDK の executeRoute を優先してください。
    • LI.FI から受け取った後は、transactionRequest.data、calldata、受取人、返金先、メモ、ブリッジ固有のペイロードを変更してはいけません。
  6. 送信元チェーンへの送信後にステータスを追跡する

    • 終端ステータスになるまで、10~30秒ごとに /status をポーリングします。
    • 検索を速めるため、見積もりに含まれている場合は fromChain、toChain、bridge を指定します。
    • 送信元チェーンでの確認はクロスチェーン転送の開始にすぎず、最終的な受け取りの証明ではないことに注意してください。

最小限のエンドポイントセット

見積もりを取得する

トランザクションデータを含む最適なルートを1つ取得する場合に使用します。

curl --request GET \
  --url 'https://li.quest/v1/quote?fromChain=ARB&toChain=SOL&fromToken=0xaf88d065e77c8cC2239327C5EDb3A432268e5831&toToken=7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs&fromAddress=YOUR_EVM_WALLET&toAddress=YOUR_SOL_WALLET&fromAmount=1000000000' \
  --header 'accept: application/json'

必須パラメーター:

  • fromChain:送信元チェーンのIDまたはキー。
  • toChain:送信先チェーンのIDまたはキー。
  • fromToken:送信元トークンのシンボルまたはアドレス。
  • toToken:送信先トークンのシンボルまたはアドレス。
  • fromAmount:最小単位での金額。
  • fromAddress:送信者のウォレットアドレス。
  • toAddress:送信者と異なる場合、または異なるエコシステム間でブリッジする場合の受取人ウォレットアドレス。
複数のルートを取得する

ユーザーがルートの比較を求めている場合、またはアプリケーションでルートの選択が必要な場合に使用します。

curl --request POST \
  --url 'https://li.quest/v1/advanced/routes' \
  --header 'accept: application/json' \
  --header 'content-type: application/json' \
  --data '{
    "fromChainId": "ARB",
    "toChainId": "SOL",
    "fromTokenAddress": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
    "toTokenAddress": "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs",
    "fromAmount": "1000000000",
    "fromAddress": "YOUR_EVM_WALLET",
    "toAddress": "YOUR_SOL_WALLET"
  }'
転送ステータスを確認する
curl --request GET \
  --url 'https://li.quest/v1/status?txHash=SOURCE_TX_HASH&fromChain=ARB&toChain=SOL&bridge=BRIDGE_KEY' \
  --header 'accept: application/json'

ステータスの処理:

  • NOT_FOUND:トランザクションがまだインデックスされていないか、マイニングされていない可能性があります。既知の場合は fromChain とブリッジを指定して再試行します。
  • PENDING:ポーリングを続けます。
  • DONE + COMPLETED:最終的な受け取りが成功しました。
  • DONE + PARTIAL:成功しましたが、価値の同等性を維持しつつ出力トークンが異なる場合があります。
  • DONE + REFUNDED:転送に失敗しましたが、資金は返金されました。
  • FAILED:ポーリングを停止し、エラー/サブステータスを提示します。
対応チェーンを一覧表示する
curl --request GET \
  --url 'https://li.quest/v1/chains?chainTypes=EVM,SVM' \
  --header 'accept: application/json'

Solana のみ:

curl --request GET \
  --url 'https://li.quest/v1/chains?chainTypes=SVM' \
  --header 'accept: application/json'
Solana トークンを一覧表示する
curl --request GET \
  --url 'https://li.quest/v1/tokens?chains=SOL&chainTypes=SVM' \
  --header 'accept: application/json'
ブリッジと取引所を一覧表示する
curl --request GET \
  --url 'https://li.quest/v1/tools' \
  --header 'accept: application/json'

Solana 固有のガイダンス

転送のいずれかの側が Solana の場合は、このセクションを使用してください。

  • Solana のチェーンサポートを照会するときは、chainTypes=SVM を使用してください。
  • API の例では、Solana のチェーンキーとして SOL を使用してください。
  • EVM チェーンから Solana にブリッジする場合は、必ず Solana の toAddress を指定してください。送信元の EVM アドレスは、有効な Solana の送金先ではありません。
  • SOL -> EVM の転送では、transactionRequest.data に Base64 エンコードされた Solana トランザクションデータが含まれることを想定してください。これは EVM の calldata ではありません。
  • Solana のウォレットアダプターまたは LI.FI SDK を使用して、Solana トランザクションをデシリアライズし、署名して送信してください。該当するフローのドキュメントで必要とされていない限り、トランザクションを手動で再構築しないでください。
  • トークンの小数桁数は /tokens または /token で確認してください。同じトークンの EVM 版と Solana 版で、小数桁数やアドレスが同一だと想定しないでください。
  • ステータスの取得に時間がかかる場合は、送信元のトランザクションハッシュに加え、見積もりから取得した fromChain、toChain、ブリッジ/ツールのキーを渡してください。

実行パターン

API による直接実行

ウォレット/プロバイダー層を自分で制御する場合は、API による直接実行を使用してください。/quote は実行可能なトランザクションデータをすぐに返します。一方、/advanced/routes はルートの選択肢を返し、選択した各ステップについて POST /advanced/stepTransaction が必要です。

EVM を送信元とする見積もりの一般的なフローは次のとおりです。

  1. 送信元トークンがネイティブトークンでない場合は、quote.estimate.approvalAddress に対するトークンの許可を確認します。
  2. 必要に応じて、選択したフローに応じて許可を送信するか、Permit/Permit2 を使用します。
  3. EVM ウォレットを通じて quote.transactionRequest を送信します。
  4. 送信元のトランザクションハッシュ、quote.tool、送信元チェーン、送信先チェーンを指定して /status をポーリングします。

Solana を送信元とする見積もりでは、transactionRequest.data を calldata として扱わないでください。これは Base64 エンコードされた Solana トランザクションデータです。SDK または Solana のウォレットアダプター/web3.js の方法を使用してデシリアライズし、署名して送信してください。

SDK による実行

フロントエンドを構築する場合や、エージェントに見積もり/ステータスの照会だけでなくルート全体の実行が必要な場合は、SDK を優先してください。@lifi/[email protected] 時点で、@lifi/sdk は createConfig、getQuote、getRoutes、executeRoute、EVM、Solana、KeypairWalletAdapter をエクスポートします。

npm install @lifi/sdk

見積もりのみの照会:

import { createConfig, getQuote } from '@lifi/sdk'

createConfig({
  integrator: 'YourAppName',
  // Backend/trusted runtime only. Do not expose this in browsers.
  apiKey: process.env.LIFI_API_KEY,
})

const quote = await getQuote({
  fromChain: 'ARB',
  toChain: 'SOL',
  fromToken: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
  toToken: '7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs',
  fromAmount: '1000000000',
  fromAddress: 'YOUR_EVM_WALLET',
  toAddress: 'YOUR_SOL_WALLET',
})

console.log(quote.estimate.toAmount, quote.tool, quote.transactionRequest)

SDK によるルートの実行:

import { createConfig, EVM, executeRoute, getRoutes } from '@lifi/sdk'
import type { Chain } from 'viem'
import { createWalletClient, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { arbitrum, mainnet, optimism } from 'viem/chains'

const privateKey = process.env.PRIVATE_KEY as `0x${string}` // backend/testing only
const account = privateKeyToAccount(privateKey)
const chains = [arbitrum, mainnet, optimism]

const client = createWalletClient({
  account,
  chain: arbitrum,
  transport: http(),
})

createConfig({
  integrator: 'YourAppName',
  providers: [
    EVM({
      getWalletClient: async () => client,
      switchChain: async (chainId) =>
        createWalletClient({
          account,
          chain: chains.find((chain) => chain.id === chainId) as Chain,
          transport: http(),
        }),
    }),
  ],
})

const result = await getRoutes({
  fromChainId: 42161,
  toChainId: 10,
  fromTokenAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
  toTokenAddress: '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1',
  fromAmount: '10000000',
  fromAddress: 'YOUR_EVM_WALLET',
})

const executedRoute = await executeRoute(result.routes[0], {
  updateRouteHook(route) {
    console.log(route)
  },
  async acceptExchangeRateUpdateHook() {
    // In a UI, ask the user before accepting.
    return false
  },
})

console.log(executedRoute)

Solana プロバイダーの設定:

import { createConfig, KeypairWalletAdapter, Solana } from '@lifi/sdk'

const walletAdapter = new KeypairWalletAdapter('PRIVATE_KEY') // backend/testing only

createConfig({
  integrator: 'YourAppName',
  providers: [
    Solana({
      getWalletAdapter: async () => walletAdapter,
    }),
  ],
})

ユーザー向けの Solana アプリでは、@solana/wallet-adapter-react を使用し、実行時に接続済みのウォレットアダプターから Solana({ getWalletAdapter }) を設定してください。フロントエンドのコードに秘密鍵を埋め込まないでください。

エラー処理

HTTP ステータスコードと LI.FI API のエラーコードの両方を処理してください。

一般的な API エラーコード:

  • 1002 NoQuoteError:見積もりが見つかりませんでした。別のトークン、金額、送信先、またはルート制約を試してください。
  • 1005 RateLimitError:待機してから再試行してください。利用可能な場合は、より高いレート制限を得るために API キーを使用してください。
  • 1007 SlippageError:スリッページを増やす前にユーザーに確認してください。
  • 1008 ThirdPartyError:ブリッジ/取引所/ツールでエラーが発生しました。後でもう一度試すか、別のルートをリクエストしてください。
  • 1009 TimeoutError:バックオフして再試行するか、ルートを比較して別のツールを探してください。
  • 1011 ValidationError:チェーン ID、トークンアドレス、金額の単位、アドレス形式を確認してください。
  • 1012 RpcFailure:後でもう一度試すか、該当する場合は SDK を通じて、より信頼性の高い RPC を設定してください。

一般的なツールエラーコード:

  • NO_POSSIBLE_ROUTE:リクエストされた操作に対応する経路がありません。
  • INSUFFICIENT_LIQUIDITY:金額を減らすか、別のトークン/経路を選択してください。
  • TOOL_TIMEOUT:再試行するか、API リクエストでツールの制約がサポートされている場合は、タイムアウトするツールを除外してください。
  • AMOUNT_TOO_LOW / AMOUNT_TOO_HIGH:金額を調整してください。
  • FEES_HIGHER_THAN_AMOUNT:金額に見合いません。送金額を増やすか、別のルートを選択してください。
  • DIFFERENT_RECIPIENT_NOT_SUPPORTED:必要な場合は送信者と受取人を同一にするか、別のツールを選択してください。
  • CANNOT_GUARANTEE_MIN_AMOUNT:リスクを説明し、続行する前にユーザーに確認してください。

ガイドライン

  • DO 統合に関するアドバイスを行う前に、最新のチェーン、トークン、ツールを照会してください。
  • DO 単純な実行には /quote を使用し、比較には /advanced/routes を使用してください。
  • DO 署名前に、推定出力額、手数料、ブリッジ/交換ツール、受取人、スリッページを提示してください。
  • DO クロスチェーン送金では、終端状態になるまで /status をポーリングしてください。
  • DO LI.FI のトランザクションデータは、返されたとおりに正確に保持してください。
  • DO 高いレート制限が必要な場合は、API キーを取得するために LI.FI Partner Portal に登録し、キーはサーバー側で保管してください。
  • DO NOT 古くなったブリッジリスト、トークンリスト、チェーンサポートをハードコードしないでください。
  • DO NOT 送信元チェーンでの承認を、クロスチェーン送金の完了とみなさないでください。
  • DO NOT ユーザーの明示的な同意なく、スリッページを増やしたり、受取人を変更したり、トランザクションデータを変更したりしないでください。
  • DO NOT 秘密鍵を保管したり、要求したりしないでください。ウォレットの署名フローを使用してください。
  • DO NOT API や SDK のほうが適している場合に、Widget だけが統合手段であるかのように提示しないでください。

よくあるエラー

エラー:ルートが見つかりません

原因: チェーン/トークンの組み合わせがサポートされていない、流動性が不足している、金額が小さすぎるか大きすぎる、またはルートオプションが制限的です。

解決策: /chains、/tokens、/tools を確認してください。正規のトークンアドレスを試し、金額を調整し、代替ルートについて /advanced/routes をリクエストしてください。

エラー:Solana のトランザクションデータを EVM の calldata として扱っている

原因: SOL を送信元とする見積もりでは、transactionRequest.data に EVM の to/data/value 呼び出しではなく、base64 形式の Solana トランザクションデータが返されます。

解決策: Solana ウォレット/SDK の方法を使用して、トランザクションをデシリアライズし、署名して、送信してください。EVM プロバイダー経由で送信しないでください。

エラー:ステータスエンドポイントが NOT_FOUND を返す

原因: トランザクションがまだインデックス化されていない、送信元トランザクションハッシュが誤っている、fromChain が指定されていない、またはブリッジ/ツールのフィルターが誤っています。

解決策: バックオフを行いながら再試行し、見積もりから fromChain、toChain、ブリッジを渡してください。ハッシュが送信元チェーンのトランザクションハッシュであることを確認してください。

エラー:小数桁数が原因で金額が異なる

原因: 金額が送信元トークンの最小単位に変換されていない、またはエコシステム間でトークンの小数桁数を誤って想定しています。

解決策: /tokens または /token からトークンメタデータを取得し、見積もりをリクエストする前に金額を変換してください。

エラー:異なる受取人がサポートされていない

原因: 一部のツールでは、送信者とは異なる受取人への送金をサポートしていません。

解決策: 別のルート/ツールをリクエストするか、ユーザーが問題ない場合は同じ受取人を使用してください。

参考資料

コメント