Indy CLI 常用命令
Haiya Lv3

本文基于 bcgov/von-image 编写

运行

使用 hyperledger/indy-node-container 启动 Indy 节点

1
docker compose run indy-cli

启动容器后执行 indy-cli 进入命令行

1
2
root@iZt4n4baavq7aqz:~/indy-node-container/test# docker compose run indy-cli
indy@58fdd0c598cc:~$ indy-cli

Wallet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 查看钱包
indy> wallet list
There are no wallets

# 查看 DID
indy> did list
There is no opened wallet now

# 创建钱包帮助
indy> wallet create help
Command:
wallet create - Create new wallet and attach to Indy CLI

Usage:
wallet create <name-value> key[=<key-value>] [key_derivation_method=<key_derivation_method-value>] [storage_type=<storage_type-value>] [storage_config=<storage_config-value>] [storage_credentials=<storage_credentials-value>]

Parameters are:
name - Identifier of the wallet
key - (leave empty for deferred input) Key or passphrase used for wallet key derivation.
Look to key_derivation_method param for information about supported key derivation methods.
key_derivation_method - (optional) Algorithm to use for wallet key derivation. One of:
argon2m - derive secured wallet key (used by default)
argon2i - derive secured wallet key (less secured but faster)
raw - raw wallet key provided (skip derivation)
storage_type - (optional) Type of the wallet storage.
storage_config - (optional) The list of key:value pairs defined by storage type.
storage_credentials - (optional) The list of key:value pairs defined by storage type.

Examples:
wallet create wallet1 key
wallet create wallet1 key storage_type=default
wallet create wallet1 key storage_type=default storage_config={"key1":"value1","key2":"value2"}

创建钱包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
indy> wallet create wallet1 key
Enter value for key:

Wallet "wallet1" has been created
indy> wallet list
+---------+---------+
| Name | Type |
+---------+---------+
| wallet1 | default |
+---------+---------+

indy> wallet open wallet1 key
Enter value for key:

Wallet "wallet1" has been opened

DID

操作 DID 之前需要先 open wallet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
wallet1:indy> did list
There are no dids

wallet1:indy> did help
Group:
did - Identity management commands

Usage:
did <command> [[<main-param-name>=]<main-param-value>] [<param_name-1>=<param_value-1>]...[<param_name-n>=<param_value-n>]

Getting help:
did <command> help - Display the help for the specific command

Group commands are:
list - List my DIDs stored in the opened wallet.
import - Import DIDs entities from file to the current wallet.
File format:
{
"version": 1,
"dids": [{
"did": "did",
"seed": "UTF-8, base64 or hex string"
}]
}
qualify - Update DID stored in the wallet to make fully qualified, or to do other DID maintenance.
new - Create new DID
use - Use DID
rotate-key - Rotate keys for active did

# 创建 DID 帮助

wallet1:indy> did new help
Command:
did new - Create new DID

Usage:
did new [did=<did-value>] [seed[=<seed-value>]] [method=<method-value>] [metadata=<metadata-value>]

Parameters are:
did - (optional) Known DID for new wallet instance
seed - (optional) (leave empty for deferred input) Seed for creating DID key-pair (UTF-8, base64 or hex)
method - (optional) Method name to create fully qualified DID
metadata - (optional) DID metadata

Examples:
did new
did new did=VsKV7grR1BUE29mG2Fm2kX
did new did=VsKV7grR1BUE29mG2Fm2kX method=indy
did new did=VsKV7grR1BUE29mG2Fm2kX seed=00000000000000000000000000000My1
did new seed=00000000000000000000000000000My1 metadata=did_metadata

# 创建 DID
wallet1:indy> did new did=VsKV7grR1BUE29mG2Fm2kX
Did "VsKV7grR1BUE29mG2Fm2kX" has been created with "HSgE6LNpS9pLxWPvVgmBVvqXR26DyMh4J2UjMYEkqT7S" verkey

当容器销毁后,Wallet 数据会丢失。

导入 Wallet 并创建 DID

