call コマンド
callコマンドは、任意のスマートコントラクト関数を呼び出す汎用コマンドです。ERC-20 transfer、NFT mint、DeFi プロトコル操作など、send で対応できないあらゆるコントラクト操作に使用できます。
重要: dry-run デフォルト
--broadcast を指定しない場合、call は シミュレーション(eth_call + estimateGas)のみ実行し、トランザクションを送信しません。実際に送信するには --broadcast を明示してください。
構文
kova call --name <wallet> --to <contract> --chain <chain> [--function <sig> | --data <hex>] [options]オプション
| オプション | 必須/任意 | 説明 | デフォルト |
|---|---|---|---|
--name <name> | 必須 | ウォレット名または ID | - |
--to <address> | 必須 | 呼び出し先コントラクトアドレス | - |
--chain <chain> | 必須 | チェーン名(例: base, polygon-amoy) | - |
--function <sig> | 条件付き | 関数シグネチャ(例: "transfer(address,uint256)")。--data と排他 | - |
--args <json> | 任意 | 関数引数の JSON 配列(例: '["0x...", "100"]') | [] |
--data <hex> | 条件付き | 生 calldata(0x プレフィックス)。--function と排他 | - |
--value <eth> | 任意 | 送信するネイティブトークン量(ETH 単位、parseEther 通過) | 0 |
--broadcast | 任意 | 実際にトランザクションを送信 | false |
--gasless | 任意 | ERC-7702 経由のガスレス実行(delegation 必須) | false |
--owner | 任意 | ローカル passphrase で署名 | false |
注意(単位の違い):
call --valueは ETH 単位(小数 OK)です。sign transaction --valueの wei 単位 とは異なります。
制約事項
--function、--data、--valueのいずれか 1 つ以上が必須(builder check)--functionと--dataは同時指定不可
使用例
1. ERC-20 transfer(dry-run)
kova call \
--name my-wallet \
--to 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
--function "transfer(address,uint256)" \
--args '["0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb", "1000000"]' \
--chain base出力例:
{
"ok": true,
"data": {
"dryRun": true,
"from": "0xB8EC761bf83B4374877e903d217222F2cd5512De",
"to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"calldata": "0xa9059cbb000000000000000000000000742d35cc6634c0532925a3b844bc9e7595f0beb00000000000000000000000000000000000000000000000000000000000f4240",
"value": "0",
"chain": "base"
}
}2. ERC-20 transfer(broadcast)
kova call \
--name my-wallet \
--to 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
--function "transfer(address,uint256)" \
--args '["0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb", "1000000"]' \
--chain base \
--broadcast出力例:
{
"ok": true,
"data": {
"dryRun": false,
"txHash": "0x1234567890abcdef...",
"from": "0xB8EC761bf83B4374877e903d217222F2cd5512De",
"to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"gasSponsored": false,
"explorerUrl": "https://basescan.org/tx/0x1234567890abcdef..."
}
}3. NFT mint(value 付き)
kova call \
--name my-wallet \
--to 0x1234567890abcdef1234567890abcdef12345678 \
--function "mint(uint256)" \
--args '["1"]' \
--value "0.08" \
--chain ethereum \
--broadcast--value "0.08" で 0.08 ETH をコントラクトに同時送信します(ETH 単位)。
4. 生 calldata で呼び出し
kova call \
--name my-wallet \
--to 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
--data "0xa9059cbb000000000000000000000000742d35cc6634c0532925a3b844bc9e7595f0beb00000000000000000000000000000000000000000000000000000000000f4240" \
--chain base \
--broadcast--function の代わりに --data で事前エンコード済み calldata を渡します。
5. ネイティブトークンのみ送信(calldata なし)
kova call \
--name my-wallet \
--to 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb \
--value "0.1" \
--chain base \
--broadcast--function も --data も指定しない場合、calldata は 0x で純粋な value transfer になります。
6. ERC-7702 gasless 呼び出し
# 事前に delegation 設定が必要
kova delegate --name my-wallet --chain polygon-amoy --broadcast
# gasless 呼び出し
kova call \
--name my-wallet \
--to 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
--function "transfer(address,uint256)" \
--args '["0x...", "1000000"]' \
--chain polygon-amoy \
--gasless \
--broadcast--gasless を使うと OWS server がガス代を代理で支払います。allowlist にあるコントラクトのみ実行可能で、対象外の場合は CONTRACT_NOT_ALLOWED で失敗します。
関数シグネチャの書き方
transfer(address,uint256)
function transfer(address,uint256) # function プレフィックス付きでも OK主要な型:
| Solidity 型 | 例 |
|---|---|
address | transfer(address,uint256) |
uint256 | approve(address,uint256) |
bool | setApprovalForAll(address,bool) |
string | setName(string) |
bytes32 | submitHash(bytes32) |
address[] | batchTransfer(address[],uint256[]) |
引数のアドレスは getAddress で自動的にチェックサム形式に正規化されます。
ポリシー評価(spending_limit)
call は実行前に署名前 enforce を呼び出します。spending_limit ポリシーが設定されている場合は fail-closed で動作します。--function / --data で渡された calldata が ERC-20 transfer(address,uint256) または transferFrom(address,address,uint256) の場合は decode して amount を policy に渡します。それ以外の calldata は decode できないため評価対象外(ポリシー設定があれば拒否される)です。
--broadcast 成功時の累積記録:
--value > 0のネイティブトークン送金分は記録されます。- ERC-20
transfer/transferFromの amount も calldata から decode して記録されます。 - それ以外の任意 calldata は decode できないため累積記録の対象外です。
よくあるエラーと対処法
CHAIN_NOT_SUPPORTED
{
"ok": false,
"error": {
"code": "CHAIN_NOT_SUPPORTED",
"message": "Chain unknown is not supported"
}
}対処法: サポートチェーン一覧 で正しいチェーン名を確認。
WALLET_NOT_FOUND
{
"ok": false,
"error": {
"code": "WALLET_NOT_FOUND",
"message": "Wallet my-wallet not found"
}
}対処法: kova wallet info でウォレット名を確認。
CALLDATA_INVALID
エラーケース 1: --args の JSON が不正
{
"ok": false,
"error": {
"code": "CALLDATA_INVALID",
"message": "Failed to parse --args as JSON: ..."
}
}対処法:
# WRONG(クォート不足で shell が解釈してしまう)
--args ["0xTO", "100"]
# CORRECT
--args '["0xTO", "100"]'エラーケース 2: 関数シグネチャと引数の不一致
{
"ok": false,
"error": {
"code": "CALLDATA_INVALID",
"message": "Failed to encode function data: ..."
}
}対処法:
- 関数シグネチャの型と引数数を確認
- 配列型は JSON 配列で
[[...], [...]]のように渡す
CONTRACT_NOT_ALLOWED
{
"ok": false,
"error": {
"code": "CONTRACT_NOT_ALLOWED",
"message": "Contract 0x... is not allowed for gasless calls on base.\n..."
}
}対処法: --gasless allowlist にないコントラクトを指定したケース。--gasless を外して通常実行するか、allowlist 対象のコントラクトを使用してください。pure value transfer(calldata なし)は allowlist 対象外でも実行可能です。
POLICY_DENIED
spending_limit 等のポリシーで拒否された場合に発生します。kova policy list で内容を確認し、必要なら kova policy update で調整してください。
Either —function, —data, or —value must be specified
# WRONG(オプションが空)
kova call --name my-wallet --to 0x... --chain base
# CORRECT(最低 1 つ指定)
kova call --name my-wallet --to 0x... --chain base --value "0.01"注意点
1. value の単位
--value は ETH 単位(parseEther 通過)です。sign transaction --value の wei 単位と異なるので混同しないでください。
# 1 ETH 送金
kova call --name my-wallet --chain base --to 0x... --value 1.0 --broadcast
# 同じことを sign transaction で(wei 単位)
kova sign transaction --name my-wallet --chain base --to 0x... --value 1000000000000000000 --broadcast2. dry-run で必ず確認
approve や setApprovalForAll は資産盗難リスクがあります。dry-run で calldata / to を必ず確認してから broadcast してください。
3. アドレスのチェックサム
--args の引数アドレスは小文字でも大文字でも、Kova が getAddress で自動的にチェックサム形式に変換します。
4. spending_limit の累積記録範囲
--broadcast 成功時、次の amount が累積上限に記録されます:
--value > 0のネイティブトークン送金量- ERC-20
transfer(address,uint256)/transferFrom(address,address,uint256)の amount(calldata から decode)
decode 対象外の calldata(その他の関数呼び出し、proxy 経由など)は累積記録に載りません。事前 enforce は fail-closed なので、policy が設定されているのに amount を評価できない calldata は拒否されます。
5. Owner-only ではなく policy-gated
call は policy-gated 操作です。agent モードでは OWS server policy で gate され、terminal モードでは passphrase で local 署名します。
関連コマンド
- send — トークン送金特化版(
callの薄いラッパ) - delegate —
--gaslessの前提となる ERC-7702 delegation 管理 - sign — トランザクション署名のみ(送信はしない)
- policy —
callを gate する policy の管理