我怎么知道哪个 Peer 在 Hyperledger Fabric Go 中进行了交易?

How do i know, which Peer did the Transaction in Hyperledger Fabric Go?

我正在努力获取交易 ID 信息,它将提供交易的对等详细信息。目前,我能够检索密钥的历史记录,这会为我提供提交给该密钥的事务列表。

我的代码:

historyRes, err := stub.GetHistoryForKey(userNameIndexKey)

if err != nil {
    return shim.Error(fmt.Sprintf("Unable to get History key from the ledger: %v", err))
}

for historyRes.HasNext() {

    history, errIt := historyRes.Next()

    if errIt != nil {
        return shim.Error(fmt.Sprintf("Unable to retrieve history in the ledger: %v", errIt))
    }

    deleted := history.GetIsDelete()

    ds := strconv.FormatBool(deleted)

    fmt.Println("History TxId = "+history.GetTxId()+" --  Delete = "+ds)
 }

输出

History TxId = 78c8d17c668d7a9df8373fd85df4fc398388976a1c642753bbf73abc5c648dd8 -- Deleted = false

History TxId = 102bbb64a7ca93367334a8c98f1f7be17e6a8d5277f0167c73da47072d302fa3 -- Deleted = true

但是我不知道,这个交易是哪个peer做的。 fabric-sdk-go 中是否有任何 API 可用以检索交易 ID 的对等信息。

请给我一些解决方案。

调用stub.GetHistoryForKey(userNameIndexKey)将查询状态数据库而不是分类帐(通道)。有关进行交易的身份的信息存储在块中。

我已经用 NodeJS SDK 实现了同样的事情。然而,Go SDK 也包含类似的 API 调用。以下步骤对我有用:

  1. 使用您的 SDK,获取 transactionId
  2. 使用SDK的transactionId查询区块功能。参考文献 here.
  3. 在这一步,您将获得区块。现在提交者的身份位于此块内。提示:Payload -> Header -> Signature Header -> Creator -> IdBytes.
  4. 这些身份字节是提交者的 X509 证书。您可以阅读证书信息以找出哪个成员提交了此交易。主题和 OU 将指示执行交易的同行的组织。