下面是在 mywallet 中使用 Steward1 创建 DID 并提交 NYM 交易到账本的过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
indy> wallet list
There are no wallets
# 创建钱包
indy> wallet create mywallet key=123456789
Wallet "mywallet" has been created
indy> wallet open mywallet key=123456789
Wallet "mywallet" has been opened
# 创建一个 DID
mywallet:indy> did new
Did "NebW6j3P5qTkynXCUATPxf" has been created with "~Aaeq6e2ukuYJ5S859cow54" verkey
# 将 Hyperledger 的创世 Steward DID 导入到钱包
# 使用 Steward 则测试时不必再去找 Trustee 给自己授权,因为 Steward 本身就能写账本
mywallet:indy> did new seed=000000000000000000000000
Did "Th7MpTaRZVRYnPiabds81Y" has been created with "~7TYfekw4GUagBnBVCqPjiC" verkey
# 当前钱包中的 DID
mywallet:indy> did list
+------------------------+-------------------------+----------+
| Did | Verkey | Metadata |
+------------------------+-------------------------+----------+
| Th7MpTaRZVRYnPiabds81Y | ~7TYfekw4GUagBnBVCqPjiC | - |
+------------------------+-------------------------+----------+
| NebW6j3P5qTkynXCUATPxf | ~Aaeq6e2ukuYJ5S859cow54 | - |
+------------------------+-------------------------+----------+
# 使用 Steward
mywallet:indy> did use Th7MpTaRZVRYnPiabds81Y
Did "Th7MpTaRZVRYnPiabds81Y" has been set as active
# 注册 Indy 节点网络连接配置
mywallet:did(Th7...81Y):indy> pool create local gen_txn_file=/home/indy/genesis.txn
Pool config "local" has been created
# 连接网络
mywallet:did(Th7...81Y):indy> pool connect local
Pool "local" has been connected
# 向测试网络提交一条 NYM 交易,为 DID = NebW6j3P5qTkynXCUATPxf 注册/更新其公钥(verkey)与角色(role = TRUST_ANCHOR)
pool(local):mywallet:did(Th7...81Y):indy> ledger nym did=NebW6j3P5qTkynXCUATPxf verkey=~Aaeq6e2ukuYJ5S859cow54 role=TRUST_ANCHOR
Nym request has been sent to Ledger.
Metadata:
+------------------------+-----------------+---------------------+---------------------+
| From | Sequence Number | Request ID | Transaction time |
+------------------------+-----------------+---------------------+---------------------+
| Th7MpTaRZVRYnPiabds81Y | 8 | 1752832566640239460 | 2025-07-18 09:56:06 |
+------------------------+-----------------+---------------------+---------------------+
Data:
+------------------------+-------------------------+----------+
| Did | Verkey | Role |
+------------------------+-------------------------+----------+
| NebW6j3P5qTkynXCUATPxf | ~Aaeq6e2ukuYJ5S859cow54 | ENDORSER |
+------------------------+-------------------------+----------+
# 查询并显示 DID 为 NebW6j3P5qTkynXCUATPxf 的 NYM 记录
pool(local):mywallet:did(Th7...81Y):indy> ledger get-nym did=NebW6j3P5qTkynXCUATPxf
Following NYM has been received.
Metadata:
+------------------------+-----------------+---------------------+---------------------+
| Identifier | Sequence Number | Request ID | Transaction time |
+------------------------+-----------------+---------------------+---------------------+
| Th7MpTaRZVRYnPiabds81Y | 8 | 1752832654141172337 | 2025-07-18 09:56:06 |
+------------------------+-----------------+---------------------+---------------------+
Data:
+------------------------+------------------------+-------------------------+----------+
| Identifier | Dest | Verkey | Role |
+------------------------+------------------------+-------------------------+----------+
| Th7MpTaRZVRYnPiabds81Y | NebW6j3P5qTkynXCUATPxf | ~Aaeq6e2ukuYJ5S859cow54 | ENDORSER |
+------------------------+------------------------+-------------------------+----------+

References

由 Hexo 驱动 & 主题 Keep