似乎我误解了Hyperledger Fabric如何处理查询。我目前正在使用fabric-go-sdk从分类帐中查询资产,例如
asset, err := client.Query(channel.Request{ChaincodeID: someCCname, Fcn: "query", Args: [][]byte{[]byte(someID)}})
当系统处于负载状态(许多与查询无关的新事务)时,有时会收到以下错误消息:
背书验证失败:背书人客户端状态码:(3) ENDORSEMENT_MISMATCH。说明:没有ProposalResponsePayloads 匹配。
如果仅查询数据,为什么要背书?对我来说,错误消息似乎表明多个对等方对查询的回答不同。这是否意味着某些对等方已经将资产抵押到分类帐中,而其他同等方却没有将其分类? 值得注意的是,查询是在资产创建后不久运行的,并且不一致。
查询链码非常简单明了:
func (c *TestChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response {
data, err := stub.GetState(args[0])
if err != nil {
return shim.Error(err)
}
if data== nil {
return shim.Error(err)
}
return shim.Success(data)
}