You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hyperledger Fabric NodeJS Shim:getHistoryForKey API是否按时间从旧到新返回历史?

关于fabric-shim中getHistoryForKey的返回顺序问题

嗨,我来明确回答你的问题:getHistoryForKey API 确实会按时间从最早到最新的顺序返回指定键的所有历史值记录。

这是由Fabric区块链的底层设计决定的——交易是按区块打包的顺序被确认写入账本的,而getHistoryForKey会严格遵循这个时间线来返回历史条目。每条返回的记录会包含这些关键信息:

  • 写入该值的交易ID
  • 交易的时间戳
  • 当时的键值(如果是删除操作,值会是空/undefined,同时带有isDelete标记)

给你一个在链代码里使用这个API的简单示例,你可以看到遍历的时候拿到的第一条就是最老的记录:

async getAssetHistory(ctx, assetId) {
  // 获取历史记录迭代器
  const historyIterator = await ctx.stub.getHistoryForKey(assetId);
  const assetHistory = [];
  
  let currentRecord = await historyIterator.next();
  while (!currentRecord.done) {
    const recordDetails = {
      txId: currentRecord.value.txId,
      timestamp: currentRecord.value.timestamp,
      // 区分删除操作和正常写入
      value: currentRecord.value.isDelete ? '已删除' : currentRecord.value.value.toString('utf8'),
      isDelete: currentRecord.value.isDelete
    };
    assetHistory.push(recordDetails);
    currentRecord = await historyIterator.next();
  }
  
  // 记得关闭迭代器
  await historyIterator.close();
  return JSON.stringify(assetHistory);
}

如果你的业务场景需要从最新到最旧的顺序,只需要在收集完所有记录后对数组做反转即可:assetHistory.reverse()。

内容的提问来源于stack exchange,提问作者MrL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:53:01