index-bot について
index-botは、資産バスケットを設定し、ウェイトのずれに応じてリバランスする戦略スキルです。選択したチェーンテンプレートからトークンアドレスを解決し、購入や調整スワップは既存のインテグレーションに委任します。
主な機能
- 01指定した資産とウェイトでバスケットを設定
- 02各バスケット項目の購入額を算出
- 03支出上限とトークン許可リストを確認
- 04購入計画をドライランで表示
- 05目標ウェイトに合わせてリバランス
活用シーン
- 01一度の指示で加重バスケットを購入
- 02設定した周期で保有資産を調整
- 03資金やガスが不足する項目をスキップ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ uniswap/ uniswap-ai --skill index-botインストール後、Claude Code で/index-botを入力して読み込まれたか確認します。
詳細
Index Bot
1 つの指示から資産の加重バスケットを構築し、バスケット全体を一度に購入して、ウェイトに乖離が生じたら定期的にリバランスします。このスキルは薄い戦略レイヤーです。購入する資産と数量を決定し、見積もり、承認、スワップ、署名の各ステップはすべて既存のスキルに委任します。
ランタイムの互換性: このスキルでは、対話形式のプロンプトに
AskUserQuestionを使用します。実行環境でAskUserQuestionを利用できない場合は、代わりに自然言語での会話を通じて同じパラメーターを収集してください。
概要
1 つのプロンプト(たとえば「上位 5 件の RWA を均等なウェイトで組み合わせたバスケットを作成し、毎週リバランス」)から、index-bot は次の処理を行います。
- バスケットの仕様(ウェイトを指定した資産、または上位 N 件のランキングのリクエスト)を解析します。
- 各資産をトークンアドレスに解決し、各構成銘柄の購入数量を計算します。
- ガードレール(支出上限、トークン許可リスト、ドライラン)を適用します。
- 対象チェーンでの各購入を、swap-integration の Trading API フローに委任します。
- 目標ウェイトと最後のリバランスを状態ファイルに記録します。
後の呼び出しでホストのスケジューラーが現在のポジションを読み取り、目標ウェイトとの乖離を計算して調整用のスワップを生成し、それらを委任します。
トリガーは 2 つあります。バスケットを作成するためのプロンプトと、各リバランス実行のためのホストスケジューラー(cron またはエージェントランタイムのウェイクアップ)です。
前提条件
このスキルはスワップの実行を再実装しません。次に依存します。
- swap-integration (uniswap-trading):唯一の実行経路です。すべての購入およびリバランスの構成銘柄は、その Trading API フロー(
check_approval、quote、swapの順に実行し、その後署名してブロードキャスト)を通じて処理します。これらを再実装しないでください。 - v4-sdk-integration (uniswap-trading):LP の実行に使用します。構成銘柄で流動性ポジションの作成または管理も行う場合に限ります。デフォルトのインデックスバスケットは現物のみのため、これは不要です。
- viem-integration (uniswap-viem):アカウント、署名、トランザクションのブロードキャスト、および乖離の計算に使うオンチェーン残高の読み取りに使用します。
実行前にこれらのプラグインのリファレンスを読み、正確な情報として扱ってください。
- 選択した対象チェーンのテンプレート:chainId、チェーン名、コントラクトアドレス、取引可能なトークンのソース、資金調達の制約、マーケットデータの利用可否、およびテンプレート固有の注意事項。Robinhood Chain のリファレンステンプレートについては、
../../references/robinhood-chain.mdを参照してください。 ../../references/execution-model.md:Trading API の要件、実行モード、制限事項、免責事項のルール。../../references/strategy-state.md:共有状態ファイルとスケジューラーパターン。
テンプレートの入力
選択した対象チェーンのテンプレートには、次の情報が必要です。
- チェーン ID、チェーン名、ネイティブのガストークン、RPC/読み取り経路。
- 委任された実行と評価に必要な、デプロイ済みの Uniswap ルーター、Permit2、クオーター/状態リーダーのアドレス。
- バスケットで LP ポジションも管理する場合は、任意で v4 PoolManager/PositionManager のアドレス。
- トークンリスト、ランキングのソース、または許可リストのソースを含む、取引可能なトークンの解決ルール。
- 資金調達の制約、マーケットデータの利用可否、送金制限に関する注意事項、取引時間に関するガイダンス。
ワークフロー
ステップ 1:バスケット仕様を解析する
プロンプトからバスケットの定義を抽出します。
| パラメーター | 必須 | 例 |
|---|---|---|
| 資産 | はい | 明示的なリスト、または「トップ 5 の RWA」 |
| ウェイト | はい | equal、または合計が 1 になるカスタムウェイト |
| 合計サイズ | はい | 1000 USDG、0.5 ETH |
| 資金調達トークン | はい | 各銘柄の購入に使用するトークン |
| リバランス頻度 | はい | weekly、monthly、none |
| ドリフトしきい値 | いいえ | 銘柄のドリフトが X% を超えた場合のみリバランス |
| 支出上限 | はい | 1 回あたりおよび期間あたりのトークン建て上限 |
プロンプトでトップ N のランキング(「トップ 5 の RWA」など)を求められた場合、デフォルトのランキングソースはないため、ランキングを作り出したり推測したりしないでください。選択したテンプレートにインデクサーまたはランキングソースがあり、オペレーターがそれを使用するよう指示した場合は、そのソースを使用してください。それ以外の場合は、AskUserQuestion を使ってユーザーに明示的な資産リストを尋ね、そのリストに基づいて進めてください。1 回あたりまたは期間あたりの支出上限を含め、ほかの必須パラメーターが不足している場合は、構造化された選択肢を使って AskUserQuestion で情報を収集してください。
ステップ 2:トークンを特定し、銘柄ごとの数量を算出する
各資産について、次の手順を実行します。
- 選択した対象チェーンのテンプレートとそのトークンソースを使って、シンボルからトークンアドレスを特定します。ローカルのレジストリは管理しないでください。要求された資産をテンプレートのトークンソースから特定できない場合は、推測せずに停止して報告してください。
- 銘柄ごとの目標想定元本を算出します:
legNotional = totalSize * weight。トークン間の数量換算には Uniswap のクオートを使用してください(swap-integration経由の Trading API/quote、またはv4-sdk-integration経由のV4Quoterを使用します)。外部フィードや特定の取引所の API は使用しないでください。 - その銘柄に支出する資金調達トークンの数量を記録します。
数量の算出前に、特定した各アドレスがコントラクトであることを確認してください。対象チェーン上で資産を特定できない場合は、推測せずに停止して報告してください。
ステップ 3:ガードレール
実行前に、次の項目を確認します。
- 不足している 1 回あたりまたは期間あたりの支出上限があれば、オペレーターに
AskUserQuestionで尋ねます(利用できない場合は自然言語で尋ねます)。比較に使用する資金調達トークンまたは単位を明示してください。いずれかの上限が未設定のままの場合は、autonomousモードに入らないでください。 - バスケットの合計が設定済みの支出上限(1 回あたりおよび期間あたり)以内であることを確認します。
- すべての銘柄トークンがオペレーターの許可リストに含まれていることを確認します。
- まずドライランを実行し、予定している各銘柄(トークン、数量、ウェイト)を表示して確認できるようにします。
- いずれかの銘柄が RWA の場合は、株式市場の取引時間を確認します(取引時間外は流動性が薄い可能性があります)。
- 銘柄ごとに、ウォレットがその銘柄を購入するための十分な資金調達トークン(
tokenIn)と、トランザクションをブロードキャストするための十分なネイティブガスを保有していることを確認します。いずれかが不足している場合は、その銘柄をスキップして報告し、バスケットの残りの処理を続けてください。選択したテンプレートの資金調達制約に従ってください。このスキルは、スキルの外部でその動作が明示的に提供されていない限り、自動で資金調達、ブリッジ、または補充を行いません。
ステップ 4:バスケットを購入する(委任)
各銘柄について、swap-integration の Trading API フロー(check_approval、次に quote、次に swap)に処理を委任し、その後 viem を使って署名し、ブロードキャストします。選択したテンプレートの対象チェーン ID と、そのチェーンのルーター/トークンアドレスを渡してください。
クオート、承認、swap-body の構築、署名を再実装しないでください。Trading API のレート制限を守るため、銘柄ごとの処理の間に短い遅延を設けてください。銘柄の処理に失敗してもバスケットの残りを中止せず、失敗を報告して続行してください。
ステップ 5:目標ウェイトを記録する
購入が成功したら、目標ウェイトとリバランスのメタデータを状態ファイルに書き込みます(../../references/strategy-state.md を参照)。後続のドリフト計算では、この情報を比較対象として使用します。
リバランスのループ
スケジュールされた各実行時に、次の処理を行います。
- 状態を読み込み、目標ウェイトと
lastRebalanceAtを取得します。 - 冪等性を確認します。この頻度の期間内にすでにリバランス済みの場合は、処理をスキップします。
- viem を使用して各レッグのオンチェーン残高を読み取り、Uniswap の見積もり(
swap-integration経由の Trading API/quote、またはv4-sdk-integration経由のV4Quoter/StateView)を使用してファンディングトークン建ての価値を算出し、現在のウェイトを取得します。取引所固有の API や外部の価格フィードは使用しないでください。../../references/execution-model.md(データと価格設定)を参照してください。 - レッグごとにドリフトを計算します:
drift = currentWeight - targetWeight。ドリフトの絶対値|drift|をしきい値と比較し、オーバーウェイト(drift > 0)とアンダーウェイト(drift < 0)の両方のレッグを検出します。いずれのレッグも|drift|がドリフトのしきい値を超えていない場合は、何もせずlastRebalanceAtを更新します。 - 調整スワップを生成します。オーバーウェイトのレッグを売り、アンダーウェイトのレッグを買って、各レッグを目標値に戻します。
- ステップ 4 とまったく同じ方法で、各調整スワップを swap-integration の Trading API フローに委任します。
- 新しい
lastRebalanceAtと変更されたポジションを状態に反映します。
実行モード
このスキルでは、../../references/execution-model.md で定義されている共通の実行モードを使用します。
| モード | 動作 |
|---|---|
confirm(デフォルト) | ブロードキャスト前に、すべてのトランザクションについてユーザーに承認を求めます。 |
autonomous | トランザクションごとの確認を求めず、ガードレールの範囲内でのみ実行します。 |
デフォルトは confirm です。autonomous モードを使用するには、1 回の実行あたりと期間あたりの支出上限、トークンの許可リスト、事前のドライラン、キルスイッチがすべて必要です。バスケット購入は多数のトランザクションを伴うため、confirm モードでは、ランタイムが対応している場合は実行ごとに 1 回、対応していない場合はレッグごとに、バスケット全体の内容を要約して確認します。
状態
状態は ../../references/strategy-state.md に従います。index-bot は目標ウェイトと前回のリバランス時刻を保存し、次回の実行でドリフトを計算できるようにします。
各実行では最初に状態を読み込み、ブロードキャストが成功した場合にのみ更新します。これにより、期間内に再実行しても、二重購入や二重リバランスを防げます。
制限事項と免責事項
RWA の利用制限はテンプレート固有であり、トークンレベル(譲渡制限付き ERC-20)で適用される場合があります。そのため、ルーターが見積もりを受け付けても、レッグの譲渡時にリバートすることがあります。このスキルでは次のことを必ず行ってください。
- レッグごとの譲渡制限によるリバートを適切に処理し、どのレッグがリバートしたかを報告します。
- プールレベルまたはルーターレベルの許可リストが存在すると想定しません。
- 株式市場の取引時間を守ります。一部の RWA では、取引時間外に流動性の制限がある場合があります。
- 実行前に、リポジトリのルートにある
DISCLAIMER.mdの金融に関する免責事項を提示します。
制限事項と免責事項の規則全体については、../../references/execution-model.md を参照してください。
入力の検証
ユーザーが指定した値を生成コード、API 呼び出し、またはシェルコマンドに補間する前に、必ず次の検証を行います。
- トークンアドレス:
^0x[a-fA-F0-9]{40}$に一致する必要があります。一致しない場合は拒否します。 - 金額と想定元本:負でない数値であり、
^[0-9]+\.?[0-9]*$に一致する必要があります。 - ウェイト:それぞれ
[0, 1]の範囲内で、全体の合計が1(許容誤差内)になる必要があります。ウェイトの合計が 1 にならないバスケットは拒否します。 - チェーン ID:オペレーターが設定したターゲットチェーン ID である必要があります。ハードコードせず、選択したテンプレートから読み取ります。
- API キー:環境変数から取得する必要があります。ハードコードしてはいけません。
- シェルのメタ文字を含む入力は拒否します。対象の文字は
;、|、&、$、`、(、)、>、<、\、'、"、改行です。