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
相关产品推荐
相关产品推荐

