如何在使用hyperledger-composer实现的区块链中找到资产交易的历史记录?

Bob*_*ill 6 historian node.js hyperledger-composer

我正在研究Hyperledger-composer(V0.13)的最新版本,并建立了具有多个角色的网络,每个角色都可以调用区块链中的选定交易。我现在想查询区块链(“历史记录”)中针对特定订单(资产的定义类型)执行的所有交易。

我使用两种不同的方法来提取Historian数据,一次通过直接API访问historian.getall(),另一次通过定义的查询:

query getHistorianRecords {
  description: "get all Historian records"
  statement: SELECT org.hyperledger.composer.system.HistorianRecord

}
Run Code Online (Sandbox Code Playgroud)

这两个查询都成功,因为它们返回了系统内的所有事务。每前:

ValidatedResource {
    '$modelManager': ModelManager { modelFiles: [Object] },
    '$namespace': 'org.hyperledger.composer.system',
    '$type': 'HistorianRecord',
    '$identifier': '0c3274475fed3703692bb7344453ab0910686905451b41d5d08ff1b032732aa1',
    '$validator': ResourceValidator { options: {} },
    transactionId: '0c3274475fed3703692bb7344453ab0910686905451b41d5d08ff1b032732aa1',
    transactionType: 'org.acme.Z2BTestNetwork.CreateOrder',
    transactionInvoked: 
     Relationship {
       '$modelManager': [Object],
       '$namespace': 'org.acme.Z2BTestNetwork',
       '$type': 'CreateOrder',
       '$identifier': '0c3274475fed3703692bb7344453ab0910686905451b41d5d08ff1b032732aa1',
       '$class': 'Relationship' },
    eventsEmitted: [],
    transactionTimestamp: 2017-09-22T19:32:48.182Z }
Run Code Online (Sandbox Code Playgroud)

我找不到和需要的是一种针对单个订单查询交易历史的方法。订单的定义(部分列出)如下:

asset Order identified by orderNumber {
    o String orderNumber
    o String[] items
    o String status
    ...
    o String approved
    o String paid
    --> Provider provider
    --> Shipper shipper
    --> Buyer buyer
    --> Seller seller 
    --> FinanceCo financeCo 
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种机制,该机制将允许我查询区块链以获得与关联的每条记录Order with orderNumber = '009'。我可以轻松找到009号订单的当前状态,但现在正在查找针对该订单的交易记录。我如何告诉Historian或hyperledger-composer系统中的其他服务给我该信息?

Dan*_*man 6

您试图做的事情是完全有道理的,但是Historian尚不支持。在此处跟踪此要求:https : //github.com/hyperledger/composer/issues/991

该计划是将元数据添加到中,HistorianRecord以捕获资产和参与者的ID,这些ID会受到交易以及所执行的操作(删除,更新,创建,读取?)的影响。

设置到位后,您将可以查询HistorianRecord引用给定资产/参与者ID的。