sign コマンド
signコマンドは、メッセージ・トランザクション・EIP-712 typed data・任意 hash を署名するためのコマンドです。EIP-191 / 通常トランザクション / EIP-712 / raw hash の 4 種類に対応し、署名は常に 0x プレフィックス付きに正規化されます。
構文
kova sign <subcommand> --name <wallet> --chain <chain> [options]サブコマンド一覧
| サブコマンド | 説明 |
|---|---|
message | EIP-191 メッセージ署名 |
transaction | トランザクション署名(--broadcast で送信も可能) |
typed-data | EIP-712 typed data 署名 |
hash | 任意 32-byte hash の raw ECDSA 署名(EIP-191 prefix なし) |
共通オプション
| オプション | 必須/任意 | 説明 |
|---|---|---|
--name <name> | 必須 | ウォレット名または ID |
--chain <chain> | 必須 | チェーン名(例: base, polygon-amoy) |
--owner | 任意 | ローカル passphrase で署名(OWS API key を使わない、PassphraseSigner 経路) |
--owner を指定せず、かつ credential が config に保存されている場合は ApiKeySigner 経路で署名します。
sign message
EIP-191 形式のメッセージ署名を生成します。
構文
kova sign message --name <wallet> --chain <chain> --message <text> [--owner]オプション
| オプション | 必須/任意 | 説明 |
|---|---|---|
--message <text> | 必須 | 署名対象のメッセージ |
使用例
kova sign message \
--name my-wallet \
--chain base \
--message "Hello, kova"出力例:
{
"ok": true,
"data": {
"signature": "0x1234567890abcdef...1c",
"recoveryId": 28,
"wallet": "my-wallet",
"chain": "base"
}
}sign transaction
トランザクションの署名(--broadcast 未指定)または署名 + ブロードキャスト(--broadcast 指定)を行います。デフォルトは 署名のみ で、ブロードキャストは行われません。
構文
kova sign transaction \
--name <wallet> \
--chain <chain> \
--to <address> \
[--value <wei>] \
[--data <hex>] \
[--broadcast] \
[--owner]オプション
| オプション | 必須/任意 | 説明 | デフォルト |
|---|---|---|---|
--to <address> | 必須 | 送信先アドレス | - |
--value <wei> | 任意 | wei 単位の送金量(10進文字列) | 0 |
--data <hex> | 任意 | calldata(0x... 16進文字列) | なし |
--broadcast | 任意 | 署名後にネットワークへ送信 | false |
注意(単位の違い):
sign transactionの--valueは wei 単位 です。call/sendの--value/--amountは ETH 単位(parseEther経由)であり、単位が異なります。スクリプト化する際は混同しないでください。
使用例
署名のみ(dry-run 相当)
kova sign transaction \
--name my-wallet \
--chain base \
--to 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb \
--value 1000000000000000000出力例:
{
"ok": true,
"data": {
"broadcast": false,
"signature": "0xf86c8085...80",
"wallet": "my-wallet",
"chain": "base"
}
}署名 + ブロードキャスト
kova sign transaction \
--name my-wallet \
--chain base \
--to 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb \
--value 1000000000000000000 \
--broadcast出力例:
{
"ok": true,
"data": {
"broadcast": true,
"txHash": "0xabcdef...",
"explorerUrl": "https://basescan.org/tx/0xabcdef...",
"wallet": "my-wallet",
"chain": "base"
}
}calldata 付きで署名
kova sign transaction \
--name my-wallet \
--chain base \
--to 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
--data 0xa9059cbb000000000000000000000000742d35cc6634c0532925a3b844bc9e7595f0beb00000000000000000000000000000000000000000000000000000000000f4240 \
--broadcastcalldata と引数の組み立てには call コマンドの方が簡単です。
sign typed-data
EIP-712 形式の typed data を署名します。
構文
kova sign typed-data --name <wallet> --chain <chain> --data <json> [--owner]オプション
| オプション | 必須/任意 | 説明 |
|---|---|---|
--data <json> | 必須 | EIP-712 typed data の JSON 文字列 |
使用例
kova sign typed-data \
--name my-wallet \
--chain base \
--data '{
"domain": {
"name": "MyDApp",
"version": "1",
"chainId": 8453,
"verifyingContract": "0x..."
},
"types": {
"Message": [
{ "name": "from", "type": "address" },
{ "name": "to", "type": "address" },
{ "name": "amount", "type": "uint256" }
]
},
"primaryType": "Message",
"message": {
"from": "0x...",
"to": "0x...",
"amount": "1000000"
}
}'出力例:
{
"ok": true,
"data": {
"signature": "0xabcdef...1b",
"recoveryId": 27,
"wallet": "my-wallet",
"chain": "base"
}
}sign hash
任意の 32-byte hash に対して raw ECDSA 署名を生成します(EIP-191 prefix なし)。signMessage / signTypedData を経由しない署名で、ZeroDev / Kernel v0.3.3 等の smart account 経路や、独自プロトコルが事前計算した hash に署名する場合に利用します。
強権操作の注意:
sign hashは EIP-191 prefix を付けないため、攻撃者がkeccak256(rlp(tx))を計算した hash を渡せば任意 tx を後追い再生できる可能性があります。agent モード(ApiKeySigner)ではsign_allowlistのhashes/hashPatternルールが必要で、ルール無しでは default-deny でPOLICY_DENIEDになります。
構文
kova sign hash --name <wallet> --chain <chain> --hash <0xhex> [--owner]オプション
| オプション | 必須/任意 | 説明 |
|---|---|---|
--hash <0xhex> | 必須 | 0x プレフィックス + 64 hex 文字(32-byte)の hash |
入力 validation:
0xプレフィックス必須- 64 hex 文字(大文字小文字混在可)以外は
INVALID_PARAMS
使用例
kova sign hash \
--name my-wallet \
--chain base \
--hash 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef出力例:
{
"ok": true,
"data": {
"signature": "0xabcdef...1c",
"recoveryId": 1,
"wallet": "my-wallet",
"chain": "base",
"hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
}
}sign_allowlist の例
agent モードで sign hash を許可するには、sign_allowlist ルールに hashes(完全一致)または hashPattern(正規表現)を含めます:
{
"type": "sign_allowlist",
"hashes": ["0x1234..."]
}よくあるエラーと対処法
CHAIN_NOT_SUPPORTED
エラーメッセージ:
{
"ok": false,
"error": {
"code": "CHAIN_NOT_SUPPORTED",
"message": "Chain unknown-chain is not supported"
}
}対処法: サポートチェーン一覧 で正しいチェーン名を確認してください。
WALLET_NOT_FOUND
エラーメッセージ:
{
"ok": false,
"error": {
"code": "WALLET_NOT_FOUND",
"message": "Wallet my-wallet not found"
}
}対処法:
kova wallet info
# → 正しいウォレット名で再実行TX_FAILED
エラーメッセージ:
{
"ok": false,
"error": {
"code": "TX_FAILED",
"message": "Transaction failed: <reason>"
}
}対処法:
sign transaction --broadcastで署名済みトランザクションが reject された場合に発生- gas / nonce / chainId の整合性を確認
- ネットワーク混雑時はしばらく待って再試行
POLICY_DENIED(agent モード)
agent モード(credential あり)で sign transaction / sign typed-data 等の policy-gated 操作を実行し、ポリシー評価で拒否された場合に発生します。kova policy list でポリシーを確認し、必要なら kova policy update で調整してください。
注意点
1. value の単位は wei
sign transaction --value は wei 単位です。call / send の値(ETH 単位)と混同しないでください。
# 1 ETH 送金(wei = 10^18)
kova sign transaction --name my-wallet --chain base --to 0x... --value 1000000000000000000 --broadcast
# 同じことを call で(ETH 単位)
kova call --name my-wallet --chain base --to 0x... --value 1.0 --broadcast2. 署名は正規化される
返却される signature は常に 0x プレフィックス付きです。recoveryId は EIP-191 / EIP-712 で 27 / 28、トランザクション署名には含まれません。
3. policy-gated 操作
sign message / sign transaction / sign typed-data / sign hash はすべて policy-gated 操作(OperationKind 分類)。agent モードでは OWS server 側のポリシーで gate されます。
sign hash は raw ECDSA で任意 hash に署名する強権操作のため、agent モードでは sign_allowlist の hashes / hashPattern ルールが必須です(default-deny)。
4. 操作履歴の記録
すべての sign 操作(broadcast を伴わない sign message / sign typed-data / sign hash も含む)は ~/.kova/audit.jsonl に追記されます。エントリにはウォレット ID・チェーン ID・hash の要約のみが記録され、message 本文や typed-data payload は記録されません(誤って機密情報が残らないよう redact)。記録に失敗した場合は安全側に倒し、AUDIT_LOG_FAILED で操作自体も拒否します。
5. ApiKeySigner / PassphraseSigner の自動選択
credential あり → ApiKeySigner(OWS API key 経由)、credential なし or --owner → PassphraseSigner(ローカル passphrase)の経路選択が自動で行われます。
関連コマンド
- send — トークン送金(内部で sign + broadcast を統合)
- call — 任意のコントラクト呼び出し(calldata を組み立てる場合に便利)
- delegate — ERC-7702 delegation の作成・取消
- wallet — ウォレットの作成・管理