使用indy-cli发布DIDs时出现未收到交易响应问题
Indy-Node集群发布DID超时但查询正常的排查与解决
问题描述
在三台不同机器上部署indy-node节点集群后,初期可正常执行DID发布与查询操作,示例操作如下:
indy> pool create identity_pool gen_txn_file=/var/lib/indy/sandbox/pool_transactions_genesis Pool config "identity_pool" has been created indy> pool connect identity_pool Pool "identity_pool" has been connected pool(identity_pool):indy> wallet create actor_wallet key=abc Wallet "actor_wallet" has been created pool(identity_pool):indy> wallet open actor_wallet key=abc Wallet "actor_wallet" has been opened pool(identity_pool):actor_wallet:indy> did new seed=100A000000300000c0000000Steward1 metadata="steward DID" Did "RnXJMDxifkBaceAkPizz8F" has been created with "~9F4P9aQysR1YATnARMuhxt" verkey Metadata has been saved for DID "RnXJMDxifkBaceAkPizz8F" pool(identity_pool):actor_wallet:indy> did use RnXJMDxifkBaceAkPizz8F Did "RnXJMDxifkBaceAkPizz8F" has been set as active pool(identity_pool):actor_wallet:did(RnX...z8F):indy> ledger nym did=RnXJMDxifkBaceAkPizz8F Nym request has been sent to Ledger. Metadata: +------------------------+-----------------+---------------------+---------------------+ | From | Sequence Number | Request ID | Transaction time | +------------------------+-----------------+---------------------+---------------------+ | RnXJMDxifkBaceAkPizz8F | 4 | 1721395027316620804 | 2024-07-19 13:17:07 | +------------------------+-----------------+---------------------+---------------------+ Data: +------------------------+------+ | Did | Role | +------------------------+------+ | RnXJMDxifkBaceAkPizz8F | - | +------------------------+------+
但在发布若干个DID后,或经过一段时间,执行ledger nym did=<NEW_DID>命令时出现超时错误:
Transaction response has not been received
执行ledger get-nym did=<EXISTENT_DID>命令仍可正常从任意节点获取已存在DID的信息:
pool(identity_pool):actor_wallet:did(RnX...z8F):indy> ledger get-nym did=RnXJMDxifkBaceAkPizz8F Following NYM has been received. Metadata: +------------------------+-----------------+---------------------+---------------------+ | Identifier | Sequence Number | Request ID | Transaction time | +------------------------+-----------------+---------------------+---------------------+ | RnXJMDxifkBaceAkPizz8F | 4 | 1721395092477092709 | 2024-07-19 13:17:07 | +------------------------+-----------------+---------------------+---------------------+ Data: +------------------------+------------------------+-------------------------+---------+ | Identifier | Dest | Verkey | Role | +------------------------+------------------------+-------------------------+---------+ | L4vaBJDbZiaX68mVHLuZ2E | RnXJMDxifkBaceAkPizz8F | ~9F4P9aQysR1YATnARMuhxt | STEWARD | +------------------------+------------------------+-------------------------+---------+
已确认pool_transactions_genesis文件正确(初期可正常发布DID)。
排查与解决步骤
1. 节点共识状态校验
- 登录每个节点,执行
indy-node status,确认所有节点的Node status为Alive,Consensus status为Participating。若有节点状态异常,执行systemctl restart indy-node重启节点。 - 查看节点日志(默认路径
/var/log/indy/),搜索consensus、timeout、failed关键词,定位共识过程中的错误记录。
2. 资源性能排查
- 使用
top、df -h检查各节点的CPU、内存、磁盘使用率,若资源耗尽(如内存不足、磁盘IO过高),会导致共识处理延迟,引发写入超时。 - 检查indy-node进程的资源限制,确保节点有足够资源处理共识事务。
3. 网络连通性验证
- 测试三台机器间indy-node所有默认端口(9701-9708等)的连通性,使用
nc -zv <节点IP> <端口>。部分防火墙或云环境会关闭空闲长连接,导致共识消息无法传递。 - 检查节点
indy_config.py配置中的NETWORK_NAME、NODE_IP等参数,确保节点间能正确识别彼此地址。
4. 账本同步状态检查
- 执行
ledger get-txn-by-seq ledger=pool seqno=<最新序列号>,验证所有节点的账本序列是否同步。若部分节点序列落后,说明同步机制异常,需检查节点间的账本同步逻辑。 - 执行
indy-node ledger-status查看交易处理速度与积压情况,若有大量未处理交易,可调整节点共识参数(如consensus_timeout)。
5. 身份权限验证
- 通过
ledger get-nym did=<Steward_DID>确认用于发布DID的Steward身份角色仍为STEWARD,若权限被修改会导致交易被拒绝,表现为超时。 - 重新导入Steward的seed创建DID,验证钱包中私钥有效性。
6. 版本一致性检查
- 执行
indy-node --version确认三台节点的indy-node版本完全一致,版本不兼容会导致共识协议冲突,引发写入超时但查询正常的情况。若版本不同,统一升级或降级至同一版本。
内容的提问来源于stack exchange,提问作者brenodacosta
相关产品推荐
相关产品推荐

