dca-bot について
DCA Botは、対象チェーンで一定額のトークンを定期購入する戦略スキルです。価格条件を任意で設定でき、実行状態を記録しながらスワップ処理をインテグレーションに委任します。
主な機能
- 01一定額のトークン購入を定期実行
- 02任意の価格条件に対応
- 03同一期間内の重複購入を防止
- 04支出上限とトークン許可リストを適用
- 05既存のインテグレーションにスワップを委任
活用シーン
- 01設定した周期でトークンを購入
- 02見積価格がしきい値を満たす場合のみ購入
- 03購入失敗後の実行で再試行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ uniswap/ uniswap-ai --skill dca-botインストール後、Claude Code で/dca-botを入力して読み込まれたか確認します。
詳細
DCA Bot
オペレーターが指定したチェーン上で、スケジュールに従って一定額をトークンにドルコスト平均法で投資します。必要に応じて、「ETH がしきい値を下回った場合のみ購入する」といった価格条件を設定できます。
ランタイム互換性: このスキルでは、対話形式のプロンプト(モード選択、トランザクションごとの確認)に
AskUserQuestionを使用します。実行環境でAskUserQuestionを利用できない場合は、自然言語の会話を通じて同じパラメーターと確認を収集してください。
概要
これは薄い戦略レイヤーです。実行頻度、冪等性、任意の条件チェック、およびガードレールを担います。実行自体は担いません。すべての見積もり、承認、スワップ、署名は swap-integration と viem-integration に委任されます。このスキルが見積もり、承認、スワップ、署名のロジックを独自に構築することはありません。
このスキルはスケジューラーを実行しません。ホストエージェントのスケジューラー(cron エントリーまたはランタイムのウェイク機構)が、一定の頻度でこのスキルを呼び出します。各呼び出しは単独で完結する実行であり、状態を読み取り、実行するかどうかを判断し、必要に応じて実行して、状態を書き込みます。
前提条件
- swap-integration(uniswap-trading):唯一の実行経路です。すべてのスワップは Trading API のフロー(
check_approval、次にquote、次にswapを実行し、その後署名してブロードキャスト)を通じて行います。再実装しないでください。 - 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、およびクオーター/ステートリーダーのアドレス。
- トークンリストまたは許可リストの情報源を含む、取引可能なトークンの解決ルール。
- 資金調達の制約と市場データの可用性。
- 送金制限に関する注意事項と市場時間のガイダンス。
ワークフロー
ステップ 1:状態を読み取る
ボットの JSON 状態ファイルを読み取ります(状態を参照)。ファイルが存在しない場合は、初回実行として扱います。
ステップ 2:実行頻度と冪等性を確認する
設定された実行頻度に基づいて現在の期間を計算します(たとえば、毎日の DCA では UTC の日付)。状態ファイルに現在の期間の購入成功がすでに記録されている場合は、スキップして終了します。これにより、同じ期間内に繰り返しウェイクされても安全であり、二重購入を防げます。
ステップ 3:トークンと金額を解決する
選択した対象チェーンのテンプレートと、そのトークン情報源を読み取り、対象トークンのアドレスを解決します。設定から固定購入額を解決します。使用前に両方を検証します(入力の検証を参照)。ローカルのトークンレジストリは管理せず、テンプレートが提供するトークンリストまたはリゾルバーを再利用してください。
ステップ 4:ガードレールを収集する
設定されたガードレールを読み取ります。1 回あたりの支出上限または期間ごとの支出上限が設定されていない場合は、AskUserQuestion(利用できない場合は自然言語)を使ってオペレーターに上限を確認し、比較に使用する資金調達トークンまたは単位を含めてください。いずれかの上限が未設定のままの場合、autonomous モードには移行しないでください。confirm モードでは、トランザクションごとの確認ゲートを通じてのみ進め、autonomous モードは引き続き利用できないことを報告してください。
Step 5: 条件チェック(任意)
条件が設定されている場合(たとえば「最後の日足ローソク足が赤い場合のみ」)、購入前に評価します。
- 条件に必要な価格を Uniswap から取得します。Trading API
/quote(swap-integration経由)を使用してください。実行データに取引所固有の API や Uniswap 以外の価格フィードを使用しないでください。../../references/execution-model.md(データと価格設定)を参照してください。条件に必要な市場データを Uniswap が公開していない場合は、外部依存を追加せず、そのデータソースを利用できないものとして扱ってください。 - 述語を評価します(たとえば
price < 3000 USDC)。 - 条件が満たされていない場合は、評価結果を記録して購入をスキップし、終了します。条件未達によるスキップは通常の結果であり、エラーではありません。
現時点で何が実行可能かを正直に判断してください。価格しきい値の条件(たとえば「ETH が X 未満の場合のみ購入」)は、現在価格を Trading API /quote から取得するため、そのまま利用できます。
Step 6: ガードレール
支出を行う前に、アクティブな実行モードのガードレール(実行モードを参照)を適用してください。1 回の実行および各期間の支出上限、トークン許可リスト、キルスイッチが対象です。ガードレールによって購入がブロックされた場合は、停止して理由を報告してください。
また、ウォレットが購入に必要な資金を賄えることも確認してください。購入額に対して十分な資金トークン(tokenIn)と、トランザクションを送信するための十分なネイティブガスが必要です。どちらかが不足している場合は、購入をスキップして報告してください。選択したテンプレートの資金調達制約に従ってください。このスキルは、スキル外で明示的に提供されていない限り、自動での資金調達、ブリッジ、補充を行いません。
Step 7: スワップを委任する
実行を swap-integration の Trading API フローに委ねます。選択したテンプレートの対象チェーン ID と、そのチェーンのルーター/トークンアドレスを渡してください。このスキルは、独自の見積もり、承認、スワップ、署名のロジックを構築してはなりません。パラメーター(swapper、tokenIn、tokenOut、amount、chain id)を渡し、結果を読み取るだけです。
選択したテンプレートに RPC または生トランザクションに関する制約がある場合は、テンプレートの注意事項として扱ってください。スキルはチェーンにかかわらず、常に Trading API/ルーター経由で実行されるため、ルーター互換の制約によって実行を妨げないでください。
Step 8: 状態を更新する
ブロードキャストに成功したら、次回の起動を冪等にするため、現在の期間、タイムスタンプ、生成されたトランザクションハッシュを状態ファイルに書き込みます。失敗した場合はエラーを記録し、後の起動時に再試行できるよう、期間は未処理のままにします。
実行モード
エージェントを実行するオペレーターが実行モードを選択します。完全なモデルについては ../../references/execution-model.md を参照してください。
| モード | 動作 |
|---|---|
confirm(デフォルト) | ブロードキャスト前に AskUserQuestion を介してユーザーにトランザクションの承認を求め、トークン、数量、チェーン、推定ガスを表示します。swap-integration の支出ゲートを再利用します。 |
autonomous | トランザクションごとの確認を求めずに、ガードレールの範囲内でのみ実行します。 |
デフォルトは confirm にしてください。autonomous モードには、支出上限(1 回の実行および各期間)、トークン許可リスト、事前のドライラン、キルスイッチのすべてが必要です。4 つすべてが揃っていない場合は、confirm に戻してください。
状態
../../references/strategy-state.md の共通パターンに従ってください。dca-bot は小さな JSON 状態ファイルを保持し、実行時に前回までの実行内容を把握できるようにします。推奨される形式は次のとおりです。
lastBuyPeriodは冪等性キーです。各期間につき、実行による購入は最大 1 回です。処理を行う前に現在の期間とlastBuyPeriodを比較し、ブロードキャストが確認された後にのみ更新してください。lastActionは最後に実行したアクションです。スワップ、またはガードレールや条件によるスキップを記録します。アクションの種類、トランザクションハッシュ、金額を記録してください。
制限事項と免責事項
RWA の制限はテンプレート固有であり、トークンレベル(譲渡制限付き ERC-20)で適用される場合があります。そのため、ルーターがスワップを受け付けても、送金時に失敗する可能性があります。../../references/execution-model.md を参照してください。このスキルは、次のことを行う必要があります。
- 送金制限による失敗を適切に処理して記録し、やみくもに再試行せず、オペレーターに報告してください。
- 選択したテンプレートの株式市場の取引時間に関するガイダンスを遵守してください。一部の RWA では、取引時間外に流動性が制限される場合があるため、取引時間外の購入はスキップまたは延期されることがあります。
- リポジトリのルートにある
DISCLAIMER.mdの財務上の免責事項をオペレーターに提示してください。
入力の検証
ユーザーが提供した値または設定値をコマンド、API 呼び出し、生成コードに埋め込む前に、必ず次の検証を行ってください。
- トークン/ウォレットのアドレス:
^0x[a-fA-F0-9]{40}$に一致する必要があります。一致しない場合は拒否してください。 - 金額:
^[0-9]+\.?[0-9]*$に一致する、0 以上の数値である必要があります。 - チェーン ID:ハードコードせず、選択したテンプレートから読み取った、オペレーターが設定した対象チェーン ID である必要があります。
- API キー:環境変数から取得する必要があります。ハードコードしてはいけません。
- シェルのメタ文字
;、|、&、$、`、(、)、>、<、\、'、"、または改行を含む入力は、すべて拒否してください。