Skip to Content
ReferenceCLIコマンドswap

swap コマンド

swapコマンドは、Uniswap V3 を経由してトークンをスワップするコマンドです。トークンシンボル(例: USDC, WETH)またはコントラクトアドレス(0x...)を指定して、任意の ERC-20 ペアを交換できます。

重要: dry-run デフォルト

セキュリティ上の理由から、swapコマンドはデフォルトで dry-run(シミュレーション)モードです。 実際にトランザクションを送信するには、--broadcastフラグを明示的に指定する必要があります。

構文

kova swap --name <wallet> --from <token> --to <token> --amount <amount> [options]

オプション

オプション必須/任意説明デフォルト
--name <name>必須ウォレット名または ID-
--from <token>必須売却トークン。シンボル(例: USDC)または 0x... アドレス-
--to <token>必須購入トークン。シンボル(例: WETH)または 0x... アドレス-
--amount <amount>必須売却量(整数または小数、例: 100, 0.5-
--slippage <pct>任意スリッページ許容値(%)。範囲: 0.1〜50.00.5
--chain <chain>任意チェーン名。base / ethereum / polygon / arbitrum / optimismbase
--broadcast任意実際にトランザクションを送信false(dry-run)
--owner任意passphrase 署名を強制する(OWS API key を使わずローカル passphrase で署名)false
--unlimited-approve任意Permit2 に最大量 + 1 年の expiration で approve(初回 approve トランザクションを省略できるが blast radius が拡大)false
--recipient <address>任意スワップ出力の受け取り先アドレス。--owner 指定時のみ有効sender wallet

--from / --to について

--from--to にはいずれも次の 2 通りの指定方法があります:

  • トークンシンボル — 例: USDC, WETH, ETH。kova 組み込みの静的レジストリおよびユーザー登録トークン(kova token add で追加)から解決されます。
  • コントラクトアドレス0x... 形式の ERC-20 コントラクトアドレス。オンチェーンの decimals() / symbol() を取得します。レジストリ未登録の場合は未検証(unverified-address)扱いとなり、警告が表示されます。

--from--to に同一のトークン(表記が違っても解決後のアドレスが同じ場合も含む)を指定するとエラーになります。

--recipient--owner の関係

--recipient--owner フラグとセットでのみ使用できます。agent モード(--owner なし)では、スワップ出力は必ず送信元ウォレットに送られます。compromised agent がスワップ出力を任意アドレスに横流しするリスクを防ぐための制約です。

dry-run vs --broadcast

モード動作
dry-run(デフォルト)スワップ見積もりのみ実行。トランザクションは送信されません
--broadcastUniswap V3 経由で実際にスワップを実行します

使用例

シンボル指定 — USDC → WETH(dry-run)

kova swap --name main --from USDC --to WETH --amount 100 --chain base

出力例:

{ "ok": true, "data": { "dryRun": true, "swap": { "from": { "token": "USDC", "amount": "100", "info": { "kind": "symbol", "symbol": "USDC", "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "decimals": 6, "source": "static" } }, "to": { "token": "WETH", "estimatedAmount": "0.03842", "minimumAmount": "0.03823", "info": { "kind": "symbol", "symbol": "WETH", "address": "0x4200000000000000000000000000000000000006", "decimals": 18, "source": "static" } }, "recipient": "0xB8EC761bf83B4374877e903d217222F2cd5512De", "route": ["USDC", "WETH"], "dex": "Uniswap V3 (via Universal Router)", "gasEstimate": "150000", "slippage": "0.5%" }, "permit2": { "address": "0x000000000022D473030F116dDEE9F6B43aC78BA3", "needsApprove": false, "needsPermitSign": false } } }

シンボル指定 — USDC → WETH(broadcast)

kova swap --name main --from USDC --to WETH --amount 100 --chain base --broadcast

出力例:

{ "ok": true, "data": { "dryRun": false, "txHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "explorerUrl": "https://basescan.org/tx/0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "swap": { "from": { "token": "USDC", "amount": "100", "info": { "kind": "symbol", "symbol": "USDC", "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "decimals": 6, "source": "static" } }, "to": { "token": "WETH", "estimatedAmount": "0.03842", "minimumAmount": "0.03823", "info": { "kind": "symbol", "symbol": "WETH", "address": "0x4200000000000000000000000000000000000006", "decimals": 18, "source": "static" } }, "recipient": "0xB8EC761bf83B4374877e903d217222F2cd5512De", "route": ["USDC", "WETH"], "dex": "Uniswap V3 (via Universal Router)" }, "gasSponsored": false } }

コントラクトアドレス指定

レジストリ未登録のトークンを対象にする場合はアドレスを直接指定します。

kova swap \ --name main \ --from 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \ --to WETH \ --amount 50 \ --chain base \ --broadcast

注意: レジストリ未登録の 0x... アドレスを使用すると、未検証トークンの警告が出力されます。コントラクトアドレスが正しいことを必ず確認してください。

スリッページを調整する

ボラティリティが高い場面では --slippage を引き上げます。

kova swap --name main --from USDC --to WETH --amount 100 --chain base --slippage 1.0 --broadcast

出力を別アドレスへ(owner モード)

kova swap \ --name main \ --from USDC \ --to WETH \ --amount 100 \ --chain base \ --owner \ --recipient 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb \ --broadcast

スワップフロー(推奨)

実際のスワップは以下の 2 ステップで行うことを推奨します。

ステップ 1: dry-run で内容を確認

kova swap --name main --from USDC --to WETH --amount 100 --chain base

確認事項:

  • from のシンボルと量が正しいか
  • to の推定受取量が妥当か
  • チェーンが正しいか
  • スリッページ設定が適切か

ステップ 2: --broadcast で実行

kova swap --name main --from USDC --to WETH --amount 100 --chain base --broadcast

よくあるエラーと対処法

WALLET_NOT_FOUND

{ "ok": false, "error": { "code": "WALLET_NOT_FOUND", "message": "Wallet 'main' not found." } }

対処法: kova wallet info でウォレット名を確認する。

INVALID_PARAMS(同一トークン)

{ "ok": false, "error": { "code": "INVALID_PARAMS", "message": "from と to は異なるトークンを指定してください..." } }

対処法: --from--to に異なるトークンを指定する。シンボルとアドレスが異なっていても、解決後のアドレスが同じ場合も拒否されます。

INVALID_PARAMS(スリッページ範囲外)

{ "ok": false, "error": { "code": "INVALID_PARAMS", "message": "slippage は 0.1〜50.0 (%) の範囲で指定してください..." } }

対処法: --slippage に 0.1〜50.0 の値を指定する。

INVALID_PARAMS(--recipient--owner 必須)

{ "ok": false, "error": { "code": "INVALID_PARAMS", "message": "--recipient は --owner 指定時のみ利用できます。..." } }

対処法: --recipient を使う場合は必ず --owner も付ける。

INSUFFICIENT_BALANCE

{ "ok": false, "error": { "code": "INSUFFICIENT_BALANCE", "message": "Insufficient balance. Required: 100 USDC, Available: 50 USDC" } }

対処法: kova balance で残高を確認し、必要量を入金する。

POLICY_DENIED

ポリシー(spending_limit 等)でスワップが拒否された場合に発生します。kova policy list で内容を確認し、必要なら kova policy update で調整してください。

CHAIN_NOT_SUPPORTED

{ "ok": false, "error": { "code": "CHAIN_NOT_SUPPORTED", "message": "Chain 'unknown-chain' is not supported." } }

対処法: --chain に指定できる値は base(デフォルト)/ ethereum / polygon / arbitrum / optimism です。


ポリシー制御

swap は policy-gated 操作です。spending_limit ポリシーが設定されている場合、スワップに使う --from トークンの量がポリシーで評価されます。agent モードでは OWS server 側のポリシーで gate されます。詳細は policy コマンド を参照してください。


broadcast 後のトークン自動登録

--broadcast が成功すると、スワップで受け取ったトークン(--to)が kova balance のサマリーに表示されるよう自動的にユーザートークンレジストリへ登録されます。ただし、次の場合は登録をスキップします:

  • ネイティブトークン(ETH 等)— 常に balance に表示されるため不要
  • 組み込み済みの主要トークン(USDC / USDT / JPYC 等)
  • 既知トークンと同シンボル・別アドレスの場合(symbol-spoofing 防止)

スキップされた場合は kova token add で手動登録できます。


関連コマンド

  • balance — 残高確認
  • send — トークン送金
  • token — ユーザー定義トークンの管理
  • policy — ポリシーの設定
  • call — 任意のコントラクト呼び出し

関連項目

Last updated on