HistorianRecord如何工作?我想根据资产ID保存所有交易的历史记录

时间:2018-09-03 11:00:24

标签: hyperledger-fabric hyperledger hyperledger-composer

HistorianRecord如何工作?我想根据资产ID保存所有交易的历史记录。我如何在Hyperldeger面料中实现这一目标?

2 个答案:

答案 0 :(得分:0)

该历史已经存在。每次资产更改时,都会创建一个新交易并将其转到分类帐中,这意味着您已经拥有与一项资产相关的所有更改的历史记录。

您可以通过在composer-playground上玩游戏来验证这一点,您将看到行为。

像Hyperledger这样的区块链系统是不可变的。但是,这并不意味着您不能更改资产。这意味着您无法更改已提交的事务。这真的是最大的事情。

如果使用 composer-rest-api 创建rest api,则将获得所有资产的端点,并且将获得事物历史端的端点。问题在于该功能尚不存在,因此您尚无法加载资产的所有状态更改。我相信有一张公开票,但是到目前为止,还没有。

答案 1 :(得分:0)

有关编程方法(“我要获取历史记录”,而不是保存),请参见此资产历史记录堆栈溢出-> Historian for a particular participant(资产历史记录),然后对于事务历史记录,可以使用环回操作在您的交易REST API端点上进行过滤,例如对于Trade交易类,类似:

var options = {
    method: 'GET',
    uri: 'http://localhost:3000/api/Trade?filter='{%22where%22:{%22asset_id%22:%22resource:org.acme.biznet.Commodity#ABC%22}%2C %22include%22:%22resolve%22}'
    json: true
};

let results = await rp(options);
    //console.log("Return value from REST API is " + results);

results.sort(function(a, b) {
  if (a.timestamp > b.timestamp) return 1;
  if (a.timestamp < b.timestamp) return -1;
});

console.log(" ");
console.log(" ");
console.log(`TRANSACTION HISTORY for Asset ID:  ${results[0].commodity.tradingSymbol} is: `);
console.log("================================================== ");
console.log(" ");
for (const asset of results) {

      console.log("Type   Transaction Date          Transaction ID                                                     New Ownership     ");
     console.log("=====================================================================================================================");

     console.log(`${asset.$class.split(".").pop()}  ${asset.timestamp}  ${asset.transactionId}   ${asset.newOwner.tradeId}`);
 }