Ika CLI
Command-line interface for the Ika decentralized MPC signing network on Sui.
References (detailed command reference and JSON schemas)
- -
references/commands.md - Full command reference with all flags, arguments, and examples - INLINECODE1 - JSON output schemas for
--json flag on every command
Install
CODEBLOCK0
Requires: Sui CLI (sui keytool for key management)
Global Flags
All commands support these flags:
| Flag | Description |
|---|
| INLINECODE4 | Output results as JSON (machine-parseable). Errors also output as JSON. |
| INLINECODE5 |
Custom Sui client config path |
|
--ika-config <PATH> | Custom Ika network config path (default for all dwallet subcommands) |
|
--gas-budget <MIST> | Override default gas budget (default for all dwallet subcommands) |
|
-y, --yes | Skip confirmation prompts |
|
-q, --quiet | Suppress human-readable output (JSON still printed with
--json -q) |
Command Overview
CODEBLOCK1
Curves, Algorithms, and Hash Schemes
Commands accept named values (not numeric IDs):
| Parameter | Accepted values |
|---|
| INLINECODE11 | INLINECODE12 , secp256r1, ed25519, INLINECODE15 |
| INLINECODE16 |
ecdsa,
taproot,
eddsa,
schnorrkel |
|
--hash-scheme |
keccak256,
sha256,
double-sha256,
sha512,
merlin |
Quick Start
Create a dWallet
CODEBLOCK2
Secret Share Handling
The secret share can be provided in three ways (in priority order):
- 1.
--secret-share <file> — read from a local file - INLINECODE28 — pass directly as hex
- Omit both — the CLI derives the decryption key from your Sui keystore (seed args), fetches the encrypted share from chain, and decrypts it. Requires
--dwallet-id.
Batch Presigns
CODEBLOCK3
List and Inspect
CODEBLOCK4
Future Signing (two-step)
CODEBLOCK5
Seed derivation: Encryption keys are derived stateless from the active Sui keystore address. Use --seed-file <PATH> for raw 32-byte seed, --address <ADDR> for a specific keystore address, or --encryption-key-index <N> for multiple keys per address. Pass --legacy-hash for keys registered before the V2 hash fix (only affects non-SECP256K1 curves).
Auto-detection: IKA/SUI coins are auto-detected from the active wallet. Curve, DKG output, and presign output are auto-fetched from chain when --dwallet-id and --presign-cap-id are provided.
Validator Operations
CODEBLOCK6
Key Management
Sui wallet keys are managed by sui keytool:
CODEBLOCK7
dWallet encryption keys are derived stateless from Sui keystore addresses (no local file storage). The CLI uses keccak256(keypair_bytes || index) to derive a 32-byte seed, then hashes with domain separators to produce class-groups and Ed25519 keys.
JSON Output
All commands support --json for structured output:
CODEBLOCK8
Ika CLI
Sui上Ika去中心化MPC签名网络的命令行界面。
参考文档(详细命令参考和JSON模式)
- - references/commands.md - 包含所有标志、参数和示例的完整命令参考
- references/json-output.md - 每个命令的--json标志的JSON输出模式
安装
bash
通过Homebrew安装(macOS/Linux)
brew install ika-xyz/tap/ika
或从GitHub Releases下载预构建二进制文件
https://github.com/dwallet-labs/ika/releases
支持平台:linux-x64, linux-arm64, macos-x64, macos-arm64, windows-x64
或从源码构建
cargo build --release -p ika
依赖:Sui CLI(sui keytool用于密钥管理)
全局标志
所有命令均支持以下标志:
| 标志 | 描述 |
|---|
| --json | 以JSON格式输出结果(机器可解析)。错误也以JSON格式输出。 |
| --client.config <PATH> |
自定义Sui客户端配置路径 |
| --ika-config
| 自定义Ika网络配置路径(所有dwallet子命令的默认路径) |
| --gas-budget | 覆盖默认Gas预算(所有dwallet子命令的默认值) |
| -y, --yes | 跳过确认提示 |
| -q, --quiet | 抑制人类可读输出(使用--json -q时仍会打印JSON) |
命令概览
ika
├── start # 启动本地Ika网络
├── network # 网络信息和地址
├── dwallet # dWallet操作
│ ├── create # 通过DKG创建dWallet
│ ├── sign # 请求签名
│ ├── future-sign # 条件/未来签名
│ │ ├── create # 创建部分用户签名
│ │ └── fulfill # 完成未来签名
│ ├── presign # 请求预签名(最多批量20个)
│ ├── global-presign # 使用网络密钥进行全局预签名
│ ├── import # 导入外部密钥作为dWallet
│ ├── register-encryption-key
│ ├── get-encryption-key
│ ├── verify-presign
│ ├── get # 查询dWallet信息
│ ├── list # 列出拥有的dWallet能力
│ ├── list-presigns # 按状态/曲线列出预签名能力
│ ├── public-key # 提取签名公钥
│ ├── decrypt # 解密链上加密的份额
│ ├── epoch # 查询当前网络纪元
│ ├── pricing # 当前定价信息
│ ├── generate-keypair # 离线密钥对生成
│ └── share # 用户份额管理
│ ├── make-public
│ ├── re-encrypt
│ └── accept
├── config # 配置管理
│ ├── init # 获取地址 + 创建Sui环境
│ ├── add-env # 从本地ika_config.json添加环境
│ ├── sync # 重新获取最新合约地址
│ └── show # 显示当前配置
├── validator # 验证器操作(30+子命令)
├── protocol # 协议治理(功能门控)
└── completion # Shell自动补全(bash/zsh/fish)
曲线、算法和哈希方案
命令接受命名值(而非数字ID):
| 参数 | 可接受的值 |
|---|
| --curve | secp256k1, secp256r1, ed25519, ristretto |
| --signature-algorithm |
ecdsa, taproot, eddsa, schnorrkel |
| --hash-scheme | keccak256, sha256, double-sha256, sha512, merlin |
快速开始
创建dWallet
bash
首先注册加密密钥(默认从活跃Sui地址派生)
ika dwallet register-encryption-key --curve secp256k1
创建secp256k1 dWallet(IKA/SUI代币自动从钱包检测)
ika dwallet create \
--curve secp256k1 \
--output-secret ./mydwalletsecret.bin
输出:dWallet ID, Cap ID, 公钥
签名消息
ika dwallet sign \
--dwallet-cap-id \
--dwallet-id \
--message \
--signature-algorithm ecdsa \
--hash-scheme keccak256 \
--secret-share ./mydwalletsecret.bin \
--presign-cap-id CAPID> \
--wait
秘密份额处理
秘密份额可以通过三种方式提供(按优先级排序):
- 1. --secret-share — 从本地文件读取
- --secret-share-hex — 直接以十六进制传递
- 省略两者 — CLI从您的Sui密钥库(种子参数)派生解密密钥,从链上获取加密份额并解密。需要--dwallet-id。
批量预签名
bash
在单笔交易中创建10个预签名(最多20个)
ika dwallet presign \
--dwallet-id \
--signature-algorithm ecdsa \
--count 10 \
--wait
列出和检查
bash
列出所有拥有的dWallet能力
ika dwallet list
按状态和曲线分组列出预签名能力
ika dwallet list-presigns
从dWallet提取签名公钥
ika dwallet public-key --dwallet-id
查询当前网络纪元
ika dwallet epoch
未来签名(两步)
bash
步骤1:创建部分用户签名
ika dwallet future-sign create \
--dwallet-id \
--message \
--hash-scheme sha256 \
--presign-cap-id CAPID> \
--signature-algorithm ecdsa \
--secret-share ./my_secret.bin
步骤2:完成(完成签名)
ika dwallet future-sign fulfill \
--partial-cap-id CAPID> \
--dwallet-cap-id CAPID> \
--dwallet-id \
--message \
--signature-algorithm ecdsa \
--hash-scheme sha256 \
--wait
种子派生: 加密密钥从活跃的Sui密钥库地址无状态派生。使用--seed-file 获取原始32字节种子,--address 指定特定密钥库地址,或--encryption-key-index 为每个地址生成多个密钥。传递--legacy-hash用于在V2哈希修复之前注册的密钥(仅影响非SECP256K1曲线)。
自动检测: IKA/SUI代币从活跃钱包自动检测。当提供--dwallet-id和--presign-cap-id时,曲线、DKG输出和预签名输出从链上自动获取。
验证器操作
bash
创建验证器信息
ika validator make-validator-info
URL> URL>
成为验证器候选者
ika validator become-candidate INFOPATH>
加入委员会
ika validator join-committee --validator-cap-id
密钥管理
Sui钱包密钥由sui keytool管理:
bash
sui keytool generate ed25519 # 生成新密钥对
sui keytool list # 列出已知密钥
sui keytool import # 从助记词导入密钥
dWallet加密密钥从Sui密钥库地址无状态派生(无需本地文件存储)。CLI使用keccak256(keypair_bytes || index)派生32字节种子,然后使用域分隔符进行哈希以生成类组和Ed25519密钥。
JSON输出
所有命令支持--json进行结构化输出:
bash
ika dwallet get --dwallet-id