stub.GetHistoryKeys() 报告 GetHistoryKeys() 函数未定义。当尝试在我的 Chaincode 上构建时

stub.GetHistoryKeys() reporting GetHistoryKeys() function undefined. when tried go build on my Chaincode

我是 Hyperledger 的新手。我正在使用 docker 到 运行 Hyperledger。从 Docker 集线器中拉出 hyperledger/fabric-peer:latest 并且 能够 运行 stub.CreateTable() ,stub.GetRows() , stub.InsertRows() 和我的 Chaincode 中的一些其他功能。但是当我试图 运行

stub.GetHistoryKeys() or stub.GetCompositeKeys() ...etc 在我的链代码中 正在报告错误

 stub.GetHistoryForKey undefined (type shim.ChaincodeStubInterface has no field 
  or method GetHistoryForKey)

我发现在我的 interface.go 文件中没有这样的函数。谷歌搜索了很多但什么也没找到。任何人都可以告诉正确的 hyperledger/fabric-peer 图像来拉,以便上述功能可以 运行 在 Chaincode 中。

我终于想办法让 hyperledger 图像支持我的链代码。

请下载最新版本的面料图片,( hyperledger/fabric-peer x86_64-1.1.0)。它可以从 hyperledger 官方网站上提到的脚本下载(安装二进制文件)=>(https://hyperledger-fabric.readthedocs.io/en/latest/install.html。由于 stackover 流策略问题,无法粘贴 url)。一旦你拥有它。创建一个 go 代码。只需在一个键上添加一条 json 记录,然后尝试添加一些更改 json 的某些字段,然后再次添加到同一键。完成后,为 gethistory 触发以下代码:=>

func (s *SmartContract) getAllTransactionForid(APIstub shim.ChaincodeStubInterface, args []string) sc.Response { fmt.Println("getAllTransactionForNumber called") id:= args[0]

resultsIterator, err := APIstub.GetHistoryForKey(id)
if err != nil {
    return shim.Error(err.Error())
}
defer resultsIterator.Close()

// buffer is a JSON array containing historic values for the number
var buffer bytes.Buffer
buffer.WriteString("[")

bArrayMemberAlreadyWritten := false
for resultsIterator.HasNext() {
    response, err := resultsIterator.Next()
    if err != nil {
        return shim.Error(err.Error())
    }
    // Add a comma before array members, suppress it for the first array member
    if bArrayMemberAlreadyWritten == true {
        buffer.WriteString(",")
    }
    buffer.WriteString("{\"TxId\":")
    buffer.WriteString("\"")
    buffer.WriteString(response.TxId)
    buffer.WriteString("\"")

    buffer.WriteString(", \"Value\":")
    // if it was a delete operation on given key, then we need to set the
    //corresponding value null. Else, we will write the response.Value
    //as-is (as the Value itself a JSON marble)
    if response.IsDelete {
        buffer.WriteString("null")
    } else {
        buffer.WriteString(string(response.Value))
    }

    buffer.WriteString(", \"Timestamp\":")
    buffer.WriteString("\"")
    buffer.WriteString(time.Unix(response.Timestamp.Seconds, int64(response.Timestamp.Nanos)).String())
    buffer.WriteString("\"")

    buffer.WriteString(", \"IsDelete\":")
    buffer.WriteString("\"")
    buffer.WriteString(strconv.FormatBool(response.IsDelete))
    buffer.WriteString("\"")

    buffer.WriteString("}")
    bArrayMemberAlreadyWritten = true
}
if !bArrayMemberAlreadyWritten {
    buffer.WriteString("No record found")
}
buffer.WriteString("]")

fmt.Printf("- getAllTransactionForNumber returning:\n%s\n", buffer.String())

return shim.Success(buffer.Bytes())

}

如有疑问,请回复。我会给你我的全部源代码来让它工作。但我希望这会让你的问题消失:-)