如何在Hyperledger Composer中获取特定资产的交易历史记录?

时间:2019-01-16 09:34:00

标签: hyperledger-fabric hyperledger hyperledger-composer

我尝试了以下代码,但无法获取特定资产的交易历史记录。关于此问题,任何人都可以帮助我。

@commit(false)

@returns(Order [])

transaction orderHistory {

o字符串orderNumber

}在此处输入代码

/ **      *交易样本      * @param {org.acme.Block.orderHistory}购买      * @交易      * /     异步功能orderHistory(transaction){

    const orderNumber = purchase.orderNumber;
    const nativeSupport = purchase.nativeSupport;

    const assetRegistry = await getAssetRegistry('org.acme.Block.Order')

    const nativeKey = getNativeAPI().createCompositeKey('Asset:org.acme.Block.Order', [orderNumber]);
    console.log(nativeKey);
    const iterator = await getNativeAPI().getHistoryForKey(nativeKey);
    let results = [];
    let res = {done : false};
    while (!res.done) {
        res = await iterator.next();

        if (res && res.value && res.value.value) {
            console.log(res);
            let val = res.value.value.toString('utf8');
            if (val.length > 0) {
               results.push(JSON.parse(val));
            }
        }
        if (res && res.done) {
            try {
                iterator.close();
            }
            catch (err) {
            }
        }
    }

    return results;

1 个答案:

答案 0 :(得分:0)

在Hyperledger作曲器中,所有交易都存储在Historian记录(https://hyperledger.github.io/composer/unstable/reference/historian.html)中。因此,查询和使用它可以解决您的问题。历史记录是在Hyperledger编写器名称空间中定义的资产。

历史记录定义为:

asset HistorianRecord identified by transactionId {
  o String      transactionId
  o String      transactionType
  --> Transaction transactionInvoked
  --> Participant participantInvoking  optional
  --> Identity    identityUsed         optional
  o Event[]       eventsEmitted        optional
  o DateTime      transactionTimestamp
}

您可以阅读有关Historian Client API的更多信息,这将对您有用:https://hyperledger.github.io/composer/v0.19/api/client-historian

另外,请阅读有关作曲家中资产历史的讨论:https://github.com/hyperledger/composer/issues/2458