坚持以高质量发展为首要任务一,网站seo优化方法,东营建筑信息网,石家庄网站外包背景
在Fabric链码中#xff0c;我们可以使用PutState方法对一个key的值进行覆盖#xff0c;当我们再使用GetState查询时是最新的值。如果我们希望找到这个key的修改记录#xff0c;我们可以使用溯源方法GetHistoryForKey。完整源码链接#xff1a;https://github.com/hyp…背景
在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:recordTxId string json:txIdTimestamp time.Time json:timestampIsDelete 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 []HistoryQueryResultfor resultsIterator.HasNext() {response, err : resultsIterator.Next()if err ! nil {return nil, err}var asset Assetif 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
}