Fabric中的溯源方法

背景

在Fabric链码中,我们可以使用PutState方法对一个key的值进行覆盖,当我们再使用GetState查询时是最新的值。如果我们希望找到这个key的修改记录,我们可以使用溯源方法GetHistoryForKey。完整源码链接:https://github.com/hyperledger/fabric-samples/blob/main/asset-transfer-ledger-queries/chaincode-go/asset_transfer_ledger_chaincode.go

代码
// HistoryQueryResult structure used for returning result of history query
type HistoryQueryResult struct {
   
	Record    *Asset    `json:"record"`
	TxId      string    `json:"txId"`
	Timestamp time.Time `json:"timestamp"`
	IsDelete  bool      `json:"isDelete"`
}


// GetAssetHistory returns the chain of custody for an asset since issuance.
func (t *SimpleChaincode) GetAssetHistory(ctx contractapi.TransactionContextInterface, assetID string) ([]HistoryQueryResult, error) {
   
	log.Printf("GetAssetHistory: ID %v", assetID)

	resultsIterator, err := ctx.GetStub().GetHistoryForKey(assetID)
	if err != nil {
   
		return nil, err
	}
	defer resultsIterator.Close()

	var records []HistoryQueryResult
	for resultsIterator.HasNext() {
   
		response, err := resultsIterator.Next()
		if err != nil {
   
			return nil, err
		}

		var asset Asset
		if len(response.Value) > 0 {
   
			err = json.Unmarshal(response.Value, &asset)
			if err != nil {
   
				return nil, err
			}
		} else {
   
			asset = Asset{
   
				ID: assetID,
			}
		}

		timestamp, err := ptypes.Timestamp(response.Timestamp)
		if err != nil {
   
			return nil, err
		}

		record := HistoryQueryResult{
   
			TxId:      response.TxId,
			Timestamp: timestamp,
			Record:    &asset,
			IsDelete:  response.IsDelete,
		}
		records = append(records, record)
	}

	return records, nil
}

相关推荐

  1. Fabric溯源方法

    2024-02-19 08:44:02       31 阅读
  2. 网络安全攻击溯源方法

    2024-02-19 08:44:02       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-19 08:44:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-19 08:44:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-19 08:44:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-19 08:44:02       20 阅读

热门阅读

  1. Jenkins面试系列

    2024-02-19 08:44:02       17 阅读
  2. centos docker jenkins 日志

    2024-02-19 08:44:02       30 阅读
  3. 设计模式学习笔记

    2024-02-19 08:44:02       25 阅读
  4. C#面:列举ASP.NET页面之间传递值的几种方式

    2024-02-19 08:44:02       33 阅读
  5. C/C++输出输出相关问题

    2024-02-19 08:44:02       35 阅读
  6. kubeasz部署k8s集群

    2024-02-19 08:44:02       34 阅读