HistorianRecord如何运作?我想根据资产ID保存所有交易的历史记录。我怎样才能在hyperldeger面料中实现这一目标?
那段历史已经存在。每次资产发生变化时,都会创建一个新事务并将其转到分类帐,这意味着您已经拥有与一个资产相关的所有变更的历史记录。
您可以通过使用composer-playground进行验证,然后您将看到该行为。
区块链系统,例如Hyperledger是不可变的。但是,这并不意味着您无法更改资产。这意味着您无法更改已提交的事务。这真是最重要的事情。
如果使用composer-rest-api创建rest api,您将获得所有资产的端点,并且您将获得历史记录方面的端点。问题是功能尚未存在,因此您无法加载资产的所有状态更改。我相信有一张门票,但到目前为止还没有。
对于编程方法(“我想获取历史记录”,而不是保存),请参阅此资产历史记录的堆栈溢出 - > 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}`);
}