polygon-defi について
`agent` CLI でトークン交換やブリッジ、利回りプールの検索、入出金、任意のコントラクト呼び出しを行うためのスキルです。対応チェーンでのウォレットログイン、事前確認、トランザクション送信の手順を説明します。
主な機能
- 01同一チェーン内でのトークン交換
- 02対応チェーン間のブリッジ
- 03利回りプールの検索と預け入れ
- 04Aave と ERC-4626 ポジションからの引き出し
- 05任意のコントラクト呼び出し
活用シーン
- 01送信前にトークン交換を確認
- 02対応チェーン間でトークンを移動
- 03利回りプールを探して資産を預け入れ
- 04Aave または ERC-4626 ポジションを解消
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ 0xpolygon/ polygon-agent-cli --skill polygon-defiインストール後、Claude Code で/polygon-defiを入力して読み込まれたか確認します。
詳細
スワップ、ブリッジ、入金
セッションの前提条件
DeFi 操作を行う前に、ウォレットにログインしている必要があります。 埋め込みウォレットは任意のコントラクトを呼び出し、保有する任意の金額を使用できます。コントラクトのホワイトリストやトークンごとの使用上限はないため、入金、スワップ、出金に特別な設定は必要ありません。ユーザーがログインしていない場合は、今すぐログインしてください:
agent wallet login
これによりブラウザで agentconnect のログインページが開きます。Google またはメールを選択し、サインインすると埋め込みウォレットが作成またはロック解除されます。ブラウザがローカルでもリモートでも動作するため、ヘッドレスホストでも追加のフラグは必要ありません。ウォレットアドレスはすべてのチェーンで同じです。セッションは約 1 週間持続します。セッション期限切れエラーで呼び出しが失敗し始めた場合は、wallet login を再実行するだけです。
トークンをスワップする(同一チェーン)
# Dry-run — shows route and output amount
agent swap --from USDC --to USDT --amount 5
# Execute
agent swap --from USDC --to USDT --amount 5 --broadcast
# Custom slippage (default 0.5%)
agent swap --from USDC --to USDT --amount 5 --slippage 0.005 --broadcast
トークンをブリッジする(クロスチェーン)
# Bridge USDC from Polygon to Arbitrum
agent swap --from USDC --to USDC --amount 0.5 --to-chain arbitrum --broadcast
# Bridge to other supported chains
agent swap --from USDC --to USDC --amount 1 --to-chain optimism --broadcast
agent swap --from USDC --to USDC --amount 1 --to-chain base --broadcast
agent swap --from USDC --to USDC --amount 1 --to-chain mainnet --broadcast
有効な --to-chain の値:polygon、amoy、mainnet、arbitrum、optimism、base。
Earn プールを照会する
getEarnPools を使用して、入金先を決める前にプロトコル全体の最新の利回り機会を発見できます。
HTTP
curl --request POST \
--url https://trails-api.sequence.app/rpc/Trails/GetEarnPools \
--header 'Content-Type: application/json' \
--header "X-Access-Key: $TRAILS_API_KEY" \
--data '{"chainIds": [137]}'
リクエストのすべてのフィールドは任意です。フィルタリングが不要なものは省略してください。
| フィールド | 型 | 説明 |
|---|---|---|
chainIds | number[] | チェーンでフィルタリング(例:Polygon メインネットの場合は [137]) |
protocols | string[] | プロトコル名でフィルタリング(例:["Aave"]、["Morpho"]) |
minTvl | number | 最小 TVL(USD) |
maxApy | number | 最大 APY(外れ値やリスクのあるプールを除外するのに便利) |
API キー
Trails は公式にはすべてのリクエストに API キーを要求し、X-Access-Key ヘッダーとして渡します(https://dashboard.trails.build で取得できます。レート制限はキーごと:50 リクエスト/秒、バースト 100、20 QuoteIntent/分)。GetEarnPools は現在キーなしでも応答しますが、それに依存しないでください。
通常、何も設定する必要はありません。CLI はキーを自動的に TRAILS_API_KEY として解決し、そうでなければ agent setup によって保存された Sequence アクセスキー(builder.json 内)を使用します。これは Trails が受け入れます。専用の Trails キーを使用する場合にのみ TRAILS_API_KEY を設定してください。
フェッチ(エージェントコード)
const res = await fetch('https://trails-api.sequence.app/rpc/Trails/GetEarnPools', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Access-Key': process.env.TRAILS_API_KEY ?? ''
},
body: JSON.stringify({ chainIds: [137] }),
});
const { pools } = await res.json();
レスポンススキーマ
interface GetEarnPoolsResponse {
pools: EarnPool[];
timestamp: string; // ISO-8601 fetch time
cached: boolean;
}
interface EarnPool {
id: string; // "{protocol}-{chainId}-{address}"
name: string; // e.g. "USDC Market"
protocol: string; // "Aave" | "Morpho"
chainId: number;
apy: number; // annualised yield as a percentage (e.g. 2.8 = 2.8% APY — NOT a decimal fraction)
tvl: number; // USD
token: PoolTokenInfo;
depositAddress: string; // contract to approve/send to
isActive: boolean;
poolUrl?: string;
protocolUrl?: string;
wrappedTokenGatewayAddress?: string; // non-null for Aave native-token markets
}
interface PoolTokenInfo {
symbol: string;
name: string;
address: string;
decimals: number;
logoUrl?: string;
}
ヒント:
wrappedTokenGatewayAddressは、ラップされたネイティブトークン(WPOL、WETH)を受け入れる Aave マーケットに設定されます。POL/ETH を直接入金する場合は、depositAddressの代わりにこのアドレスを渡してください。
現在の Trails earn サーフェス(Yield API)
GetEarnPools は CLI の deposit コマンドが現在使用しているエンドポイントであり、引き続き利用可能ですが、Trails の現行世代の earn サーフェスは同じベース URL の Yield API です:YieldGetMarkets、YieldGetProviders、YieldCreateEnterAction、YieldCreateExitAction、YieldGetAggregateBalances(ドキュメント:https://docs.trails.build)。`GetEarnPools` が返す Aave および Morpho プール以外のマーケットが必要な場合は、YieldGetMarkets を照会してください:
curl --request POST \
--url https://trails-api.sequence.app/rpc/Trails/YieldGetMarkets \
--header 'Content-Type: application/json' \
--header "X-Access-Key: $TRAILS_API_KEY" \
--data '{}'
レスポンスは { items: [...] } で、マーケットごとの inputTokens、プロバイダー、ネットワークのフィールドが含まれます。Trails の intent プロトコルは現在 v1.5(HydrateProxy エグゼキューター)であることに注意してください。API は依然として agent swap が使用する v1 フローを提供しているため、既存のコマンドは影響を受けません。
入金して利回りを得る
プールの検出には TrailsApi.getEarnPools を使用します。要求されたチェーン上のアセットに対して最も流動性の高いプール(最高 TVL)を選択します。ハードコードされたアドレスはなく、プールは実行時に解決されます。対応チェーン:Polygon、Base、Arbitrum、Optimism、Ethereum メインネット(Trails がインデックスする任意のチェーン)。
ガスの要件: リレイヤーはウォレットが支払える方の USDC または POL でガスを支払います。したがって、唯一の要件は、ウォレットが入金する資金と、ガス用の少しの POL または USDC を保有していることです。CLI は常にガス用に 0.1 USDC を確保します。残高全額を入金しないでください。要求された金額が 0.1 USDC を下回る場合、CLI は入金額を自動的に減らし、その旨を表示します。
埋め込みウォレットは任意のコントラクトを呼び出せるため、トークンやプールコントラクトを事前に承認しなくても入金は機能します。ドライランしてからブロードキャストするだけです:
# Dry-run — shows pool name, APY, TVL, and deposit address before committing
agent deposit --asset USDC --amount 0.3
# Execute — deposits into the highest-TVL active pool
agent deposit --asset USDC --amount 0.3 --broadcast
# Filter by protocol
agent deposit --asset USDC --amount 0.3 --protocol aave --broadcast
agent deposit --asset USDC --amount 0.3 --protocol morpho --broadcast
対応プロトコル
| プロトコル | エンコーディング | 説明 |
|---|---|---|
| Aave v3 | supply(asset, amount, onBehalfOf, referralCode) | レンディングプールへの入金 |
| Morpho | deposit(assets, receiver) — ERC-4626 | ボールトへの入金 |
ボールト/プールのアドレスは Trails から動的に解決されます — ハードコードされていません。ドライランの出力には depositAddress が含まれるため、ブロードキャストする前に正確なコントラクトを確認できます。
引き出し(Aave aToken または ERC-4626 ボールト)
保有しているポジショントークンを渡します: Aave aToken アドレス、または Morpho / ERC-4626 ボールト(シェア)アドレスです。CLI は aToken の POOL() を通じて Aave のプールを解決するか、ボールトの redeem を使用します。デフォルトではドライランです。
# Full exit from an Aave position (aToken from balances output)
agent withdraw --position 0x68215b6533c47ff9f7125ac95adf00fe4a62f79e --amount max --chain mainnet
# Partial Aave withdraw (underlying units, e.g. USDC)
agent withdraw --position <aToken> --amount 0.5 --chain mainnet --broadcast
# ERC-4626: max redeems all shares; partial amount is underlying units (convertToShares)
agent withdraw --position <vault> --amount max --chain polygon --broadcast
埋め込みウォレットは任意のチェーンでプールまたはボールトを呼び出せるため、コントラクトの承認は不要です — そのチェーンでガス用に少しの POL または USDC をウォレットが保持していることを確認するだけです。Polygon 以外のチェーンで引き出すには、withdraw コマンド自体に --chain mainnet(または他の対応チェーン)を渡します。
完全な DeFi フローの例
# 1. Check balances
agent balances
# 2. Swap POL → USDC
agent swap --from POL --to USDC --amount 1 --broadcast
# 3. Deposit USDC into highest-TVL yield pool
agent deposit --asset USDC --amount 1 --broadcast
# → protocol: morpho (or aave, whichever has highest TVL at the time)
# → poolApy shown in dry-run output
# 4. Bridge remaining USDC to Arbitrum
agent swap --from USDC --to USDC --amount 0.5 --to-chain arbitrum --broadcast
任意のコントラクト呼び出し
専用コマンドでカバーされていない操作については、call を使用して任意のコントラクトに生のトランザクションを送信します(埋め込みウォレットは何でも呼び出せます):
# Dry-run an arbitrary call
agent call --to 0x... --data 0x...
# With an attached native value, then broadcast
agent call --to 0x... --data 0x... --value 0.1 --broadcast
# For a native-only wallet, force the relayer to take its fee in POL
agent call --to 0x... --data 0x... --prefer-native-fee --broadcast
トラブルシューティング
| エラー | 原因 | 対処 |
|---|---|---|
Not logged in / ウォレットが見つからない | アクティブなウォレットセッションがない | agent wallet login を実行する |
| セッションの有効期限切れ | セッションは約1週間持続します | agent wallet login を実行する |
Insufficient <token>: wallet has X | 要求された入金金額に対して残高が少なすぎる | agent balances を実行し、--amount を調整する |
Unable to pay gas / Wallet has no POL for gas | ウォレットが USDC または POL でのリレイヤー手数料をカバーできない | ウォレットに少しの POL または USDC を入金する。ネイティブトークンのみのウォレットの場合は、call に --prefer-native-fee を渡す |
Protocol X not yet supported | Trails が aave/morpho 以外のプロトコルを返した | agent swap を使用して利回り付きトークンを手動で取得する |
swap: ルートが見つからない | ペアの流動性が不足している | 別の金額またはトークンペアを試す |