CouchDB fabric-sdk-go执行并非始终更新分类帐

vmjh9lq9  于 2022-12-09  发布在  CouchDB
关注(0)|答案(1)|浏览(157)

我正在使用fabric-sdk-go中的client.channel.Execute API调用链码中的分类帐更新Txs。
我知道我的分类帐更新链码是正确的,因为从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个对等节点。
肯定是忽略了导致这种行为的某些方面。提前感谢。

cczfrluj

cczfrluj1#

所有对等体同步它们的块需要时间。一旦对等体接收到这些块,它们就会更新它们的世界状态,所以你可以通过查询看到你的变化。
当您查询“刚执行”的交易时,可能会碰到其他对等端之一。如果您想要立即的结果,请确定您查询的是您实际执行交易的相同对等端。您可以尝试延迟一些时间,以查看其他对等端,并取得区块。
您在CLI上立即看到更改的原因与客户端实现的方式有关。在CLI命令执行时,您显式指定对等方。因此,事务在一个对等方上执行,并在同一个对等方上查询(没有问题)。您可以通过在执行事务(通过CLI)后立即查询(通过CLI)另一个组织的对等方来证明此行为。
然而,对于您的客户端,可能由于您没有显式指定对等体,您的客户端SDK使用对等体的发现服务,并在网络中为您找到一个对等体并使用它。
由于这个原因,当签署策略形成为“AND(org 1,org 2)"时,客户端SDK实际上查询2个对等体(每个组织一个)并比较结果。

相关问题