我已将我的认可政策设置为“ AND('Org1MSP.peer','OrgMainMSP.peer')“”,这意味着我需要两个组织的证书才能成功进行交易。
交易如下:
对等链代码调用-o orderer0.org.com:7050 --tls --cafile/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/org.com/orderers/orderer0.org.com/msp/tlscacerts/tlsca.org.com-cert.pem-n accessControl --peerAddresses peer0.org-main.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org-main.com/peers/peer0.org -main.com/tls/ca.crt--peerAddresses peer0.org1.com:10051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.com/peers/peer0.org1.com/tls/ca。 crt-c'{“ Args”:[]}'
一切正常。成功提交了一个新块,也可以在ouchdb上看到。但是,当我发送交易时,删除证书之一,如下所示:
“对等链代码调用-o orderer0.org.com:7050 --tls --cafile/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/org.com/orderers/orderer0.org.com/msp/tlscacerts/tlsca.org.com-cert.pem-n accessControl --peerAddresses peer0.org-main.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org-main.com/peers/peer0.org -main.com/tls/ca.crt-c'{“ Args”:[]}'“
新块已通过事务提交,但被提交者标记为无效,并在日志上显示以下错误消息
peer0.org-main.com | 2020-03-20 07:59:30.868 UTC [vscc]验证->ERRO 094 VSCC错误:stateBasedValidator.Validate失败,错误在TX 7:0中验证Chaincode AccessControl的背书策略失败:签名集不符合政策
peer0.org-main.com | 2020-03-20 07:59:30.868 UTC [valimpl]preprocessProtoBlock-> WARN 097通道[myc]:块[7]事务索引[0] TxId[01246b27c11f94124aee3c4ac84a011be51a26aaa50fc28f1d6f5f5a8860c079]由提交者标记为无效。原因码[ENDORSEMENT_POLICY_FAILURE]
peer0.org-main.com | 2020-03-20 07:59:31.156 UTC [kvledger]CommitWithPvtData-> INFO 098 [myc]具有1的已提交块[7]287毫秒内进行的交易(state_validation = 0毫秒block_and_pvtdata_commit = 220ms state_commit = 17ms)commitHash = [9d52225ddbc8f6f98edd37388cbcf369fea22666b9ec1cff1a91debdebc2d2a1]
并且当我再次提交通过两个证书的事务时,它将引发错误为
Error:无法组合事务:ProposalResponsePayloads不匹配-提案响应:版本:1响应状态:200有效负载:...>
这里的问题是,如果我错误地调用仅通过组织的一个证书的调用函数(背书策略失败),那么我将无法进行进一步的交易。
没关系。阻止提交并更新状态。
没关系。您的客户端最好不要尝试提交该事务,但如果这样做,则会提交一个包含无效事务的新块,并且不会更新状态。
ProposalResponsePayloads do not match
。现在问题不同了。我认为它与先前的交易没有关系。签名是预期的签名,但是您正在组成一个包含2个不匹配的交易建议的交易。他们的回应或状态更新不一样。确保您未使用外部代码,随机数,时间戳(事务或区块的时间戳除外)或链式代码中可能在两个背书中都不匹配的类似值。当然,事务无效,但是提交了一个新块。