我正在fabric-sdk-go中使用client.channel.Execute API来调用链码中的分类帐更新Tx。
我知道我的账本更新链码是正确的,因为从cli容器命令行运行时始终调用Tx可以正常工作。
几次,随机地,分类帐更新在如下所示的POSTMAN中作为REST API调用执行时不会反映出来。在这种情况下,响应代码为200,并带有正确的响应有效负载,表明链代码成功运行。
`
chaincodeID := "hcc"
fcn := "GiftToken"
args := [][]byte{
[]byte(reqBody.TokenID),
[]byte(reqBody.GiftToUserID),
[]byte(GiftTokenCountAsString),
}
setup := lib.GetFabricSetup()
transientDataMap := make(map[string][]byte)
transientDataMap["result"] = []byte("Transient data in GiftToken invoke")
response, err := setup.Client.Execute(channel.Request{ChaincodeID: chaincodeID, Fcn: fcn, Args: args, TransientMap: transientDataMap})
我正在docker容器中运行Fabric 1.4.4映像。我的网络有1个组织和4个对等节点。
肯定缺少导致这种行为的某些方面。预先感谢。
所有对等方都需要花费时间来同步其块。一旦同级收到这些阻止,他们就会更新其世界状态,因此您可以通过查询来查看更改。
当您查询“刚刚执行”的交易时,您可能会碰到其他同行之一。如果要立即得到结果,请确保要查询实际执行事务的同一个对等方。您可以尝试花点时间来看看其他同龄人是否也获得了阻止。
您在CLI上立即看到更改的原因,是关于客户端实现的方式。在CLI命令执行时,您明确指定对等体。因此,事务在一个对等节点上执行,并在同一个对等节点上查询(没有问题)。您可以在执行事务(通过CLI)后立即(通过CLI)查询另一个组织的对等方来证明此行为。
但是,对于您的客户端,可能由于您未明确指定对等方,因此您的客户端SDK使用对等方的发现服务,并在网络中为您找到对等方并使用它。
由于这个原因,当背书策略形成为“ AND(org1,org2)”时,客户端SDK实际上会查询2个对等点(每个组织1个,并比较结果。