如何查詢Hyper ledger Fabric的歷史交易?


從以太坊、比特幣等其余區塊鏈進入Hyperledger Fabric的新手,經常會問:如何查詢Hyperledger Fabric區塊鏈上的歷史交易?的確,既然區塊鏈或帳本上都有交易記錄了,怎么找不到一個簡單的API來查詢歷史交易?git

在以太坊、比特幣等區塊鏈平台中,一般都會提供簡單的JSON RPC API接口,應用程序只須要調用這些RPC API,就能夠查詢區塊或歷史交易了。Hyperledger Fabric也有相似的API,但狀況略有不一樣,根據查詢目的區別,能夠分為兩種方法。github

一、使用系統鏈碼qscc

若是你在尋找像以太坊/比特幣那樣的區塊查詢、交易查詢API,那就應該使用系統鏈碼QSCC,該鏈碼提供了以下方法:測試

  • GetChainInfo:獲取鏈信息
  • GetBlockByNumer:按區塊號獲取區塊數據
  • GetBlockByHash:按區塊哈希獲取區塊數據
  • GetTransactionById:按交易ID獲取交易數據
  • GetBlockByTxId:按交易ID獲取區塊數據

調用系統鏈碼和調用本身的鏈碼沒什么區別,例以下面是調用qscc鏈碼的GetChainInfo()方法的go語言測試代碼:code

response, err := chClient.Query(
  chclient.Request{
    ChaincodeID: "qscc", 
    Fcn: "invoke", 
    Args: integration.ExampleCCQueryArgs("GetChainInfo")
  })

m

二、查詢指定鍵的歷史交易

若是要查詢特定鏈碼中指定狀態鍵的歷史交易,能夠在鏈碼中使用ChaincodeStubInterface接口的GetHistoryForKey()方法來查詢其歷史記錄。例如:blog

historyIter, err := stub.GetHistoryForKey(yourKey)

if err != nil {
    fmt.Println(errMsg)
    return shim.Error(errMsg)
}

if historyIter.HasNext() {
    modification, err := historyIter.Next()
    if err != nil {
        fmt.Println(errMsg)
        return shim.Error(errMsg)
    }
    fmt.Println("Returning information related to", string(modification.Value))
}

上面的鏈碼要正常工做,須要在core.yaml中設置enableHistoryDatabase配置為true:教程

ledger:
  history:
    enableHistoryDatabase: true


https://www.shangmayuan.com/a/44b9ff7bac2e4567a3f733f2.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM