Hyperledger Fabric 2.4同一组织多节点私有交易背书配置问题
Hyperledger Fabric 2.4 同一组织多节点私有数据背书策略实现方案
问题原因
Fabric 2.x对背书策略的解析逻辑做了优化:重复指定同一个MSP角色主体(比如Org1MSP.member多次)会被自动去重,你之前的AND('Org1MSP.member', 'Org1MSP.member')或OutOf(2, 'Org1MSP.member', 'Org1MSP.member')写法,实际等价于只要求1个该角色的背书,而非多个,这就导致交易背书时不符合预期,触发EndorseError。
正确实现方法
在Fabric 2.4中,需使用计数型组织成员策略来实现同一组织至少N个节点的背书要求,以下是具体配置方案:
1. 私有数据集合配置示例
修改你的集合配置文件(如collections_config.json),在policy字段中采用ApplicationPolicy类型,指定组织、角色及所需背书数量:
{ "name": "myPrivateCollection", "policy": { "type": "ApplicationPolicy", "value": { "principal": { "mspId": "Org1MSP", "role": "PEER" // 优先选择PEER角色,精准指向组织内的节点身份;也可使用MEMBER,但会包含客户端身份 }, "count": 2 // 设置为你需要的最小背书节点数N } }, "requiredPeerCount": 2, "maxPeerCount": 3, "blockToLive": 0, "memberOnlyRead": true }
2. 策略说明
- 该策略会自动校验是否有来自Org1MSP的N个不同节点身份完成背书,无需硬编码单个节点信息,适配2.x版本的规范,同时保持灵活性。
- 若需指定固定节点背书(而非任意N个节点),可使用节点具体身份构建签名策略,示例:
"policy": { "type": "SignaturePolicy", "value": "OutOf(2, 'Org1MSP.peer1', 'Org1MSP.peer2', 'Org1MSP.peer3')" }
注意:Org1MSP.peer1为节点的身份别名,需确保节点证书已在对应MSP中完成注册。
3. 生效步骤
配置完成后,通过peer chaincode upgrade(或重新安装、实例化链码)更新集合配置,发起交易时确保客户端收集到至少N个目标组织节点的背书,即可正常通过验证。
内容的提问来源于stack exchange,提问作者Rastafan
相关产品推荐
相关产品推荐

