如何在Hyperledger Composer查询中显示事务输入数据

时间:2017-09-04 11:31:44

标签: hyperledger-composer

我正在尝试构建一个Historian Query,它允许我查看Transactions(及其原始输入)。我试图根据这个问题尝试一个想法https://github.com/hyperledger/composer/issues/1850,但这已在Composer Playground中修复。所以现在我想知道如何在REST API中实现这一点,而不依赖事件来保存事务输入信息。

我在查询文档后面使用的查询是:

query HistorianRecords {
  description: "Select from HistorianRecords"
  statement: SELECT org.hyperledger.composer.system.HistorianRecord

}

这会返回我这样的信息

  {
    "$class": "org.hyperledger.composer.system.HistorianRecord",
    "transactionId": "c1bcd961-41bb-43a3-b5ee-c1c3694f7736",
    "transactionType": "Transfer",
    "transactionInvoked": "resource:org.hyperledger.composer.system.Transaction#c1bcd961-41bb-43a3-b5ee-c1c3694f7736",
    "eventsEmitted": [],
    "transactionTimestamp": "2017-09-04T07:55:54.405Z"
  }

没有显示交易的输入信息。

我希望获得有关在线游乐场如何显示它的信息,其中基本上包括交易输入,即。在示例网络中输入资产 newValue

{
 "$class": "org.acme.sample.SampleTransaction",
 "asset": "resource:org.acme.sample.SampleAsset#a",
 "newValue": "123",
 "transactionId": "0b7aa7b5-ffed-4fe7-9a60-c883085b88e8",
 "timestamp": "2017-09-04T08:50:53.346Z"
}

我的网络涉及从参与者向参与者发送付款,而无法看到谁传递了多少基本上使区块链无意义的人。

如何使用查询执行此操作?

2 个答案:

答案 0 :(得分:4)

所以实际上,我没有费心去查询历史学家,而是使用这个查询来解决这个问题

query myTransactions{
  description: "return all transactions made (not system transactions)"
  statement: SELECT org.acme.sample.NAME_OF_TRANSACTION_CLASS

}

答案 1 :(得分:2)

正确,这将起作用,因为它直接查询交易注册表(或注册管理机构)。最终,您应该能够通过Historian Registry查询 - 也就是说,事务的输入也应该在历史记录中完整显示。历史交易记录与调用的交易(来自Txn注册表)有关,以找出对资产的更改(比如说)是什么'即一个游乐场。查询意味着增加价值'对于历史学家来说,'历史记录 - 例如"查询类型x的期间1到期间2"的交易历史(以及它改变了什么)。关于Historian功能中的REST支持 - 我们也计划为Historian提供REST支持,并且它正处于管道中(将在发布后更新答案)。