fabric-sdk-go执行不总是更新分类帐

问题描述 投票:0回答:1

我正在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个对等节点。

肯定缺少导致这种行为的某些方面。预先感谢。

couchdb hyperledger-fabric gin-gonic hyperledger-fabric-sdk-go
1个回答
0
投票

所有对等方都需要花费时间来同步其块。一旦同级收到这些阻止,他们就会更新其世界状态,因此您可以通过查询来查看更改。

当您查询“刚刚执行”的交易时,您可能会碰到其他同行之一。如果要立即得到结果,请确保要查询实际执行事务的同一个对等方。您可以尝试花点时间来看看其他同龄人是否也获得了阻止。

您在CLI上立即看到更改的原因,是关于客户端实现的方式。在CLI命令执行时,您明确指定对等体。因此,事务在一个对等节点上执行,并在同一个对等节点上查询(没有问题)。您可以在执行事务(通过CLI)后立即(通过CLI)查询另一个组织的对等方来证明此行为。

但是,对于您的客户端,可能由于您未明确指定对等方,因此您的客户端SDK使用对等方的发现服务,并在网络中为您找到对等方并使用它。

由于这个原因,当背书策略形成为“ AND(org1,org2)”时,客户端SDK实际上会查询2个对等点(每个组织1个,并比较结果。

© www.soinside.com 2019 - 2024. All rights reserved.