Hyperledger fabric TransactionRegistry和Historian之间有什么区别?

Hyperledger fabric TransactionRegistry和Historian之间有什么区别?,hyperledger-fabric,hyperledger,hyperledger-composer,Hyperledger Fabric,Hyperledger,Hyperledger Composer,假设我只想得到一个涉及特定资产的所有交易的列表(假设我需要一个查询?)。我应该使用TransactionRegistry还是Historian?区别是什么?我们目前有一期开放给Historian,用于显示特定资产的变化/增量历史-作为一种解决方法,您可以执行以下操作-因此对于具有资产商品(和交易类“交易”)的交易网络,您可以创建一个查询,例如: query selectTransaction {description: "choose specific commodity asset"

假设我只想得到一个涉及特定资产的所有交易的列表(假设我需要一个查询?)。我应该使用TransactionRegistry还是Historian?区别是什么?

我们目前有一期开放给Historian,用于显示特定资产的变化/增量历史-作为一种解决方法,您可以执行以下操作-因此对于具有资产商品(和交易类“交易”)的交易网络,您可以创建一个查询,例如:

query selectTransaction {description: "choose specific commodity asset"
     statement: SELECT org.acme.biznet.Trade 
       WHERE (commodity == _$commodity ) } 
关于差异:

Historian记录所有交易活动(如创建资产、创建参与者、创建身份等,以及特定于业务网络的自定义交易,如“TransferAsset”或“PlaceOrder”),包括(涉及资产/参与者的)更改内容

对于TransactionRegistry本身(即一个特定的类,如“TransferAsset”或“PlaceOrder”),它存储在该类的事务注册表中-您的业务网络中可能有许多事务类。但这里没有任何东西与其他活动相关,比如系统活动,也记录在《史记》中

查询-您可以执行以下操作(例如在查询文件中):

ie
选择交易类的org.acme.sample.NAME\u

用于历史学家查询-例如

SELECT org.hyperledger.composer.system.HistorianRecord WHERE (transactionType == 'myTranType'

请参阅此处的更多示例->

此外,要查看您正在进行分区的资产id的交易数据(增量),请访问交易类(例如
org.acme.trading.Trade
transaction类)的
TransactionVoked
字段。您可以将RESTAPI与环回过滤器一起使用-例如(两者都返回以下承诺):


返回此.httpClient.get(“”,{withCredentials:true}).toPromise();`


返回此.httpClient.get(“”).toPromise();

它有
{“include”:“resolve”}
过滤器来解析事务类中的关系-每个解析的事务都有事务增量。然后您可以查找有问题的资产id

未解析事务类示例(如下,后跟已解析txn类):

未解决:


[
{
“$class”:“org.acme.mynetwork.Trade”,
“商品”:“资源:org.acme.mynetwork.commodity#1”,
“新所有者”:“资源:org.acme.mynetwork.Trader#2”,
“交易ID”:“354dca97fc6ac00aabbd923883e3ec2a3d09b8c75a54a8f536a88b6df31e8a0f”,
“时间戳”:“2018-03-23T12:02:11.228Z”
},
{
“$class”:“org.acme.mynetwork.Trade”,
“商品”:“资源:org.acme.mynetwork.commodity#2”,
“新所有者”:“资源:org.acme.mynetwork.Trader#1”,
“交易ID”:“9DA43ACCA718633AC8870E6EA34C3C9F481194E48BCDB42673570177091809F”,
“时间戳”:“2018-03-23T12:02:31.294Z”
}
]
使用
{“include”:“resolve”}
作为筛选器进行解析:

[
{
“$class”:“org.acme.mynetwork.Trade”,
“商品”:{
“$class”:“org.acme.mynetwork.Commodity”,
“tradingSymbol”:“1”,
“说明”:“werwer”,
“mainExchange”:“wrrewer”,
“数量”:10,
“所有者”:{
“$class”:“org.acme.mynetwork.Trader”,
“tradeId”:“2”,
“名字”:“tes2t”,
“lastName”:“test”
}
},
“新所有者”:{
“$class”:“org.acme.mynetwork.Trader”,
“tradeId”:“2”,
“名字”:“tes2t”,
“lastName”:“test”
},
“交易ID”:“354dca97fc6ac00aabbd923883e3ec2a3d09b8c75a54a8f536a88b6df31e8a0f”,
“时间戳”:“2018-03-23T12:02:11.228Z”
},
{
“$class”:“org.acme.mynetwork.Trade”,
“商品”:{
“$class”:“org.acme.mynetwork.Commodity”,
“tradingSymbol”:“2”,
“描述”:“乌特富吉亚”,
“mainExchange”:“ACE2”,
“数量”:10,
“所有者”:{
“$class”:“org.acme.mynetwork.Trader”,
“tradeId”:“1”,
“firstName”:“test”,
“lastName”:“test”
}
},
“新所有者”:{
“$class”:“org.acme.mynetwork.Trader”,
“tradeId”:“1”,
“firstName”:“test”,
“lastName”:“test”
},
“交易ID”:“9DA43ACCA718633AC8870E6EA34C3C9F481194E48BCDB42673570177091809F”,
“时间戳”:“2018-03-23T12:02:31.294Z”
}
]

谢谢您一直回答我的问题。关于Hyperledger Composer的伟大作品,到目前为止我非常喜欢它@PaulO'Mahony-如果我想进一步查看我在该事务中收到的数据,该怎么办?要么
返回这个.httpClient.get('http://localhost:3000/api/Trade?filter=%7B%22include%22%3A%22resolve%22%7D“,{withCredentials:true}).toPromise()(带有身份验证)或“返回this.httpClient.get(”;
SELECT org.hyperledger.composer.system.HistorianRecord WHERE (transactionType == 'myTranType'