ОБНОВЛЕНИЕ: Я настроил цепной код Marble для своих собственных целей, где я хочу отслеживать продукты через производственную систему. Таким образом, при каждой производственной операции будет записываться новая транзакция, в которой исходящий идентификатор из предыдущей операции станет входящим идентификатором этой станции. Теперь я могу сделать запрос по исходящему ID и увидеть все ingoingID, который стал этим исходящим ID. Но это только для одной операции. Поэтому, чтобы связать эти разные идентификаторы вместе, я хочу использовать полученный идентификатор из запроса в качестве входных данных для нового запроса.
Я пытаюсь получить доступ к аргументам из выходной строки запроса в Построить свою первую сеть .
Код выглядит так:
func (t *SimpleChaincode) queryMarbles(stub shim.ChaincodeStubInterface, args []string) pb.Response {
// 0
// "queryString"
if len(args) < 1 {
return shim.Error("Incorrect number of arguments. Expecting 1")
}
queryString := args[0]
queryResults, err := getQueryResultForQueryString(stub, queryString)
if err != nil {
return shim.Error(err.Error())
}
return shim.Success(queryResults)
}
func getQueryResultForQueryString(stub shim.ChaincodeStubInterface, queryString string) ([]byte, error) {
fmt.Printf("- getQueryResultForQueryString queryString:\n%s\n", queryString)
resultsIterator, err := stub.GetQueryResult(queryString)
if err != nil {
return nil, err
}
defer resultsIterator.Close()
buffer, err := constructQueryResponseFromIterator(resultsIterator)
if err != nil {
return nil, err
}
fmt.Printf("- getQueryResultForQueryString queryResult:\n%s\n", buffer.String())
return buffer.Bytes(), nil
}
At дает следующий вывод:
Query Result: [{"Key":"marble1", "Record":{"color":"blue","docType":"marble","name":"marble1","owner":"tom","size":35}}]
Если бы я хотел использовать «tom» (владельца) в качестве входных данных для нового запроса, как я мог бы вместо того, чтобы возвращать результат запроса, использовать выходные данные в качестве входных аргументов?