zoukankan      html  css  js  c++  java
  • 如何查询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

  • 相关阅读:
    PAT Advanced 1067 Sort with Swap(0, i) (25分)
    PAT Advanced 1048 Find Coins (25分)
    PAT Advanced 1060 Are They Equal (25分)
    PAT Advanced 1088 Rational Arithmetic (20分)
    PAT Advanced 1032 Sharing (25分)
    Linux的at命令
    Sublime Text3使用指南
    IntelliJ IDEA创建第一个Groovy工程
    Sublime Text3 安装ftp插件
    Sublime Text3配置Groovy运行环境
  • 原文地址:https://www.cnblogs.com/jiftle/p/15228034.html
Copyright © 2011-2022 走看看