HistorianRecord如何工作?我想根据资产ID保存所有交易的历史记录。我如何在Hyperldeger面料中实现这一目标?
答案 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}`);
}