调用链代码时Hyperledger背书失败-失败:签名集不符合策略



我使用的是带有自定义链码的余额转移应用程序,当我使用背书策略'1-of':[{ 'signed-by': 0 }, { 'signed-by': 1 }]时,一切都很好,但如果我使用'2-of':[{ 'signed-by': 0 }, { 'signed-by': 1 }],则调用事务失败,并出现以下错误:

结构对等错误日志:

Validate->ERRO 078 VSCC错误:stateBasedValidator.Valide失败,tx4:0中链码mycc背书策略的错误验证失败:签名集不满足策略2019-01-02 07:24:40.782UTC[committer.txvalidator]validateTx->ERRO 079 VSCCValidatateTx事务txId=815553b7cabb383f59d4ad3c2bd3deda5b74169048e3b3b837f46adbd85099返回错误:验证中链码mycc的背书策略tx 4:0失败:签名集不满足策略

节点SDK日志显示以下

〔2019-01-02 02:24:48.26〕〔错误〕invoke chaincode-invoke链代码事务无效,代码:ENDORSEMENT_POLICY_FAILURE〔2019-01-02 02:24:48.27〕〔错误〕invoke chaincode-错误:invoke链码事务无效,代码:ENDORSEMENT_POLICY_FAILURE

解决这一问题的任何帮助都将对非常有用

我在自己的系统上运行了环境,并确定这不是链代码的问题,而是正在发送的调用请求的问题。

因此,在testAPI.sh和testInvoke.sh中发出的调用请求是

TRX_ID=$(curl -s -X POST 
http://localhost:4000/channels/mychannel/chaincodes/mycc 
-H "authorization: Bearer $ORG1_TOKEN" 
-H "content-type: application/json" 
-d '{
"peers":  **["peer0.org1.example.com","peer1.org1.example.com"]**,
"fcn":"invoke",
"operation":"commit",
"args": ["commitPrivate","uuid3","uuid2-Owner"]
}')

我们可以看到,背书同时发送给组织1中的同行,而组织2中没有。然而,2-of策略并不是说它需要来自组织1和组织2中任何对等方的2个签名,而是说它需要一个来自组织1或组织2中对等方的签名。我们可以从背书政策的文件中看到这一点,https://hyperledger-fabric.readthedocs.io/en/latest/endorsement-policies.html#endorsement-策略语法。

类似地,OutOf(2,'Org1.member','Org2.member')等效于AND('Org1.member','Org2.member')

因此,如果您将请求更改为

TRX_ID=$(curl -s -X POST 
http://localhost:4000/channels/mychannel/chaincodes/mycc 
-H "authorization: Bearer $ORG1_TOKEN" 
-H "content-type: application/json" 
-d '{
"peers":  **["peer0.org1.example.com","peer1.org2.example.com"]**,
"fcn":"invoke",
"operation":"commit",
"args": ["commitPrivate","uuid3","uuid2-Owner"]
}')

它会起作用的。

最新更新