【问题标题】:How to unmarshal Transaction Payload in Hyperledger Fabric如何在 Hyperledger Fabric 中解组事务有效负载
【发布时间】:2019-08-13 02:51:30
【问题描述】:

我需要从账本中的交易中获取交易字段。我可以通过调用 qscc 链码成功地从分类帐中查询交易,但无法解析获取的交易以检索交易字段。我想将事务内容解组为包含所有字段的结构。使用下面的代码,我收到错误“无法解组频道标头”。感谢您的帮助。

chainCodeArgs := toChaincodeArgs("GetTransactionByID", "myc", tid)
response := stub.InvokeChaincode("qscc", chainCodeArgs, "myc")
fmt.Printf("****************")
if response.Status != shim.OK {
errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", response.Payload)
fmt.Printf(errStr)
return "", fmt.Errorf(errStr)
}

respStr := fmt.Sprintf("successfully queried qscc chaincode. Got response: %s", response.Payload)
fmt.Printf(respStr)

payload, err := utils.UnmarshalPayload(response.Payload)
if err != nil {
return "", fmt.Errorf("Error when unmarshalling transaction payload response")
}
fmt.Printf("++++++++++++++++++++++")
fmt.Println(payload)

if payload.Header == nil {
return "", fmt.Errorf("error getting txID from header: payload header is nil")
}

chdr, err := utils.UnmarshalChannelHeader(payload.GetHeader().ChannelHeader)
if err != nil {
return "", fmt.Errorf("failed to unmarshal channel header")
}

fmt.Printf("++++++++++++++++++++++")
fmt.Printf(chdr.TxId)

错误截图:

【问题讨论】:

  • 您是否也可以尝试打印解组时遇到的错误。
  • 抱歉错过了。我已经包含了错误的屏幕截图。

标签: go hyperledger-fabric hyperledger


【解决方案1】:

响应负载在 []bytes

你可以使用string(response.Payload)

以上代码等价于.toString("utf8")

----- 或 ------

使用

var data interface{}

err = json.Unmarshal(responseBody, &data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 2019-02-06
    相关资源
    最近更新 更多