升级Hyperledger Composer至0.19.4后启动网络报$sysregistries对象不存在错误
解决Hyperledger Composer 0.19.4启动网络时“Object with id does not exist in $sysregistries”错误
我之前帮不少开发者解决过Composer从0.16.x升级到0.19.x后遇到的这个报错,大概率是升级过程中系统注册表、卡片权限或者配置兼容性的问题,给你几个针对性的解决方案:
1. 验证PeerAdmin卡片的有效性与权限
0.19.x版本对身份权限的校验比0.16严格很多,首先确认你的PeerAdmin卡片是否能正常连通Fabric网络:
- 列出所有卡片检查状态:
composer card list - 测试卡片连通性:
composer ping --card PeerAdmin@vecozo-gts-network-patient-pieterpost-zorgverlener-zorgpeter-patient-pieterpost
如果ping不通,说明卡片配置有问题,需要重新生成(见方案4)。
2. 清理旧版本残留的系统注册表数据
0.16和0.19的系统注册表结构差异较大,旧数据会导致冲突:
- 先停止已部署的旧网络(如果有的话):
composer network stop --card YourBusinessNetworkCard@xxx -n vecozo-gts-network -V 0.0.8 - 删除Peer节点上的链码残留数据(根据你的Fabric部署路径调整):
sudo rm -rf /var/hyperledger/production/chaincodes/* - 删除客户端本地的旧业务卡片和缓存:
composer card delete --card YourBusinessCard@xxx rm -rf ~/.composer/cards/* rm -rf ~/.composer/client-data/*
3. 检查背书策略文件格式是否兼容0.19.x
0.19.x对背书策略的语法做了更新,确保你的endorsement-policy_gtschannel-patient-pieterpost-zorgverlener-zorgpete...文件格式正确:
- 确认策略使用的是0.19支持的签名策略结构,比如示例格式:
{ "identities": [ { "role": { "name": "member", "mspId": "Org1MSP" } } ], "policy": { "1-of": [ { "signed-by": 0 } ] } }
避免使用0.16的旧格式,比如基于ACL的策略写法。
4. 重新生成PeerAdmin卡片
旧版本的PeerAdmin卡片可能包含不兼容的证书或配置,重新生成适配0.19的卡片:
- 基于当前Fabric网络的连接配置文件生成卡片:
composer card create -p connection-profile.json -u PeerAdmin -c ./crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem -k ./crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/priv_sk -r PeerAdmin -r ChannelAdmin - 导入新生成的卡片:
composer card import --file PeerAdmin@vecozo-gts-network.card
5. 确认Fabric网络版本兼容性
Composer 0.19.4要求对应的Fabric版本是1.3.x,如果你的Fabric网络是1.2或更早版本,会出现注册表交互错误,需要升级Fabric到1.3.x版本后再尝试启动网络。
按以上步骤逐一排查,应该能解决这个报错。
内容的提问来源于stack exchange,提问作者Bas Poldervaart
相关产品推荐
相关产品推荐

