在 hyperledger fabric 中通过 TxID 获取交易详情

Get transaction details by TxID in hyperledger farbic

我目前是 运行 hyperledger fabric v2.2。我使用 contractapi 开发了链代码,并使用 fabric-sdk-go/pkg/gateway

开发了应用程序

如何获取交易状态和交易负载? 我知道 GetHistoryByKey() 可以在contractapi 但这对我的应用程序不起作用。

我知道有 hyperledger-explorer 可用于通过 TxID 搜索交易,但我的用例是我的应用程序将通过 TxID 进行查询,然后它将验证该特定交易 (TxID) 的状态.

此外,我尝试使用 fabsdk 实现此目的,但是当我尝试使用 fabsdk.New() 创建实例化 fabsdk 时出现错误。我正在使用 fabric-sample 项目的 connection-profile.json 似乎存在一些兼容性问题。

我得到的错误是:

failed to create identity manager provider: failed to initialize identity manager for organization: MyOrgName: Either a cryptopath or an embedded list of users is required

在启动网络时使用了相同的连接配置文件 运行,一切似乎都运行良好。我能够提交和评估交易。

解决方案

系统链代码嵌入在节点本身中。所以我们需要设置目标,否则它只会给出发现错误,因为合约 QSCC 没有明确部署在通道上。

确保检查 core.yaml 文件 channel.system - 应该启用系统链代码 channel.system.qscc: enable

qsccContract := network.GetContract("qscc")
txn, err := qsccContract.CreateTransaction("GetTransactionByID", gateway.WithEndorsingPeers("peer0.org1.com:8051"))
if err != nil {
    fmt.Printf("Failed to create transaction: %s\n", err)
    return
}

result, err := txn.Evaluate("mychannel", "4b1175335bdfe074d516a69df180ed6bc14591543eb26c10e21df2c67602b2dc")
if err != nil {
    fmt.Printf("Failed to submit transaction: %s\n", err)
    return
}

fmt.Println(string(result))

注意:结果需要解码以供人类阅读

您的客户端应用程序可以使用适合您的编程语言的客户端 SDK 来评估 qscc 系统链码上的 GetTransactionByID 交易功能,该功能可用于所有对等点。此交易函数将交易 ID 作为其唯一参数和 returns 一个 peer.ProcessedTransaction protobuf,其中包含交易信封和验证码。