跨节点部署双组织Fabric示例,Composer ping网络遇ENDORSEMENT_POLICY_FAILURE报错求助
解决Hyperledger Composer网络Ping时的ENDORSEMENT_POLICY_FAILURE错误
先帮你梳理下问题的核心:你遇到的ENDORSEMENT_POLICY_FAILURE是因为交易的背书签名不满足链码设定的背书策略,而区块依然生成是因为Fabric排序节点只负责交易排序打包,不会验证背书有效性——只有peer节点在验证区块时才会检查背书,所以无效交易依然会被打包进区块,但最终不会被提交到账本。
下面是针对性的排查和解决步骤:
1. 确认业务网络的背书策略
首先要明确你的Composer业务网络要求什么样的背书规则,默认情况下,双组织场景的业务网络背书策略通常是AND('Org1MSP.peer','Org2MSP.peer'),也就是需要两个组织的peer都完成背书。
运行以下命令查看当前业务网络的背书策略:
composer network list -n <你的业务网络名称> -c <你的连接配置身份,比如admin@my-network>
如果输出的Endorsement Policy确实要求双组织背书,那接下来就要检查是否满足这个条件。
2. 检查链码是否在所有需要的Peer上安装
如果你的业务网络链码只在Org1的peer上安装,Org2的peer没有安装,那Org2的peer无法完成背书,直接导致策略失败。
- 检查Org1和Org2的peer上是否都安装了业务网络的链码:
# 查看Org1 peer的链码列表 docker exec peer0.org1.example.com peer chaincode list --installed # 查看Org2 peer的链码列表 docker exec peer0.org2.example.com peer chaincode list --installed - 如果某一方没有安装,重新在该peer上安装链码:
composer network install -n <业务网络名称> -c <对应Org的连接配置身份,比如admin@org2-network> -a <业务网络的.bna文件路径>
3. 验证Connection Profile的配置完整性
你提到两个Org的connection profile都只用localhost,这里要确保你的连接配置文件(通常是connection.json)包含了双组织的完整节点信息,而不是仅单个组织:
- 确认
organizations节点下同时存在Org1MSP和Org2MSP的定义,每个组织都关联了对应的peer和CA; - 确认
peers节点下列出了两个Org的peer(比如peer0.org1.example.com和peer0.org2.example.com),并且它们的url正确(localhost端口要对应,比如Org1 peer是grpcs://localhost:7051,Org2 peer是grpcs://localhost:9051); - 如果你之前用的是单个Org的connection profile,需要创建一个包含双组织节点的联合配置文件,或者在调用时确保客户端能访问到两个Org的peer。
4. 检查Ping操作使用的身份权限
确保你执行composer network ping时使用的身份,拥有足够的权限触发跨组织背书:
- 优先使用业务网络的管理员身份(比如
admin@my-network,这个身份应该关联了双组织的节点权限); - 如果使用的是单个Org的身份,可能无法触发另一个Org的peer进行背书,导致策略不满足。
5. 查看Peer日志定位具体原因
如果以上步骤都没问题,查看两个Org的peer日志,获取更详细的错误信息:
# 查看Org1 peer日志 docker logs peer0.org1.example.com # 查看Org2 peer日志 docker logs peer0.org2.example.com
日志里通常会明确说明背书失败的原因——比如身份没有权限、链码未实例化、节点通信失败等,根据日志再针对性修复。
内容的提问来源于stack exchange,提问作者user9040429
相关产品推荐
相关产品推荐

